Bỏ qua

Điện toán Đám mây

Điện toán đám mây cung cấp hạ tầng theo yêu cầu cho các khối lượng công việc ML mà không cần sở hữu phần cứng. File này bao quát các mô hình dịch vụ, các nhà cung cấp cloud lớn, container và Kubernetes, lưu trữ, mạng cloud, serverless, quản lý chi phí và hạ tầng dưới dạng mã.

  • Huấn luyện một mô hình tiền tuyến (frontier) cần hàng nghìn GPU trong nhiều tháng. Không startup nào sở hữu phần cứng đó. Điện toán đám mây cho phép bạn thuê theo giờ, mở rộng quy mô khi huấn luyện, thu hẹp khi suy luận và chỉ trả cho những gì dùng. Hiểu hạ tầng cloud là thiết yếu cho bất kỳ ai xây dựng hệ thống ML vượt ra ngoài một chiếc laptop.

Các mô hình dịch vụ Cloud

Các lớp dịch vụ cloud: IaaS cho bạn nhiều quyền kiểm soát nhất, SaaS ít nhất

  • Các dịch vụ cloud được phân lớp theo mức độ nhà cung cấp quản lý:
Mô hình Bạn quản lý Nhà cung cấp quản lý Ví dụ
IaaS (Infrastructure — Hạ tầng) OS, runtime, app Phần cứng, ảo hóa, mạng AWS EC2, GCP Compute Engine
PaaS (Platform — Nền tảng) App, dữ liệu OS, runtime, scaling, patching AWS SageMaker, GCP Vertex AI
SaaS (Software — Phần mềm) Không gì cả (chỉ dùng) Tất cả OpenAI API, Weights & Biases
FaaS (Function — Hàm) Các hàm riêng lẻ Tất cả phần còn lại AWS Lambda, GCP Cloud Functions
  • Cho ML: hầu hết các đội dùng kết hợp. IaaS cho huấn luyện tùy chỉnh (quyền kiểm soát đầy đủ các instance GPU), PaaS cho huấn luyện và serving được quản lý (SageMaker, Vertex AI xử lý orchestration), và SaaS cho các công cụ (W&B cho theo dõi thí nghiệm, OpenAI API cho so sánh baseline).

Các nhà cung cấp lớn

AWS (Amazon Web Services)

  • Nhà cung cấp cloud lớn nhất (~32% thị phần). Các dịch vụ ML chính:
    • EC2: máy ảo. Các instance GPU: p4d (A100), p5 (H100), g5 (A10G cho inference).
    • S3: lưu trữ đối tượng. Tiêu chuẩn để lưu tập dữ liệu và trọng số mô hình. Dung lượng gần như không giới hạn, ~$0.023/GB/tháng.
    • SageMaker: nền tảng ML được quản lý. Xử lý huấn luyện, tinh chỉnh siêu tham số, triển khai và giám sát.
    • EKS: Kubernetes được quản lý.
    • Lambda: các hàm serverless. Không phù hợp cho khối lượng GPU nhưng hữu ích cho tiền xử lý và orchestration.

GCP (Google Cloud Platform)

  • Cloud của Google (~11% thị phần). Các dịch vụ ML chính:
    • Compute Engine: VM. Các instance GPU với A100, H100. TPU VM để truy cập TPU.
    • GCS: lưu trữ đối tượng (như S3).
    • Vertex AI: nền tảng ML được quản lý. Hỗ trợ native JAX/TPU.
    • GKE: Kubernetes được quản lý (offer K8s trưởng thành nhất, vì Google tạo ra Kubernetes).
    • Cloud TPUs: độc quyền GCP. v5e và v5p cho huấn luyện quy mô lớn.

Azure (Microsoft)

  • Cloud của Microsoft (~23% thị phần). Các dịch vụ ML chính:
    • Azure VMs: các instance GPU với A100, H100.
    • Azure Blob Storage: lưu trữ đối tượng.
    • Azure ML: nền tảng ML được quản lý.
    • AKS: Kubernetes được quản lý.
    • OpenAI Service: truy cập độc quyền các mô hình OpenAI qua Azure API.

Container và Kubernetes

  • Chúng ta đã đề cập container (Docker) và Kubernetes về mặt khái niệm ở chương 13 (OS) và thực hành ở chương 15 (deployment). Ở đây ta tập trung vào các mẫu đặc thù cho cloud:

