Vous pouvez activer et gérer les ressources des unités de traitement graphique (GPU) sur vos conteneurs. Par exemple, vous pouvez préférer exécuter des notebooks d'intelligence artificielle (IA) et de machine learning (ML) dans un environnement GPU. La compatibilité avec les GPU est activée par défaut dans l'appliance Google Distributed Cloud (GDC) sous air gap.
Avant de commencer
Pour déployer des GPU dans vos conteneurs, vous devez disposer des éléments suivants :
Le rôle Administrateur de l'espace de noms (
namespace-admin
) pour déployer des charges de travail GPU dans l'espace de noms de votre projet.Chemin d'accès au fichier kubeconfig pour le cluster Kubernetes Bare Metal. Connectez-vous et générez le fichier kubeconfig si vous n'en avez pas.
Configurer un conteneur pour qu'il utilise des ressources de GPU
Pour utiliser des GPU dans un conteneur, procédez comme suit :
Vérifiez que les nœuds de votre cluster Kubernetes sont compatibles avec l'allocation de ressources GPU :
kubectl describe nodes NODE_NAME
Remplacez
NODE_NAME
par le nœud gérant les GPU que vous souhaitez inspecter.Le résultat pertinent ressemble à l'extrait suivant :
Capacity: nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1 Allocatable: nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
Ajoutez les champs
.containers.resources.requests
et.containers.resources.limits
à la spécification de votre conteneur. Étant donné que votre cluster Kubernetes est préconfiguré avec des machines GPU, la configuration est la même pour toutes les charges de travail :... containers: - name: CONTAINER_NAME image: CONTAINER_IMAGE resources: requests: nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1 limits: nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1 ...
Remplacez les éléments suivants :
CONTAINER_NAME
: nom du conteneur.CONTAINER_IMAGE
: image de conteneur permettant d'accéder aux machines GPU. Vous devez inclure le chemin d'accès au registre de conteneurs et la version de l'image, par exempleREGISTRY_PATH/hello-app:1.0
.
Les conteneurs nécessitent également des autorisations supplémentaires pour accéder aux GPU. Pour chaque conteneur qui demande des GPU, ajoutez les autorisations suivantes à la spécification de conteneur :
... securityContext: seLinuxOptions: type: unconfined_t ...
Appliquez votre fichier manifeste de conteneur :
kubectl apply -f CONTAINER_MANIFEST_FILE \ -n NAMESPACE \ --kubeconfig CLUSTER_KUBECONFIG
Remplacez les éléments suivants :
CONTAINER_MANIFEST_FILE
: fichier YAML pour votre ressource personnalisée de charge de travail de conteneur.NAMESPACE
: espace de noms du projet dans lequel déployer les charges de travail du conteneur.CLUSTER_KUBECONFIG
: fichier kubeconfig du cluster Kubernetes sur lequel vous déployez des charges de travail de conteneurs.
Vérifiez que vos pods sont en cours d'exécution et qu'ils utilisent les GPU :
kubectl get pods -A | grep CONTAINER_NAME \ -n NAMESPACE \ --kubeconfig CLUSTER_KUBECONFIG
Le résultat pertinent ressemble à l'extrait suivant :
Port: 80/TCP Host Port: 0/TCP State: Running Ready: True Restart Count: 0 Limits: nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1 Requests: nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1