Dalam penerapan aplikasi lintas wilayah, mengelola alokasi sumber daya di berbagai wilayah dapat menjadi tantangan. Untuk mengatasi hal ini, ACK One menyediakan penjadwal cerdas yang berbasis inventaris untuk armada multi-kluster. Topik ini menjelaskan cara kerja penjadwalan berbasis inventaris dan bagaimana mengaktifkannya untuk armada Anda.
Ikhtisar
Saat melayani beban kerja inferensi GPU, pengguna menghadapi dua tantangan utama:
Ketersediaan GPU yang Dinamis: Pasokan sumber daya GPU bervariasi antar wilayah, sehingga sulit untuk menjamin ketersediaan secara real-time.
Biaya Tinggi GPU: Penyediaan node GPU sebelumnya untuk menangani permintaan potensial dapat menyebabkan biaya yang signifikan dan tidak perlu.
Mekanisme penjadwalan berbasis inventaris, dikombinasikan dengan skalabilitas instan, secara efektif mengatasi kedua tantangan tersebut. Saat sumber daya yang ada di kluster anggota armada tidak cukup untuk menjadwalkan aplikasi baru, penjadwal secara cerdas menempatkan beban kerja ke kluster yang memiliki inventaris GPU tersedia. Fitur skalabilitas instan kluster tersebut kemudian menyediakan node yang diperlukan sesuai permintaan.
Kemampuan ini memaksimalkan penjadwalan sukses aplikasi yang bergantung pada sumber daya langka seperti GPU, sambil secara signifikan mengurangi biaya operasional.
Fitur ini saat ini dalam versi pratinjau. Untuk menggunakannya, ajukan tiket.
Cara kerjanya
Saat aplikasi diterapkan ke armada dan kluster anggota memiliki sumber daya yang tidak mencukupi, alur kerja berikut dipicu:
Aplikasi dan kebijakan propagasinya dibuat di lapisan kontrol armada.
Penjadwal mendeteksi bahwa kluster anggota target kekurangan sumber daya yang diperlukan.
Penjadwal meminta scaler (ACK GOATScaler) dari kluster anggota untuk memeriksa inventaris GPU yang tersedia di wilayahnya.
Berdasarkan laporan inventaris, penjadwal mengevaluasi ulang keputusan penempatannya dan mengirimkan aplikasi ke kluster dengan inventaris yang tersedia.
Setelah aplikasi dikirimkan ke kluster target, fitur skalabilitas instan menyediakan node baru, dan pod aplikasi dijadwalkan dan mulai berjalan.
Persyaratan
Anda telah mengaitkan beberapa kluster anggota dengan instance armada Anda.
Anda telah mengaktifkan penskalaan instan node untuk kluster anggota.
PentingJika kluster anggota Anda saat ini dikonfigurasikan dengan penskalaan otomatis, ubahlah ke penskalaan instan node.
Anda telah menginstal alat baris perintah AMC.
Spesifikasi instans GPU-accelerated dan perkiraan biaya
Memori GPU digunakan oleh parameter model selama fase inferensi. Penggunaannya dihitung menggunakan rumus berikut:
Ambil contoh model 7B dengan presisi default FP16: jumlah parameter model adalah 7 miliar, dan ukuran byte per parameter adalah 2 byte (bilangan floating point 16-bit default/8 bit per byte).
Selain memori yang digunakan untuk memuat model, Anda juga perlu mempertimbangkan ukuran cache key-value (KV) dan pemanfaatan GPU. Biasanya, sebagian memori dicadangkan untuk buffering. Oleh karena itu, kami merekomendasikan menggunakan tipe instans yang menyediakan 24 GiB memori, seperti ecs.gn7i-c8g1.2xlarge atau ecs.gn7i-c16g1.4xlarge. Lihat Instansi Komputasi yang Dioptimalkan dengan Percepatan GPU dan Penagihan untuk Layanan GPU Elastis.
Langkah 1: Persiapkan data model
Pada langkah ini, Anda akan menyiapkan file model Qwen-8B dan membuat Persistent Volume (PV) Object Storage Service (OSS) yang sesuai untuk setiap kluster anggota.
Unduh model.
CatatanPeriksa apakah plugin git-lfs sudah terinstal. Jika belum, jalankan
yum install git-lfsatauapt-get install git-lfsuntuk menginstalnya. Untuk informasi lebih lanjut, lihat Instal git-lfs.git lfs install GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/Qwen/Qwen3-8B cd Qwen3-8B git lfs pullBuat folder di OSS dan unggah model ke dalamnya.
CatatanUntuk langkah-langkah detail tentang cara menginstal dan menggunakan ossutil, lihat Instal ossutil.
ossutil mkdir oss://<your-bucket-name>/models/Qwen3-8B ossutil cp -r ./Qwen3-8B oss://<your-bucket-name>/models/Qwen3-8BBuat PV dan PersistentVolumeClaim (PVC) di setiap kluster anggota untuk memasang file model dari OSS. Untuk informasi lebih lanjut, lihat Gunakan Volume Statis yang Disediakan oleh ossfs 1.0.
Langkah 2: Konfigurasikan kelompok node di kluster anggota
Di setiap kluster anggota, buat atau edit kelompok node dengan pengaturan berikut:
Instance Type:
ecs.gn7i-c8g1.2xlarge(atau tipe instans GPU lain yang sesuai)Scaling Mode: Otomatis
Expected Nodes: 0
Untuk operasi lebih lanjut dan konfigurasi parameter, lihat Buat dan Kelola Kelompok Node.
Saat menyesuaikan konfigurasi penskalaan node, Anda dapat menyesuaikan parameter Waktu Tunda Pemicu Penyusutan untuk mempersingkat waktu tunggu untuk langkah-langkah berikutnya.
Langkah 3: Buat aplikasi dan kebijakan propagasi di kluster armada
Buat file bernama
deploy.yamluntuk mendefinisikan penerapan layanan inferensi.apiVersion: apps/v1 kind: Deployment metadata: labels: app: qwen3-8b name: qwen3-8b namespace: default spec: replicas: 4 selector: matchLabels: app: qwen3-8b template: metadata: labels: app: qwen3-8b spec: volumes: - name: qwen3-8b persistentVolumeClaim: claimName: qwen3-8b - name: dshm emptyDir: medium: Memory sizeLimit: 20Gi containers: - command: - sh - -c - vllm serve /models/qwen3-8b --port 8000 --trust-remote-code --served-model-name qwen3-8b --tensor-parallel=1 --max-model-len 8192 --gpu-memory-utilization 0.95 --enforce-eager image: kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm-openai:v0.9.1 name: vllm ports: - containerPort: 8000 readinessProbe: tcpSocket: port: 8000 initialDelaySeconds: 30 periodSeconds: 30 resources: limits: nvidia.com/gpu: "1" volumeMounts: - mountPath: /models/qwen3-8b name: qwen3-8b - mountPath: /dev/shm name: dshmBuat file bernama
PropagationPolicy.yaml. Bidang utamaautoScaling.ecsProvision: truemengaktifkan penjadwalan berbasis inventaris.apiVersion: policy.one.alibabacloud.com/v1alpha1 kind: PropagationPolicy metadata: name: demo-policy spec: # Bidang ini mengaktifkan penjadwalan elastis berbasis inventaris. autoScaling: ecsProvision: true preserveResourcesOnDeletion: false conflictResolution: Overwrite resourceSelectors: - apiVersion: apps/v1 kind: Deployment name: qwen3-8b namespace: default placement: replicaScheduling: replicaSchedulingType: Divided weightPreference: dynamicWeight: AvailableReplicas clusterAffinity: clusterNames: - ${cluster1-id} # Ganti dengan ID kluster anggota Anda. - ${cluster2-id} # Ganti dengan ID kluster anggota Anda.Gunakan file kubeconfig dari armada untuk menerapkan aplikasi dan kebijakan propagasinya.
kubectl apply -f deploy.yaml kubectl apply -f PropagationPolicy.yamlSetelah beberapa saat, kolam node GPU di kluster anggota Anda akan mulai meningkat secara otomatis.
Langkah 4: Validasi penskalaan elastis
Periksa status penjadwalan beban kerja di armada.
kubectl get resourcebindingOutput yang Diharapkan:
NAME SCHEDULED FULLYAPPLIED OVERRIDDEN ALLAVAILABLE AGE qwen3-8b-deployment True True True False 7m47sOutput menunjukkan bahwa
SCHEDULEDadalahTRUE, yang menunjukkan bahwa beban kerja berhasil dijadwalkan.Setelah pod berada dalam status
Berjalan, periksa distribusinya di seluruh kluster anggota.kubectl amc get deploy qwen3-8b -MOutput yang Diharapkan:
NAME CLUSTER READY UP-TO-DATE AVAILABLE AGE ADOPTION qwen3-8b cxxxxxxxxxxxxxx 2/2 2 2 3m22s Y qwen3-8b cxxxxxxxxxxxxxx 2/2 2 2 3m22s YOutput menunjukkan bahwa semua replika telah dijadwalkan dan berjalan, meskipun kluster anggota awalnya tidak memiliki node GPU yang tersedia.
Perbarui file
deploy.yamluntuk mengurangi jumlah replika untukqwen3-8bmenjadi 2, dan terapkan ulang.Sebagai alternatif, hapus beban kerja untuk mensimulasikan skenario di mana jumlah replika dikurangi menjadi 0.
kubectl apply -f deploy.yamlSetelah sekitar 10 menit, kolam node GPU di kluster anggota akan secaraotomatis menyusut untuk melepaskan node yang tidak digunakan, sehingga mengurangi biaya.
Jika Anda menghapus beban kerja, jumlah node akan menyusut menjadi 0.