Kubernetes cho ML

  • Kubernetes (K8s) điều phối các container ở quy mô lớn. Các khái niệm chính:

    • Pod: đơn vị triển khai nhỏ nhất. Chứa một hoặc nhiều container chia sẻ mạng và lưu trữ. Một pod serving mô hình có thể chứa: container model server + một container sidecar để thu thập metric.

    • Deployment: quản lý một tập hợp các pod giống hệt nhau. Chỉ định số lượng replica mong muốn. Nếu một pod sập, K8s tự động tạo bản thay thế.

    • Service: một endpoint mạng ổn định cho một tập hợp pod. Client kết nối tới service; K8s định tuyến tới một pod khỏe. Các loại: ClusterIP (nội bộ), NodePort (ngoài qua cổng node), LoadBalancer (ngoài qua cloud LB).

    • StatefulSet: như Deployment nhưng cho các khối lượng có trạng thái. Mỗi pod có một danh tính bền vững và lưu trữ ổn định. Dùng cho cơ sở dữ liệu và huấn luyện phân tán (mỗi worker cần một danh tính ổn định để giao tiếp).

    • DaemonSet: chạy một pod trên mọi node. Dùng cho: các agent giám sát (Prometheus node exporter), bộ thu thập log (Fluentd), plugin thiết bị GPU (NVIDIA device plugin).

  • Lập lịch GPU trong K8s: NVIDIA device plugin phơi bày GPU như một tài nguyên K8s. Các pod yêu cầu GPU:

resources:
  limits:
    nvidia.com/gpu: 2  # pod này cần 2 GPU
  • K8s lập lịch pod lên một node có 2 GPU khả dụng. Đây là cách các nền tảng cloud ML cấp phát GPU cho huấn luyện và suy luận.

Tự động mở rộng (Autoscaling)

  • Horizontal Pod Autoscaler (HPA): mở rộng số lượng pod dựa trên các metric (mức dùng CPU, tốc độ yêu cầu, các metric tùy chỉnh như tỷ lệ sử dụng GPU hoặc độ sâu hàng đợi).

  • Cluster Autoscaler: mở rộng số lượng node. Nếu các pod không thể lập lịch vì không đủ node, cluster autoscaler cấp phát các VM mới từ nhà cung cấp cloud. Khi các node bị sử dụng dưới mức, nó drain và chấm dứt chúng.

  • KEDA (Kubernetes Event-Driven Autoscaling): mở rộng dựa trên các nguồn sự kiện ngoài (độ sâu hàng đợi Kafka, tốc độ yêu cầu HTTP). Hoàn hảo cho inference: mở rộng các model server khi hàng đợi yêu cầu tăng, thu hẹp khi nó rỗng.

Lưu trữ

Loại Đặc điểm Trường hợp dùng Ví dụ
Block Độ trễ thấp, gắn vào một VM Đĩa OS, cơ sở dữ liệu AWS EBS, GCP Persistent Disk
Object Dung lượng không giới hạn, truy cập HTTP Tập dữ liệu, trọng số mô hình, log AWS S3, GCS, Azure Blob
File Chia sẻ qua các VM, POSIX Dữ liệu huấn luyện chia sẻ AWS EFS, GCP Filestore, NFS
Data lake Schema-on-read, dữ liệu thô Phân tích, feature engineering Delta Lake, Iceberg, Hudi
  • Cho huấn luyện ML: các tập dữ liệu được lưu trong lưu trữ đối tượng (S3/GCS). Các script huấn luyện đọc dữ liệu từ lưu trữ đối tượng vào RAM. Để truy cập ngẫu nhiên nhanh (tải dữ liệu đã shuffle), chọn một trong: (1) tải tập dữ liệu xuống SSD cục bộ trước khi huấn luyện, (2) dùng một hệ thống tệp thông lượng cao (Lustre, FSx), hoặc (3) dùng một thư viện tải dữ liệu phát trực tuyến và cache hiệu quả (WebDataset, FFCV).

  • Trọng số mô hình: lưu trong lưu trữ đối tượng với versioning. Một mô hình 70B ở FP16 là ~140 GB. Tải từ S3 ở 1 GB/s mất ~2.5 phút. Cache trên SSD cục bộ giảm thời gian khởi động nguội cho inference.

