Cette page vous explique comment créer un cluster Google Kubernetes Engine (GKE) optimisé pour l'IA qui utilise des machines virtuelles (VM) A4 ou A3 Ultra pour prendre en charge vos charges de travail d'IA et de ML. Pour A4X, consultez Créer un cluster GKE personnalisé optimisé pour l'IA qui utilise A4X.
Les séries de machines A4 et A3 Ultra sont conçues pour vous permettre d'exécuter des clusters d'IA/de ML à grande échelle avec des fonctionnalités telles que le placement ciblé des charges de travail, des contrôles avancés de maintenance des clusters et la planification tenant compte de la topologie. Pour en savoir plus, consultez la présentation de la gestion des clusters.
GKE fournit une plate-forme unique pour exécuter un ensemble varié de charges de travail pour vos organisations, ce qui réduit la charge opérationnelle liée à la gestion de plusieurs plates-formes. Vous pouvez exécuter des charges de travail telles que le pré-entraînement distribué hautes performances, l'affinage de modèles, l'inférence de modèles, la diffusion d'applications et les services associés.
Sur cette page, vous allez apprendre à créer un cluster GKE avec Google Cloud CLI pour configurer votre cluster de manière aussi flexible que possible en fonction des besoins de votre charge de travail. Vous pouvez également choisir d'utiliser Cluster Toolkit pour déployer rapidement votre cluster avec des paramètres par défaut qui reflètent les bonnes pratiques pour de nombreux cas d'utilisation. Pour savoir comment procéder, consultez Créer un cluster GKE optimisé pour l'IA avec la configuration par défaut.
Options de configuration de cluster avec GPUDirect RDMA
Pour créer votre cluster avec Google Cloud CLI, vous pouvez choisir l'une des options de configuration de cluster suivantes :
- Si vous ne prévoyez pas d'exécuter de charges de travail d'IA distribuées : créez un cluster GKE sans utiliser GPUDirect RDMA.
- Si vous prévoyez d'exécuter des charges de travail d'IA distribuées : créez un cluster GKE avec GPUDirect RDMA.
Avant de commencer
Avant de commencer, effectuez les tâches suivantes :
- Activez l'API Google Kubernetes Engine. Activer l'API Google Kubernetes Engine
- Si vous souhaitez utiliser la Google Cloud CLI pour cette tâche, installez et initialisez la gcloud CLI. Si vous avez déjà installé la gcloud CLI, obtenez la dernière version en exécutant la commande
gcloud components update. Il est possible que les versions antérieures de la gcloud CLI ne permettent pas d'exécuter les commandes de ce document.
Rôles requis
Pour obtenir les autorisations nécessaires pour créer et gérer un cluster GKE, demandez à votre administrateur de vous accorder les rôles IAM suivants sur le projet :
-
Administrateur de Kubernetes Engine (
roles/container.admin) -
Éditeur Cloud Build (
roles/cloudbuild.builds.editor) -
Administrateur de Compute (
roles/compute.admin) -
Administrateur de projet IAM (
roles/resourcemanager.projectIamAdmin) -
Administrateur de compte de service (
roles/iam.serviceAccountAdmin) -
Utilisateur du compte de service (
roles/iam.serviceAccountUser) -
Consommateur Service Usage (
roles/serviceusage.serviceUsageConsumer) -
Administrateur de l'espace de stockage (
roles/storage.admin)
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Choisir une option de consommation et obtenir de la capacité
Sélectionnez une option de consommation. Faites votre choix en fonction de la manière dont vous souhaitez obtenir et utiliser les ressources GPU. Pour en savoir plus, consultez Choisir une option de consommation.
Pour GKE, tenez compte des informations supplémentaires suivantes lorsque vous choisissez une option de consommation :
- Pour en savoir plus sur le démarrage flexible (aperçu) et GKE, consultez À propos de la disponibilité des GPU avec le démarrage flexible.
- Le démarrage Flex utilise un placement compact au mieux. Pour examiner votre topologie, consultez Afficher la topologie physique des nœuds de votre cluster GKE.
- Vous ne pouvez obtenir des informations sur la topologie que si vous configurez un emplacement compact lorsque vous utilisez des VM Spot.
Obtenez de la capacité. Découvrez comment obtenir de la capacité pour votre option de consommation.
Conditions requises
Les exigences suivantes s'appliquent à un cluster GKE optimisé par l'IA :
- Pour utiliser le modèle de provisionnement Démarrage flexible, vous devez utiliser GKE version 1.32.2-gke.1652000 ou ultérieure.
Assurez-vous d'utiliser la version minimale du pilote de GPU, en fonction du type de machine :
- A4 : les GPU B200 des VM A4 nécessitent au minimum la version R570 du pilote GPU. Par défaut, GKE installe automatiquement cette version du pilote sur tous les nœuds A4 qui exécutent la version minimale requise pour A4, à savoir 1.32.1-gke.1729000 ou version ultérieure.
- A3 Ultra : les GPU H200 des VM A3 Ultra nécessitent au minimum la version R550 du pilote de GPU, qui est disponible dans la version 1.31 de GKE en tant que version du pilote
latest. Pour les VM A3 Ultra, vous devez définir la valeur du champgpu-driver-version=latestavec la version 1.31 de GKE. Pour GKE version 1.31.5-gke.1169000 ou ultérieure, GKE installe automatiquement les versions de pilote GPU R550 sur les nœuds A3 Ultra par défaut, y compris lorsque vous omettez l'indicateurgpu-driver-version.
Pour utiliser GPUDirect RDMA, les exigences supplémentaires suivantes s'appliquent :
- Utilisez les versions minimales suivantes, en fonction du type de machine :
- A4 : utilisez la version 1.32.2-gke.1475000 ou ultérieure.
- A3 Ultra : utilisez la version 1.31.4-gke.1183000 ou ultérieure.
- Les nœuds GKE doivent utiliser une image de nœud Container-Optimized OS. Les images de nœuds Ubuntu et Windows ne sont pas acceptées.
- Votre charge de travail GKE doit utiliser tous les GPU disponibles, et votre pod doit utiliser toutes les cartes d'interface réseau (NIC) secondaires disponibles sur un seul nœud GKE. Plusieurs pods ne peuvent pas partager RDMA sur un même nœud GKE.
- Cette configuration exécute un test NCCL. Pour exécuter ce test NCCL, vous devez disposer d'un quota de VM minimal de
2(soit 16 GPU si vous utilisez les types de machinesa4-highgpu-8goua3-ultragpu-8g). - GPUDirect RDMA n'est pas compatible avec NCCL Fast Socket ni avec GPUDirect-TCPX/TCPXO. N'activez pas NCCL Fast Socket et n'installez pas le plug-in TCPX/TCPXO sur les clusters qui utilisent GPUDirect RDMA.
- Utilisez les versions minimales suivantes, en fonction du type de machine :
Assurez-vous d'utiliser un emplacement où le type de machine que vous choisissez est disponible. Pour en savoir plus, consultez Emplacements des GPU.
Créer un cluster GKE optimisé pour l'IA
Suivez les instructions de cette section pour créer un cluster GKE qui répond aux exigences des clusters GKE optimisés pour l'IA. Vous pouvez choisir de créer un cluster avec ou sans GPUDirect RDMA.
Éléments à prendre en compte pour créer un cluster
Lorsque vous créez un cluster, tenez compte des informations suivantes :
- Choisissez l'emplacement d'un cluster :
- Assurez-vous d'utiliser un emplacement où le type de machine que vous choisissez est disponible. Pour en savoir plus, consultez Emplacements des GPU.
- Pour les réservations denses, vous pouvez créer un cluster zonal. Dans ce cas, remplacez l'indicateur
--regionpar l'indicateur--zone=COMPUTE_ZONE, oùCOMPUTE_ZONEcorrespond à la zone de votre plan de contrôle. - Pour les charges de travail qui s'exécutent sur plus de 1 000 nœuds et qui nécessitent une faible latence réseau entre les nœuds, vous pouvez créer un cluster régional.
Pour colocaliser physiquement vos nœuds sensibles aux performances, créez vos pools de nœuds GPU dans une seule zone à l'aide de l'indicateur
--node-locations.
- Choisissez une version du pilote :
- La version du pilote peut être l'une des valeurs suivantes :
default: installe la version de pilote par défaut pour la version de nœud GKE. Pour en savoir plus sur les exigences concernant les versions de pilote par défaut, consultez la section Exigences.latest: installe la dernière version de pilote disponible pour votre version de GKE. Cette option n'est disponible que pour les nœuds qui utilisent Container-Optimized OS.disabled: ignorer l'installation automatique du pilote. Vous devez installer manuellement un pilote après avoir créé le pool de nœuds.
- Pour en savoir plus sur les versions de pilote de GPU par défaut et les plus récentes pour les versions de nœud GKE, consultez Installer manuellement des pilotes de GPU NVIDIA.
- La version du pilote peut être l'une des valeurs suivantes :
Choisir une affinité de réservation :
- Vous pouvez trouver des informations sur votre réservation, comme son nom ou celui d'un bloc spécifique. Pour trouver ces valeurs, consultez Afficher les demandes de réservations futures.
- L'indicateur
--reservation-affinitypeut prendre les valeursspecificouany. Toutefois, pour les charges de travail d'IA distribuées à hautes performances, nous vous recommandons d'utiliser une réservation spécifique. Lorsque vous utilisez une réservation spécifique, y compris les réservations partagées, spécifiez la valeur de l'indicateur
--reservationau format suivant :projects/PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAMERemplacez les éléments suivants :
PROJECT_ID: ID de votre projet Google Cloud .RESERVATION_NAME: nom de votre réservation.BLOCK_NAME: nom d'un bloc spécifique dans la réservation.
Créer un cluster sans GPUDirect RDMA
Pour créer un cluster sans GPUDirect RDMA, suivez les instructions ci-dessous pour créer un cluster avec un pool de nœuds par défaut basé sur le processeur et des pools de nœuds supplémentaires avec des GPU. Cette approche permet au pool de nœuds par défaut d'exécuter d'autres services.
Créez le cluster :
gcloud container clusters create CLUSTER_NAME \ --cluster-version=CLUSTER_VERSION \ --region=COMPUTE_REGIONRemplacez les éléments suivants :
CLUSTER_NAME: nom de votre nouveau clusterCLUSTER_VERSION: version de votre nouveau cluster Pour savoir quelle version de GKE est compatible avec votre configuration, consultez la section Exigences.COMPUTE_REGION: région de votre nouveau cluster. Si vous prévoyez de créer un cluster zonal, utilisez l'option--zoneau lieu de l'option--region, par exemple :--zone=COMPUTE_ZONE. RemplacezCOMPUTE_ZONEpar la zone du plan de contrôle.
Créez le pool de nœuds basé sur GPU avec l'une des commandes suivantes. La commande que vous devez exécuter dépend de l'option de consommation que vous utilisez pour votre déploiement. Sélectionnez l'onglet correspondant au modèle de provisionnement de votre option de consommation.
Lié à la réservation
Pour le provisionnement lié à une réservation, exécutez la commande suivante :
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --num-nodes=NUM_NODES \ --reservation-affinity=specific \ --reservation=RESERVATION_NAME/reservationBlocks/BLOCK_NAMERemplacez les éléments suivants :
NODE_POOL_NAME: nom du pool de nœuds.COMPUTE_REGION: région de votre nouveau cluster.CLUSTER_NAME: nom de votre nouveau clusterCOMPUTE_ZONE: zone de votre pool de nœuds.GPU_TYPE: type d'accélérateur GPU :- VM A4 : saisissez
nvidia-b200. - VM A3 Ultra : saisissez
nvidia-h200-141gb.
- VM A4 : saisissez
AMOUNT: nombre de GPU à associer aux nœuds du pool de nœuds. Par exemple, pour les VMa4-highgpu-8geta3-ultragpu-8g, le nombre de GPU est de8.DRIVER_VERSION: version du pilote NVIDIA à installer. Elle peut être l'une des valeurs suivantes :default,latestoudisabled.MACHINE_TYPE: type de machine Compute Engine pour les nœuds. Par exemple, utiliseza4-highgpu-8gpour les VM A4 eta3-ultragpu-8gpour les VM A3 Ultra.NUM_NODES: nombre de nœuds du pool de nœuds.RESERVATION_NAME: nom de votre réservation. Pour trouver cette valeur, consultez Afficher les demandes de réservations futures.BLOCK_NAME: nom d'un bloc spécifique dans la réservation. Pour trouver cette valeur, consultez Afficher les demandes de réservations futures.
Démarrage flexible
Pour le provisionnement à démarrage flexible, exécutez la commande suivante :
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --flex-start --enable-autoscaling --num-nodes=0 \ --total-max-nodes TOTAL_MAX_NODES \ --no-enable-autorepair --location-policy=ANY \ --reservation-affinity=none [\ --enable-queued-provisioning]Remplacez les éléments suivants :
NODE_POOL_NAME: nom du pool de nœuds.COMPUTE_REGION: région de votre nouveau cluster.CLUSTER_NAME: nom de votre nouveau clusterCOMPUTE_ZONE: zone de votre pool de nœuds.GPU_TYPE: type d'accélérateur GPU :- VM A4 : saisissez
nvidia-b200. - VM A3 Ultra : saisissez
nvidia-h200-141gb.
- VM A4 : saisissez
AMOUNT: nombre de GPU à associer aux nœuds du pool de nœuds. Par exemple, pour les VMa4-highgpu-8geta3-ultragpu-8g, le nombre de GPU est de8.DRIVER_VERSION: version du pilote NVIDIA à installer. Elle peut être l'une des valeurs suivantes :default,latestoudisabled.MACHINE_TYPE: type de machine Compute Engine pour les nœuds. Par exemple, utiliseza4-highgpu-8gpour les VM A4 eta3-ultragpu-8gpour les VM A3 Ultra.TOTAL_MAX_NODES: nombre maximal de nœuds pour effectuer le scaling automatique du pool de nœuds entier.Si vous souhaitez utiliser flex-start avec le provisionnement en file d'attente, incluez l'indicateur
--enable-queued-provisioning.Pour en savoir plus sur l'utilisation du démarrage flexible, consultez Exécuter des charges de travail à grande échelle avec le démarrage flexible et le provisionnement en file d'attente.
Spot
Pour le provisionnement de spot, exécutez la commande suivante :
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --num-nodes=NUM_NODES \ --spotRemplacez les éléments suivants :
NODE_POOL_NAME: nom du pool de nœuds.COMPUTE_REGION: région de votre nouveau cluster.CLUSTER_NAME: nom de votre nouveau clusterCOMPUTE_ZONE: zone de votre pool de nœuds.GPU_TYPE: type d'accélérateur GPU :- VM A4 : saisissez
nvidia-b200. - VM A3 Ultra : saisissez
nvidia-h200-141gb.
- VM A4 : saisissez
AMOUNT: nombre de GPU à associer aux nœuds du pool de nœuds. Par exemple, pour les VMa4-highgpu-8geta3-ultragpu-8g, le nombre de GPU est de8.DRIVER_VERSION: version du pilote NVIDIA à installer. Elle peut être l'une des valeurs suivantes :default,latestoudisabled.MACHINE_TYPE: type de machine Compute Engine pour les nœuds. Par exemple, utiliseza4-highgpu-8gpour les VM A4 eta3-ultragpu-8gpour les VM A3 Ultra.NUM_NODES: nombre de nœuds du pool de nœuds.Pour en savoir plus sur la création de clusters avec des VM Spot, consultez Exécuter des charges de travail tolérantes aux pannes à moindre coût avec des VM Spot.
Connectez-vous à votre cluster pour pouvoir exécuter les commandes
kubectldans les sections suivantes :gcloud container clusters get-credentials CLUSTER_NAME --location=COMPUTE_REGIONRemplacez les éléments suivants :
CLUSTER_NAME: nom du clusterCOMPUTE_REGION: nom de la région de calcul.Pour en savoir plus, consultez Installer kubectl et configurer l'accès au cluster.
Créer un cluster avec GPUDirect RDMA
Pour les charges de travail d'IA distribuées, plusieurs nœuds GPU sont souvent associés pour fonctionner comme un seul ordinateur. Les VM A4 et A3 Ultra sont fournies avec l'adaptateur réseau Titanium ML, qui est basé sur les cartes d'interface réseau NVIDIA ConnectX-7 (CX7). Les VM A4 et A3 Ultra offrent un trafic GPU à GPU entre les nœuds de 3,2 Tbit/s sans blocage grâce à RDMA over Converged Ethernet (RoCE). RoCE permet le scaling et la collaboration sur plusieurs GPU en offrant une expérience cloud hautes performances pour les charges de travail d'IA.
Pour savoir comment créer vos clusters GKE à l'aide de la Google Cloud CLI et de GPUDirect-TCPX (VM A3 High) ou TCPXO (VM A3 Mega), consultez Maximiser la bande passante réseau des GPU dans les clusters en mode Autopilot ou Maximiser la bande passante réseau des GPU dans les clusters en mode Standard.
Pour créer vos clusters GKE en mode Autopilot ou standard avec GPUDirect RDMA, procédez comme suit (les étapes sont décrites dans les sections suivantes) :
- Créer des VPC et des sous-réseaux
- Créer le cluster GKE avec le multiréseau
- Créer des objets réseau GKE
- Installer le binaire RDMA et configurer NCCL
- Déployer et exécuter un test NCCL
- Configurer vos fichiers manifestes de pod pour GPUDirect-RDMA
Créer des VPC et des sous-réseaux
Les VM A4 et A3 Ultra présentent la configuration suivante :
- Huit GPU NVIDIA B200 (A4) ou H200 (A3 Ultra) par machine virtuelle connectée avec NVLink
- Deux processeurs Intel Emerald Rapids
- Huit cartes d'interface réseau CX-7 de 400 Gbit/s pour la mise en réseau entre GPU
- Deux cartes d'interface réseau Google Titanium de 200 Gbit/s pour les services externes
Les charges de travail d'IA et de ML, telles que l'entraînement distribué, nécessitent une accélération puissante pour optimiser les performances en réduisant les délais d'exécution des tâches. Pour les charges de travail nécessitant des performances, un débit et une latence élevés, GPUDirect RDMA réduit le nombre de sauts réseau nécessaires pour transférer des charges utiles vers et depuis les GPU, ce qui utilise plus efficacement la bande passante réseau disponible. GPUDirect RDMA est conçu pour améliorer considérablement le débit à grande échelle par rapport aux GPU qui n'utilisent pas GPUDirect.
L'une des cartes d'interface réseau Google Titanium associées au processeur utilise le réseau par défaut dans GKE. Vous n'avez pas besoin de créer un VPC pour cette carte d'interface réseau si vous disposez de suffisamment de plages d'adresses IP pour le réseau par défaut.
Vous pouvez créer un VPC pour la deuxième carte réseau Titanium (gVNIC) du processeur et un autre VPC pour les huit cartes réseau RDMA CX-7 à l'aide de ces commandes.
Définissez les variables d'environnement pour qu'elles correspondent à votre déploiement :
export REGION="COMPUTE_REGION" export ZONE="COMPUTE_ZONE" export PROJECT="PROJECT_ID" export GVNIC_NETWORK_PREFIX="GVNIC_NETWORK_PREFIX" export RDMA_NETWORK_PREFIX="RDMA_NETWORK_PREFIX"Remplacez les variables suivantes :
COMPUTE_REGION: région de votre cluster.COMPUTE_ZONE: zone de votre pool de nœuds.PROJECT_ID: ID de votre projet Google Cloud .GVNIC_NETWORK_PREFIX:a4high-gvnicpour les VM A4 oua3ultra-gvnicpour les VM A3 Ultra.RDMA_NETWORK_PREFIX:a4high-rdmapour les VM A4 oua3ultra-rdmapour les VM A3 Ultra.
Créez deux réseaux VPC :
# Create a VPC for the additional Google Titanium CPU NIC gcloud compute --project=${PROJECT} \ networks create \ ${GVNIC_NETWORK_PREFIX}-net \ --subnet-mode=custom gcloud compute --project=${PROJECT} \ networks subnets create \ ${GVNIC_NETWORK_PREFIX}-sub \ --network=${GVNIC_NETWORK_PREFIX}-net \ --region=${REGION} \ --range=192.168.0.0/24 gcloud compute --project=${PROJECT} \ firewall-rules create \ ${GVNIC_NETWORK_PREFIX}-internal \ --network=${GVNIC_NETWORK_PREFIX}-net \ --action=ALLOW \ --rules=tcp:0-65535,udp:0-65535,icmp \ --source-ranges=192.168.0.0/16 # Create HPC VPC for the RDMA NICs with 8 subnets. gcloud beta compute --project=${PROJECT} \ networks create ${RDMA_NETWORK_PREFIX}-net \ --network-profile=${ZONE}-vpc-roce \ --subnet-mode=custom # Create subnets for the HPC VPC. for N in $(seq 0 7); do gcloud compute --project=${PROJECT} \ networks subnets create \ ${RDMA_NETWORK_PREFIX}-sub-$N \ --network=${RDMA_NETWORK_PREFIX}-net \ --region=${REGION} \ --range=192.168.$((N+1)).0/24 & # offset to avoid overlap with gvnics done
Créer le cluster GKE avec le multiréseau
Autopilot
Créez un cluster GKE Autopilot avec le multiréseau :
gcloud container clusters create-auto CLUSTER_NAME \ --enable-multi-networking \ --cluster-version=CLUSTER_VERSION \ --region=COMPUTE_REGIONRemplacez les éléments suivants :
CLUSTER_NAME: nom du clusterCLUSTER_VERSION: version de votre nouveau cluster. Pour savoir quelle version de GKE est compatible avec votre configuration, consultez la section Exigences.COMPUTE_REGION: nom de la région de calcul.
Connectez-vous à votre cluster pour pouvoir exécuter les commandes
kubectldans les sections suivantes :gcloud container clusters get-credentials CLUSTER_NAME --location=COMPUTE_REGIONRemplacez les éléments suivants :
CLUSTER_NAME: nom du clusterCOMPUTE_REGION: nom de la région de calcul.
Pour en savoir plus, consultez Installer kubectl et configurer l'accès au cluster.
Standard
Créez un cluster GKE Standard et un pool de nœuds GPU avec le multiréseau :
Créez le cluster :
gcloud container clusters create CLUSTER_NAME \ --region=COMPUTE_REGION \ --cluster-version=CLUSTER_VERSION \ --enable-dataplane-v2 --enable-ip-alias --enable-multi-networking [\ --services-ipv4-cidr=SERVICE_CIDR \ --cluster-ipv4-cidr=POD_CIDR]Remplacez les éléments suivants :
CLUSTER_NAME: nom du clusterCLUSTER_VERSION: version de votre nouveau cluster. Pour savoir quelle version de GKE est compatible avec votre configuration, consultez la section Exigences.COMPUTE_REGION: nom de la région de calcul.
Vous pouvez éventuellement fournir explicitement les plages CIDR secondaires pour les services et les pods. Si vous utilisez ces options facultatives, remplacez les variables suivantes :
SERVICE_CIDR: plage CIDR secondaire pour les services.POD_CIDR: plage CIDR secondaire des pods.
Lorsque vous utilisez ces indicateurs, vous devez vérifier que les plages CIDR ne chevauchent pas les plages de sous-réseaux pour les réseaux de nœuds supplémentaires. Par exemple, les plages des valeurs
SERVICE_CIDR=10.65.0.0/19etPOD_CIDR=10.64.0.0/19ne se chevauchent pas. Pour en savoir plus, consultez Ajouter des plages d'adresses IPv4 de pod.Créez le pool de nœuds. La commande que vous devez exécuter dépend de l'option de consommation que vous utilisez pour votre déploiement. Sélectionnez l'onglet correspondant au modèle de provisionnement de votre option de consommation.
Lié à la réservation
Pour le provisionnement lié à une réservation, exécutez la commande suivante :
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --num-nodes=NUM_NODES \ --reservation-affinity=specific \ --reservation=RESERVATION_NAME/reservationBlocks/BLOCK_NAME \ --additional-node-network network=${GVNIC_NETWORK_PREFIX}-net,subnetwork=${GVNIC_NETWORK_PREFIX}-sub \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-0 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-1 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-2 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-3 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-4 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-5 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-6 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-7Remplacez les éléments suivants :
NODE_POOL_NAME: nom du pool de nœuds.COMPUTE_REGION: région de votre nouveau cluster.CLUSTER_NAME: nom de votre nouveau clusterCOMPUTE_ZONE: zone de votre pool de nœuds.GPU_TYPE: type d'accélérateur GPU :- VM A4 : saisissez
nvidia-b200. - VM A3 Ultra : saisissez
nvidia-h200-141gb.
- VM A4 : saisissez
AMOUNT: nombre de GPU à associer aux nœuds du pool de nœuds. Par exemple, pour les VMa4-highgpu-8geta3-ultragpu-8g, le nombre de GPU est de8.DRIVER_VERSION: version du pilote NVIDIA à installer. Elle peut être l'une des valeurs suivantes :default,latestoudisabled.MACHINE_TYPE: type de machine Compute Engine pour les nœuds. Par exemple, utiliseza4-highgpu-8gpour les VM A4 eta3-ultragpu-8gpour les VM A3 Ultra.MACHINE_TYPE: type de machine Compute Engine pour les nœuds. Par exemple, utiliseza4-highgpu-8gpour les VM A4 eta3-ultragpu-8gpour les VM A3 Ultra.NUM_NODES: nombre de nœuds du pool de nœuds. Pour flex-start, cette valeur doit être définie sur0.RESERVATION_NAME: nom de votre réservation. Pour trouver cette valeur, consultez Afficher les demandes de réservations futures.BLOCK_NAME: nom d'un bloc spécifique dans la réservation. Pour trouver cette valeur, consultez Afficher les demandes de réservations futures.
Démarrage flexible
Pour le provisionnement à démarrage flexible, exécutez la commande suivante :
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --num-nodes=NUM_NODES \ --flex-start --num-nodes=0 --enable-autoscaling \ --total-max-nodes TOTAL_MAX_NODES \ --no-enable-autorepair --location-policy=ANY \ --reservation-affinity=none \ [--enable-queued-provisioning \] --additional-node-network network=${GVNIC_NETWORK_PREFIX}-net,subnetwork=${GVNIC_NETWORK_PREFIX}-sub \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-0 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-1 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-2 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-3 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-4 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-5 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-6 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-7Remplacez les éléments suivants :
NODE_POOL_NAME: nom du pool de nœuds.COMPUTE_REGION: région de votre nouveau cluster.CLUSTER_NAME: nom de votre nouveau clusterCOMPUTE_ZONE: zone de votre pool de nœuds.GPU_TYPE: type d'accélérateur GPU :- VM A4 : saisissez
nvidia-b200. - VM A3 Ultra : saisissez
nvidia-h200-141gb.
- VM A4 : saisissez
AMOUNT: nombre de GPU à associer aux nœuds du pool de nœuds. Par exemple, pour les VMa4-highgpu-8geta3-ultragpu-8g, le nombre de GPU est de8.DRIVER_VERSION: version du pilote NVIDIA à installer. Elle peut être l'une des valeurs suivantes :default,latestoudisabled.MACHINE_TYPE: type de machine Compute Engine pour les nœuds. Par exemple, utiliseza4-highgpu-8gpour les VM A4 eta3-ultragpu-8gpour les VM A3 Ultra.MACHINE_TYPE: type de machine Compute Engine pour les nœuds. Par exemple, utiliseza4-highgpu-8gpour les VM A4 eta3-ultragpu-8gpour les VM A3 Ultra.NUM_NODES: nombre de nœuds du pool de nœuds. Pour flex-start, cette valeur doit être définie sur0.TOTAL_MAX_NODES: nombre maximal de nœuds pour effectuer le scaling automatique du pool de nœuds entier.
Si vous souhaitez utiliser flex-start avec le provisionnement en file d'attente, incluez l'indicateur
--enable-queued-provisioning.Pour en savoir plus sur l'utilisation du démarrage flexible, consultez Exécuter des charges de travail à grande échelle avec le démarrage flexible et le provisionnement en file d'attente.
Connectez-vous à votre cluster pour pouvoir exécuter les commandes
kubectldans les sections suivantes :gcloud container clusters get-credentials CLUSTER_NAME --location=COMPUTE_REGIONRemplacez les éléments suivants :
CLUSTER_NAME: nom du clusterCOMPUTE_REGION: nom de la région de calcul.
Pour en savoir plus, consultez Installer kubectl et configurer l'accès au cluster.
Créer les objets réseau GKE
Les réseaux VPC créés dans la section précédente doivent être configurés à l'aide d'ensembles de paramètres réseau GKE. Plus précisément, la deuxième carte d'interface réseau Titanium (gVNIC) du processeur doit être configurée en mode NetDevice, et chacune des huit cartes d'interface réseau CX-7 RDMA doit être configurée en mode RDMA.
Cette commande utilise les noms suivants :
- Le VPC de la carte d'interface réseau (gVNIC) Titanium du processeur est nommé
${GVNIC_NETWORK_PREFIX}-netavec le sous-réseau${GVNIC_NETWORK_PREFIX}-sub. - Le VPC des cartes d'interface réseau RDMA CX-7 est nommé
${RDMA_NETWORK_PREFIX}-netavec des sous-réseaux nommés${RDMA_NETWORK_PREFIX}-sub-[0…7].
Créez les objets réseau GKE en exécutant la commande suivante :
kubectl apply -f - <<EOF
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: gvnic-1
spec:
vpc: ${GVNIC_NETWORK_PREFIX}-net
vpcSubnet: ${GVNIC_NETWORK_PREFIX}-sub
deviceMode: NetDevice
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: gvnic-1
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: gvnic-1
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-0
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-0
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-0
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-0
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-1
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-1
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-1
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-1
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-2
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-2
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-2
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-2
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-3
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-3
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-3
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-3
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-4
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-4
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-4
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-4
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-5
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-5
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-5
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-5
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-6
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-6
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-6
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-6
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-7
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-7
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-7
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-7
EOF
Installer le binaire RDMA et configurer NCCL
Appliquez le DaemonSet suivant pour installer les binaires RDMA et la bibliothèque NCCL sur chaque nœud. Sur chaque VM sous-jacente, les binaires RDMA sont installés dans le répertoire /home/kubernetes/bin/gib et la bibliothèque NCCL dans le répertoire /home/kubernetes/bin/nvidia/lib64.
Autopilot
Pour le mode GKE Autopilot, exécutez la commande suivante :
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/refs/heads/master/gpudirect-rdma/nccl-rdma-installer-autopilot.yaml
Standard
Pour le mode Standard de GKE, exécutez la commande suivante :
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/refs/heads/master/gpudirect-rdma/nccl-rdma-installer.yaml
Exécuter des tests NCCL
Pour valider la fonctionnalité du cluster provisionné, vous pouvez exécuter un test NCCL. Pour obtenir des instructions, consultez Déployer et exécuter un test NCCL.
Configurer vos fichiers manifestes de pods pour GPUDirect RDMA
Pour exécuter vos charges de travail à l'aide de GPUDirect RDMA, configurez vos fichiers manifestes de pod en procédant comme suit :
Ajoutez les annotations suivantes aux métadonnées du pod.
Autopilot
Utilisez l'annotation suivante pour le mode GKE Autopilot :
metadata: annotations: networking.gke.io/default-interface: 'eth0' networking.gke.io/interfaces: | [ {"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth1","network":"gvnic-1"}, {"interfaceName":"eth2","network":"rdma-0"}, {"interfaceName":"eth3","network":"rdma-1"}, {"interfaceName":"eth4","network":"rdma-2"}, {"interfaceName":"eth5","network":"rdma-3"}, {"interfaceName":"eth6","network":"rdma-4"}, {"interfaceName":"eth7","network":"rdma-5"}, {"interfaceName":"eth8","network":"rdma-6"}, {"interfaceName":"eth9","network":"rdma-7"} ]Standard
L'annotation suivante pour le mode GKE Standard n'inclut pas de spécification
gvnic-1, mais vous pouvez l'ajouter si vos charges de travail l'exigent.Utilisez l'annotation suivante pour le mode GKE Standard :
metadata: annotations: networking.gke.io/default-interface: 'eth0' networking.gke.io/interfaces: | [ {"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth2","network":"rdma-0"}, {"interfaceName":"eth3","network":"rdma-1"}, {"interfaceName":"eth4","network":"rdma-2"}, {"interfaceName":"eth5","network":"rdma-3"}, {"interfaceName":"eth6","network":"rdma-4"}, {"interfaceName":"eth7","network":"rdma-5"}, {"interfaceName":"eth8","network":"rdma-6"}, {"interfaceName":"eth9","network":"rdma-7"} ]Spécifiez le type de GPU choisi et la réservation spécifique à l'aide de sélecteurs de nœuds :
spec: nodeSelector: cloud.google.com/gke-accelerator: ACCELERATOR cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-affinity: "specific"Remplacez les éléments suivants :
ACCELERATOR: accélérateur que vous avez réservé dans la réservation de capacité Compute Engine. Vous devez utiliser l'une des valeurs suivantes :nvidia-b200: NVIDIA B200 (180 Go) pour les VM A4nvidia-h200-141gb: NVIDIA H200 (141 Go) pour les VM A3 Ultra
RESERVATION_NAME: nom de la réservation de capacité Compute Engine.
Pour consommer des réservations partagées, ou des blocs et sous-blocs spécifiques de réservations, consultez les sections correspondantes dans Consommer des ressources de chemin d'accès zonales réservées.
Ajoutez les volumes suivants à la spécification de pod :
spec: volumes: - name: library-dir-host hostPath: path: /home/kubernetes/bin/nvidia - name: gib hostPath: path: /home/kubernetes/bin/gibAjoutez les installations de volume, les variables d'environnement et les ressources suivantes au conteneur qui demande des GPU. Le conteneur de charge de travail doit demander les huit GPU :
Autopilot
Pour le mode GKE Autopilot, configurez les ressources suivantes :
containers: - name: my-container volumeMounts: - name: library-dir-host mountPath: /usr/local/nvidia readOnly: true - name: gib mountPath: /usr/local/gib readOnly: true env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64 resources: limits: nvidia.com/gpu: 8Standard
Pour le mode GKE Standard, configurez les ressources suivantes :
containers: - name: my-container volumeMounts: - name: library-dir-host mountPath: /usr/local/nvidia - name: gib mountPath: /usr/local/gib env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64 resources: limits: nvidia.com/gpu: 8Définissez toutes les variables d'environnement requises pour configurer NCCL à l'aide du script shell suivant à partir du conteneur de charge de travail :
source /usr/local/gib/scripts/set_nccl_env.sh
Les onglets suivants incluent des exemples de fichiers manifestes de pods complétés.
Autopilot
Pour le mode Autopilot de GKE, un fichier manifeste de pod terminé doit ressembler à ce qui suit :
apiVersion: apps/v1
kind: Pod
metadata:
name: my-pod
labels:
k8s-app: my-pod
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"gvnic-1"},
{"interfaceName":"eth2","network":"rdma-0"},
{"interfaceName":"eth3","network":"rdma-1"},
{"interfaceName":"eth4","network":"rdma-2"},
{"interfaceName":"eth5","network":"rdma-3"},
{"interfaceName":"eth6","network":"rdma-4"},
{"interfaceName":"eth7","network":"rdma-5"},
{"interfaceName":"eth8","network":"rdma-6"},
{"interfaceName":"eth9","network":"rdma-7"}
]
spec:
...
volumes:
- name: library-dir-host
hostPath:
path: /home/kubernetes/bin/nvidia
- name: gib
hostPath:
path: /home/kubernetes/bin/gib
containers:
- name: my-container
volumeMounts:
- name: library-dir-host
mountPath: /usr/local/nvidia
readOnly: true
- name: gib
mountPath: /usr/local/gib
readOnly: true
env:
- name: LD_LIBRARY_PATH
value: /usr/local/nvidia/lib64
resources:
limits:
nvidia.com/gpu: 8
...
Standard
Pour le mode Standard de GKE, un fichier manifeste de pod terminé doit ressembler à ce qui suit :
apiVersion: apps/v1
kind: Pod
metadata:
name: my-pod
labels:
k8s-app: my-pod
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth2","network":"rdma-0"},
{"interfaceName":"eth3","network":"rdma-1"},
{"interfaceName":"eth4","network":"rdma-2"},
{"interfaceName":"eth5","network":"rdma-3"},
{"interfaceName":"eth6","network":"rdma-4"},
{"interfaceName":"eth7","network":"rdma-5"},
{"interfaceName":"eth8","network":"rdma-6"},
{"interfaceName":"eth9","network":"rdma-7"}
]
spec:
...
volumes:
- name: library-dir-host
hostPath:
path: /home/kubernetes/bin/nvidia
- name: gib
hostPath:
path: /home/kubernetes/bin/gib
containers:
- name: my-container
volumeMounts:
- name: library-dir-host
mountPath: /usr/local/nvidia
- name: gib
mountPath: /usr/local/gib
env:
- name: LD_LIBRARY_PATH
value: /usr/local/nvidia/lib64
resources:
limits:
nvidia.com/gpu: 8
...
Tester les performances réseau des clusters qui utilisent GPUDirect RDMA
Nous vous recommandons de valider le fonctionnement des clusters provisionnés. Pour ce faire, utilisez les tests NCCL/gIB, qui sont des tests NVIDIA Collective Communications Library (NCCL) optimisés pour l'environnement Google.
Étapes suivantes
- Pour en savoir plus sur la planification des charges de travail sur vos clusters GKE à l'aide de la planification sensible à la topologie (TAS) et de Kueue, consultez Planifier des charges de travail GKE avec la planification sensible à la topologie.
- Pour en savoir plus sur la gestion des événements courants liés aux clusters GKE et aux charges de travail d'IA, consultez Gérer les clusters GKE optimisés pour l'IA.
- Pour savoir comment tester votre environnement afin de vérifier qu'il est correctement configuré et optimisé, consultez Optimiser la mise en réseau des clusters à l'aide de NCCL/gIB.