Cài đặt Ray Operator và Ray Helm Chart trên Kubernetes
Bước đầu tiên là tích hợp Ray vào Kubernetes thông qua Ray Operator. Công cụ này cho phép bạn quản lý các cụm Ray (Ray Cluster) bằng các đối tượng Kubernetes tiêu chuẩn (Custom Resources), giúp việc mở rộng và tự động hóa trở nên dễ dàng hơn.
Chúng ta sẽ sử dụng Helm để cài đặt Ray Operator và các Helm Chart liên quan. Điều này đảm bảo phiên bản tương thích và cấu hình chuẩn hóa.
Thêm repository Helm chính thức của Ray vào client Kubernetes của bạn.
helm repo add ray https://ray-project.github.io/kuberay/helm-chart
helm repo update
Kết quả mong đợi: Thông báo thành công "repository 'ray' added" và "Hang on while I grab those charts".
Tạo namespace riêng cho các thành phần của Ray để cách ly tài nguyên và đơn giản hóa việc quản lý.
kubectl create namespace ray-system
Kết quả mong đợi: Thông báo "namespace/ray-system created".
Cài đặt Ray Operator vào namespace ray-system. Chúng ta cần chỉ định phiên bản cụ thể để đảm bảo tính ổn định. Dưới đây là lệnh cài đặt phiên bản ổn định mới nhất (kiểm tra lại trên trang Helm nếu có bản mới hơn, nhưng lệnh này dùng phiên bản 1.3.0 làm ví dụ chuẩn).
helm install kuberay ray/kuberay --namespace ray-system --version 1.3.0
Kết quả mong đợi: Thông báo "NAME: kuberay" và "STATUS: deployed".
Verify việc cài đặt Ray Operator thành công bằng cách kiểm tra các Pod trong namespace ray-system.
kubectl get pods -n ray-system
Kết quả mong đợi: Bạn thấy ít nhất một Pod có tên bắt đầu bằng "kuberay-operator" với trạng thái "Running" và "1/1" container.
Cấu hình DeepSpeed trong môi trường Container
Để DeepSpeed hoạt động hiệu quả trên GPU, container cần có driver CUDA phù hợp và thư viện DeepSpeed được cài đặt sẵn. Chúng ta sẽ tạo một Dockerfile tùy chỉnh dựa trên PyTorch với CUDA.
Tạo một thư mục làm việc mới cho dự án Docker.
mkdir -p ~/ray-deepspeed-training && cd ~/ray-deepspeed-training
Kết quả mong đợi: Thư mục được tạo và bạn chuyển vào thư mục đó.
Viết file Dockerfile để build image chứa PyTorch, CUDA, và DeepSpeed. Chúng ta sử dụng base image PyTorch chính thức (phiên bản CUDA 12.1) để đảm bảo tính tương thích tối đa với GPU hiện đại.
cat > Dockerfile
Kết quả mong đợi: File Dockerfile được tạo với nội dung chính xác.
Build Docker image và tag nó với tên repository của bạn (thay 'your-registry' bằng registry thực tế của bạn, ví dụ: docker.io, quay.io, hoặc registry nội bộ Proxmox).
docker build -t your-registry/ray-deepspeed-trainer:v1.0 .
Kết quả mong đợi: Quá trình build thành công, kết thúc bằng dòng "Successfully built [hash]" và "Successfully tagged your-registry/ray-deepspeed-trainer:v1.0".
Push image lên Docker Registry để Kubernetes có thể pull về.
docker push your-registry/ray-deepspeed-trainer:v1.0
Kết quả mong đợi: Thông báo "The push refers to repository..." và "Digest: sha256:...".
Tạo Kubernetes Job để khởi động Ray Cluster với GPU
Bây giờ chúng ta sẽ định nghĩa tài nguyên Kubernetes để khởi tạo một Ray Cluster bao gồm 1 Ray Head và 2 Ray Workers, mỗi Worker sử dụng GPU. Tài nguyên này sẽ được Ray Operator quản lý.
Viết file manifest YAML cho RayCluster. Đây là đối tượng Custom Resource (CR) mà Ray Operator sẽ lắng nghe để tạo Pod.
cat > ray-cluster-gpu.yaml
Kết quả mong đợi: File ray-cluster-gpu.yaml được tạo. Nội dung định nghĩa 1 Head và 2 Workers với yêu cầu GPU.
Áp dụng cấu hình RayCluster vào Kubernetes.
kubectl apply -f ray-cluster-gpu.yaml
Kết quả mong đợi: Thông báo "raycluster.ray.io/ray-gpu-cluster created".
Chờ cho Ray Operator khởi tạo các Pod. Quá trình này có thể mất 1-2 phút để pull image và khởi động Ray.
kubectl get pods -n ray-system -l ray.io/cluster=ray-gpu-cluster -w
Kết quả mong đợi: Bạn thấy các Pod xuất hiện với trạng thái "ContainerCreating" sau đó chuyển sang "Running". Tên Pod sẽ có dạng "ray-gpu-cluster-head-..." và "ray-gpu-cluster-gpu-workers-...".
Verify trạng thái của Ray Cluster bằng cách kiểm tra status của Custom Resource.
kubectl get raycluster ray-gpu-cluster -n ray-system -o jsonpath='{.status.state}'
Kết quả mong đợi: Xuất ra trạng thái "ready".
Kiểm tra chi tiết số lượng Pod và trạng thái GPU bằng cách liệt kê Pod với label cụ thể.
kubectl get pods -n ray-system -l ray.io/cluster=ray-gpu-cluster
Kết quả mong đợi: Danh sách hiển thị 3 Pod (1 Head, 2 Workers) với trạng thái "Running".
Verify và Kiểm tra tính khả dụng của Ray với DeepSpeed
Cuối cùng, chúng ta cần xác nhận rằng các container đã nhận diện được GPU và DeepSpeed có thể truy cập vào Ray để phân phối tác vụ.
Chạy lệnh kiểm tra GPU từ bên trong container Ray Head để đảm bảo driver CUDA hoạt động.
kubectl exec -it $(kubectl get pods -n ray-system -l ray.io/nodeType=head -o jsonpath='{.items[0].metadata.name}') -n ray-system -- nvidia-smi
Kết quả mong đợi: Đầu ra hiển thị bảng thông tin GPU (dù Head node không yêu cầu GPU, lệnh này giúp verify driver tồn tại trong container). Nếu Head không có GPU, bạn có thể chạy lệnh này trên Worker.
Chạy lệnh kiểm tra GPU từ bên trong container Ray Worker (chọn worker đầu tiên) để xác nhận GPU passthrough hoạt động.
kubectl exec -it $(kubectl get pods -n ray-system -l ray.io/nodeType=worker -o jsonpath='{.items[0].metadata.name}') -n ray-system -- nvidia-smi
Kết quả mong đợi: Hiển thị danh sách GPU vật lý được nhận diện bởi container, với dòng "CUDA Version" phù hợp với image đã build.
Kiểm tra tính khả dụng của Ray bằng cách chạy lệnh ray status từ bên trong Head Node.
kubectl exec -it $(kubectl get pods -n ray-system -l ray.io/nodeType=head -o jsonpath='{.items[0].metadata.name}') -n ray-system -- ray status
Kết quả mong đợi: Đầu ra hiển thị thông tin cụm Ray, bao gồm số lượng workers đang hoạt động (Active Workers: 2) và tổng tài nguyên GPU có sẵn (Total GPU: 2).
Điều hướng series:
Mục lục: Series: Series: Xây dựng nền tảng AI Training phân tán với DeepSpeed, Ray và Kubernetes trên hạ tầng Proxmox
« Phần 3: Cấu hình GPU passthrough và lập kế hoạch tài nguyên
Phần 5: Xây dựng và chạy thử nghiệm training mô hình phân tán »