GPU sharing memungkinkan beberapa Pod berjalan pada kartu GPU yang sama dalam kluster ACK Lingjun managed. Bergantung pada apakah beban kerja Anda memerlukan batasan memori yang ketat, pilih salah satu dari dua mode berikut:
Mode | Node Label | Cara kerja | Memori GPU diisolasi? | Gunakan saat |
Sharing tanpa isolasi |
| Pod berbagi GPU; memori tidak dipartisi di antara mereka | Tidak | Beban kerja yang mengelola batas memori sendiri (misalnya, aplikasi Java dengan |
Berbagi dengan Isolasi (eGPU) |
| Pod berbagi GPU; setiap Pod mendapatkan batas memori keras yang diterapkan oleh modul eGPU | Ya | Beberapa kontainer pada satu GPU di mana satu kontainer tidak boleh menghabiskan sumber daya yang lain |
GPU sharing di pool node Lingjun hanya berlaku pada node yang memiliki salah satu label tersebut.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Membuat kluster ACK Lingjun managed dengan minimal satu node Lingjun berakselerasi GPU. Lihat Buat kluster Lingjun dengan ACK diaktifkan.
Membuat pool node Lingjun. Lihat Buat pool node Lingjun.
Mengaktifkan kemampuan KuberGPU (eGPU) di kluster bare metal Lingjun Anda.
Add-on ack-ai-installer telah terinstal di Kluster Pro terkelola ACK Anda. Saat Anda men-deploy suite AI cloud-native, pilih Scheduling Policy Extension (Batch Task Scheduling, GPU Sharing, Topology-aware GPU Scheduling) untuk menginstal Komponen.
Add-on GPU sharing diinstal secara default di kluster ACK Lingjun managed. Untuk mengaktifkan GPU sharing pada suatu node, tambahkan label GPU sharing ke node tersebut.
Aktifkan GPU sharing tanpa isolasi
Gunakan mode ini jika beban kerja Anda menyediakan batas memori GPU sendiri. Dalam kasus ini, penggunaan modul isolasi GPU untuk mengisolasi memori aplikasi dapat menyebabkan masalah seperti konflik resource, sehingga penjadwalan GPU bersama mendukung opsi untuk tidak menginstal modul isolasi pada node tersebut. Dalam GPU sharing tanpa isolasi, beberapa Pod berjalan pada kartu GPU yang sama. Gangguan antar-Pod pada kartu tersebut, seperti persaingan untuk memori GPU, tidak ditangani dan diserahkan ke lapisan aplikasi.
Langkah 1: Beri label pada node
Konfirmasi bahwa node tersebut adalah node Lingjun dengan memeriksa keberadaan file
/etc/lingjun_metadatadi node tersebut. Jika file tersebut ada, jalankannvidia-smiuntuk memverifikasi ketersediaan GPU. Jika output normal, node tersebut adalah node Lingjun yang mendukung GPU sharing dan Anda dapat melanjutkan ke langkah berikutnya. Jika file tersebut tidak ada, node tersebut bukan node Lingjun, sehingga GPU sharing tidak dapat diaktifkan. Buat node Lingjun terlebih dahulu. Lihat Ikhtisar pool node Lingjun.Tambahkan label GPU sharing ke node tersebut:
kubectl label node <NODE_NAME> ack.node.gpu.schedule=shareAtau, atur label tersebut di Konsol menggunakan fitur node labels.
Langkah 2: Kirim pekerjaan GPU-sharing
Buat file bernama
tensorflow.yamldengan konten berikut:apiVersion: batch/v1 kind: Job metadata: name: tensorflow-mnist-share spec: parallelism: 1 template: metadata: labels: app: tensorflow-mnist-share spec: containers: - name: tensorflow-mnist-share image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:tensorflow-1.5 command: - python - tensorflow-sample-code/tfjob/docker/mnist/main.py - --max_steps=100000 - --data_dir=tensorflow-sample-code/data resources: limits: aliyun.com/gpu-mem: 4 # Meminta 4 GiB memori GPU workingDir: /root restartPolicy: NeverBidang kunci adalah
aliyun.com/gpu-mem: 4di bawahresources.limits, yang meminta 4 GiB memori GPU untuk Pod tersebut.Kirim pekerjaan tersebut:
kubectl apply -f tensorflow.yaml
Langkah 3: Verifikasi GPU sharing tanpa isolasi
Dapatkan nama Pod:
kubectl get pod | grep tensorflowJalankan
nvidia-smidi dalam Pod:kubectl exec -ti tensorflow-mnist-share-xxxxx -- nvidia-smiOutput yang diharapkan:
Wed Jun 14 06:45:56 2023 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 515.105.01 Driver Version: 515.105.01 CUDA Version: 11.7 | |-------------------------------+----------------------+----------------------+ | 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:09.0 Off | 0 | | N/A 35C P0 59W / 300W | 334MiB / 16384MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| +-----------------------------------------------------------------------------+Bidang utama yang perlu diperiksa:
Memory-Usage menampilkan
334MiB / 16384MiB— Pod melihat seluruh memori GPU sebesar 16.384 MiB, bukan hanya 4 GiB yang diminta. Hal ini mengonfirmasi bahwa isolasi tidak aktif. Contoh ini menggunakan kartu GPU V100 dan Pod meminta 4 GiB memori GPU. Nilai aktual bergantung pada lingkungan Anda.Jika modul isolasi GPU diinstal, bidang memori akan hanya menampilkan 4 GiB yang diminta.
Mode ini tidak menerapkan batas memori di tingkat driver GPU. Aplikasi Anda membaca memori GPU yang dapat digunakan dari dua variabel lingkungan, seperti yang ditunjukkan pada output berikut. Untuk menyatakan alokasi sebagai persentase dari total memori kartu, bagi kedua nilai tersebut: 4 / 16 = 0,25 (25% dari total memori GPU).ALIYUN_COM_GPU_MEM_CONTAINER=4 # Memori GPU yang dialokasikan untuk Pod ini (GiB)
ALIYUN_COM_GPU_MEM_DEV=16 # Total memori GPU per kartu (GiB)Aktifkan GPU sharing dengan isolasi (eGPU)
Gunakan mode ini untuk menerapkan batas memori GPU keras antar-Pod pada kartu GPU yang sama. Solusi industri seperti NVIDIA vGPU, MPS, vCUDA, dan eGPU memungkinkan penggunaan GPU dengan granularitas lebih halus, dan bagian ini menggunakan modul isolasi eGPU sebagai contoh. Dalam GPU sharing dengan isolasi, beberapa Pod berjalan pada kartu GPU yang sama, dan gangguan antar-Pod pada kartu tersebut juga ditangani.
Langkah 1: Beri label pada node
Konfirmasi bahwa node tersebut adalah node Lingjun dengan memeriksa keberadaan file
/etc/lingjun_metadatadi node tersebut. Jika file tersebut ada, jalankannvidia-smiuntuk memverifikasi aksesibilitas GPU. Jika file tersebut tidak ada, node tersebut bukan node Lingjun dan Anda tidak dapat mengaktifkan GPU sharing untuknya. Buat pool node Lingjun terlebih dahulu. Lihat Ikhtisar pool node Lingjun.Tambahkan label GPU sharing ke node tersebut. Pilih nilai label berdasarkan jenis isolasi yang Anda butuhkan:
Nilai label
Yang diaktifkan
egpu_memHanya isolasi memori GPU
egpu_core_memIsolasi memori GPU dan daya komputasi
Untuk mengaktifkan isolasi memori:
kubectl label node <NODE_NAME> ack.node.gpu.schedule=egpu_memAnda juga dapat mengatur label tersebut di Konsol menggunakan fitur node labels.
Anda dapat meminta hanya memori GPU, tetapi jika Anda meminta daya komputasi GPU, Anda harus meminta memori GPU dan daya komputasi GPU sekaligus. Meminta hanya daya komputasi tidak didukung.
Langkah 2: Konfirmasi resource node siap
Setelah memberi label pada node, tunggu hingga node melaporkan resource GPU-nya, lalu verifikasi:
kubectl get node <NODE_NAME> -oyamlCari aliyun.com/gpu-mem dan aliyun.com/gpu-count di bagian allocatable dan capacity:
allocatable:
aliyun.com/gpu-count: "1"
aliyun.com/gpu-mem: "80"
...
nvidia.com/gpu: "0"
...
capacity:
aliyun.com/gpu-count: "1"
aliyun.com/gpu-mem: "80"
...
nvidia.com/gpu: "0"
...Bidang utama yang perlu diperiksa:
aliyun.com/gpu-count: "1" — node memiliki satu kartu GPU.
aliyun.com/gpu-mem: "80" — node memiliki total 80 GB memori GPU.
nvidia.com/gpu: "0" — GPU keseluruhan tidak diekspos sebagai resource schedulable independen; memori dialokasikan melalui
aliyun.com/gpu-mem.
Untuk menjadwalkan Pod ke perangkat GPU utuh, tambahkan labelack.gpushare.placement=require-whole-deviceke Pod tersebut. Secara default, Pod tersebut kemudian dijadwalkan ke kartu GPU utuh yang memiliki jumlah memori GPU tersebut. Tentukan jumlah memori menggunakanaliyun.com/gpu-mem.
Langkah 3: Jalankan pekerjaan benchmarking untuk memverifikasi isolasi
Buat file bernama
benchmark.yamldengan konten berikut:apiVersion: batch/v1 kind: Job metadata: name: benchmark-job spec: parallelism: 1 template: spec: containers: - name: benchmark-job 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: aliyun.com/gpu-mem: 10 # Meminta 10 GB memori GPU workingDir: /root restartPolicy: Never hostNetwork: true tolerations: - operator: ExistsKirim pekerjaan tersebut:
kubectl apply -f benchmark.yamlSetelah Pod berjalan, buka shell di dalam Pod:
kubectl exec -ti benchmark-job-xxxx bashJalankan
vgpu-smiuntuk memeriksa status isolasi GPU:Memory-Usage menampilkan
8307MiB / 10782MiB— Pod dibatasi sekitar 10 GB, mengonfirmasi bahwa isolasi memori GPU aktif.Berbeda dengan
nvidia-smipada mode tanpa isolasi,vgpu-smihanya menampilkan memori yang dialokasikan untuk Pod ini, bukan total memori GPU.
vgpu-smiOutput yang diharapkan:
+------------------------------------------------------------------------------+ | VGPU_SMI 460.91.03 DRIVER_VERSION: 460.91.03 CUDA Version: 11.2 | +-------------------------------------------+----------------------------------+ | GPU Name Bus-Id | Memory-Usage GPU-Util | |===========================================+==================================| | 0 xxxxxxxx 00000000:00:07.0 | 8307MiB / 10782MiB 100% / 100% | +-------------------------------------------+----------------------------------+Bidang utama yang perlu diperiksa:
FAQ
Bagaimana cara memeriksa apakah komponen GPU sharing sudah diinstal?
Jalankan perintah berikut:
kubectl get ds -nkube-system | grep gpushareJika komponen tersebut sudah diinstal, output akan mencantumkan DaemonSet berikut:
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
gpushare-egpu-device-plugin-ds 0 0 0 0 0 <none>
gpushare-egpucore-device-plugin-ds 0 0 0 0 0 <none>Langkah selanjutnya
Label untuk mengaktifkan kebijakan penjadwalan GPU — pelajari semua label node yang tersedia untuk penjadwalan GPU.
Ikhtisar pool node Lingjun — tambahkan node Lingjun ke kluster Anda.