Ce document explique comment créer un cluster Google Kubernetes Engine (GKE) optimisé pour l'IA qui utilise des instances Compute Engine A4X Max pour prendre en charge vos charges de travail d'IA et de ML.
Les séries A4X Max et A4X vous permettent d'exécuter des clusters d'IA/ML à grande échelle à l'aide du système NVIDIA Multi-Node NVLink (MNNVL), une solution à l'échelle du rack qui permet d'augmenter la puissance et les performances des GPU. Ces machines offrent des fonctionnalités telles que le placement ciblé des charges de travail, la planification tenant compte de la topologie et des contrôles avancés de maintenance des clusters. Pour en savoir plus, consultez Fonctionnalités de gestion des clusters. Avec A4X Max, GKE fournit également une configuration réseau automatisée qui simplifie la configuration des clusters.
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. 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, le réglage précis des modèles, l'inférence de modèles, la diffusion d'applications et les services d'assistance. Pour les charges de travail qui nécessitent de hautes performances, un débit élevé et une faible latence, GPUDirect RDMA réduit le nombre de sauts réseau nécessaires pour transférer des charges utiles vers et depuis les GPU. Cette approche utilise plus efficacement la bande passante réseau disponible. Pour en savoir plus, consultez Piles de mise en réseau des GPU.
Dans ce document, vous allez apprendre à créer un cluster GKE avec la Google Cloud CLI pour configurer votre cluster de manière aussi flexible que possible en fonction des besoins de votre charge de travail. Pour utiliser la gcloud CLI afin de créer des clusters avec d'autres types de machines, consultez les ressources suivantes :
- A4X : créez un cluster GKE personnalisé optimisé par l'IA qui utilise A4X.
- A4 ou A3 Ultra : pour créer un cluster qui utilise A4 ou A3 Ultra, consultez Créer un cluster GKE personnalisé optimisé pour l'IA qui utilise A4 ou A3 Ultra. Vous pouvez utiliser ces séries de machines pour exécuter des charges de travail avec ou sans GPUDirect RDMA.
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 en savoir plus, consultez Créer un cluster GKE optimisé pour l'IA avec la configuration par défaut.
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.
Obtenir de la capacité
Vous pouvez obtenir de la capacité pour les instances de calcul A4X Max en créant une réservation future. Pour en savoir plus sur les réservations futures, consultez la colonne Réservations futures dans AI Hypercomputer du tableau Choisir une option de consommation.
Pour obtenir de la capacité avec une réservation future, consultez la ligne Réservations futures dans AI Hypercomputer du tableau Obtenir de la capacité.
Conditions requises
Les exigences suivantes s'appliquent à un cluster GKE optimisé pour l'IA avec des instances de calcul A4X Max :
Pour A4X Max, vous devez utiliser l'une des versions suivantes :
- Pour la version 1.35 ou ultérieure, utilisez GKE version 1.35.0-gke.2745000 ou ultérieure.
- Pour la version 1.34, utilisez GKE version 1.34.3-gke.1318000 ou ultérieure.
Ces versions permettent de s'assurer qu'A4X Max utilise les éléments suivants :
- R580.95.05, la version minimale du pilote GPU pour A4X Max, qui est activée par défaut.
- Coherent Driver-based Memory Management (CDMM), qui est activé par défaut. NVIDIA recommande aux clusters Kubernetes d'activer ce mode pour résoudre le problème de surdéclaration de la 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 et MNNVL, qui sont recommandés pour permettre aux pools de nœuds A4X Max d'utiliser les fonctionnalités réseau d'A4X Max.
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 secondaires disponibles sur un seul nœud GKE. Plusieurs pods ne peuvent pas partager RDMA sur un même nœud GKE.
Vous devez utiliser le modèle de provisionnement lié à la réservation pour créer des clusters avec A4X Max. Les autres modèles de provisionnement ne sont pas compatibles.
Ces instructions utilisent DRANET pour configurer un cluster GKE optimisé pour l'IA avec A4X Max. Le multiréseau n'est pas compatible avec le type de machine
a4x-maxgpu-4g-metal.
É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 :
- Vérifiez que vous utilisez un emplacement où le type de machine que vous choisissez est disponible. Pour en savoir plus, consultez Disponibilité des accélérateurs.
- Lorsque vous créez des pools de nœuds dans un cluster régional (recommandés pour les charges de travail de production), vous pouvez utiliser l'option
--node-locationspour spécifier les zones de vos nœuds GKE.
- Choisissez une version du pilote :
- La version du pilote peut être l'une des valeurs suivantes :
default: installe la version par défaut du pilote 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 le tableau de la section Installer manuellement les 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 valeurs suivantes :
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.
Nous vous recommandons également d'utiliser une réservation ciblée sur un sous-bloc afin que les instances de calcul soient placées sur un seul sous-bloc dans
BLOCK_NAME. Ajoutez les éléments suivants à la fin du chemin d'accès :/reservationSubBlocks/SUB_BLOCK_NAMERemplacez
SUB_BLOCK_NAMEpar le nom du sous-bloc.
Créer un cluster GKE optimisé pour l'IA qui utilise A4X Max et 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. A4X Max est une plate-forme exaflopique basée sur l'architecture rack NVIDIA GB300 NVL72. Les instances de calcul A4X Max utilisent une architecture réseau hiérarchique multicouche avec une conception alignée sur rails pour optimiser les performances pour différents types de communication. Ce type de machine permet de mettre à l'échelle et de collaborer sur plusieurs GPU en offrant une expérience cloud hautes performances pour les charges de travail d'IA. Pour en savoir plus sur l'architecture réseau d'A4X Max, y compris sur la bande passante réseau et la configuration des cartes d'interface réseau, consultez Type de machine A4X Max (bare metal).
Pour créer un cluster GKE Standard avec A4X Max qui utilise GPUDirect RDMA et MNNVL, suivez les étapes décrites dans les sections suivantes :
- Créer le cluster GKE
- Créer une règle de charge de travail
- Créer un pool de nœuds avec A4X Max
- Configurer les cartes d'interface réseau MRDMA avec
asapd-lite - Installer le pilote CRD et DRA du domaine de calcul NVIDIA
- Configurer le fichier manifeste de votre charge de travail pour le domaine RDMA et IMEX
Ces instructions utilisent des profils de réseau d'accélérateur pour configurer automatiquement les réseaux et sous-réseaux VPC pour vos nœuds A4X Max. Vous pouvez également spécifier explicitement votre réseau VPC et vos sous-réseaux.
Créer le cluster GKE
Créez un cluster GKE Standard :
gcloud container clusters create CLUSTER_NAME \ --enable-dataplane-v2 \ --enable-ip-alias \ --location=COMPUTE_REGION \ --cluster-version=CLUSTER_VERSION \ --no-enable-shielded-nodes [\ --services-ipv4-cidr=SERVICE_CIDR \ --cluster-ipv4-cidr=POD_CIDR \ --addons=GcpFilestoreCsiDriver=ENABLED]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 de ce document.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 indicateurs facultatifs, 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, prenons
SERVICE_CIDR=10.65.0.0/19etPOD_CIDR=10.64.0.0/19. Pour en savoir plus, consultez Ajouter des plages d'adresses IPv4 de pods.
Pour exécuter les commandes
kubectldans les sections suivantes, connectez-vous à votre cluster :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 une règle de charge de travail
Vous devez disposer d'une règle de charge de travail pour créer une partition. Pour en savoir plus, consultez la Règle de charge de travail pour les MIG.
Créez une règle de charge de travail HIGH_THROUGHPUT avec le champ accelerator_topology défini sur 1x72.
gcloud beta compute resource-policies create workload-policy WORKLOAD_POLICY_NAME \
--type HIGH_THROUGHPUT \
--accelerator-topology 1x72 \
--project PROJECT \
--region COMPUTE_REGION
Remplacez les éléments suivants :
WORKLOAD_POLICY_NAME: nom de votre règle de charge de travail.PROJECT: nom de votre projet.COMPUTE_REGION: nom de la région de calcul.
Créer un pool de nœuds avec A4X Max
Créez le fichier de configuration suivant pour préallouer des huge pages avec le pool de nœuds :
cat > node_custom.yaml <<EOF linuxConfig: hugepageConfig: hugepage_size2m: 4096 EOF export NODE_CUSTOM=node_custom.yamlCréez un pool de nœuds A4X Max :
gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=COMPUTE_REGION \ --node-locations=COMPUTE_ZONE \ --num-nodes=NODE_COUNT \ --placement-policy=WORKLOAD_POLICY_NAME \ --machine-type=a4x-maxgpu-4g-metal \ --accelerator=type=nvidia-gb300,count=4,gpu-driver-version=latest \ --system-config-from-file=${NODE_CUSTOM} \ --accelerator-network-profile=auto \ --node-labels=cloud.google.com/gke-networking-dra-driver=true,cloud.google.com/gke-dpv2-unified-cni=cni-migration \ --reservation-affinity=specific \ --reservation=RESERVATION_NAME/reservationBlocks/BLOCK_NAME/reservationSubBlocks/SUB_BLOCK_NAMERemplacez les éléments suivants :
NODE_POOL_NAME: nom du pool de nœuds.CLUSTER_NAME: nom du clusterCOMPUTE_REGION: région de calcul du cluster.COMPUTE_ZONE: zone de votre pool de nœuds.NODE_COUNT: nombre de nœuds pour le pool de nœuds, 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.WORKLOAD_POLICY_NAME: nom de la règle de charge de travail que vous avez créée précédemment.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.
Cette commande crée automatiquement un réseau qui connecte tous les nœuds A4X Max d'une même zone à l'aide du profil de réseau d'accélérateurs
auto. Lorsque vous créez un pool de nœuds avec l'indicateur--accelerator-network-profile=auto, GKE ajoute automatiquement le libellégke.networks.io/accelerator-network-profile: autoaux nœuds. Pour planifier des charges de travail sur ces nœuds, vous devez inclure ce libellé dans le champnodeSelectorde votre charge de travail.
Configurez les cartes d'interface réseau MRDMA avec asapd-lite
Le DaemonSet asapd-lite configure les cartes d'interface réseau MRDMA. Un DaemonSet asapd-lite non opérationnel peut indiquer une absence de connectivité RDMA.
Installez le DaemonSet :
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/refs/heads/master/asapd-lite-installer/asapd-lite-installer-a4x-max-bm-cos.yamlValidez les répliques dans le DaemonSet
asapd-lite:kubectl get daemonset -n kube-system asapd-liteLe résultat ressemble à ce qui suit :
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE asapd-lite 18 18 18 18 18 <none> 5mLe nombre de répliques
READYdoit correspondre au nombre de nœuds créés et opérationnels dans le pool de nœuds.
Installer le pilote CRD et DRA du domaine de calcul NVIDIA
La procédure suivante installe le pilote NVIDIA Compute Domain CRD et DRA pour permettre l'utilisation de MNNVL. Pour en savoir plus, consultez Pilote NVIDIA DRA pour les GPU.
Vérifiez que Helm est installé dans votre environnement de développement. Helm est préinstallé sur Cloud Shell.
Bien qu'aucune version Helm spécifique ne soit requise, vous pouvez utiliser la commande suivante pour vérifier que Helm est bien installé.
helm versionSi le résultat renvoie
Command helm not found, vous pouvez installer la CLI Helm :curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 \ && chmod 700 get_helm.sh \ && ./get_helm.shAjoutez le dépôt Helm NVIDIA :
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo updateCréez un objet
ResourceQuotapour le pilote DRA :export POD_QUOTA=POD_QUOTA kubectl create ns nvidia-dra-driver-gpu kubectl apply -n nvidia-dra-driver-gpu -f - << EOF apiVersion: v1 kind: ResourceQuota metadata: name: nvidia-dra-driver-gpu-quota spec: hard: pods: ${POD_QUOTA} scopeSelector: matchExpressions: - operator: In scopeName: PriorityClass values: - system-node-critical - system-cluster-critical EOFRemplacez
POD_QUOTApar un nombre au moins deux fois supérieur au nombre de nœuds A4X Max dans le cluster, plus 1. Par exemple, vous devez définir la variable sur au moins 37 si votre cluster comporte 18 nœuds A4X Max.Installez le CRD ComputeDomain et le pilote DRA :
helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --set controller.args.v=4 --set kubeletPlugin.args.v=4 \ --version="25.8.0" \ --create-namespace \ --namespace nvidia-dra-driver-gpu \ -f <(cat <<EOF nvidiaDriverRoot: /home/kubernetes/bin/nvidia resources: gpus: enabled: false controller: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: "nvidia.com/gpu" operator: "DoesNotExist" kubeletPlugin: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: cloud.google.com/gke-accelerator operator: In values: - nvidia-gb300 - key: kubernetes.io/arch operator: In values: - arm64 tolerations: - key: nvidia.com/gpu operator: Equal value: present effect: NoSchedule - key: kubernetes.io/arch operator: Equal value: arm64 effect: NoSchedule EOF )
Configurer le fichier manifeste de votre charge de travail pour le domaine RDMA et IMEX
Ajoutez une règle d'affinité de nœuds pour planifier la charge de travail sur les nœuds Arm :
spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/arch operator: In values: - arm64Ajoutez le volume suivant à la spécification de pod :
spec: volumes: - name: library-dir-host hostPath: path: /home/kubernetes/bin/nvidiaAjoutez les installations de volume, la variable d'environnement et la ressource suivantes au conteneur qui demande des GPU. Le conteneur de votre charge de travail doit demander les quatre GPU :
containers: - name: my-container volumeMounts: - name: library-dir-host mountPath: /usr/local/nvidia env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64 resources: limits: nvidia.com/gpu: 4Créez la ressource
ComputeDomainpour la charge de travail :apiVersion: resource.nvidia.com/v1beta1 kind: ComputeDomain metadata: name: a4x-max-compute-domain spec: numNodes: NUM_NODES channel: resourceClaimTemplate: name: a4x-max-compute-domain-channelRemplacez
NUM_NODESpar le nombre de nœuds requis par la charge de travail.Créez un ResourceClaimTemplate pour allouer des ressources réseau à l'aide de DRANET et demandez des appareils RDMA pour votre pod :
apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: all-mrdma spec: spec: devices: requests: - name: req-mrdma exactly: deviceClassName: mrdma.google.com allocationMode: ExactCount count: 8Spécifiez le ResourceClaimTemplate utilisé par le pod :
spec: ... volumes: ... containers: - name: my-container ... resources: limits: nvidia.com/gpu: 4 claims: - name: compute-domain-channel - name: rdma ... resourceClaims: - name: compute-domain-channel resourceClaimTemplateName: a4x-max-compute-domain-channel - name: rdma resourceClaimTemplateName: all-mrdmaAssurez-vous que les bibliothèques userspace et les packages libnccl sont installés dans l'image de conteneur utilisateur :
apt update -y apt install -y curl export DOCA_URL="https://linux.mellanox.com/public/repo/doca/3.1.0/ubuntu22.04/arm64-sbsa/" BASE_URL=$([ "${DOCA_PREPUBLISH:-false}" = "true" ] && echo https://doca-repo-prod.nvidia.com/public/repo/doca || echo https://linux.mellanox.com/public/repo/doca) DOCA_SUFFIX=${DOCA_URL#*public/repo/doca/}; DOCA_URL="$BASE_URL/$DOCA_SUFFIX" curl $BASE_URL/GPG-KEY-Mellanox.pub | gpg --dearmor > /etc/apt/trusted.gpg.d/GPG-KEY-Mellanox.pub echo "deb [signed-by=/etc/apt/trusted.gpg.d/GPG-KEY-Mellanox.pub] $DOCA_URL ./" > /etc/apt/sources.list.d/doca.list apt update apt -y install doca-ofed-userspace # The installed libnccl2 is 2.27.7, to upgrade to 2.28.9 as we recommend apt install --only-upgrade --allow-change-held-packages -y libnccl2 libnccl-dev
Une spécification de pod terminée ressemble à ce qui suit :
apiVersion: resource.nvidia.com/v1beta1
kind: ComputeDomain
metadata:
name: a4x-max-compute-domain
spec:
numNodes: NUM_NODES
channel:
resourceClaimTemplate:
name: a4x-max-compute-domain-channel
---
apiVersion: apps/v1
kind: Pod
metadata:
name: my-pod
labels:
k8s-app: my-pod
spec:
...
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
volumes:
- name: library-dir-host
hostPath:
path: /home/kubernetes/bin/nvidia
hostNetwork: true
containers:
- name: my-container
volumeMounts:
- name: library-dir-host
mountPath: /usr/local/nvidia
env:
- name: LD_LIBRARY_PATH
value: /usr/local/nvidia/lib64
resources:
limits:
nvidia.com/gpu: 4
claims:
- name: compute-domain-channel
- name: rdma
...
resourceClaims:
- name: compute-domain-channel
resourceClaimTemplateName: a4x-max-compute-domain-channel
- name: rdma
resourceClaimTemplateName: all-mrdma
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.
Pour en savoir plus, consultez Exécuter NCCL sur des clusters GKE personnalisés qui utilisent A4X Max.
Étapes suivantes
- Pour savoir comment planifier des charges de travail sur vos clusters GKE à l'aide de TAS et de 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.