1. Xác định cấu hình phần cứng tối thiểu cho AI Training phân tán
Để triển khai môi trường DeepSpeed và Ray hiệu quả, hạ tầng vật lý cần đáp ứng các yêu cầu cụ thể về khả năng xử lý song song và bộ nhớ. Dưới đây là cấu hình tối thiểu cho mỗi node worker trong cluster.
- CPU: Tối thiểu 16 cores (Intel Xeon Scalable hoặc AMD EPYC), hỗ trợ AVX-512 để tăng tốc độ tính toán số học.
- RAM: Tối thiểu 128GB DDR4/DDR5 ECC. Ray yêu cầu bộ nhớ lớn để cache model và dataset, tránh I/O swap.
- GPU: Tối thiểu 2 x NVIDIA A100 (40GB/80GB) hoặc V100. Bắt buộc hỗ trợ NVLink để giảm độ trễ giao tiếp giữa các GPU.
- Storage: NVMe SSD RAID 0/10 cho hệ điều hành và cache, với tốc độ đọc ghi tối thiểu 3GB/s để feed data cho GPU.
- Network: 2x 10GbE hoặc 25GbE NICs. Một card cho quản lý (Management), một card cho truyền thông dữ liệu tốc độ cao (RDMA/RoCEv2).
Việc thiếu hụt ở bất kỳ thành phần nào sẽ tạo ra điểm nghẽn (bottleneck), khiến GPU chờ CPU hoặc Network, làm giảm hiệu suất training xuống dưới 30%.
Verify phần cứng
Sử dụng các lệnh sau để kiểm tra thông số phần cứng trên vật lý máy chủ trước khi cài đặt Proxmox.
Kiểm tra số lượng core CPU và kiến trúc:
lscpu | grep -E "Model name|CPU(s)"
Kết quả mong đợi: Hiển thị số core vật lý và tên dòng CPU (ví dụ: Intel Xeon Gold 6248R).
Kiểm tra bộ nhớ RAM:
free -h
Kết quả mong đợi: Tổng dung lượng (total) >= 128G.
Kiểm tra GPU NVIDIA:
nvidia-smi
Kết quả mong đợi: Hiển thị danh sách card GPU, driver version và chế độ ECC (nếu có).
Kiểm tra băng thông mạng:
ethtool eth0 | grep Speed
Kết quả mong đợi: Speed 10000Mb/s (10GbE) hoặc cao hơn.
2. Cài đặt Proxmox VE và cấu hình mạng vật lý
Cài đặt Proxmox VE (PE) phiên bản mới nhất (lúc viết bài là 8.x) lên node master đầu tiên. Giả định bạn đã có ISO boot và đi vào cài đặt qua BIOS.
Sau khi cài đặt xong và restart, đăng nhập vào web interface. Tiếp theo, cần cấu hình lại giao diện mạng (Network Interface) để tách biệt lưu lượng quản lý và lưu lượng dữ liệu training.
Cấu hình Bridge cho Management Network
Chúng ta sẽ tạo một Bridge (vmbr0) gắn vào card mạng vật lý (ví dụ: ens192) để dùng cho giao tiếp HTTP/SSH và Kubernetes API.
Chỉnh sửa file cấu hình mạng của Proxmox:
nano /etc/network/interfaces
Nội dung file /etc/network/interfaces (tham khảo cấu hình tĩnh):
auto lo
iface lo inet loopback
# Management Network (Bridge)
iface ens192 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.1.10/24
gateway 192.168.1.1
bridge_ports ens192
bridge_stp off
bridge_fd 0
bridge_age 0
Kết quả mong đợi: File được lưu, không có lỗi syntax. Restart dịch vụ mạng để áp dụng.
Lệnh áp dụng thay đổi:
systemctl restart networking
Kiểm tra kết quả bằng lệnh ip addr show vmbr0, bạn sẽ thấy giao diện bridge đã có địa chỉ IP 192.168.1.10.
Cấu hình Bridge cho High-Speed Data Network
Đối với training phân tán, Ray và DeepSpeed cần mạng riêng biệt để trao đổi gradient và tensor. Sử dụng card mạng thứ 2 (ví dụ: ens224) và cấu hình một Bridge riêng (vmbr1).
Chỉnh sửa lại file /etc/network/interfaces, thêm phần sau vào cuối file:
# Data Network for AI Training (Bridge)
iface ens224 inet manual
auto vmbr1
iface vmbr1 inet static
address 10.10.10.1/24
bridge_ports ens224
bridge_stp off
bridge_fd 0
Kết quả mong đợi: vmbr1 được tạo với IP 10.10.10.1. Đây sẽ là mạng nội bộ dùng cho Kubernetes Pods giao tiếp tốc độ cao.
Lệnh áp dụng thay đổi:
systemctl restart networking
Verify cấu hình mạng:
ip link show | grep vmbr
Kết quả mong đợi: Hiển thị cả vmbr0 và vmbr1 ở trạng thái UP.
Cấu hình VLAN (Tùy chọn nhưng khuyến nghị)
Nếu hạ tầng vật lý chỉ có 1 card mạng, hoặc muốn phân tách logic hơn, hãy cấu hình VLAN trên bridge. Dưới đây là ví dụ tạo VLAN 100 trên vmbr0 cho Kubernetes Pod Network.
Thêm vào file /etc/network/interfaces:
auto vmbr0.100
iface vmbr0.100 inet manual
bridge_ports vmbr0
vlan 100
Kết quả mong đợi: Giao diện vlan vmbr0.100 được tạo. Bạn sẽ cấu hình CNI (Calico/Flannel) của Kubernetes để sử dụng VLAN này ở Phần 2.
3. Chuẩn bị tài khoản SSH và cấu hình quyền truy cập
Để tự động hóa việc triển khai Kubernetes (Kubeadm) và Ray trên các node, chúng ta cần cấu hình SSH Keyless Authentication (chạy lệnh từ master đến worker mà không cần nhập password).
Thiết lập SSH Key trên Proxmox Master
Đăng nhập vào terminal của Proxmox Master bằng user root.
Tạo cặp khóa SSH (RSA 4096 bit):
ssh-keygen -t rsa -b 4096 -f /root/.ssh/id_rsa -N ""
Kết quả mong đợi: File /root/.ssh/id_rsa (private key) và /root/.ssh/id_rsa.pub (public key) được tạo. Dấu "" ở cuối giúp bỏ qua mật khẩu cho key.
Phân phối Public Key sang các Worker Nodes
Giả sử bạn có 2 worker node với IP là 192.168.1.11 và 192.168.1.12. Chúng ta sẽ dùng lệnh ssh-copy-id để đẩy key.
Lệnh phân phối key:
ssh-copy-id root@192.168.1.11
ssh-copy-id root@192.168.1.12
Kết quả mong đợi: Hệ thống yêu cầu nhập password của root trên worker 1 lần duy nhất, sau đó hiển thị "Number of key(s) added: 1".
Test kết nối không mật khẩu
Thử chạy một lệnh đơn giản từ Master đến Worker để đảm bảo quyền truy cập.
ssh root@192.168.1.11 "hostname; echo 'Access granted'"
Kết quả mong đợi: Trả về hostname của worker và dòng "Access granted" mà không bị hỏi password.
Cấu hình Proxmox VE API Token (Cho automation scripts)
Ngoài SSH, các script tự động hóa (Ansible/Terraform) thường cần truy cập API của Proxmox để tạo VM. Hãy tạo một User API Token.
Trên giao diện Web Proxmox: System -> Permissions -> Chọn user root@pam -> Add Token.
Hoặc dùng lệnh API trực tiếp trên terminal (cần cấu hình trước):
qm api /root@pam/tokens --add --name "AI-Training-Script" --privileges "VM.Allocate,VM.Mount,VM.Modify,Datastore.Allocate,Datastore.Acl,Pool.Allocate"
Kết quả mong đợi: Trả về một JSON chứa id và token-value. Lưu token-value này an toàn, nó sẽ dùng trong các phần sau để tạo VM tự động.
Verify quyền truy cập tổng hợp
Chạy lệnh kiểm tra khả năng truy cập vào cả 2 giao diện mạng từ Master:
for ip in 192.168.1.11 10.10.10.11; do ping -c 2 $ip; done
Kết quả mong đợi: Cả 2 ping đều thông (0% packet loss) trên cả mạng Management (192.x) và Data (10.x).
Đ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 2: Triển khai Kubernetes cluster trên Proxmox bằng Kubeadm »