Gunakan KubeRay Operator untuk menerapkan dan mengelola kluster Ray guna menjalankan beban kerja AI terdistribusi di ACK.
Prasyarat
Pastikan hal-hal berikut:
-
Kluster Pro managed ACK yang menjalankan Kubernetes v1.24 atau versi lebih baru (buat | upgrade).
-
Setidaknya satu node dengan 8 vCPU dan memori 32 GB (untuk pengujian). Sesuaikan ukuran sesuai beban kerja Anda di lingkungan produksi. Untuk beban kerja GPU, gunakan keluarga instans Elastic Compute Service (ECS) yang didukung.
-
kubectl telah diinstal dan terhubung ke kluster Anda.
-
(Opsional) Instans ApsaraDB for Tair untuk toleransi kesalahan Global Control Store (GCS).
(Opsional) Siapkan toleransi kesalahan GCS
Buat instans ApsaraDB for Tair (kompatibel Redis):
-
Wilayah dan Virtual Private Cloud (VPC) yang sama dengan kluster ACK Anda (buat instans).
-
Daftar putih yang mengizinkan akses dari blok CIDR VPC.
-
Titik akhir VPC (disarankan). Lihat alamat koneksi.
-
Sandi instans (ubah atau atur ulang).
Instal KubeRay Operator
-
Masuk ke Konsol ACK.
-
Di panel navigasi sebelah kiri, klik Clusters. Klik nama kluster Anda.
-
Buka Operations > Add-ons > Manage Applications.
-
Di bawah Kuberay-Operator, klik Install.
Terapkan Kluster Ray
Contoh ini menggunakan rayproject/ray:2.36.1 dari Docker Hub. Jika proses pull gagal, gunakan salah satu alternatif berikut:
-
Cerminkan gambar melalui Container Registry dari luar Tiongkok daratan (berlangganan gambar dari luar Tiongkok).
-
Buat instans Global Accelerator untuk menarik gambar dari luar negeri.
Buat kluster Ray bernama myfirst-ray-cluster:
Manifes ini mengonfigurasi:
| Komponen | Pengaturan | Catatan |
|---|---|---|
| Head node | num-cpus: "0" |
Mencadangkan head untuk manajemen kluster |
Kelompok worker work1 |
1 replika, dapat diskalakan hingga 1.000 | Sesuaikan nilai replicas agar sesuai dengan workload Anda |
| Autoscaling | Dinonaktifkan (enableInTreeAutoscaling: false) |
Aktifkan setelah menganalisis pola penggunaan resource workload Anda |
Manifes lengkap
cat <<EOF | kubectl apply -f -
apiVersion: ray.io/v1
kind: RayCluster
metadata:
name: myfirst-ray-cluster
namespace: default
spec:
suspend: false
autoscalerOptions:
env: []
envFrom: []
idleTimeoutSeconds: 60
imagePullPolicy: Always
resources:
limits:
cpu: 2000m
memory: 2024Mi
requests:
cpu: 2000m
memory: 2024Mi
securityContext: {}
upscalingMode: Default
enableInTreeAutoscaling: false
headGroupSpec:
rayStartParams:
dashboard-host: 0.0.0.0
num-cpus: "0"
serviceType: ClusterIP
template:
spec:
containers:
- image: rayproject/ray:2.36.1
imagePullPolicy: Always
name: ray-head
resources:
limits:
cpu: "4"
memory: 4G
requests:
cpu: "1"
memory: 1G
workerGroupSpecs:
- groupName: work1
maxReplicas: 1000
minReplicas: 0
numOfHosts: 1
rayStartParams: {}
replicas: 1
template:
spec:
containers:
- image: rayproject/ray:2.36.1
imagePullPolicy: Always
name: ray-worker
resources:
limits:
cpu: "4"
memory: 4G
requests:
cpu: "4"
memory: 4G
EOF
Verifikasi penerapan
Konfirmasi bahwa kluster sedang berjalan:
-
Periksa status kluster Ray:
kubectl get rayclusterOutput yang diharapkan:
NAME DESIRED WORKERS AVAILABLE WORKERS CPUS MEMORY GPUS STATUS AGE myfirst-ray-cluster 1 1 5 5G 0 ready 4m19s -
Periksa Pod:
kubectl get podOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE myfirst-ray-cluster-head-5q2hk 1/1 Running 0 4m37s myfirst-ray-cluster-work1-worker-zkjgq 1/1 Running 0 4m31s -
Periksa Service:
kubectl get svcOutput yang diharapkan:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 192.168.0.1 <none> 443/TCP 21d myfirst-ray-cluster-head-svc ClusterIP None <none> 10001/TCP,8265/TCP,8080/TCP,6379/TCP,8000/TCP 6m57s
Saat status kluster Ray menunjukkan ready dan semua Pod menampilkan status 1/1 Running, penerapan telah selesai.