Berbagi GPU memungkinkan Anda menjadwalkan beberapa pod pada GPU yang sama untuk berbagi sumber daya komputasinya. Ini meningkatkan pemanfaatan GPU dan mengurangi biaya. Saat menerapkan berbagi GPU, kontainer yang berjalan pada GPU yang sama dapat diisolasi satu sama lain sesuai dengan penggunaan sumber daya aplikasi masing-masing. Hal ini mencegah penggunaan sumber daya satu kontainer melebihi batas dan memengaruhi operasi normal kontainer lainnya. Topik ini menjelaskan cara menggunakan berbagi GPU dalam kluster ACK Edge.
Prasyarat
Sebuah kluster ACK Edge yang menjalankan Kubernetes 1.18 atau lebih baru telah dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster ACK Edge.
Suite AI cloud-native telah diaktifkan. Untuk informasi lebih lanjut tentang suite AI cloud-native, lihat Suite AI Cloud-Native dan Penagihan Suite AI Cloud-Native.
Batasan
Node cloud dari kluster ACK Edge mendukung fitur berbagi GPU, isolasi memori GPU, dan isolasi daya komputasi.
Kelompok node edge dari kluster ACK Edge hanya mendukung berbagi GPU. Fitur isolasi memori GPU dan isolasi daya komputasi tidak didukung.
Catatan penggunaan
Untuk node GPU yang dikelola dalam kluster Container Service for Kubernetes (ACK), perhatikan hal-hal berikut saat meminta sumber daya GPU untuk aplikasi dan menggunakan sumber daya tersebut:
Jangan jalankan aplikasi berat GPU 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 ada saat menggunakan metode-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 penjadwal, informasi alokasi sumber daya GPU aktual mungkin berbeda dari yang ada dalam buku besar sumber daya perangkat penjadwal. Dalam skenario ini, penjadwal masih dapat menjadwalkan pod tertentu yang meminta sumber daya GPU ke node tersebut. Akibatnya, aplikasi Anda mungkin bersaing untuk sumber daya yang disediakan oleh GPU yang sama, seperti meminta sumber daya dari GPU yang sama, dan beberapa aplikasi mungkin gagal dimulai karena sumber daya GPU yang tidak mencukupi.
Menggunakan metode-metode sebelumnya juga dapat menyebabkan masalah tidak diketahui lainnya, seperti masalah yang dilaporkan oleh komunitas NVIDIA.
Langkah 1: Instal komponen berbagi GPU
Suite AI cloud-native tidak diterapkan
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel navigasi kiri, pilih .
Di halaman Cloud-native AI Suite, klik Deploy.
Di halaman Deploy Cloud-native AI Suite, pilih Ekstensi Kebijakan Penjadwalan (Penjadwalan Tugas Batch, Berbagi GPU, Penjadwalan GPU Sadar Topologi).
(Opsional) Klik Advanced di sebelah kanan Scheduling Policy Extension (Batch Task Scheduling, GPU Sharing, Topology-aware GPU Scheduling). Di panel Parameters, modifikasi parameter
policycGPU. Setelah Anda menyelesaikan modifikasi, klik OK.Jika Anda tidak memiliki persyaratan untuk fitur berbagi daya komputasi yang disediakan oleh cGPU, kami sarankan Anda menggunakan pengaturan default
policy: 5, yaitu penjadwalan asli. Untuk informasi lebih lanjut tentang kebijakan yang didukung oleh cGPU, lihat Instal dan Gunakan cGPU.
Di bagian bawah halaman Cloud-native AI Suite, klik Deploy Cloud-native AI Suite.
Setelah komponen diinstal, Anda dapat menemukan komponen berbagi GPU yang diinstal ack-ai-installer dalam daftar komponen di halaman Cloud-native AI Suite.
Suite AI cloud-native telah diterapkan
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel navigasi kiri, pilih .
Temukan komponen ack-ai-installer, klik Deploy di kolom Actions.
(Opsional) Di panel Parameters, modifikasi parameter
policycGPU.Jika Anda tidak memiliki persyaratan untuk fitur berbagi daya komputasi yang disediakan oleh cGPU, kami sarankan Anda menggunakan pengaturan default
policy: 5, yaitu penjadwalan asli. Untuk informasi lebih lanjut tentang kebijakan yang didukung oleh cGPU, lihat Instal dan Gunakan cGPU.
Setelah Anda menyelesaikan modifikasi, klik OK.
Setelah komponen diinstal, Status dari ack-ai-installer berubah menjadi Deployed.
Langkah 2: Buat kelompok node GPU
Buat kelompok node GPU cloud untuk mengaktifkan fitur berbagi GPU, isolasi memori GPU, dan berbagi daya komputasi.
Buat kelompok node GPU edge untuk mengaktifkan berbagi GPU.
Kelompok node cloud
Di halaman Clusters, temukan kluster yang ingin dikelola dan klik namanya. Di panel navigasi kiri, pilih .
Di halaman Node Pools, klik Create Node Pool. Untuk informasi lebih lanjut tentang cara mengonfigurasi kelompok node, lihat Buat dan Kelola Kelompok Node.
Di halaman Create Node Pool, konfigurasikan parameter untuk membuat kelompok node dan klik Confirm. Tabel berikut menjelaskan parameter utama:
Parameter
Deskripsi
Expected Nodes
Jumlah awal node dalam kelompok node. Jika Anda tidak ingin membuat node dalam kelompok node, atur parameter ini ke 0.
Node Labels
Tambahkan label berdasarkan kebutuhan bisnis Anda. Untuk informasi lebih lanjut tentang label node, lihat Label untuk mengaktifkan kebijakan penjadwalan GPU.
Dalam contoh berikut, nilai label diatur ke cgpu, yang menunjukkan bahwa node memiliki berbagi GPU yang diaktifkan. Pod pada node hanya perlu meminta memori GPU. Beberapa pod dapat berbagi GPU yang sama untuk mengimplementasikan isolasi memori GPU dan berbagi daya komputasi.
Klik ikon
di sebelah parameter Node Label, atur bidang Key ke ack.node.gpu.schedule, lalu atur bidang Value kecgpu.PentingUntuk informasi lebih lanjut tentang beberapa masalah umum saat Anda menggunakan kemampuan isolasi memori yang disediakan oleh cGPU, lihat Catatan penggunaan untuk kemampuan isolasi memori cGPU.
Setelah Anda menambahkan label untuk mengaktifkan berbagi GPU ke node, jangan jalankan perintah
kubectl label nodesuntuk mengubah nilai label atau menggunakan fitur manajemen label untuk mengubah label node di halaman Nodes di konsol ACK. Ini mencegah masalah potensial. Untuk informasi lebih lanjut tentang masalah potensial ini, lihat Masalah yang mungkin terjadi jika Anda menggunakan perintah kubectl label nodes atau menggunakan fitur manajemen label untuk mengubah nilai label di konsol ACK. Kami sarankan Anda konfigurasikan berbagi GPU berdasarkan kelompok node.
Kelompok node edge
Di halaman Clusters, temukan kluster yang ingin dikelola dan klik namanya. Di panel navigasi kiri, pilih .
Di halaman Node Pools, klik Create Node Pool.
Di kotak dialog Create Node Pool, konfigurasikan parameter dan klik Confirm Order. Tabel berikut menjelaskan parameter utama. Untuk informasi lebih lanjut tentang parameter lainnya, lihat Manajemen Kelompok Node Edge.
Node Labels: Klik ikon
di bagian Node Labels, atur Key ke ack.node.gpu.scheduledan Value keshare. Nilai label ini mengaktifkan berbagi GPU. Untuk informasi lebih lanjut tentang label node, lihat Label untuk Mengaktifkan Kebijakan Penjadwalan GPU.
Langkah 3: Tambahkan node yang dipercepat GPU
Tambahkan node yang dipercepat GPU ke kelompok node cloud dan kelompok node edge, masing-masing.
Node cloud
Jika Anda sudah menambahkan node yang dipercepat GPU ke kelompok node saat Anda membuat kelompok node, lewati langkah ini.
Setelah kelompok node dibuat, Anda dapat menambahkan node yang dipercepat GPU ke kelompok node. Untuk menambahkan node yang dipercepat GPU, Anda perlu mengatur arsitektur untuk jenis instans ke GPU-accelerated. Untuk informasi lebih lanjut, lihat Tambahkan Instans ECS yang Ada atau Buat dan Kelola Kelompok Node.
Node tepi
Untuk informasi lebih lanjut tentang cara menambahkan node yang dipercepat GPU ke kelompok node edge, lihat Tambahkan Node yang Dipercepat GPU.
Langkah 4: Instal dan gunakan alat inspeksi GPU pada node cloud
Unduh kubectl-inspect-cgpu. File yang dapat dieksekusi harus diunduh ke direktori yang termasuk dalam variabel lingkungan PATH. Dalam contoh ini,
/usr/local/bin/digunakan.Jika Anda menggunakan Linux, jalankan perintah berikut untuk mengunduh kubectl-inspect-cgpu:
wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/kubectl-inspect-cgpu-linux -O /usr/local/bin/kubectl-inspect-cgpuJika Anda menggunakan macOS, jalankan perintah berikut untuk mengunduh kubectl-inspect-cgpu:
wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/kubectl-inspect-cgpu-darwin -O /usr/local/bin/kubectl-inspect-cgpu
Jalankan perintah berikut untuk memberikan izin eksekusi ke kubectl-inspect-cgpu:
chmod +x /usr/local/bin/kubectl-inspect-cgpuJalankan perintah berikut untuk memeriksa penggunaan GPU kluster:
kubectl inspect cgpuOutput yang diharapkan:
NAME IPADDRESS GPU0(Allocated/Total) GPU Memory(GiB) cn-shanghai.192.168.6.104 192.168.6.104 0/15 0/15 ---------------------------------------------------------------------- Allocated/Total GPU Memory In Cluster: 0/15 (0%)
Langkah 5: Contoh berbagi GPU
Kelompok node cloud
Jalankan perintah berikut untuk memeriksa informasi tentang berbagi GPU di kluster Anda:
kubectl inspect cgpuNAME IPADDRESS GPU0(Allocated/Total) GPU1(Allocated/Total) GPU Memory(GiB) cn-shanghai.192.168.0.4 192.168.0.4 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.
Terapkan aplikasi sampel yang memiliki berbagi GPU diaktifkan dan minta 3 GiB memori GPU untuk aplikasi tersebut.
apiVersion: batch/v1 kind: Job metadata: name: gpu-share-sample spec: parallelism: 1 template: metadata: labels: app: gpu-share-sample spec: nodeSelector: alibabacloud.com/nodepool-id: npxxxxxxxxxxxxxx # Ganti parameter ini dengan ID kelompok node yang Anda buat. 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 oleh pod. workingDir: /root restartPolicy: Never
Kelompok node edge
Terapkan aplikasi sampel yang memiliki cGPU diaktifkan dan minta 4 GiB memori GPU untuk aplikasi tersebut.
apiVersion: batch/v1
kind: Job
metadata:
name: tensorflow-mnist-share
spec:
parallelism: 1
template:
metadata:
labels:
app: tensorflow-mnist-share
spec:
nodeSelector:
alibabacloud.com/nodepool-id: npxxxxxxxxxxxxxx # Ganti parameter ini dengan ID kelompok node edge yang Anda buat.
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 # Minta 4 GiB memori.
workingDir: /root
restartPolicy: NeverLangkah 6: Verifikasi hasil
Kelompok node cloud
Masuk ke node master.
Jalankan perintah berikut untuk mencetak log aplikasi yang diterapkan guna 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 lihat 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 dari node yang dipercepat 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 dari node adalah 15.079 MiB dan 3.053 MiB memori GPU dialokasikan ke kontainer.
Kelompok node edge
Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel kiri, pilih .
Klik Terminal di kolom Actions dari pod yang Anda buat, seperti tensorflow-mnist-multigpu-***. Pilih nama pod yang ingin Anda kelola, dan jalankan perintah berikut:
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 | |=============================================================================| +-----------------------------------------------------------------------------+Dalam contoh ini, GPU V100 digunakan. Output menunjukkan bahwa pod dapat menggunakan semua memori yang disediakan oleh GPU, yaitu sebesar 16.384 MiB. Ini berarti berbagi GPU diimplementasikan tanpa isolasi memori GPU. Jika isolasi memori GPU diaktifkan, ukuran memori yang ditampilkan dalam output akan sama dengan jumlah memori yang diminta oleh pod, yaitu 4 GiB dalam contoh ini.
Pod menentukan jumlah memori GPU yang dapat digunakan berdasarkan variabel lingkungan berikut:
ALIYUN_COM_GPU_MEM_CONTAINER=4 # Jumlah memori GPU yang dapat digunakan oleh pod. ALIYUN_COM_GPU_MEM_DEV=16 # Ukuran memori setiap GPU.Untuk menghitung rasio memori GPU yang dibutuhkan oleh aplikasi, gunakan rumus berikut:
percetange = ALIYUN_COM_GPU_MEM_CONTAINER / ALIYUN_COM_GPU_MEM_DEV = 4 / 16 = 0.25
Referensi
Untuk informasi lebih lanjut tentang berbagi GPU, lihat Berbagi GPU.
Untuk informasi lebih lanjut tentang cara memperbarui komponen berbagi GPU, lihat Perbarui Komponen Berbagi GPU.
Untuk informasi lebih lanjut tentang cara menonaktifkan fitur isolasi memori GPU untuk aplikasi, lihat Nonaktifkan Fitur Isolasi Memori cGPU.
Untuk informasi lebih lanjut tentang kemampuan lanjutan dari berbagi GPU, lihat Kemampuan Lanjutan.