1. Bối cảnh Khi huấn luyện các mô hình deep learning quy mô lớn (LLM, multimodal, v.v.), chi phí GPU thường chiếm phần lớn ngân sách. Các nhà cung cấp đám mây (AWS, GCP, Azure) cung cấp Spot/Preemptible Instances với giá giảm 70‑90% so với On‑Demand, nhưng chúng có thể bị thu hồi bất cứ lúc nào. Kết hợp Kubernetes (EKS, GKE, AKS) với Cluster Autoscaler và Node Auto‑Provisioning cho phép tận dụng Spot an toàn và tự động mở rộng/thu hẹp tài nguyên. 2. Kiến trúc đề xuất - Node Pool chính (On‑Demand): chạy control‑plane, scheduler, các pod hệ thống và một số worker "anchor" đảm bảo tiến trình không bị gián đoạn hoàn toàn. - Node Pool Spot: chỉ chứa các pod huấn luyện (training jobs) được gắn label `spot=true`. Sử dụng `taint`/`toleration` để chỉ các job có `toleration` mới được schedule lên. - Cluster Autoscaler: cấu hình `--scale-down-utilization-threshold=0.5` và `--skip-nodes-with-local-storage=false` để thu hồi node Spot khi không còn pod. - Pod Disruption Budget (PDB): đặt `minAvailable: 1` cho mỗi training job để Kubernetes không evict quá nhiều pod cùng lúc. - Checkpointing định kỳ: mỗi N bước (ví dụ 500 steps) ghi model state lên object storage (S3, GCS). Khi Spot bị thu hồi, job mới sẽ resume từ checkpoint gần nhất. 3. Các bước thực hiện - Tạo hai node group qua `eksctl` / `gcloud` với `--instance-types=g4dn.xlarge,g5.xlarge` cho Spot và `--instance-types=p3.2xlarge` cho On‑Demand. - Gán label `node-type=spot` cho node group Spot, sau đó thêm taint `spot=true:NoSchedule`. - Viết `TrainingJob` (Job hoặc PyTorchJob) với `nodeSelector: {node-type: spot}` và `tolerations` khớp taint. - Cấu hình `volumeClaimTemplate` trỏ đến `emptyDir` hoặc `hostPath` cho checkpoint, sau đó dùng sidecar `gsutil`/`aws s3 sync` đẩy lên bucket mỗi 5 phút. - Bật `cluster-autoscaler` với `--nodes=1:10:spot-node-group` và `--nodes=1:3:ondemand-node-group`. 4. Mẹo thực tế - Sử dụng `preemption` hook của cloud provider (AWS EC2 Spot Instance Interruption Notice, GCP Preemptible VM notice) để trigger graceful shutdown: script nghe metadata endpoint, gửi SIGTERM cho training process, flush checkpoint. - Theo dõi chi phí qua `kubecost` hoặc `CloudWatch`/`Stackdriver` dashboard; đặt alert khi chi phí Spot vượt ngưỡng mong muốn. - Kết hợp mixed‑precision (AMP) và gradient accumulation để giảm VRAM, cho phép chạy batch size lớn hơn trên GPU nhỏ hơn, từ đó tận dụng các instance Spot rẻ hơn (V100 16GB thay vì A100 40GB). - Thử nghiệm với `Ray Train` hoặc `Horovod` trên Kubernetes để scale‑out ngang, mỗi worker chạy trên một Spot node riêng biệt. Kết luận: Kết hợp Spot Instances, autoscaling và checkpointing tự động giúp giảm 60‑80% chi phí GPU mà vẫn đảm bảo độ tin cậy cho quy trình huấn luyện liên tục.