Cette page explique comment configurer votre infrastructure Google Kubernetes Engine (GKE) pour prendre en charge l'allocation dynamique des ressources (DRA, Dynamic Resource Allocation). Sur cette page, vous allez créer des clusters pouvant déployer des charges de travail GPU ou TPU, et installer manuellement les pilotes dont vous avez besoin pour activer DRA.
Cette page 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.
À propos de DRA
DRA est une fonctionnalité Kubernetes intégrée qui vous permet de demander, d'allouer et de partager du matériel de manière flexible dans votre cluster entre les pods et les conteneurs. Pour en savoir plus, consultez À propos de l'allocation dynamique des ressources.
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)
Conditions requises
Pour utiliser DRA, votre version de GKE doit être la version 1.32.1-gke.1489001 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 gcloud CLI. Si vous avez déjà installé gcloud CLI, assurez-vous de disposer de la dernière version en exécutant la commande
gcloud components update
.
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.sh
Créer un cluster GKE standard
Créez un cluster en mode Standard qui active les API bêta Kubernetes pour DRA :
gcloud container clusters create CLUSTER_NAME \
--enable-kubernetes-unstable-apis="resource.k8s.io/v1beta1/deviceclasses,resource.k8s.io/v1beta1/resourceclaims,resource.k8s.io/v1beta1/resourceclaimtemplates,resource.k8s.io/v1beta1/resourceslices" \
--cluster-version=GKE_VERSION
Remplacez les éléments suivants :
CLUSTER_NAME
: nom de votre cluster.GKE_VERSION
: version de GKE à utiliser pour le cluster et les nœuds. Doit être 1.32.1-gke.1489001 ou une version ultérieure.
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.
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 du pilote de GPU avec
gpu-driver-version=disabled
. - 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 des instances g2-standard-24 sur Container-Optimized OS avec deux GPU L4.
gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --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=true
Remplacez les éléments suivants :
NODEPOOL_NAME
: nom de votre pool de nœuds.CLUSTER_NAME
: nom du cluster
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
.
Créez un pool de nœuds qui utilise des TPU. L'exemple suivant crée un pool de nœuds TPU Trillium :
gcloud container node-pools create NODEPOOL_NAME \
--cluster CLUSTER_NAME --num-nodes 1 \
--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 cluster
Installer les pilotes DRA
GPU
Extrayez et mettez à jour le graphique Helm contenant le pilote NVIDIA DRA :
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo update
Installez le pilote NVIDIA DRA avec la version 25.3.0-rc.4 :
helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu --version="25.3.0-rc.4" --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
Vous pouvez installer des pilotes DRA pour les TPU à l'aide du chart Helm fourni. Pour accéder aux charts Helm, procédez comme suit :
Clonez le dépôt
ai-on-gke
pour 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.git
Accédez au répertoire contenant les graphiques :
cd common-infra/common/charts
Installez le pilote DRA du TPU :
./tpu-dra-driver/install-tpu-dra-driver.sh
Vérifier que votre infrastructure est prête pour DRA
Vérifiez que le pod du pilote DRA est en cours d'exécution.
GPU
kubectl get pods -n nvidia-dra-driver-gpu
NAME READY STATUS RESTARTS AGE
nvidia-dra-driver-gpu-kubelet-plugin-52cdm 1/1 Running 0 46s
TPU
kubectl get pods -n tpu-dra-driver
NAME READY STATUS RESTARTS AGE
tpu-dra-driver-kubeletplugin-h6m57 1/1 Running 0 30s
Vérifiez que ResourceSlice
liste les appareils que vous avez ajoutés :
kubectl get resourceslices -o yaml
Si vous avez utilisé l'exemple de la section précédente, ResourceSlice
ressemble à ce qui suit, selon le type de matériel que vous avez utilisé :
GPU
L'exemple suivant crée une machine g2-standard-24 avec deux GPU L4.
apiVersion: v1
items:
- apiVersion: resource.k8s.io/v1beta1
kind: ResourceSlice
metadata:
# lines omitted for clarity
spec:
devices:
- basic:
attributes:
architecture:
string: Ada Lovelace
brand:
string: Nvidia
cudaComputeCapability:
version: 8.9.0
cudaDriverVersion:
version: 12.9.0
driverVersion:
version: 575.57.8
index:
int: 0
minor:
int: 0
productName:
string: NVIDIA L4
type:
string: gpu
uuid:
string: GPU-4d403095-4294-6ddd-66fd-cfe5778ef56e
capacity:
memory:
value: 23034Mi
name: gpu-0
- basic:
attributes:
architecture:
string: Ada Lovelace
brand:
string: Nvidia
cudaComputeCapability:
version: 8.9.0
cudaDriverVersion:
version: 12.9.0
driverVersion:
version: 575.57.8
index:
int: 1
minor:
int: 1
productName:
string: NVIDIA L4
type:
string: gpu
uuid:
string: GPU-cc326645-f91d-d013-1c2f-486827c58e50
capacity:
memory:
value: 23034Mi
name: gpu-1
driver: gpu.nvidia.com
nodeName: gke-cluster-gpu-pool-9b10ff37-mf70
pool:
generation: 1
name: gke-cluster-gpu-pool-9b10ff37-mf70
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: ""