Vous pouvez activer et gérer les ressources de processeur 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 appareils 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 la documentation sur les audiences pour GDC sous air gap.
Avant de commencer
Pour effectuer les tâches décrites dans ce document, vous devez demander les autorisations nécessaires et préparer votre environnement.
Demander des rôles IAM
Vous devez disposer de rôles spécifiques pour obtenir les autorisations nécessaires au déploiement de GPU dans vos conteneurs. Les rôles dont vous avez besoin dépendent du type de cluster que vous utilisez : un cluster partagé à l'échelle de l'organisation ou un cluster standard à l'échelle du projet. Pour en savoir plus, consultez Configurations de cluster Kubernetes.
Rôles de cluster partagés
Pour vérifier les pools de nœuds compatibles avec les GPU et déployer des charges de travail GPU dans un cluster partagé, demandez les rôles suivants en fonction de la tâche à effectuer :
- Administrateur de cluster utilisateur (
user-cluster-admin) : créez, supprimez, modifiez ou affichez les ressources d'un cluster partagé hébergé sur le serveur de l'API Management. Ce rôle vous permet de vérifier les GPU dans le cluster partagé et n'est pas lié à l'espace de noms de votre projet. - Administrateur de l'espace de noms (
namespace-admin) : créez, supprimez, modifiez ou affichez les ressources d'un cluster partagé hébergé dans le projet. Ce rôle vous permet de déployer des charges de travail GPU dans un cluster standard. Il est lié à l'espace de noms de votre projet.
Rôles de cluster standards
Pour vérifier les pools de nœuds compatibles avec les GPU et déployer des charges de travail GPU sur un cluster standard, demandez à votre administrateur IAM du projet de vous accorder les rôles suivants :
- Administrateur de cluster standard (
standard-cluster-admin) : créez, supprimez, modifiez ou affichez les ressources d'un cluster standard hébergé sur le serveur de l'API Management. Ce rôle vous permet de vérifier les GPU dans le cluster partagé et est lié à l'espace de noms de votre projet. - Développeur de cluster (
cluster-developer) : créez, supprimez, modifiez ou consultez un cluster standard. Ce rôle vous permet de déployer des charges de travail GPU sur un cluster standard en vous donnant accès aux API du plan de données hébergées dans le cluster standard. Ce rôle est lié à l'espace de noms de votre projet.
Préparer votre environnement
Pour configurer un conteneur afin qu'il utilise des ressources GPU, assurez-vous de disposer des ressources suivantes :
Un cluster Kubernetes avec une classe de machine GPU. Pour en savoir plus, consultez la section Cartes GPU compatibles.
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.
Utilisez le chemin d'accès kubeconfig du cluster Kubernetes pour remplacer
KUBERNETES_CLUSTER_KUBECONFIGdans ces instructions.Connectez-vous et générez le fichier kubeconfig pour le serveur d'API de gestion zonale qui héberge votre cluster Kubernetes. Utilisez ce chemin d'accès pour remplacer
MANAGEMENT_API_SERVERdans ces instructions.Connectez-vous et générez le fichier kubeconfig pour le cluster d'infrastructure de l'organisation dans la zone destinée à héberger vos GPU.
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 du fichier kubeconfig pour le 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:# Several lines of code are omitted here. 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 # Several lines of code are omitted here.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 :
# Several lines of code are omitted here. securityContext: seLinuxOptions: type: unconfined_t # Several lines of code are omitted here.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.