Ce document explique comment configurer votre infrastructure Google Kubernetes Engine (GKE) pour prendre en charge l'allocation dynamique des ressources (DRA). La procédure de configuration inclut la création de pools de nœuds utilisant des GPU ou des TPU, ainsi que l'installation de pilotes DRA dans votre cluster. Ce document s'adresse aux administrateurs de plate-forme qui souhaitent réduire la complexité et les frais généraux liés à la configuration de l'infrastructure avec des appareils matériels spécialisés.
Limites
- Le provisionnement automatique des nœuds n'est pas compatible.
- Les clusters Autopilot ne sont pas compatibles avec DRA.
- L'installation automatique des pilotes de GPU n'est pas compatible avec DRA.
- Vous ne pouvez pas utiliser les fonctionnalités de partage de GPU suivantes :
- GPU de partage de temps
- GPU multi-instances
- Multi-process Service (MPS)
- Pour les TPU, vous devez activer les versions
v1beta1etv1beta2des types d'API DRA. Cette limite ne s'applique pas aux GPU, qui peuvent utiliser les versions de l'APIv1.
Conditions requises
Pour utiliser DRA, votre cluster GKE doit exécuter la version 1.34 ou ultérieure.
Vous devez également connaître les exigences et les limites suivantes, en fonction du type de matériel que vous souhaitez utiliser :
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 Google Cloud CLI pour cette tâche, installez puis 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.
Disposer d'un cluster GKE Standard exécutant la version 1.34 ou ultérieure. Vous pouvez également créer un cluster régional.
Si vous n'utilisez pas Cloud Shell, installez la CLI Helm :
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.shPour utiliser DRA pour les TPU, activez les versions
v1beta1etv1beta2des types d'API DRA :gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --enable-kubernetes-unstable-apis="resource.k8s.io/v1beta1/deviceclasses,resource.k8s.io/v1beta1/resourceclaims,resource.k8s.io/v1beta1/resourceclaimtemplates,resource.k8s.io/v1beta1/resourceslices,resource.k8s.io/v1beta2/deviceclasses,resource.k8s.io/v1beta2/resourceclaims,resource.k8s.io/v1beta2/resourceclaimtemplates,resource.k8s.io/v1beta2/resourceslices"
Créer un pool de nœuds GKE avec des GPU ou des TPU
Sur GKE, vous pouvez utiliser DRA avec des GPU et des TPU. Les paramètres de configuration du pool de nœuds (type de machine, type et nombre d'accélérateurs, système d'exploitation des nœuds et emplacements des nœuds, par exemple) dépendent de vos besoins. Pour créer un pool de nœuds compatible avec DRA, sélectionnez l'une des options suivantes :
GPU
Pour utiliser DRA pour les GPU, vous devez effectuer les opérations suivantes lorsque vous créez le pool de nœuds :
- Désactivez l'installation automatique des pilotes de GPU en spécifiant l'option
gpu-driver-version=disableddans l'indicateur--acceleratorlorsque vous configurez des GPU pour un pool de nœuds. - Désactivez le plug-in d'appareil GPU en ajoutant le libellé de nœud
gke-no-default-nvidia-gpu-device-plugin=true. - Laissez le DaemonSet du pilote DRA s'exécuter sur les nœuds en ajoutant le libellé de nœud
nvidia.com/gpu.present=true.
Pour créer un pool de nœuds GPU pour DRA, procédez comme suit :
Créez un pool de nœuds avec le matériel requis. L'exemple suivant crée un pool de nœuds comportant une instance
g2-standard-24sur Container-Optimized OS avec deux GPU L4.gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --machine-type "g2-standard-24" \ --accelerator "type=nvidia-l4,count=2,gpu-driver-version=disabled" \ --num-nodes "1" \ --node-labels=gke-no-default-nvidia-gpu-device-plugin=true,nvidia.com/gpu.present=trueRemplacez les éléments suivants :
NODEPOOL_NAME: nom de votre pool de nœuds.CLUSTER_NAME: nom du clusterCONTROL_PLANE_LOCATION: région ou zone du plan de contrôle du cluster, par exempleus-central1ouus-central1-a.
Installez manuellement les pilotes sur vos nœuds Container-Optimized OS ou Ubuntu. Pour obtenir des instructions détaillées, consultez la page Installer manuellement les pilotes de GPU NVIDIA.
TPU
Pour utiliser DRA pour les TPU, vous devez désactiver le plug-in de périphérique TPU en ajoutant le libellé de nœud gke-no-default-tpu-device-plugin=true. L'exemple suivant crée un pool de nœuds TPU Trillium avec la compatibilité DRA :
gcloud container node-pools create NODEPOOL_NAME \
--cluster CLUSTER_NAME --num-nodes 1 \
--location=CONTROL_PLANE_LOCATION \
--node-labels "gke-no-default-tpu-device-plugin=true,gke-no-default-tpu-dra-plugin=true" \
--machine-type=ct6e-standard-8t
Remplacez les éléments suivants :
NODEPOOL_NAME: nom de votre pool de nœuds.CLUSTER_NAME: nom du clusterCONTROL_PLANE_LOCATION: région ou zone du plan de contrôle du cluster, par exempleus-central1ouus-central1-a.
Installer les pilotes DRA
GPU
Extrayez et mettez à jour le chart Helm qui contient le pilote NVIDIA DRA :
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo updateInstallez le pilote NVIDIA DRA avec la version
25.3.2:helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --version="25.3.2" --create-namespace --namespace=nvidia-dra-driver-gpu \ --set nvidiaDriverRoot="/home/kubernetes/bin/nvidia/" \ --set gpuResourcesEnabledOverride=true \ --set resources.computeDomains.enabled=false \ --set kubeletPlugin.priorityClassName="" \ --set 'kubeletPlugin.tolerations[0].key=nvidia.com/gpu' \ --set 'kubeletPlugin.tolerations[0].operator=Exists' \ --set 'kubeletPlugin.tolerations[0].effect=NoSchedule'Pour les nœuds Ubuntu, utilisez le chemin d'accès au répertoire
nvidiaDriverRoot="/opt/nvidia".
TPU
Clonez le dépôt
ai-on-gkepour accéder aux graphiques Helm contenant les pilotes DRA pour les GPU et les TPU :git clone https://github.com/ai-on-gke/common-infra.gitAccédez au répertoire qui contient les graphiques :
cd common-infra/common/chartsInstallez le pilote DRA TPU :
./tpu-dra-driver/install-tpu-dra-driver.sh
Vérifier que votre infrastructure est prête pour DRA
Pour vérifier que vos pods de pilote DRA sont en cours d'exécution, sélectionnez l'une des options suivantes :
GPU
kubectl get pods -n nvidia-dra-driver-gpuLe résultat ressemble à ce qui suit :
NAME READY STATUS RESTARTS AGE nvidia-dra-driver-gpu-kubelet-plugin-52cdm 1/1 Running 0 46sTPU
kubectl get pods -n tpu-dra-driverLe résultat ressemble à ce qui suit :
NAME READY STATUS RESTARTS AGE tpu-dra-driver-kubeletplugin-h6m57 1/1 Running 0 30sVérifiez que
ResourceSliceliste les appareils que vous avez ajoutés :kubectl get resourceslices -o yamlSi vous avez utilisé l'exemple de la section précédente, le résultat est semblable à ce qui suit, selon que vous avez configuré des GPU ou des TPU :
GPU
apiVersion: v1 items: - apiVersion: resource.k8s.io/v1 kind: ResourceSlice metadata: # Multiple lines are omitted here. spec: devices: - attributes: architecture: string: Ada Lovelace brand: string: Nvidia cudaComputeCapability: version: 8.9.0 cudaDriverVersion: version: 13.0.0 driverVersion: version: 580.65.6 index: int: 0 minor: int: 0 pcieBusID: string: "0000:00:03.0" productName: string: NVIDIA L4 resource.kubernetes.io/pcieRoot: string: pci0000:00 type: string: gpu uuid: string: GPU-ccc19e5e-e3cd-f911-65c8-89bcef084e3f capacity: memory: value: 23034Mi name: gpu-0 - attributes: architecture: string: Ada Lovelace brand: string: Nvidia cudaComputeCapability: version: 8.9.0 cudaDriverVersion: version: 13.0.0 driverVersion: version: 580.65.6 index: int: 1 minor: int: 1 pcieBusID: string: "0000:00:04.0" productName: string: NVIDIA L4 resource.kubernetes.io/pcieRoot: string: pci0000:00 type: string: gpu uuid: string: GPU-f783198d-42f9-7cef-9ea1-bb10578df978 capacity: memory: value: 23034Mi name: gpu-1 driver: gpu.nvidia.com nodeName: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm pool: generation: 1 name: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm resourceSliceCount: 1 kind: List metadata: resourceVersion: ""TPU
apiVersion: v1 items: - apiVersion: resource.k8s.io/v1beta1 kind: ResourceSlice metadata: # lines omitted for clarity spec: devices: - basic: attributes: index: int: 0 tpuGen: string: v6e uuid: string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454 name: "0" - basic: attributes: index: int: 1 tpuGen: string: v6e uuid: string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454 name: "1" - basic: attributes: index: int: 2 tpuGen: string: v6e uuid: string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454 name: "2" - basic: attributes: index: int: 3 tpuGen: string: v6e uuid: string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454 name: "3" driver: tpu.google.com nodeName: gke-tpu-b4d4b61b-fwbg pool: generation: 1 name: gke-tpu-b4d4b61b-fwbg resourceSliceCount: 1 kind: List metadata: resourceVersion: ""