Déployer des charges de travail de conteneurs GPU

Cette page explique comment déployer des charges de travail de conteneurs GPU sur la SKU Google Distributed Cloud (GDC) Sandbox AI Optimized.

Déployer des charges de travail de conteneurs GPU

Le SKU GDC Sandbox AI Optimized inclut quatre GPU NVIDIA H100 80 Go HBM3 dans le cluster org-infra. Ces GPU sont accessibles à l'aide du nom de ressource nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3. Cette section explique comment mettre à jour la configuration d'un conteneur pour utiliser ces GPU.

Les GPU de la référence GDC Sandbox optimisée pour l'IA sont associés à un projet préconfiguré, sandbox-gpu-project (présent uniquement dans les instances de la référence GDC Sandbox optimisée pour l'IA). Pour utiliser les GPU, vous devez déployer votre conteneur à l'aide de ce projet dans le cluster org-1-infra.

Avant de commencer

  • Pour exécuter des commandes sur le cluster d'infrastructure de l'organisation, assurez-vous de disposer du fichier kubeconfig du cluster org-1-infra, comme décrit dans Utiliser des clusters :

    • Configurez et authentifiez-vous avec la ligne de commande gdcloud.
    • générez le fichier kubeconfig pour le cluster d'infrastructure de l'organisation et attribuez son chemin d'accès à la variable d'environnement KUBECONFIG.
  • Pour exécuter les charges de travail, vous devez disposer du rôle sandbox-gpu-admin. Par défaut, le rôle est attribué à l'utilisateur platform-admin. Vous pouvez attribuer le rôle à d'autres utilisateurs en vous connectant en tant que platform-admin et en exécutant la commande suivante :

    kubectl --kubeconfig ${KUBECONFIG} create rolebinding ${NAME} --role=sandbox-gpu-admin \
    --user=${USER} --namespace=sandbox-gpu-project
    
  • Pour autoriser le trafic réseau vers votre conteneur, vous devez disposer d'une règle de réseau de projet. Pour en savoir plus, consultez Créer une règle de réseau.

Configurer un conteneur pour qu'il utilise des ressources de GPU

  1. Ajoutez les champs .containers.resources.requests et .containers.resources.limits à la spécification de votre conteneur pour demander des GPU pour la charge de travail. Tous les conteneurs du projet sandbox-gpu-project peuvent demander jusqu'à quatre GPU au total pour l'ensemble du projet. L'exemple suivant demande un GPU dans la spécification du conteneur.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: sandbox-gpu-project
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:latest
            resources:
              requests:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
              limits:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
    
  1. Les conteneurs nécessitent également des autorisations supplémentaires pour accéder aux GPU. Pour chaque conteneur qui demande des GPU, ajoutez une .containers.securityContext accordant securityContext.seLinuxOptions de type unconfined_t au conteneur.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: sandbox-gpu-project
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:latest
            resources:
              requests:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
              limits:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
            securityContext:
              seLinuxOptions:
                type: unconfined_t
    
  2. Appliquez votre fichier manifeste de conteneur :

    kubectl apply -f ${CONTAINER_MANIFEST_FILE_PATH} \
        -n sandbox-gpu-project \
        --kubeconfig ${KUBECONFIG}