Mạng Cloud

  • VPC (Virtual Private Cloud — Đám mây riêng ảo): một mạng cách ly trong cloud. Các VM, cơ sở dữ liệu và service của bạn giao tiếp trong VPC. Lưu lượng ngoài đi vào qua load balancer hoặc gateway.

  • Subnets: chia VPC thành các đoạn. Các subnet công cộng có truy cập internet (cho các API server). Các subnet riêng tư thì không (cho cơ sở dữ liệu, GPU worker). Đây là tương đương mạng của nguyên tắc bảo mật đặc quyền tối thiểu.

  • Security groups (AWS) / Firewall rules (GCP): kiểm soát lưu lượng nào được phép. "Cho phép HTTP inbound trên cổng 80 từ mọi nơi. Cho phép SSH inbound trên cổng 22 chỉ từ IP của tôi. Chặn tất cả còn lại." Các security group cấu hình sai là nguyên nhân số một gây ra các sự cố bảo mật cloud.

  • Service mesh (Istio, Envoy): quản lý giao tiếp service-to-service trong K8s. Cung cấp: mã hóa mTLS (mọi cuộc gọi service-to-service đều được mã hóa), định tuyến lưu lượng (A/B testing: định tuyến 10% lưu lượng tới mô hình mới), retry, timeout, circuit breaking và observability (service nào gọi service nào, mất bao lâu).

Serverless

  • Serverless (AWS Lambda, GCP Cloud Functions): bạn tải lên một hàm, và nhà cung cấp cloud chạy nó khi được kích hoạt. Không có server để quản lý, không có scaling để cấu hình. Bạn trả tiền mỗi lần gọi (thường $0.20 mỗi 1M lượt gọi + thời gian tính toán).

  • Cold starts (khởi động nguội): lượt gọi đầu tiên sau một thời gian không hoạt động mất lâu hơn (nhà cung cấp phải cấp phát một container và tải code của bạn). Cold start là 0.5-5 giây, làm serverless không phù hợp cho inference ML nhạy cảm với độ trễ.

  • Cho ML: serverless hữu ích cho: tiền xử lý (resize ảnh trước khi gửi tới mô hình), hậu xử lý (định dạng đầu ra mô hình, gửi thông báo), orchestration (kích hoạt một pipeline huấn luyện khi có dữ liệu mới đến) và inference nhẹ (các mô hình nhỏ dung tóm được cold start).

  • Serverless không phù hợp cho: inference GPU (không hỗ trợ GPU ở hầu hết các nền tảng serverless), các job huấn luyện chạy dài (timeout 15 phút trong Lambda) hoặc các service có trạng thái (không có trạng thái bền vững giữa các lượt gọi).

Quản lý chi phí

  • Chi phí cloud là mối quan ngại vận hành số một cho các đội ML. Một instance H100 đơn giá ~\(8/giờ. Một lượt huấn luyện 64 GPU giá ~\)500/giờ. Một lượt huấn luyện cả tháng giá ~$360,000. Tối ưu chi phí là kỹ thuật, không phải kế toán.

  • Spot/preemptible instances: dung lượng cloud không dùng bán với chiết khấu 60-90%. Nhà cung cấp có thể thu hồi chúng với thông báo 30 giây đến 2 phút. Dùng cho: huấn luyện chịu lỗi (checkpoint thường xuyên, tiếp tục trên các instance mới), inference theo lô, tiền xử lý dữ liệu. Không dùng cho: serving nhạy cảm độ trễ (gián đoạn = downtime).

  • Reserved instances: cam kết 1-3 năm sử dụng để được chiết khấu 30-60%. Dùng cho: serving inference trạng thái ổn định nơi bạn biết tải baseline.

  • Autoscaling: mở rộng vào giờ cao điểm, thu hẹp ban đêm/cuối tuần. Một model server cần 10 GPU ở đỉnh và 2 ban đêm tiết kiệm ~60% bằng autoscaling so với chạy 10 GPU 24/7.

  • Right-sizing: đừng dùng H100 cho một mô hình 7B chạy tốt trên A10G. Khớp GPU với khối lượng công việc. Dùng profiling (chương 16) để xác định GPU nào phù hợp nhất.

  • Chi phí lưu trữ: lưu trữ đối tượng rẻ ($0.023/GB/tháng cho S3 Standard), nhưng tích lũy. Một đội lưu mọi checkpoint huấn luyện (10 GB mỗi cái, 100 mỗi thí nghiệm, 50 thí nghiệm) tích lũy 50 TB = $1,150/tháng. Thiết lập lifecycle policies để xóa các checkpoint cũ tự động.

