Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Exemples d'utilisation du partage de GPU

Dernière mise à jour :Sep 25, 2026

Cette rubrique explique comment déployer un fichier YAML pour créer des conteneurs partageant un même GPU. Une fois le fichier déployé, le partage de GPU permet d'isoler la mémoire GPU allouée à chaque conteneur, améliorant ainsi l'utilisation des ressources GPU.

Sommaire

Prérequis

ack-ai-installer et l'outil d'inspection GPU sont installés.

Notes d'utilisation

Pour les nœuds GPU gérés dans les clusters Container Service for Kubernetes (ACK), tenez compte des points suivants lorsque vous demandez et utilisez des ressources GPU pour vos applications.

  • N'exécutez pas directement d'applications gourmandes en ressources GPU sur les nœuds.

  • N'utilisez pas d'outils tels que Docker, Podman ou nerdctl pour créer des conteneurs et leur attribuer des ressources GPU. Par exemple, n'exécutez pas la commande docker run --gpus all ni docker run -e NVIDIA_VISIBLE_DEVICES=all pour lancer des applications gourmandes en GPU.

  • N'ajoutez pas la variable d'environnement NVIDIA_VISIBLE_DEVICES=all ou NVIDIA_VISIBLE_DEVICES=<GPU ID> à la section env du fichier YAML du pod. N'utilisez pas la variable d'environnement NVIDIA_VISIBLE_DEVICES pour demander des ressources GPU aux pods et exécuter des applications gourmandes en GPU.

  • Lors de la création d'images de conteneur, si la variable d'environnement NVIDIA_VISIBLE_DEVICES n'est pas spécifiée dans le fichier YAML du pod, ne définissez pas NVIDIA_VISIBLE_DEVICES=all et n'exécutez pas d'applications gourmandes en GPU.

  • N'ajoutez pas privileged: true à la section securityContext du fichier YAML du pod pour exécuter des applications gourmandes en GPU.

L'utilisation des méthodes précédentes pour demander des ressources GPU à votre application peut entraîner les risques potentiels suivants :

  • Si vous utilisez l'une des méthodes précédentes pour demander des ressources GPU sur un nœud sans spécifier les détails dans le registre des ressources de périphérique de l'ordonnanceur, les informations réelles d'allocation des ressources GPU peuvent différer de celles enregistrées dans ce registre. Dans ce cas, l'ordonnanceur peut toujours planifier certains pods demandant des ressources GPU sur le nœud. Par conséquent, vos applications peuvent entrer en concurrence pour les ressources fournies par le même GPU (par exemple, en demandant des ressources au même GPU), et certaines applications peuvent échouer au démarrage en raison d'un manque de ressources GPU.

  • L'utilisation des méthodes précédentes peut également provoquer d'autres problèmes inconnus, tels que les problèmes signalés par la communauté NVIDIA.

Procédure

  1. Exécutez la commande suivante pour interroger les informations sur le partage de GPU dans votre cluster :

    kubectl inspect cgpu
    NAME                     IPADDRESS    GPU0(Allocated/Total)  GPU1(Allocated/Total)  GPU Memory(GiB)
    cn-shanghai.192.168.0.4  192.168.0.4  0/7                    0/7                    0/14
    ---------------------------------------------------------------------
    Allocated/Total GPU Memory In Cluster:
    0/14 (0%)
    Remarque

    Pour obtenir des informations détaillées sur le partage de GPU, exécutez la commande kubectl inspect cgpu -d.

  2. Déployez un exemple d'application avec le partage de GPU activé et demandez 3 GiB de mémoire GPU pour cette application.

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: gpu-share-sample
    spec:
      parallelism: 1
      template:
        metadata:
          labels:
            app: gpu-share-sample
        spec:
          containers:
          - name: gpu-share-sample
            image: registry.cn-hangzhou.aliyuncs.com/ai-samples/gpushare-sample:tensorflow-1.5
            command:
            - python
            - tensorflow-sample-code/tfjob/docker/mnist/main.py
            - --max_steps=100000
            - --data_dir=tensorflow-sample-code/data
            resources:
              limits:
                # The pod requests 3 GiB of GPU memory in total. 
                aliyun.com/gpu-mem: 3 # Specify the requested amount of GPU memory. 
            workingDir: /root
          restartPolicy: Never
  3. Exécutez la commande suivante pour interroger l'utilisation de la mémoire du GPU :

    kubectl inspect cgpu

    Sortie attendue

    NAME                      IPADDRESS      GPU0(Allocated/Total)  GPU Memory(GiB)
    cn-beijing.192.168.1.105  192.168.1.105  3/14                   3/14
    ---------------------------------------------------------------------
    Allocated/Total GPU Memory In Cluster:
    3/14 (21%)

    La sortie indique que la mémoire GPU totale du nœud cn-beijing.192.168.1.105 est de 14 GiB et que 3 GiB de mémoire GPU sont alloués.

Vérification du résultat

Pour vérifier que l'isolation de la mémoire GPU est activée sur le nœud, suivez les étapes ci-dessous.

  1. Connectez-vous au nœud maître cible.

  2. Exécutez la commande suivante pour afficher les journaux de l'application et confirmer que l'isolation de la mémoire cGPU est activée.

    kubectl logs gpu-share-sample --tail=1

    Sortie attendue :

    2023-08-07 09:08:13.931003: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 2832 MB memory) -> physical GPU (device: 0, name: Tesla T4, pci bus id: 0000:00:07.0, compute capability: 7.5)

    La sortie indique que le conteneur a demandé 2 832 Mo de mémoire GPU.

  3. Exécutez la commande suivante pour vous connecter au conteneur et afficher la quantité totale de mémoire GPU qui lui est allouée.

    kubectl exec -it gpu-share-sample nvidia-smi

    Sortie attendue :

    Mon Aug 7 08:52:18 2023
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 418.87.01    Driver Version: 418.87.01    CUDA Version: 10.1     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |===============================+======================+======================|
    |   0  Tesla T4            On   | 00000000:00:07.0 Off |                    0 |
    | N/A   41C    P0    26W /  70W |   3043MiB /  3231MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

    La sortie indique que la quantité totale de mémoire GPU allouée à ce conteneur est de 3 231 MiB.

  4. Connectez-vous au nœud GPU qui exécute l'exemple d'application et affichez la mémoire GPU totale du nœud.

    nvidia-smi

    Sortie attendue :

    Mon Aug  7 09:18:26 2023 
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 418.87.01    Driver Version: 418.87.01    CUDA Version: 10.1     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |===============================+======================+======================|
    |   0  Tesla T4            On   | 00000000:00:07.0 Off |                    0 |
    | N/A   40C    P0    26W /  70W |   3053MiB / 15079MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    |    0      8796      C   python3                                     3043MiB |
    +-----------------------------------------------------------------------------+
    
                            

    La sortie indique que le nœud hôte dispose d'un total de 15 079 MiB de mémoire GPU, dont 3 053 MiB sont alloués au conteneur.