Topik ini menjelaskan cara menggunakan cGPU dalam klaster khusus Container Service for Kubernetes (ACK) yang berisi node dengan akselerasi GPU setelah Anda menginstal komponen ack-cgpu.
Prasyarat
Komponen ack-cgpu telah diinstal di klaster Anda. Untuk informasi lebih lanjut, lihat Instal ack-cgpu.
Catatan penggunaan
Untuk node GPU yang dikelola dalam klaster Container Service for Kubernetes (ACK), perhatikan hal-hal berikut ketika meminta sumber daya GPU untuk aplikasi dan menggunakan sumber daya tersebut:
Jangan jalankan aplikasi berat GPU secara langsung pada node.
Jangan gunakan alat seperti
Docker,Podman, ataunerdctluntuk membuat kontainer dan meminta sumber daya GPU. Sebagai contoh, jangan jalankan perintahdocker run --gpus allataudocker run -e NVIDIA_VISIBLE_DEVICES=alldan jalankan aplikasi berat GPU.Jangan tambahkan variabel lingkungan
NVIDIA_VISIBLE_DEVICES=allatauNVIDIA_VISIBLE_DEVICES=<GPU ID>ke bagianenvdalam file YAML pod. Jangan gunakan variabel lingkunganNVIDIA_VISIBLE_DEVICESuntuk meminta sumber daya GPU untuk pod dan menjalankan aplikasi berat GPU.Jangan atur
NVIDIA_VISIBLE_DEVICES=alldan jalankan aplikasi berat GPU saat Anda membangun gambar kontainer jika variabel lingkunganNVIDIA_VISIBLE_DEVICEStidak ditentukan dalam file YAML pod.Jangan tambahkan
privileged: trueke bagiansecurityContextdalam file YAML pod dan jalankan aplikasi berat GPU.
Risiko potensial berikut mungkin terjadi jika Anda menggunakan metode sebelumnya untuk meminta sumber daya GPU untuk aplikasi Anda:
Jika Anda menggunakan salah satu metode sebelumnya untuk meminta sumber daya GPU pada node tetapi tidak menentukan detail dalam buku besar sumber daya perangkat scheduler, informasi alokasi sumber daya GPU aktual mungkin berbeda dari yang ada dalam buku besar sumber daya perangkat scheduler. Dalam skenario ini, scheduler masih dapat menjadwalkan beberapa pod yang meminta sumber daya GPU ke node tersebut. Akibatnya, aplikasi Anda mungkin bersaing untuk mendapatkan sumber daya yang disediakan oleh GPU yang sama, seperti meminta sumber daya dari GPU yang sama, dan beberapa aplikasi mungkin gagal memulai karena sumber daya GPU yang tidak mencukupi.
Menggunakan metode sebelumnya juga dapat menyebabkan masalah lain yang tidak diketahui, seperti masalah yang dilaporkan oleh komunitas NVIDIA.
Prosedur
Masuk ke Konsol ACK. Di panel navigasi di sebelah kiri, klik Clusters.
Di halaman Clusters, klik nama klaster yang ingin Anda kelola dan pilih di panel navigasi di sebelah kiri.
Masuk ke node master dan jalankan perintah berikut untuk memeriksa status berbagi GPU klaster:
CatatanUntuk informasi lebih lanjut tentang cara masuk ke node master, lihat Hubungkan ke instance menggunakan VNC atau Hubung ke instans menggunakan VNC.
Jika Anda ingin memeriksa status berbagi GPU klaster dari mesin lokal, Anda harus menginstal ack-cgpu dan alat inspeksi GPU. Untuk informasi lebih lanjut, lihat Langkah 4: Instal dan gunakan alat inspeksi GPU.
kubectl inspect cgpuOutput yang diharapkan:
NAME IPADDRESS GPU0(Allocated/Total) GPU1(Allocated/Total) GPU Memory(GiB) cn-beijing.192.168.XX.XX 192.168.XX.XX 0/7 0/7 0/14 --------------------------------------------------------------------- Allocated/Total GPU Memory In Cluster: 0/14 (0%)CatatanUntuk memeriksa informasi rinci tentang berbagi GPU, jalankan perintah
kubectl inspect cgpu -d.Di panel navigasi kiri, pilih . Di pojok kanan atas halaman Jobs, klik Create from YAML. Pada halaman Create, pilih namespace dari daftar drop-down Namespace dan pilih template yang tersedia atau template kustom dari daftar drop-down Sample Template. Masukkan konten berikut ke dalam editor kode, lalu klik Create.
apiVersion: v1 kind: Pod metadata: name: gpu-share-sample spec: containers: - name: gpu-share-sample image: registry.cn-hangzhou.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: # Pod meminta total 3 GiB memori GPU. aliyun.com/gpu-mem: 3 # Tentukan jumlah memori GPU yang diminta. workingDir: /rootJalankan perintah berikut lagi di node master untuk memeriksa penggunaan memori GPU:
kubectl inspect cgpuOutput yang diharapkan:
NAME IPADDRESS GPU0(Allocated/Total) GPU Memory(GiB) cn-beijing.192.168.XX.XX 192.168.XX.XX 3/14 3/14 --------------------------------------------------------------------- Allocated/Total GPU Memory In Cluster: 3/14 (21%)Output menunjukkan bahwa total memori GPU node
cn-beijing.192.168.XX.XXadalah 14 GiB dan 3 GiB memori GPU telah dialokasikan.
Verifikasi hasil
Anda dapat menggunakan metode berikut untuk memeriksa apakah isolasi memori GPU diaktifkan untuk node.
Masuk ke node master.
Jalankan perintah berikut untuk mencetak log aplikasi yang diterapkan dan memeriksa apakah isolasi memori GPU diaktifkan:
kubectl logs gpu-share-sample --tail=1Output yang diharapkan:
2023-08-07 09:08:13.931003: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 2832 MB memory) -> physical GPU (device: 0, name: Tesla T4, pci bus id: 0000:00:07.0, compute capability: 7.5)Output menunjukkan bahwa 2.832 MiB memori GPU diminta oleh kontainer.
Jalankan perintah berikut untuk masuk ke kontainer dan melihat jumlah memori GPU yang dialokasikan ke kontainer:
kubectl exec -it gpu-share-sample nvidia-smiOutput yang diharapkan:
Mon Aug 7 08:52:18 2023 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 418.87.01 Driver Version: 418.87.01 CUDA Version: 10.1 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla T4 On | 00000000:00:07.0 Off | 0 | | N/A 41C P0 26W / 70W | 3043MiB / 3231MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| +-----------------------------------------------------------------------------+Output menunjukkan bahwa jumlah memori GPU yang dialokasikan ke kontainer adalah 3.231 MiB.
Jalankan perintah berikut untuk memeriksa total memori GPU node dengan akselerasi GPU tempat aplikasi diterapkan.
nvidia-smiOutput yang diharapkan:
Mon Aug 7 09:18:26 2023 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 418.87.01 Driver Version: 418.87.01 CUDA Version: 10.1 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla T4 On | 00000000:00:07.0 Off | 0 | | N/A 40C P0 26W / 70W | 3053MiB / 15079MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 8796 C python3 3043MiB | +-----------------------------------------------------------------------------+Output menunjukkan bahwa total memori GPU node adalah 15.079 MiB dan 3.053 MiB memori GPU dialokasikan ke kontainer.