Triển khai Đa vùng (Multi-Region)

  • Cho các hệ thống ML toàn cầu (phục vụ người dùng thế giới), triển khai ở một vùng duy nhất nghĩa là độ trễ cao cho người dùng ở xa (một người dùng ở Tokyo gõ một server Mỹ thêm ~150ms khứ hồi mạng) và một điểm lỗi duy nhất (nếu vùng sập, toàn bộ dịch vụ offline).

  • Các mẫu đa vùng:

    • Active-passive (chủ động - bị động): một vùng chính xử lý tất cả lưu lượng. Một vùng thứ cấp có warm standby (dữ liệu được replicate, sẵn sàng nhận lưu lượng). Khi vùng chính thất bại, DNS chuyển sang vùng thứ cấp. Downtime trong failover: 30 giây đến vài phút.

    • Active-active (chủ động - chủ động): cả hai vùng xử lý lưu lượng đồng thời. Người dùng được định tuyến tới vùng gần nhất. Cả hai vùng có dữ liệu cập nhật (replicate bất đồng bộ hoặc đồng bộ). Không có downtime trong thất bại một vùng — lưu lượng được reroute tự động.

  • Data replication (replicate dữ liệu): phần khó. Trọng số mô hình có thể replicate dễ dàng (copy sang S3 ở mỗi vùng). Dữ liệu feature store phải được replicate với độ cũ chấp nhận được. Dữ liệu người dùng có thể có yêu cầu cư trú dữ liệu (GDPR: dữ liệu người dùng châu Âu phải ở lại châu Âu).

  • So sánh giá GPU cloud (xấp xỉ, 2026):

GPU AWS GCP Azure Trường hợp dùng điển hình
A10G (24 GB) $1.00/giờ (g5) $0.90/giờ $0.90/giờ Inference mô hình nhỏ
A100 (80 GB) $4.10/giờ (p4d) $3.70/giờ $3.40/giờ Huấn luyện, inference lớn
H100 (80 GB) $8.00/giờ (p5) $7.50/giờ $7.00/giờ Huấn luyện tiền tuyến
TPU v5e n/a $1.20/giờ n/a Huấn luyện JAX quy mô lớn
  • Giá spot/preemptible thường thấp hơn 60-70% các mức này. Giá thay đổi theo vùng và tính sẵn có.

Hạ tầng dưới dạng mã (Infrastructure as Code)

  • IaC định nghĩa hạ tầng (VM, mạng, cơ sở dữ liệu, cụm K8s) trong các file cấu hình có kiểm soát phiên bản. Thay vì click các nút trong bảng điều khiển AWS, bạn viết code mô tả những gì bạn muốn, và một công cụ tạo ra nó.

  • Terraform (HashiCorp): công cụ IaC tiêu chuẩn. Hoạt động với tất cả các nhà cung cấp cloud lớn. Khai báo (declarative): bạn mô tả trạng thái mong muốn, Terraform tính toán phải tạo/sửa/xóa gì để đạt được nó.

# main.tf — tạo một GPU VM cho inference
resource "aws_instance" "model_server" {
  ami           = "ami-0abcdef1234567890"  # Deep Learning AMI
  instance_type = "g5.xlarge"               # A10G GPU

  tags = {
    Name = "model-server-prod"
  }
}

resource "aws_s3_bucket" "model_weights" {
  bucket = "my-model-weights-prod"

  versioning {
    enabled = true
  }
}
terraform init      # tải plugin provider
terraform plan      # hiển thị những gì sẽ thay đổi
terraform apply     # tạo hạ tầng
terraform destroy   # dỡ bỏ tất cả
  • Tại sao IaC quan trọng: khả năng tái lập (tái tạo toàn bộ hạ tầng từ code), kiểm toán (lịch sử git cho thấy ai thay đổi gì), phục hồi thảm họa (xây dựng lại ở một vùng khác từ cùng cấu hình), và sự ngang bằng môi trường (dev, staging và prod dùng cùng các template với các tham số khác nhau).

  • Pulumi: như Terraform nhưng dùng các ngôn ngữ lập trình thực (Python, TypeScript, Go) thay vì HCL. Hữu ích khi logic hạ tầng của bạn phức tạp (điều kiện, vòng lặp, cấu hình động).