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. Pour exécuter des charges de travail de conteneurs GPU, vous devez disposer d'un cluster Kubernetes compatible avec les périphériques GPU. La prise en charge des GPU est activée par défaut pour les clusters Kubernetes pour lesquels des machines GPU ont été provisionnées.
Ce document s'adresse aux développeurs d'applications du groupe d'opérateurs d'applications, qui sont chargés de créer des charges de travail d'application pour leur organisation. Pour en savoir plus, consultez Audiences pour la documentation GDC sous air gap.
Avant de commencer
Pour déployer des GPU dans vos conteneurs, vous devez disposer des éléments suivants :
Un cluster Kubernetes avec une classe de machine GPU. Consultez la section Cartes GPU compatibles pour connaître les options de configuration des machines de votre cluster.
Le rôle Administrateur de cluster utilisateur (
user-cluster-admin) pour vérifier les GPU dans un cluster partagé, et le rôle Administrateur d'espace de noms (namespace-admin) dans l'espace de noms de votre projet pour déployer des charges de travail de GPU dans un cluster partagé.Le rôle Administrateur de cluster Standard (
standard-cluster-admin) pour vérifier les GPU dans un cluster Standard, et le rôle Développeur de cluster (cluster-developer) dans votre cluster Standard pour déployer des charges de travail GPU dans un cluster Standard.Pour exécuter des commandes sur un cluster Kubernetes, assurez-vous de disposer des ressources suivantes :
Recherchez le nom du cluster Kubernetes ou demandez-le à un membre du groupe des administrateurs de la plate-forme.
Connectez-vous et générez le fichier kubeconfig pour le cluster Kubernetes si vous n'en avez pas.
Utilisez le chemin kubeconfig du cluster Kubernetes pour remplacer
KUBERNETES_CLUSTER_KUBECONFIGdans ces instructions.
Chemin d'accès kubeconfig pour le serveur d'API de gestion zonale qui héberge votre cluster Kubernetes. Connectez-vous et générez le fichier kubeconfig si vous n'en avez pas.
Chemin d'accès kubeconfig pour le cluster d'infrastructure de l'organisation dans la zone destinée à héberger vos GPU. 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 ces GPU dans un conteneur, procédez comme suit :
Vérifiez que votre cluster Kubernetes comporte des pools de nœuds compatibles avec les GPU :
kubectl describe clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \ -n KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig MANAGEMENT_API_SERVERRemplacez les éléments suivants :
KUBERNETES_CLUSTER_NAME: nom du cluster.KUBERNETES_CLUSTER_NAMESPACE: espace de noms du cluster. Pour les clusters partagés, utilisez l'espace de nomsplatform. Pour les clusters standards, utilisez l'espace de noms du projet du cluster.MANAGEMENT_API_SERVER: chemin d'accès kubeconfig du serveur d'API zonal où est hébergé le cluster Kubernetes. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API dans votre zone cible, consultez Se connecter.
Le résultat pertinent ressemble à l'extrait suivant :
# Several lines of code are omitted here. spec: nodePools: - machineTypeName: a2-ultragpu-1g-gdc nodeCount: 2 # Several lines of code are omitted here.Pour obtenir la liste complète des types de machines GPU et des profils MIG (Multi-Instance GPU) compatibles, consultez Types de machines des nœuds de cluster.
Ajoutez les champs
.containers.resources.requestset.containers.resources.limitsà la spécification de votre conteneur. Chaque nom de ressource est différent selon votre classe de machine. Vérifiez l'allocation de vos ressources GPU pour trouver les noms de vos ressources GPU.Par exemple, la spécification de conteneur suivante demande trois partitions d'un GPU à partir d'un nœud
a2-ultragpu-1g-gdc:... containers: - name: my-container image: "my-image" resources: requests: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3 limits: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3 ...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 KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig KUBERNETES_CLUSTER_KUBECONFIGRemplacez les éléments suivants :
CONTAINER_MANIFEST_FILE: fichier manifeste YAML pour votre charge de travail de conteneur.KUBERNETES_CLUSTER_NAMESPACE: espace de noms du cluster. Pour les clusters partagés, utilisez l'espace de nomsplatform. Pour les clusters standards, utilisez l'espace de noms du projet du cluster.KUBERNETES_CLUSTER_KUBECONFIG: chemin d'accès kubeconfig du cluster.
Vérifier l'allocation des ressources GPU
Pour vérifier l'allocation de vos ressources GPU, utilisez la commande suivante :
kubectl describe nodes NODE_NAME --kubeconfig KUBERNETES_CLUSTER_KUBECONFIGRemplacez les éléments suivants :
NODE_NAME: nœud gérant les GPU que vous souhaitez inspecter.KUBERNETES_CLUSTER_KUBECONFIG: chemin d'accès kubeconfig du cluster.
Le résultat pertinent ressemble à l'extrait suivant :
# Several lines of code are omitted here. Capacity: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7 Allocatable: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7 # Several lines of code are omitted here.
Notez les noms de ressources de vos GPU. Vous devrez les spécifier lorsque vous configurerez un conteneur pour qu'il utilise des ressources GPU.