Cette page explique comment activer et gérer les charges de travail des unités de traitement graphique (GPU) sur Google Distributed Cloud Connected. Pour profiter de cette fonctionnalité, vous devez disposer d'une configuration matérielle Distributed Cloud connectée contenant des GPU. La prise en charge du GPU est désactivée par défaut. Vous devez activer explicitement la compatibilité avec les GPU sur votre cluster Distributed Cloud connecté. N'oubliez pas que les serveurs Distributed Cloud ne sont pas compatibles avec les charges de travail GPU.
Pour planifier et commander une telle configuration, choisissez la configuration 2 dans les documents suivants :
Si votre rack Distributed Cloud connecté inclut des GPU, vous pouvez configurer vos charges de travail Distributed Cloud connectées pour qu'elles utilisent des ressources GPU.
Les charges de travail connectées Distributed Cloud peuvent s'exécuter dans des conteneurs et sur des machines virtuelles :
Charges de travail GPU exécutées dans des conteneurs. Lorsque vous activez la compatibilité avec les GPU, toutes les ressources GPU de votre cluster Distributed Cloud connecté sont initialement allouées aux charges de travail s'exécutant dans des conteneurs. Le pilote de GPU pour exécuter les charges de travail conteneurisées basées sur le GPU est inclus dans Distributed Cloud connecté. Dans chaque conteneur, les bibliothèques GPU sont montées sur
/opt/nvidia.Charges de travail GPU exécutées sur des machines virtuelles. Pour exécuter une charge de travail basée sur un GPU sur une machine virtuelle, vous devez allouer des ressources de GPU sur le nœud connecté Distributed Cloud cible aux machines virtuelles, comme décrit plus loin sur cette page. Cela permet de contourner le pilote de GPU intégré et de transmettre directement les GPU aux machines virtuelles. Vous devez installer manuellement un pilote de GPU compatible sur le système d'exploitation invité de chaque machine virtuelle. Vous devez également obtenir toutes les licences nécessaires pour exécuter des pilotes GPU spécialisés sur vos machines virtuelles.
Pour vérifier que des GPU sont présents sur un nœud Distributed Cloud connecté, assurez-vous que le nœud comporte le libellé vm.cluster.gke.io.gpu=true. Si le libellé n'est pas présent sur le nœud, cela signifie qu'aucun GPU n'est installé sur la machine physique Distributed Cloud connectée correspondante.
Activer la prise en charge du GPU
Pour activer la prise en charge des GPU pour vos charges de travail, vous devez créer ou modifier la ressource personnalisée VMRuntime qui contient le paramètre enableGPU avec sa valeur définie sur true, puis l'appliquer à votre cluster connecté Distributed Cloud.
Exemple :
apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: # Enable GPU support enableGPU: true
Selon le type de cluster sur lequel vous souhaitez activer le sous-système de machine virtuelle VM Runtime sur GDC, procédez de l'une des manières suivantes :
- Pour les clusters de plan de contrôle Cloud sur lesquels vous n'avez pas encore activé le sous-système de machine virtuelle VM Runtime sur GDC, vous devez créer manuellement la ressource
VMRuntime. - Pour les clusters de plan de contrôle Cloud sur lesquels vous avez déjà activé le sous-système de machine virtuelle VM Runtime sur GDC, vous devez modifier la ressource
VMRuntimeexistante. - Pour les clusters de plan de contrôle local, vous devez modifier la ressource
VMRuntimeexistante.
Cette même ressource VMRuntime configure également la prise en charge de l'environnement d'exécution de VM sur GDC sur votre cluster à l'aide du paramètre enable. Assurez-vous de configurer les deux paramètres en fonction des besoins de votre charge de travail. Vous n'avez pas besoin d'activer la compatibilité avec l'environnement d'exécution de VM sur GDC pour activer la compatibilité avec les GPU sur votre cluster connecté Distributed Cloud.
Le tableau suivant décrit les configurations disponibles.
Valeur enable |
Valeur enableGPU |
Configuration obtenue |
|---|---|---|
false |
false |
Les charges de travail ne s'exécutent que dans des conteneurs et ne peuvent pas utiliser de ressources GPU. |
false |
true |
Les charges de travail ne s'exécutent que dans des conteneurs et peuvent utiliser des ressources de GPU. |
true |
true |
Les charges de travail peuvent s'exécuter sur des machines virtuelles et dans des conteneurs. Les deux types de charges de travail peuvent utiliser des ressources GPU. |
true |
false |
Les charges de travail peuvent s'exécuter sur des machines virtuelles et dans des conteneurs. Aucun de ces types de charges de travail ne peut utiliser de ressources GPU. |
Vérifier que la prise en charge du GPU a été activée
Pour vérifier que la prise en charge des GPU a été activée sur votre cluster, utilisez la commande suivante :
kubectl get pods --namespace vm-system
La commande renvoie un résultat semblable à l'exemple suivant :
NAME READY STATUS RESTARTS AGE
...
gpu-controller-controller-manager-vbv4w 2/2 Running 0 31h
kubevirt-gpu-dp-daemonset-gxj7g 1/1 Running 0 31h
nvidia-gpu-dp-daemonset-bq2vj 1/1 Running 0 31h
...
Dans le résultat, vous pouvez vérifier que les pods du contrôleur de GPU ont été déployés et qu'ils s'exécutent dans l'espace de noms vm-system.
Allouer des ressources de GPU
Par défaut, lorsque vous activez la prise en charge des GPU sur votre cluster connecté Distributed Cloud, toutes les ressources GPU de chaque nœud du cluster sont allouées aux charges de travail conteneurisées. Pour personnaliser l'allocation des ressources GPU sur chaque nœud, suivez les étapes décrites dans cette section.
Configurer l'allocation des ressources GPU
Pour allouer des ressources GPU sur un nœud Distributed Cloud connecté, utilisez la commande suivante pour modifier la ressource personnalisée
GPUAllocationsur le nœud cible :kubectl edit gpuallocation NODE_NAME --namespace vm-system
Remplacez
NODE_NAMEpar le nom du nœud Distributed Cloud cible.Dans l'exemple suivant, le résultat de la commande affiche l'allocation des ressources GPU par défaut. Par défaut, toutes les ressources GPU sont allouées aux charges de travail conteneurisées (
pod), et aucune ressource GPU n'est allouée aux charges de travail de machine virtuelle (vm) :... spec: pod: 2 # Number of GPUs allocated for container workloads vm: 0 # Number of GPUs allocated for VM workloadsDéfinissez vos allocations de ressources GPU comme suit :
- Pour allouer une ressource de GPU à des charges de travail conteneurisées, augmentez la valeur du champ
podet diminuez celle du champvmdu même montant. - Pour allouer une ressource de GPU aux charges de travail des machines virtuelles, augmentez la valeur du champ
vmet diminuez la valeur du champpoddu même montant.
Le nombre total de ressources GPU allouées ne doit pas dépasser le nombre de GPU installés sur la machine physique Distributed Cloud connectée sur laquelle le nœud s'exécute. Sinon, le nœud rejette l'allocation non valide.
Dans l'exemple suivant, deux ressources de GPU ont été réaffectées des charges de travail conteneurisées (
pod) aux charges de travail de machine virtuelle (vm) :... spec: pod: 0 # Number of GPUs allocated for container workloads vm: 2 # Number of GPUs allocated for VM workloadsLorsque vous avez terminé, appliquez la ressource
GPUAllocationmodifiée à votre cluster et attendez que son état passe àAllocationFulfilled.- Pour allouer une ressource de GPU à des charges de travail conteneurisées, augmentez la valeur du champ
Vérifier l'allocation des ressources GPU
Pour vérifier l'allocation de vos ressources GPU, utilisez la commande suivante :
kubectl describe gpuallocations NODE_NAME --namespace vm-system
Remplacez
NODE_NAMEpar le nom du nœud connecté Distributed Cloud cible.La commande renvoie un résultat semblable à l'exemple suivant :
Name: mynode1 ... spec: node: mynode1 pod: 2 # Number of GPUs allocated for container workloads vm: 0 # Number of GPUs allocated for VM workloads Status: Allocated: true Conditions: Last Transition Time: 2022-09-23T03:14:10Z Message: Observed Generation: 1 Reason: AllocationFulfilled Status: True Type: AllocationStatus Last Transition Time: 2022-09-23T03:14:16Z Message: Observed Generation: 1 Reason: DeviceStateUpdated Status: True Type: DeviceStateUpdated Consumption: pod: 0/2 # Number of GPUs currently consumed by container workloads vm: 0/0 # Number of GPUs currently consumed by VM workloads Device Model: Tesla T4 Events: <none>
Configurer un conteneur pour qu'il utilise des ressources de GPU
Pour configurer un conteneur s'exécutant sur Distributed Cloud connecté afin d'utiliser des ressources GPU, configurez sa spécification comme indiqué dans l'exemple suivant, puis appliquez-la à votre cluster :
apiVersion: v1 kind: Pod metadata: name: my-gpu-pod spec: containers: - name: my-gpu-container image: CUDA_TOOLKIT_IMAGE command: ["/bin/bash", "-c", "--"] args: ["while true; do sleep 600; done;"] env: resources: requests: nvidia.com/gpu-pod-TESLA_T4: 2 limits: nvidia.com/gpu-pod-TESLA_T4: 2 nodeSelector: kubernetes.io/hostname: NODE_NAME
Remplacez les éléments suivants :
CUDA_TOOLKIT_IMAGE: chemin d'accès complet et nom de l'image NVIDIA CUDA Toolkit. La version de CUDA Toolkit doit correspondre à la version du pilote NVIDIA exécutée sur votre cluster connecté Distributed Cloud. Pour déterminer la version de votre pilote NVIDIA, consultez les notes de version de Distributed Cloud. Pour trouver la version correspondante de CUDA Toolkit, consultez Compatibilité avec CUDA.NODE_NAME: nom du nœud Distributed Cloud connecté cible.
Configurer une machine virtuelle pour utiliser des ressources GPU
Pour configurer une machine virtuelle exécutée sur Distributed Cloud Connected afin d'utiliser des ressources GPU, configurez sa spécification de ressources VirtualMachine comme indiqué dans l'exemple suivant, puis appliquez-la à votre cluster :
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine ... spec: ... gpu: model: nvidia.com/gpu-vm-TESLA_T4 quantity: 2