Anda dapat meminta memori GPU dan daya komputasi untuk aplikasi di Container Service for Kubernetes (ACK) Pro clusters. Fitur ini memungkinkan penggunaan memori GPU dan daya komputasi secara lebih terperinci. Topik ini menjelaskan cara menjadwalkan GPU bersama untuk mengalokasikan daya komputasi.
Prasyarat
Sebuah ACK Pro cluster yang menjalankan Kubernetes 1.20 atau versi lebih baru telah dibuat. Untuk informasi lebih lanjut, lihat Buat sebuah ACK managed cluster. Versi kube-scheduler memenuhi persyaratan berdasarkan versi cluster. Untuk detail tentang fitur yang didukung oleh setiap versi kube-scheduler, lihat kube-scheduler.
Versi cluster ACK
Versi Scheduler
1.28
1.28.1-aliyun-5.6-998282b9 atau lebih baru
1.26
v1.26.3-aliyun-4.1-a520c096 atau lebih baru
1.24
1.24.3-ack-2.0 atau lebih baru
1.22
1.22.15-ack-2.0 atau lebih baru
1.20
1.20.4-ack-8.0 atau lebih baru
Komponen pembagian GPU telah diinstal, dengan versi Helm chart lebih baru dari 1.2.0. Untuk panduan instalasi komponen pembagian GPU, lihat Kelola Komponen Pembagian GPU.
cGPU versi 1.0.5 atau lebih baru telah diinstal. Untuk panduan memperbarui cGPU, lihat Perbarui Versi cGPU pada Node.
Batasan
Pembagian GPU mendukung pekerjaan yang hanya meminta memori GPU serta pekerjaan yang meminta memori GPU dan daya komputasi. Namun, kedua jenis pekerjaan tersebut tidak dapat diterapkan pada satu node secara bersamaan.
Berikut adalah batasan saat meminta daya komputasi untuk pekerjaan:
Daya komputasi yang disediakan oleh setiap GPU diukur pada skala 100, yang mewakili 100% daya komputasi. Misalnya, nilai 20 menunjukkan penggunaan 20% dari daya komputasi GPU.
Nilai daya komputasi harus merupakan kelipatan dari 5, dengan nilai minimum 5. Jika nilai yang ditentukan bukan kelipatan dari 5, pekerjaan tidak dapat dikirimkan.
Hanya wilayah tertentu yang mendukung alokasi memori GPU dan daya komputasi. Pastikan kluster Anda berada di salah satu wilayah yang didukung.
Wilayah
ID Wilayah
Cina (Beijing)
cn-beijing
Cina (Shanghai)
cn-shanghai
Cina (Hangzhou)
cn-hangzhou
Cina (Zhangjiakou)
cn-zhangjiakou
Cina (Shenzhen)
cn-shenzhen
Cina (Chengdu)
cn-chengdu
Cina (Heyuan)
cn-heyuan
Cina (Hong Kong)
cn-hongkong
Indonesia (Jakarta)
ap-southeast-5
Singapura
ap-southeast-1
Thailand (Bangkok)
ap-southeast-7
AS (Virginia)
us-east-1
AS (Silicon Valley)
us-west-1
Jepang (Tokyo)
ap-northeast-1
Cina Timur 2 Keuangan
cn-shanghai-finance-1
Versi scheduler yang mendukung alokasi daya komputasi dirilis pada 1 Maret 2022. Kluster yang dibuat sebelum tanggal tersebut menggunakan versi scheduler lama dan harus diperbarui secara manual. Jika kluster Anda dibuat sebelum 1 Maret 2022, ikuti langkah-langkah berikut:
Submit a ticket untuk mengajukan partisipasi dalam pratinjau pribadi versi terbaru penjadwalan GPU bersama.
Hapus instalasi komponen pembagian GPU versi lama.
Jika versi Helm chart komponen pembagian GPU yang diinstal adalah 1.2.0 atau lebih lama, versi tersebut sudah usang dan hanya mendukung pembagian memori. Lakukan langkah-langkah berikut untuk menghapus versi lama:
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel navigasi kiri, pilih .
Di halaman Helm, temukan ack-ai-installer dan klik Delete di kolom Actions. Di kotak dialog Delete, klik OK.
Instal komponen pembagian GPU versi terbaru. Untuk informasi lebih lanjut, lihat Kelola Komponen Pembagian GPU.
Langkah 1: Buat node pool yang mendukung alokasi daya komputasi
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang akan dikelola dan klik namanya. Di panel navigasi kiri, pilih .
Di halaman Node Pools, klik Create Node Pool.
Tabel berikut menjelaskan beberapa parameter yang digunakan untuk mengonfigurasi node pool. Untuk informasi lebih lanjut, lihat Buat dan Kelola Node Pool.
Parameter
Deskripsi
Node Pool Name
Nama untuk node pool. Dalam contoh ini, gpu-core digunakan.
Expected Nodes
Jumlah awal node dalam node pool. Jika Anda tidak ingin membuat node dalam node pool, atur parameter ini ke 0.
ECS Tags
Label yang ingin Anda tambahkan ke instance Elastic Compute Service (ECS) dalam node pool.
Node Label
Label yang ingin Anda tambahkan ke node dalam node pool. Konfigurasi berikut digunakan dalam topik ini. Untuk informasi lebih lanjut tentang label node, lihat Label untuk mengaktifkan kebijakan penjadwalan GPU.
Untuk mengaktifkan isolasi memori GPU dan isolasi daya komputasi, klik ikon
dan atur key ke ack.node.gpu.schedule dan value ke core_mem.Untuk menggunakan algoritma binpack untuk memilih GPU untuk pod, klik ikon
dan atur key ke ack.node.gpu.placement dan value ke binpack.
PentingUntuk mengaktifkan isolasi daya komputasi pada node yang dipercepat GPU yang ada di kluster, Anda harus menghapus node dari kluster dan menambahkannya ke node pool yang mendukung isolasi daya komputasi. Perintah
kubectl label nodes <NODE_NAME> ack.node.gpu.schedule=core_memtidak dapat langsung digunakan untuk mengaktifkan isolasi daya komputasi pada node yang ada.
Langkah 2: Periksa apakah alokasi daya komputasi diaktifkan untuk node pool
Jalankan perintah berikut untuk memeriksa apakah alokasi daya komputasi diaktifkan untuk node dalam node pool:
kubectl get nodes <NODE_NAME> -o yamlOutput yang diharapkan:
# Bidang yang tidak relevan dihilangkan.
status:
# Bidang yang tidak relevan dihilangkan.
allocatable:
# Node memiliki 4 GPU, yang menyediakan total 400% daya komputasi. Setiap GPU menyediakan 100% daya komputasi.
aliyun.com/gpu-core.percentage: "400"
aliyun.com/gpu-count: "4"
# Node memiliki 4 GPU, yang menyediakan total 60 GiB memori. Setiap GPU menyediakan 15 GiB memori.
aliyun.com/gpu-mem: "60"
capacity:
aliyun.com/gpu-core.percentage: "400"
aliyun.com/gpu-count: "4"
aliyun.com/gpu-mem: "60"Output berisi bidang aliyun.com/gpu-core.percentage, yang menunjukkan bahwa alokasi daya komputasi diaktifkan.
Langkah 3: Gunakan fitur alokasi daya komputasi
Jika alokasi daya komputasi tidak diaktifkan, sebuah pod dapat menggunakan 100% daya komputasi GPU dengan total memori 15 GiB. Langkah-langkah berikut menunjukkan cara membuat pekerjaan yang meminta memori GPU dan daya komputasi. Pekerjaan tersebut meminta 2 GiB memori GPU dan 30% daya komputasi GPU.
Gunakan template YAML berikut untuk membuat pekerjaan yang meminta memori GPU dan daya komputasi:
apiVersion: batch/v1 kind: Job metadata: name: cuda-sample spec: parallelism: 1 template: metadata: labels: app: cuda-sample spec: containers: - name: cuda-sample image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:benchmark-tensorflow-2.2.3 command: - bash - run.sh - --num_batches=500000000 - --batch_size=8 resources: limits: # Alokasikan 2 GiB memori GPU. aliyun.com/gpu-mem: 2 # Alokasikan 30% daya komputasi GPU. aliyun.com/gpu-core.percentage: 30 workingDir: /root restartPolicy: NeverJalankan perintah berikut untuk menerapkan pekerjaan cuda-sample:
kubectl apply -f /tmp/cuda-sample.yamlCatatanUkuran gambar yang digunakan oleh pekerjaan cukup besar, sehingga proses penarikan mungkin memakan waktu lama.
Jalankan perintah berikut untuk menanyakan status pekerjaan cuda-sample:
kubectl get po -l app=cuda-sampleOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE cuda-sample-m**** 1/1 Running 0 15sDalam output,
Runningditampilkan di kolomSTATUS, yang menunjukkan bahwa pekerjaan telah diterapkan.Jalankan perintah berikut untuk menanyakan jumlah memori GPU dan daya komputasi yang digunakan oleh pod yang disediakan untuk pekerjaan:
kubectl exec -ti cuda-sample-m**** -- nvidia-smiOutput yang diharapkan:
Thu Dec 16 02:53:22 2021 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 450.102.04 Driver Version: 450.102.04 CUDA Version: 11.0 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla V100-SXM2... On | 00000000:00:08.0 Off | 0 | | N/A 33C P0 56W / 300W | 337MiB / 2154MiB | 30% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| +-----------------------------------------------------------------------------+Output menunjukkan informasi berikut:
Memori GPU: Sebelum mengaktifkan alokasi daya komputasi, pod dapat menggunakan semua memori GPU, yaitu 15 GiB. Setelah fitur ini diaktifkan, jumlah memori yang digunakan oleh pod adalah 337 MiB, dengan total memori yang dapat digunakan sekitar 2 GiB. Ini menunjukkan bahwa isolasi memori diterapkan.
Daya komputasi: Sebelum mengaktifkan alokasi daya komputasi, pod dapat menggunakan 100% daya komputasi GPU. Setelah fitur ini diaktifkan, pod menggunakan 30% daya komputasi. Ini menunjukkan bahwa isolasi daya komputasi diterapkan.
CatatanSebagai contoh, jika n pekerjaan dibuat dan masing-masing meminta 30% daya komputasi (dengan n ≤ 3), pekerjaan tersebut dijadwalkan ke satu GPU. Jika Anda masuk ke pod pekerjaan dan menjalankan perintah
nvidia-smi, output menunjukkan bahwa pod menggunakan n × 30% daya komputasi. Output perintahnvidia-smihanya menunjukkan pemanfaatan daya komputasi per GPU.Jalankan perintah berikut untuk menampilkan log pod:
kubectl logs cuda-sample-m**** -fOutput yang diharapkan:
[CUDA Bandwidth Test] - Starting... Running on... Device 0: Tesla V100-SXM2-16GB Quick Mode time: 2021-12-16/02:50:59,count: 0,memSize: 32000000,succeed to copy data from host to gpu time: 2021-12-16/02:51:01,count: 1,memSize: 32000000,succeed to copy data from host to gpu time: 2021-12-16/02:51:02,count: 2,memSize: 32000000,succeed to copy data from host to gpu time: 2021-12-16/02:51:03,count: 3,memSize: 32000000,succeed to copy data from host to gpuOutput menunjukkan bahwa log pod dihasilkan pada laju yang lebih rendah setelah mengaktifkan alokasi daya komputasi. Hal ini karena setiap pod hanya dapat menggunakan sekitar 30% dari daya komputasi GPU.
Opsional: Jalankan perintah berikut untuk menghapus pekerjaan cuda-sample:
Setelah memverifikasi bahwa alokasi daya komputasi bekerja sesuai harapan, Anda dapat menghapus pekerjaan tersebut.
kubectl delete job cuda-sample