Cette rubrique explique comment déployer un fichier YAML pour créer des conteneurs partageant un même GPU. Une fois le fichier déployé, le partage de GPU permet d'isoler la mémoire GPU allouée à chaque conteneur, améliorant ainsi l'utilisation des ressources GPU.
Sommaire
Prérequis
ack-ai-installer et l'outil d'inspection GPU sont installés.
Notes d'utilisation
Pour les nœuds GPU gérés dans les clusters Container Service for Kubernetes (ACK), tenez compte des points suivants lorsque vous demandez et utilisez des ressources GPU pour vos applications.
N'exécutez pas directement d'applications gourmandes en ressources GPU sur les nœuds.
N'utilisez pas d'outils tels que
Docker,Podmanounerdctlpour créer des conteneurs et leur attribuer des ressources GPU. Par exemple, n'exécutez pas la commandedocker run --gpus allnidocker run -e NVIDIA_VISIBLE_DEVICES=allpour lancer des applications gourmandes en GPU.N'ajoutez pas la variable d'environnement
NVIDIA_VISIBLE_DEVICES=allouNVIDIA_VISIBLE_DEVICES=<GPU ID>à la sectionenvdu fichier YAML du pod. N'utilisez pas la variable d'environnementNVIDIA_VISIBLE_DEVICESpour demander des ressources GPU aux pods et exécuter des applications gourmandes en GPU.Lors de la création d'images de conteneur, si la variable d'environnement
NVIDIA_VISIBLE_DEVICESn'est pas spécifiée dans le fichier YAML du pod, ne définissez pasNVIDIA_VISIBLE_DEVICES=allet n'exécutez pas d'applications gourmandes en GPU.N'ajoutez pas
privileged: trueà la sectionsecurityContextdu fichier YAML du pod pour exécuter des applications gourmandes en GPU.
L'utilisation des méthodes précédentes pour demander des ressources GPU à votre application peut entraîner les risques potentiels suivants :
Si vous utilisez l'une des méthodes précédentes pour demander des ressources GPU sur un nœud sans spécifier les détails dans le registre des ressources de périphérique de l'ordonnanceur, les informations réelles d'allocation des ressources GPU peuvent différer de celles enregistrées dans ce registre. Dans ce cas, l'ordonnanceur peut toujours planifier certains pods demandant des ressources GPU sur le nœud. Par conséquent, vos applications peuvent entrer en concurrence pour les ressources fournies par le même GPU (par exemple, en demandant des ressources au même GPU), et certaines applications peuvent échouer au démarrage en raison d'un manque de ressources GPU.
L'utilisation des méthodes précédentes peut également provoquer d'autres problèmes inconnus, tels que les problèmes signalés par la communauté NVIDIA.
Procédure
-
Exécutez la commande suivante pour interroger les informations sur le partage de GPU dans votre cluster :
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%)RemarquePour obtenir des informations détaillées sur le partage de GPU, exécutez la commande kubectl inspect cgpu -d.
-
Déployez un exemple d'application avec le partage de GPU activé et demandez 3 GiB de mémoire GPU pour cette application.
apiVersion: batch/v1 kind: Job metadata: name: gpu-share-sample spec: parallelism: 1 template: metadata: labels: app: 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: # The pod requests 3 GiB of GPU memory in total. aliyun.com/gpu-mem: 3 # Specify the requested amount of GPU memory. workingDir: /root restartPolicy: Never -
Exécutez la commande suivante pour interroger l'utilisation de la mémoire du GPU :
kubectl inspect cgpuSortie attendue
NAME IPADDRESS GPU0(Allocated/Total) GPU Memory(GiB) cn-beijing.192.168.1.105 192.168.1.105 3/14 3/14 --------------------------------------------------------------------- Allocated/Total GPU Memory In Cluster: 3/14 (21%)La sortie indique que la mémoire GPU totale du nœud cn-beijing.192.168.1.105 est de 14 GiB et que 3 GiB de mémoire GPU sont alloués.
Vérification du résultat
Pour vérifier que l'isolation de la mémoire GPU est activée sur le nœud, suivez les étapes ci-dessous.
Connectez-vous au nœud maître cible.
-
Exécutez la commande suivante pour afficher les journaux de l'application et confirmer que l'isolation de la mémoire cGPU est activée.
kubectl logs gpu-share-sample --tail=1Sortie attendue :
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)La sortie indique que le conteneur a demandé 2 832 Mo de mémoire GPU.
-
Exécutez la commande suivante pour vous connecter au conteneur et afficher la quantité totale de mémoire GPU qui lui est allouée.
kubectl exec -it gpu-share-sample nvidia-smiSortie attendue :
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 | |=============================================================================| +-----------------------------------------------------------------------------+La sortie indique que la quantité totale de mémoire GPU allouée à ce conteneur est de 3 231 MiB.
-
Connectez-vous au nœud GPU qui exécute l'exemple d'application et affichez la mémoire GPU totale du nœud.
nvidia-smiSortie attendue :
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 | +-----------------------------------------------------------------------------+La sortie indique que le nœud hôte dispose d'un total de 15 079 MiB de mémoire GPU, dont 3 053 MiB sont alloués au conteneur.