Cette page vous explique comment créer votre propre cluster Google Kubernetes Engine (GKE) optimisé pour l'IA, qui utilise des machines virtuelles (VM) A4X, A4, A3 Ultra, A3 Mega et A3 High (8 GPU) pour prendre en charge vos charges de travail d'IA et de ML.
Les séries de machines A4X, A4, A3 Ultra, A3 Mega et A3 High (8 GPU) 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 afin de répondre aux besoins de votre organisation. Cela inclut le pré-entraînement distribué hautes performances, l'affinage des modèles, l'inférence des modèles, la diffusion d'applications et les services associés. GKE réduit la charge opérationnelle liée à la gestion de plusieurs plates-formes.
Choisir comment créer un cluster GKE optimisé pour l'IA
Les options suivantes pour la création de clusters offrent chacune différents degrés de facilité et de flexibilité dans la configuration des clusters et la planification des charges de travail :
Créez des clusters avec la configuration par défaut pour les ressources de calcul, de stockage et de mise en réseau, et avec GPUDirect RDMA-over-Converged-Ethernet (RoCE) activé :
- Utilisez Cluster Toolkit pour créer rapidement des clusters GKE prêts pour la production.
- Utilisez Accelerated Processing Kit (XPK) pour créer rapidement des clusters GKE pour les tests et les preuves de concept.
Vous pouvez également créer manuellement votre cluster GKE pour personnaliser ou étendre précisément les environnements GKE de production existants. Pour créer manuellement un cluster GKE optimisé pour l'IA, consultez l'une des pages suivantes :
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.
- Vérifiez que vous disposez des autorisations requises pour créer et gérer le cluster GKE et les comptes de service associés :
- Administrateur Kubernetes Engine (
roles/container.admin) - Administrateur de Compute (
roles/compute.admin) - Administrateur de l'espace de stockage (
roles/storage.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 des rôles (
roles/iam.roleAdmin) - Gestionnaire de versions de secrets Secret Manager (
roles/secretmanager.secretVersionManager)
- Administrateur Kubernetes Engine (
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 d'utilisation :
- Les VM A4X ne peuvent pas être provisionnées avec le démarrage flexible.
- 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é. La procédure d'obtention de la capacité diffère pour chaque option de consommation.
Pour en savoir plus sur le processus de l'option de consommation choisie, consultez Présentation de la capacité.
Conditions requises
Les exigences suivantes s'appliquent à un cluster GKE optimisé par l'IA :
Pour A4X, assurez-vous d'utiliser la version 1.33.4-gke.1036000 ou ultérieure de GKE pour la version 1.33 ou ultérieure. Pour la version 1.32, utilisez GKE version 1.32.8-gke.1108000 ou ultérieure. Ces versions garantissent qu'A4X utilise les éléments suivants :
- R580, la version minimale du pilote GPU pour A4X.
- Coherent Driver-based Memory Management (CDMM), qui est activé par défaut. NVIDIA recommande aux clusters Kubernetes d'activer ce mode pour résoudre les problèmes de surdéclaration de mémoire. CDMM permet de gérer la mémoire GPU via le pilote au lieu du système d'exploitation. Cette approche vous aide à éviter la mise en ligne de la mémoire GPU par l'OS et expose la mémoire GPU en tant que nœud NUMA (Non-Uniform Memory Access) à l'OS. Les GPU multi-instances ne sont pas compatibles lorsque CDMM est activé. Pour en savoir plus sur CDMM, consultez Assistance matérielle et logicielle.
- GPUDirect RDMA, qui est recommandé pour permettre aux pools de nœuds A4X d'utiliser les fonctionnalités réseau d'A4X.
Assurez-vous d'utiliser la version minimale du pilote de GPU, en fonction du type de machine :
- A4X : les GPU GB200 des VM A4X nécessitent au minimum la version R580 du pilote GPU. Consultez les exigences concernant les versions mentionnées précédemment.
- 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 exécutant 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 GKE 1.31 en tant que version
latestdu pilote. Pour A3 Ultra, vous devez définirgpu-driver-version=latestavec GKE 1.31. 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.
Pour les pools de nœuds A3 Ultra, vous devez définir le type de disque sur
hyperdisk-balanced.Pour utiliser GPUDirect RDMA, utilisez les versions minimales suivantes en fonction du type de machine :
- A4X : consultez les exigences concernant la version mentionnées précédemment.
- 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.
Pour utiliser GPUDirect RDMA, 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.
Vous devez utiliser le modèle de provisionnement lié à la réservation pour créer des clusters avec A4X. Les autres modèles de provisionnement ne sont pas acceptés.
Créer un cluster
Suivez les instructions ci-dessous pour créer un cluster à l'aide de Cluster Toolkit ou de XPK.
Créer un cluster à l'aide de Cluster Toolkit
Cette section vous guide dans la création du cluster. Elle vous permet de vous assurer que votre projet respecte les bonnes pratiques et répond aux exigences d'un cluster GKE optimisé pour l'IA.
A4X
- Lancez Cloud Shell. Vous pouvez utiliser un autre environnement, mais nous vous recommandons Cloud Shell, car les dépendances sont déjà préinstallées pour Cluster Toolkit. Si vous ne souhaitez pas utiliser Cloud Shell, suivez les instructions pour installer les dépendances afin de préparer un autre environnement.
Clonez Cluster Toolkit à partir du dépôt Git :
cd ~ git clone https://github.com/GoogleCloudPlatform/cluster-toolkit.gitInstallez Cluster Toolkit :
cd cluster-toolkit && git checkout main && makeCréez un bucket Cloud Storage pour stocker l'état du déploiement Terraform :
gcloud storage buckets create gs://BUCKET_NAME \ --default-storage-class=STANDARD \ --project=PROJECT_ID \ --location=COMPUTE_REGION_TERRAFORM_STATE \ --uniform-bucket-level-access gcloud storage buckets update gs://BUCKET_NAME --versioningRemplacez les variables suivantes :
BUCKET_NAME: nom du nouveau bucket Cloud Storage.PROJECT_ID: ID de votre projet Google Cloud .COMPUTE_REGION_TERRAFORM_STATE: région de calcul dans laquelle vous souhaitez stocker l'état du déploiement Terraform.
Dans le plan
examples/gke-a4x/gke-a4x-deployment.yamldu dépôt GitHub, renseignez les paramètres suivants dans les sectionsterraform_backend_defaultsetvarspour qu'ils correspondent aux valeurs spécifiques de votre déploiement :DEPLOYMENT_NAME: nom unique du déploiement, qui doit comporter entre 6 et 30 caractères. Si le nom du déploiement n'est pas unique dans un projet, la création du cluster échoue. La valeur par défaut estgke-a4x.BUCKET_NAME: nom du bucket Cloud Storage que vous avez créé à l'étape précédente.PROJECT_ID: ID de votre projet Google Cloud .COMPUTE_REGION: région de calcul du cluster.COMPUTE_ZONE: zone de calcul pour le pool de nœuds de machines A4X. Notez que cette zone doit correspondre à celle dans laquelle les machines sont disponibles dans votre réservation.NODE_COUNT: nombre de nœuds A4X dans le pool de nœuds de votre cluster, qui doit être inférieur ou égal à 18. Nous vous recommandons d'utiliser 18 nœuds pour obtenir la topologie GPU1x72dans un sous-bloc à l'aide d'un domaine NVLink.IP_ADDRESS/SUFFIX: plage d'adresses IP que vous souhaitez autoriser à se connecter au cluster. Ce bloc CIDR doit inclure l'adresse IP de la machine que vous souhaitez utiliser pour appeler Terraform. Pour en savoir plus, consultez Fonctionnement des réseaux autorisés.Pour le champ
extended_reservation, utilisez l'une des valeurs suivantes, selon que vous souhaitez cibler des blocs spécifiques dans une réservation lors du provisionnement du pool de nœuds :- Pour placer le pool de nœuds n'importe où dans la réservation, indiquez le nom de votre réservation (
RESERVATION_NAME). Pour cibler un bloc spécifique dans votre réservation, utilisez les noms de réservation et de bloc au format suivant :
RESERVATION_NAME/reservationBlocks/BLOCK_NAME
Si vous ne savez pas quels blocs sont disponibles dans votre réservation, consultez Afficher la topologie d'une réservation.
- Pour placer le pool de nœuds n'importe où dans la réservation, indiquez le nom de votre réservation (
Définissez la taille des disque de démarrage pour chaque nœud du système et des pools de nœuds A4X. La taille du disque dont vous avez besoin dépend de votre cas d'utilisation. Par exemple, si vous utilisez le disque comme cache pour réduire la latence de l'extraction répétée d'une image, vous pouvez définir une taille de disque plus grande pour l'adapter à votre framework, modèle ou image de conteneur :
SYSTEM_NODE_POOL_DISK_SIZE_GB: taille du disque de démarrage pour chaque nœud du pool de nœuds système. La taille de disque minimale autorisée est de10. La valeur par défaut est200.A4X_NODE_POOL_DISK_SIZE_GB: taille du disque de démarrage pour chaque nœud du pool de nœuds A4X. La taille de disque minimale autorisée est de10. La valeur par défaut est100.
Pour modifier les paramètres avancés, modifiez le fichier
examples/gke-a4x/gke-a4x.yaml.Vous pouvez également activer le Cluster Health Scanner (CHS) sur le cluster. CHS vérifie l'état de vos clusters de GPU en exécutant des tests pour s'assurer qu'ils sont prêts à exécuter vos charges de travail. Pour activer CHS, apportez les modifications suivantes dans le fichier
examples/gke-a4x/gke-a4x-deployment.yaml:Dans le bloc
vars, définissez le champenable_periodic_health_checkssurtrue.Par défaut, les vérifications de l'état s'exécutent tous les dimanches à minuit (PST). Si vous souhaitez modifier ce paramètre, définissez le champ
health_check_schedulesur une valeur appropriée au format cron dans le blocvars.
Planifier au format Cron :none * * * * * # | | | | | # | | | | day of the week (0-6) (Sunday to Saturday) # | | | month (1-12) # | | day of the month (1-31) # | hour (0-23) # minute (0-59)
Générez des identifiants par défaut de l'application (ADC) pour fournir un accès à Terraform. Si vous utilisez Cloud Shell, vous pouvez exécuter la commande suivante :
gcloud auth application-default loginDéployez le plan pour provisionner l'infrastructure GKE à l'aide des types de machines A4X :
cd ~/cluster-toolkit ./gcluster deploy -d \ examples/gke-a4x/gke-a4x-deployment.yaml \ examples/gke-a4x/gke-a4x.yamlLorsque vous y êtes invité, sélectionnez (A)pply (Appliquer) pour déployer le plan.
- Le plan crée des réseaux VPC, un réseau VPC RDMA GPU, des comptes de service, un cluster et un pool de nœuds.
- Pour prendre en charge le modèle de job
fio-bench-job-templatedans le blueprint, des ressources de bucketsGoogle Cloud , de stockage réseau et de volumes persistants sont créées.
A4
- Lancez Cloud Shell. Vous pouvez utiliser un autre environnement, mais nous vous recommandons Cloud Shell, car les dépendances sont déjà préinstallées pour Cluster Toolkit. Si vous ne souhaitez pas utiliser Cloud Shell, suivez les instructions pour installer les dépendances afin de préparer un autre environnement.
Clonez Cluster Toolkit à partir du dépôt Git :
cd ~ git clone https://github.com/GoogleCloudPlatform/cluster-toolkit.gitInstallez Cluster Toolkit :
cd cluster-toolkit && git checkout main && makeCréez un bucket Cloud Storage pour stocker l'état du déploiement Terraform :
gcloud storage buckets create gs://BUCKET_NAME \ --default-storage-class=STANDARD \ --project=PROJECT_ID \ --location=COMPUTE_REGION_TERRAFORM_STATE \ --uniform-bucket-level-access gcloud storage buckets update gs://BUCKET_NAME --versioningRemplacez les variables suivantes :
BUCKET_NAME: nom du nouveau bucket Cloud Storage.PROJECT_ID: ID de votre projet Google Cloud .COMPUTE_REGION_TERRAFORM_STATE: région de calcul dans laquelle vous souhaitez stocker l'état du déploiement Terraform.
Les fichiers que vous devez modifier pour créer un cluster dépendent 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
Dans le plan
examples/gke-a4/gke-a4-deployment.yamldu dépôt GitHub, renseignez les paramètres suivants dans les sectionsterraform_backend_defaultsetvarspour qu'ils correspondent aux valeurs spécifiques de votre déploiement :DEPLOYMENT_NAME: nom unique du déploiement, qui doit comporter entre 6 et 30 caractères. Si le nom du déploiement n'est pas unique dans un projet, la création du cluster échoue. La valeur par défaut estgke-a4.BUCKET_NAME: nom du bucket Cloud Storage que vous avez créé à l'étape précédente.PROJECT_ID: ID de votre projet Google Cloud .COMPUTE_REGION: région de calcul du cluster.COMPUTE_ZONE: zone de calcul pour le pool de nœuds de machines A4. Notez que cette zone doit correspondre à celle dans laquelle les machines sont disponibles dans votre réservation.NODE_COUNT: nombre de nœuds A4 dans votre cluster.IP_ADDRESS/SUFFIX: plage d'adresses IP autorisées à se connecter au cluster. Ce bloc CIDR doit inclure l'adresse IP de la machine que vous souhaitez utiliser pour appeler Terraform. Pour en savoir plus, consultez Fonctionnement des réseaux autorisés.Pour le champ
reservation, utilisez l'une des valeurs suivantes, selon que vous souhaitez cibler des blocs spécifiques dans une réservation lors du provisionnement du pool de nœuds :- Pour placer le pool de nœuds n'importe où dans la réservation, indiquez le nom de votre réservation (
RESERVATION_NAME). Pour cibler un bloc spécifique dans votre réservation, utilisez les noms de réservation et de bloc au format suivant :
RESERVATION_NAME/reservationBlocks/BLOCK_NAME
Si vous ne savez pas quels blocs sont disponibles dans votre réservation, consultez Afficher la topologie d'une réservation.
- Pour placer le pool de nœuds n'importe où dans la réservation, indiquez le nom de votre réservation (
Définissez la taille des disque de démarrage pour chaque nœud du système et des pools de nœuds A4. La taille du disque dont vous avez besoin dépend de votre cas d'utilisation. Par exemple, si vous utilisez le disque comme cache pour réduire la latence de l'extraction répétée d'une image, vous pouvez définir une taille de disque plus grande pour l'adapter à votre framework, modèle ou image de conteneur :
SYSTEM_NODE_POOL_DISK_SIZE_GB: taille du disque de démarrage pour chaque nœud du pool de nœuds système. La taille de disque minimale autorisée est de10. La valeur par défaut est100.A4_NODE_POOL_DISK_SIZE_GB: taille du disque de démarrage pour chaque nœud du pool de nœuds A4. La taille de disque minimale autorisée est de10. La valeur par défaut est100.
Pour modifier les paramètres avancés, modifiez
examples/gke-a4/gke-a4.yaml.Démarrage flexible
Dans le plan
examples/gke-a4/gke-a4-deployment.yamldu dépôt GitHub, renseignez les paramètres suivants dans les sectionsterraform_backend_defaultsetvarspour qu'ils correspondent aux valeurs spécifiques de votre déploiement :DEPLOYMENT_NAME: nom unique du déploiement, qui doit comporter entre 6 et 30 caractères. Si le nom du déploiement n'est pas unique dans un projet, la création du cluster échoue. La valeur par défaut estgke-a4.BUCKET_NAME: nom du bucket Cloud Storage que vous avez créé à l'étape précédente.PROJECT_ID: ID de votre projet Google Cloud .COMPUTE_REGION: région de calcul du cluster.COMPUTE_ZONE: zone de calcul pour le pool de nœuds de machines A4.- Supprimez
static_node_count. IP_ADDRESS/SUFFIX: plage d'adresses IP autorisées à se connecter au cluster. Ce bloc CIDR doit inclure l'adresse IP de la machine que vous souhaitez utiliser pour appeler Terraform. Pour en savoir plus, consultez Fonctionnement des réseaux autorisés.- Supprimez le champ
reservationet remplacez-le parenable_flex_start: true. Sur la ligne suivante, ajoutezenable_queued_provisioning: truesi vous souhaitez également utiliser le provisionnement mis en file d'attente. Pour en savoir plus, consultez Utiliser des pools de nœuds avec démarrage flexible et provisionnement en file d'attente. Définissez la taille des disque de démarrage pour chaque nœud du système et des pools de nœuds A4. La taille du disque dont vous avez besoin dépend de votre cas d'utilisation. Par exemple, si vous utilisez le disque comme cache pour réduire la latence de l'extraction répétée d'une image, vous pouvez définir une taille de disque plus grande pour l'adapter à votre framework, modèle ou image de conteneur :
SYSTEM_NODE_POOL_DISK_SIZE_GB: taille du disque de démarrage pour chaque nœud du pool de nœuds système. La taille de disque minimale autorisée est de10. La valeur par défaut est100.A4_NODE_POOL_DISK_SIZE_GB: taille du disque de démarrage pour chaque nœud du pool de nœuds A4. La taille de disque minimale autorisée est de10. La valeur par défaut est100.
Dans le plan
examples/gke-a4/gke-a4.yamldu dépôt GitHub, apportez les modifications suivantes :- Dans le bloc
vars, supprimezstatic_node_count. - Dans le bloc
vars, assurez-vous que le numéroversion_prefixest"1.32."ou supérieur. Pour utiliser le démarrage flexible dans GKE, votre cluster doit utiliser la version 1.32.2-gke.1652000 ou ultérieure. - Dans le bloc
vars, remplacez l'intégralité du blocreservation(y compris la lignereservationelle-même) parenable_flex_start: trueet, éventuellement,enable_queued_provisioning: true. - Dans le bloc
vars, si vous n'avez pas besoin de l'approvisionnement mis en file d'attente, supprimez la ligne suivante :kueue_configuration_path: $(ghpc_stage("./kueue-configuration.yaml.tftpl")). - Sous
id: a4-pool, supprimez la ligne suivante :static_node_count: $(vars.static_node_count). Sous
id: a4-pool, supprimez le blocreservation_affinity. Remplacez ce bloc par les lignes suivantes :enable_flex_start: $(vars.enable_flex_start)auto_repair: false- Pour le provisionnement en file d'attente, si vous souhaitez l'activer, ajoutez les lignes supplémentaires suivantes :
enable_queued_provisioning: $(vars.enable_queued_provisioning)autoscaling_total_min_nodes: 0
Sous
id: workload-manager-install, supprimez le bloc suivant :kueue: install: true config_path: $(vars.kueue_configuration_path) config_template_vars: num_gpus: $(a3-ultragpu-pool.static_gpu_count) accelerator_type: $(vars.accelerator_type)Pour le démarrage flexible avec provisionnement en file d'attente, procédez comme suit :
Ajoutez
gpu_nominal_quota: NOMINAL_QUOTAau blocvars. La valeurgpu_nominal_quotaest utilisée pour définir lenominalQuotades GPU dans la spécificationClusterQueue(voir l'étape de définition deClusterQueueci-dessous). Dans cet exemple,ClusterQueuen'accepte les charges de travail que si la somme des demandes de GPU est inférieure ou égale à la valeurNOMINAL_QUOTA. Pour en savoir plus surClusterQueue, consultez la documentation Kueue sur la file d'attente de cluster.Mettez à jour le bloc
kueuecomme suit :kueue: install: true config_path: $(vars.kueue_configuration_path) config_template_vars: num_gpus: $(vars.gpu_nominal_quota)Remplacez le contenu du fichier
kueue-configuration.yaml.tftplpar le code suivant :apiVersion: kueue.x-k8s.io/v1beta1 kind: ResourceFlavor metadata: name: "default-flavor" --- apiVersion: kueue.x-k8s.io/v1beta1 kind: AdmissionCheck metadata: name: dws-prov spec: controllerName: kueue.x-k8s.io/provisioning-request parameters: apiGroup: kueue.x-k8s.io kind: ProvisioningRequestConfig name: dws-config --- apiVersion: kueue.x-k8s.io/v1beta1 kind: ProvisioningRequestConfig metadata: name: dws-config spec: provisioningClassName: queued-provisioning.gke.io managedResources: - nvidia.com/gpu --- apiVersion: kueue.x-k8s.io/v1beta1 kind: ClusterQueue metadata: name: "dws-cluster-queue" spec: namespaceSelector: {} resourceGroups: - coveredResources: ["nvidia.com/gpu"] flavors: - name: "default-flavor" resources: - name: "nvidia.com/gpu" nominalQuota: ${num_gpus} admissionChecks: - dws-prov --- apiVersion: kueue.x-k8s.io/v1beta1 kind: LocalQueue metadata: namespace: "default" name: "dws-local-queue" spec: clusterQueue: "dws-cluster-queue" ---
Sous
id: job-template, remplacez la variablenode_countpar2.
- Dans le bloc
Spot
Dans le plan
examples/gke-a4/gke-a4-deployment.yamldu dépôt GitHub, renseignez les paramètres suivants dans les sectionsterraform_backend_defaultsetvarspour qu'ils correspondent aux valeurs spécifiques de votre déploiement :DEPLOYMENT_NAME: nom unique du déploiement, qui doit comporter entre 6 et 30 caractères. Si le nom du déploiement n'est pas unique dans un projet, la création du cluster échoue. La valeur par défaut estgke-a4.BUCKET_NAME: nom du bucket Cloud Storage que vous avez créé à l'étape précédente.PROJECT_ID: ID de votre projet Google Cloud .COMPUTE_REGION: région de calcul du cluster.COMPUTE_ZONE: zone de calcul pour le pool de nœuds de machines A4.STATIC_NODE_COUNT: nombre de nœuds A4 dans votre cluster.IP_ADDRESS/SUFFIX: plage d'adresses IP autorisées à se connecter au cluster. Ce bloc CIDR doit inclure l'adresse IP de la machine que vous souhaitez utiliser pour appeler Terraform. Pour en savoir plus, consultez Fonctionnement des réseaux autorisés.- Remplacez l'intégralité du bloc
reservation(y compris la lignereservationelle-même) parspot: true. Définissez la taille des disque de démarrage pour chaque nœud du système et des pools de nœuds A4. La taille du disque dont vous avez besoin dépend de votre cas d'utilisation. Par exemple, si vous utilisez le disque comme cache pour réduire la latence de l'extraction répétée d'une image, vous pouvez définir une taille de disque plus grande pour l'adapter à votre framework, modèle ou image de conteneur :
SYSTEM_NODE_POOL_DISK_SIZE_GB: taille du disque de démarrage pour chaque nœud du pool de nœuds système. La taille de disque minimale autorisée est de10. La valeur par défaut est100.A4_NODE_POOL_DISK_SIZE_GB: taille du disque de démarrage pour chaque nœud du pool de nœuds A4. La taille de disque minimale autorisée est de10. La valeur par défaut est100.
Dans le plan
examples/gke-a4/gke-a4.yamldu dépôt GitHub, apportez les modifications suivantes :- Dans le bloc
vars, remplacez l'intégralité du blocreservation(y compris la lignereservationelle-même) parspot: true. Sous
id: a4-pool, supprimez le blocreservation_affinity. Remplacez ce bloc par la ligne suivante :spot: $(vars.spot)
- Dans le bloc
Vous pouvez également activer le Cluster Health Scanner (CHS) sur le cluster. CHS vérifie l'état de vos clusters de GPU en exécutant des tests pour s'assurer qu'ils sont prêts à exécuter vos charges de travail. Pour activer CHS, apportez les modifications suivantes dans le fichier
examples/gke-a4/gke-a4-deployment.yaml:Dans le bloc
vars, définissez le champenable_periodic_health_checkssurtrue.Par défaut, les vérifications de l'état s'exécutent tous les dimanches à minuit (PST). Si vous souhaitez modifier ce paramètre, définissez le champ
health_check_schedulesur une valeur appropriée au format cron dans le blocvars.
Planifier au format Cron :none * * * * * # | | | | | # | | | | day of the week (0-6) (Sunday to Saturday) # | | | month (1-12) # | | day of the month (1-31) # | hour (0-23) # minute (0-59)
Générez des identifiants par défaut de l'application (ADC) pour fournir un accès à Terraform. Si vous utilisez Cloud Shell, vous pouvez exécuter la commande suivante :
gcloud auth application-default loginDéployez le plan pour provisionner l'infrastructure GKE à l'aide des types de machines A4 :
cd ~/cluster-toolkit ./gcluster deploy -d \ examples/gke-a4/gke-a4-deployment.yaml \ examples/gke-a4/gke-a4.yamlLorsque vous y êtes invité, sélectionnez (A)pply (Appliquer) pour déployer le plan.
- Le plan crée des réseaux VPC, un réseau VPC RDMA GPU, des comptes de service, un cluster et un pool de nœuds.
- Pour prendre en charge le modèle de job
fio-bench-job-templatedans le blueprint, des ressources de bucketsGoogle Cloud , de stockage réseau et de volumes persistants sont créées.
A3 Ultra
- Lancez Cloud Shell. Vous pouvez utiliser un autre environnement, mais nous vous recommandons Cloud Shell, car les dépendances sont déjà préinstallées pour Cluster Toolkit. Si vous ne souhaitez pas utiliser Cloud Shell, suivez les instructions pour installer les dépendances afin de préparer un autre environnement.
Clonez Cluster Toolkit à partir du dépôt Git :
cd ~ git clone https://github.com/GoogleCloudPlatform/cluster-toolkit.gitInstallez Cluster Toolkit :
cd cluster-toolkit && git checkout main && makeCréez un bucket Cloud Storage pour stocker l'état du déploiement Terraform :
gcloud storage buckets create gs://BUCKET_NAME \ --default-storage-class=STANDARD \ --project=PROJECT_ID \ --location=COMPUTE_REGION_TERRAFORM_STATE \ --uniform-bucket-level-access gcloud storage buckets update gs://BUCKET_NAME --versioningRemplacez les variables suivantes :
BUCKET_NAME: nom du nouveau bucket Cloud Storage.PROJECT_ID: ID de votre projet Google Cloud .COMPUTE_REGION_TERRAFORM_STATE: région de calcul dans laquelle vous souhaitez stocker l'état du déploiement Terraform.
Les fichiers que vous devez modifier pour créer un cluster dépendent 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
Dans le plan
examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yamldu dépôt GitHub, remplacez les variables suivantes dans les sectionsterraform_backend_defaultsetvarspour qu'elles correspondent aux valeurs spécifiques de votre déploiement :DEPLOYMENT_NAME: nom unique du déploiement, qui doit comporter entre 6 et 30 caractères. Si le nom du déploiement n'est pas unique dans un projet, la création du cluster échoue.BUCKET_NAME: nom du bucket Cloud Storage que vous avez créé à l'étape précédente.PROJECT_ID: ID de votre projet Google Cloud .COMPUTE_REGION: région de calcul du cluster.COMPUTE_ZONE: zone de calcul pour le pool de nœuds de machines A3 Ultra. Notez que cette zone doit correspondre à celle dans laquelle les machines sont disponibles dans votre réservation.NODE_COUNT: nombre de nœuds A3 Ultra dans votre cluster.IP_ADDRESS/SUFFIX: plage d'adresses IP autorisées à se connecter au cluster. Ce bloc CIDR doit inclure l'adresse IP de la machine que vous souhaitez utiliser pour appeler Terraform. Pour en savoir plus, consultez Fonctionnement des réseaux autorisés.Pour le champ
reservation, utilisez l'une des valeurs suivantes, selon que vous souhaitez cibler des blocs spécifiques dans une réservation lors du provisionnement du pool de nœuds :- Pour placer le pool de nœuds n'importe où dans la réservation, indiquez le nom de votre réservation (
RESERVATION_NAME). Pour cibler un bloc spécifique dans votre réservation, utilisez les noms de réservation et de bloc au format suivant :
RESERVATION_NAME/reservationBlocks/BLOCK_NAME
Si vous ne savez pas quels blocs sont disponibles dans votre réservation, consultez Afficher la topologie d'une réservation.
- Pour placer le pool de nœuds n'importe où dans la réservation, indiquez le nom de votre réservation (
Définissez la taille du disque de démarrage pour chaque nœud du système et des pools de nœuds A3 Ultra. La taille du disque dont vous avez besoin dépend de votre cas d'utilisation. Par exemple, si vous utilisez le disque comme cache pour réduire la latence de l'extraction répétée d'une image, vous pouvez définir une taille de disque plus grande pour l'adapter à votre framework, modèle ou image de conteneur :
SYSTEM_NODE_POOL_DISK_SIZE_GB: taille du disque de démarrage pour chaque nœud du pool de nœuds système. La taille de disque minimale autorisée est de10. La valeur par défaut est100.A3ULTRA_NODE_POOL_DISK_SIZE_GB: taille du disque de démarrage pour chaque nœud du pool de nœuds A3 Ultra. La taille de disque minimale autorisée est de10. La valeur par défaut est100.
Pour modifier les paramètres avancés, modifiez
examples/gke-a3-ultragpu/gke-a3-ultragpu.yaml.Démarrage flexible
Dans le plan
examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yamldu dépôt GitHub, remplacez les variables suivantes dans les sectionsterraform_backend_defaultsetvarspour qu'elles correspondent aux valeurs spécifiques de votre déploiement :DEPLOYMENT_NAME: nom unique du déploiement, qui doit comporter entre 6 et 30 caractères. Si le nom du déploiement n'est pas unique dans un projet, la création du cluster échoue.BUCKET_NAME: nom du bucket Cloud Storage que vous avez créé à l'étape précédente.PROJECT_ID: ID de votre projet Google Cloud .COMPUTE_REGION: région de calcul du cluster.COMPUTE_ZONE: zone de calcul pour le pool de nœuds de machines A3 Ultra.- Supprimez
static_node_count. IP_ADDRESS/SUFFIX: plage d'adresses IP autorisées à se connecter au cluster. Ce bloc CIDR doit inclure l'adresse IP de la machine que vous souhaitez utiliser pour appeler Terraform. Pour en savoir plus, consultez Fonctionnement des réseaux autorisés.- Supprimez le champ
reservationet remplacez-le parenable_flex_start: true. Sur la ligne suivante, ajoutezenable_queued_provisioning: truesi vous souhaitez également utiliser le provisionnement mis en file d'attente. Pour en savoir plus, consultez Utiliser des pools de nœuds avec démarrage flexible et provisionnement en file d'attente. Définissez la taille du disque de démarrage pour chaque nœud du système et des pools de nœuds A3 Ultra. La taille du disque dont vous avez besoin dépend de votre cas d'utilisation. Par exemple, si vous utilisez le disque comme cache pour réduire la latence de l'extraction répétée d'une image, vous pouvez définir une taille de disque plus grande pour l'adapter à votre framework, modèle ou image de conteneur :
SYSTEM_NODE_POOL_DISK_SIZE_GB: taille du disque de démarrage pour chaque nœud du pool de nœuds système. La taille de disque minimale autorisée est de10. La valeur par défaut est100.A3ULTRA_NODE_POOL_DISK_SIZE_GB: taille du disque de démarrage pour chaque nœud du pool de nœuds A3 Ultra. La taille de disque minimale autorisée est de10. La valeur par défaut est100.
Dans le plan
examples/gke-a3-ultragpu/gke-a3-ultragpu.yamldu dépôt GitHub, apportez les modifications suivantes :- Dans le bloc
vars, supprimezstatic_node_count. - Dans le bloc
vars, remplacez le nombreversion_prefixpar"1.32."ou une valeur supérieure. Pour utiliser le démarrage flexible dans GKE, votre cluster doit utiliser la version 1.32.2-gke.1652000 ou ultérieure. - Dans le bloc
vars, remplacez l'intégralité du blocreservation(y compris la lignereservationelle-même) parenable_flex_start: trueet, éventuellement,enable_queued_provisioning: true. - Dans le bloc
vars, supprimez la ligne suivante :kueue_configuration_path: $(ghpc_stage("./kueue-configuration.yaml.tftpl")). - Sous
id: a3-ultragpu-pool, supprimez la ligne suivante :static_node_count: $(vars.static_node_count). Sous
id: a3-ultragpu-pool, supprimez le blocreservation_affinity. Remplacez ce bloc par les lignes suivantes :enable_flex_start: $(vars.enable_flex_start)auto_repair: false- Pour le provisionnement en file d'attente, si vous souhaitez l'activer, ajoutez les lignes supplémentaires suivantes :
enable_queued_provisioning: $(vars.enable_queued_provisioning)autoscaling_total_min_nodes: 0
Sous
id: workload-manager-install, supprimez le bloc suivant :config_path: $(vars.kueue_configuration_path) config_template_vars: num_gpus: $(a4-pool.static_gpu_count) accelerator_type: $(vars.accelerator_type)Pour le démarrage flexible avec provisionnement en file d'attente, suivez ces trois étapes :
Ajoutez
gpu_nominal_quota: NOMINAL_QUOTAau blocvars. La valeurgpu_nominal_quotaest utilisée pour définir lenominalQuotades GPU dans la spécificationClusterQueue. Dans cet exemple,ClusterQueuen'accepte les charges de travail que si la somme des requêtes GPU est inférieure ou égale à la valeurNOMINAL_QUOTA. Pour en savoir plus surClusterQueue, consultez la documentation Kueue sur la file d'attente de cluster.Mettez à jour le bloc
kueuecomme suit :kueue: install: true config_path: $(vars.kueue_configuration_path) config_template_vars: num_gpus: $(vars.gpu_nominal_quota)Remplacez le contenu du fichier
kueue-configuration.yaml.tftplpar le code suivant :apiVersion: kueue.x-k8s.io/v1beta1 kind: ResourceFlavor metadata: name: "default-flavor" --- apiVersion: kueue.x-k8s.io/v1beta1 kind: AdmissionCheck metadata: name: dws-prov spec: controllerName: kueue.x-k8s.io/provisioning-request parameters: apiGroup: kueue.x-k8s.io kind: ProvisioningRequestConfig name: dws-config --- apiVersion: kueue.x-k8s.io/v1beta1 kind: ProvisioningRequestConfig metadata: name: dws-config spec: provisioningClassName: queued-provisioning.gke.io managedResources: - nvidia.com/gpu --- apiVersion: kueue.x-k8s.io/v1beta1 kind: ClusterQueue metadata: name: "dws-cluster-queue" spec: namespaceSelector: {} resourceGroups: - coveredResources: ["nvidia.com/gpu"] flavors: - name: "default-flavor" resources: - name: "nvidia.com/gpu" nominalQuota: ${num_gpus} admissionChecks: - dws-prov --- apiVersion: kueue.x-k8s.io/v1beta1 kind: LocalQueue metadata: namespace: "default" name: "dws-local-queue" spec: clusterQueue: "dws-cluster-queue" ---
Dans le champ
id: job-template, remplacez la variablenode_countpar2.
- Dans le bloc
Spot
Dans le plan
examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yamldu dépôt GitHub, renseignez les paramètres suivants dans les sectionsterraform_backend_defaultsetvarspour qu'ils correspondent aux valeurs spécifiques de votre déploiement :DEPLOYMENT_NAME: nom unique du déploiement, qui doit comporter entre 6 et 30 caractères. Si le nom du déploiement n'est pas unique dans un projet, la création du cluster échoue.BUCKET_NAME: nom du bucket Cloud Storage que vous avez créé à l'étape précédente.PROJECT_ID: ID de votre projet Google Cloud .COMPUTE_REGION: région de calcul du cluster.COMPUTE_ZONE: zone de calcul pour le pool de nœuds de machines A3 Ultra.STATIC_NODE_COUNT: nombre de nœuds A3 Ultra dans votre cluster.IP_ADDRESS/SUFFIX: plage d'adresses IP autorisées à se connecter au cluster. Ce bloc CIDR doit inclure l'adresse IP de la machine que vous souhaitez utiliser pour appeler Terraform. Pour en savoir plus, consultez Fonctionnement des réseaux autorisés.- Remplacez l'intégralité du bloc
reservation(y compris la lignereservationelle-même) parspot: true. Définissez la taille du disque de démarrage pour chaque nœud du système et des pools de nœuds A3 Ultra. La taille du disque dont vous avez besoin dépend de votre cas d'utilisation. Par exemple, si vous utilisez le disque comme cache pour réduire la latence de l'extraction répétée d'une image, vous pouvez définir une taille de disque plus grande pour l'adapter à votre framework, modèle ou image de conteneur :
SYSTEM_NODE_POOL_DISK_SIZE_GB: taille du disque de démarrage pour chaque nœud du pool de nœuds système. La taille de disque minimale autorisée est de10. La valeur par défaut est100.A3ULTRA_NODE_POOL_DISK_SIZE_GB: taille du disque de démarrage pour chaque nœud du pool de nœuds A3 Ultra. La taille de disque minimale autorisée est de10. La valeur par défaut est100.
Dans le plan
examples/gke-a3-ultragpu/gke-a3-ultragpu.yamldu dépôt GitHub, apportez les modifications suivantes :- Dans le bloc
vars, remplacez l'intégralité du blocreservation(y compris la lignereservationelle-même) parspot: true. Sous
id: a3-ultragpu-pool, supprimez le blocreservation_affinity. Remplacez ce bloc par la ligne suivante :spot: $(vars.spot)
- Dans le bloc
Vous pouvez également activer le Cluster Health Scanner (CHS) sur le cluster. CHS vérifie l'état de vos clusters de GPU en exécutant des tests pour s'assurer qu'ils sont prêts à exécuter vos charges de travail. Pour activer CHS, apportez les modifications suivantes dans le fichier
examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yaml:Dans le bloc
vars, définissez le champenable_periodic_health_checkssurtrue.Par défaut, les vérifications de l'état s'exécutent tous les dimanches à minuit (PST). Si vous souhaitez modifier ce paramètre, définissez le champ
health_check_schedulesur une valeur appropriée au format cron dans le blocvars.
Planifier au format Cron :none * * * * * # | | | | | # | | | | day of the week (0-6) (Sunday to Saturday) # | | | month (1-12) # | | day of the month (1-31) # | hour (0-23) # minute (0-59)
Générez des identifiants par défaut de l'application (ADC) pour fournir l'accès à Terraform. Si vous utilisez Cloud Shell, vous pouvez exécuter la commande suivante :
gcloud auth application-default loginDéployez le plan pour provisionner l'infrastructure GKE à l'aide des types de machines A3 Ultra :
cd ~/cluster-toolkit ./gcluster deploy -d \ examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yaml \ examples/gke-a3-ultragpu/gke-a3-ultragpu.yamlLorsque vous y êtes invité, sélectionnez (A)pply (Appliquer) pour déployer le plan.
- Le plan crée des réseaux VPC, un réseau VPC RDMA GPU, des comptes de service, un cluster et un pool de nœuds.
- Pour prendre en charge le modèle de job
fio-bench-job-templatedans le blueprint, des ressources de bucketsGoogle Cloud , de stockage réseau et de volumes persistants sont créées.
Créer un cluster et exécuter des charges de travail à l'aide de XPK
Le kit de traitement accéléré (XPK) vous permet de provisionner et d'utiliser rapidement des clusters. XPK génère une infrastructure préconfigurée et optimisée pour l'entraînement, idéale lorsque l'exécution de la charge de travail est votre objectif principal.
Créez un cluster et exécutez des charges de travail avec des VM A3 Ultra à l'aide de XPK :
- Installez les outils nécessaires pour répondre aux prérequis XPK.
- Copiez le numéro de version de la dernière version taguée de XPK, par exemple "v0.8.0". Dans la commande suivante, remplacez
XPK_TAGpar le dernier numéro de version XPK. Ouvrez une fenêtre de terminal sur une machine Linux, puis saisissez les commandes suivantes pour cloner XPK à partir du dépôt Git et installer les packages requis :
## Setup virtual environment. VENV_DIR=~/venvp3 python3 -m venv $VENV_DIR source $VENV_DIR/bin/activate ## Clone the repository. git clone --branch XPK_TAG https://github.com/google/xpk.git cd xpk ## Install required packages make install && export PATH=$PATH:$PWD/binCréez un cluster Standard à l'aide de VM A3 Ultra. Vous pouvez provisionner les nœuds du cluster à l'aide de la capacité réservée :
python3 xpk.py cluster create \ --cluster=CLUSTER_NAME \ --device-type=h200-141gb-8 \ --zone=COMPUTE_ZONE \ --project=PROJECT_ID \ --num-nodes=NUM_NODES \ --reservation=RESERVATION_NAMERemplacez les variables suivantes :
CLUSTER_NAME: nom du cluster.COMPUTE_ZONE: zone de calcul pour le pool de nœuds de machines A3 Ultra. Pour utiliser la capacité réservée, assurez-vous d'utiliser la zone dans laquelle vous avez réservé la capacité. En règle générale, nous vous recommandons de choisir une zone proche de l'utilisateur pour minimiser la latence.PROJECT_ID: ID de votre projet Google Cloud .NUM_NODES: nombre de nœuds de calcul dans le pool de nœuds.RESERVATION_NAME: nom de votre réservation.XPK propose des arguments supplémentaires pour la création de clusters, y compris ceux permettant de créer des clusters privés, de créer des Tensorboards Vertex AI et d'utiliser l'autoprovisonnement de nœuds. Pour en savoir plus, consultez le guide de création de clusters pour XPK.
Vérifiez que le cluster a bien été créé :
python3 xpk.py cluster list --zone=COMPUTE_ZONE --project=PROJECT_IDFacultatif : Exécutez une charge de travail pour tester l'environnement du cluster :
python3 xpk.py workload create \ --workload WORKLOAD_NAME --command "echo goodbye" \ --cluster CLUSTER_NAME \ --device-type=h200-141gb-8 \ --num-nodes=WORKLOAD_NUM_NODES \ --zone=COMPUTE_ZONE \ --project=PROJECT_IDRemplacez les variables suivantes :
WORKLOAD_NAME: nom de votre charge de travail.CLUSTER_NAME: nom du cluster.WORKLOAD_NUM_NODES: nombre de nœuds de calcul utilisés pour l'exécution de la charge de travail.COMPUTE_ZONE: zone de calcul pour le pool de nœuds de machines A3 Ultra.PROJECT_ID: ID de votre projet Google Cloud .
Tester les performances du réseau
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.
Exécuter des benchmarks reproductibles
Vous pouvez utiliser des benchmarks de pré-entraînement pour reproduire de grands modèles de machine learning open source sur des VM A4 et A3 Ultra sur GKE.
Chaque recette vous fournit les instructions pour effectuer les tâches suivantes :
- Préparez votre environnement.
- Exécutez le benchmark.
- Analysez les résultats des benchmarks. Cela inclut les résultats des benchmarks et les journaux détaillés pour une analyse plus approfondie.
Pour afficher toutes les recettes disponibles, consultez le dépôt GitHub GPU recipes.
| Modèles | Framework | Recette |
|---|---|---|
| Llama-3.1-70B | MaxText | Charge de travail de 32 nœuds |
| Llama-3.1-70B | NeMo | Charge de travail de 32 nœuds |
| Mixtral-8-7B | NeMo | Charge de travail de 32 nœuds |
Nettoyer les ressources créées par Cluster Toolkit
Pour éviter les frais récurrents pour les ressources utilisées sur cette page, nettoyez les ressources provisionnées par Cluster Toolkit, y compris les réseaux VPC et le cluster GKE :
cd ~/cluster-toolkit
./gcluster destroy CLUSTER_NAME/
Remplacez CLUSTER_NAME par le nom de votre cluster.
Pour les clusters créés avec Cluster Toolkit, le nom du cluster est basé sur DEPLOYMENT_NAME.
Étapes suivantes
- Pour savoir comment planifier des charges de travail sur vos clusters GKE à l'aide de TAS et Kueue, consultez Planifier des charges de travail GKE avec la planification sensible à la topologie.
- Pour savoir comment gérer les é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 Présentation de l'optimisation de la mise en réseau des clusters.