⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Activer l'accès GPU avec Docker Compose

Les services Compose peuvent définir des réservations de périphériques GPU si l'hôte Docker contient de tels périphériques et que le Daemon Docker est configuré en conséquence. Pour cela, assurez-vous d'installer les prérequis si vous ne l'avez pas déjà fait.

Les exemples dans les sections suivantes se concentrent spécifiquement sur la fourniture d'accès aux périphériques GPU aux conteneurs de service avec Docker Compose. Vous pouvez utiliser soit les commandes docker-compose soit docker compose. Pour plus d'informations, voir Migrer vers Compose V2.

Activer l'accès GPU aux conteneurs de service

Les GPU sont référencés dans un fichier compose.yaml en utilisant l'attribut device de la spécification Compose Deploy, dans vos services qui en ont besoin.

Cela fournit un contrôle plus granulaire sur une réservation GPU car des valeurs personnalisées peuvent être définies pour les propriétés de périphérique suivantes :

  • capabilities. Cette valeur spécifie comme une liste de chaînes (ex. capabilities: [gpu]). Vous devez définir ce champ dans le fichier Compose. Sinon, il retourne une erreur lors du déploiement du service.
  • count. Cette valeur, spécifiée comme un entier ou la valeur all, représente le nombre de périphériques GPU qui doivent être réservés (à condition que l'hôte détienne ce nombre de GPU). Si count est défini sur all ou non spécifié, tous les GPU disponibles sur l'hôte sont utilisés par défaut.
  • device_ids. Cette valeur, spécifiée comme une liste de chaînes, représente les ID de périphériques GPU de l'hôte. Vous pouvez trouver l'ID de périphérique dans la sortie de nvidia-smi sur l'hôte. Si aucun device_ids n'est défini, tous les GPU disponibles sur l'hôte sont utilisés par défaut.
  • driver. Cette valeur est spécifiée comme une chaîne, par exemple driver: 'nvidia'
  • options. Paires clé-valeur représentant les options spécifiques au pilote.
Important

Vous devez définir le champ capabilities. Sinon, il retourne une erreur lors du déploiement du service.

count et device_ids sont mutuellement exclusifs. Vous ne devez définir qu'un seul champ à la fois.

Pour plus d'informations sur ces propriétés, voir la Spécification Compose Deploy.

Exemple d'un fichier Compose pour exécuter un service avec accès à 1 périphérique GPU

services:
  test:
    image: nvidia/cuda:12.9.0-base-ubuntu22.04
    command: nvidia-smi
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

Exécuter avec Docker Compose :

$ docker compose up
Creating network "gpu_default" with the default driver
Creating gpu_test_1 ... done
Attaching to gpu_test_1    
test_1  | +-----------------------------------------------------------------------------+
test_1  | | NVIDIA-SMI 450.80.02    Driver Version: 450.80.02    CUDA Version: 11.1     |
test_1  | |-------------------------------+----------------------+----------------------+
test_1  | | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
test_1  | | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
test_1  | |                               |                      |               MIG M. |
test_1  | |===============================+======================+======================|
test_1  | |   0  Tesla T4            On   | 00000000:00:1E.0 Off |                    0 |
test_1  | | N/A   23C    P8     9W /  70W |      0MiB / 15109MiB |      0%      Default |
test_1  | |                               |                      |                  N/A |
test_1  | +-------------------------------+----------------------+----------------------+
test_1  |                                                                                
test_1  | +-----------------------------------------------------------------------------+
test_1  | | Processes:                                                                  |
test_1  | |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
test_1  | |        ID   ID                                                   Usage      |
test_1  | |=============================================================================|
test_1  | |  No running processes found                                                 |
test_1  | +-----------------------------------------------------------------------------+
gpu_test_1 exited with code 0

Sur les machines hébergeant plusieurs GPU, le champ device_ids peut être défini pour cibler des périphériques GPU spécifiques et count peut être utilisé pour limiter le nombre de périphériques GPU assignés à un conteneur de service.

Vous pouvez utiliser count ou device_ids dans chacune de vos définitions de service. Une erreur est retournée si vous essayez de combiner les deux, spécifiez un ID de périphérique invalide, ou utilisez une valeur de count qui est plus élevée que le nombre de GPU dans votre système.

$ nvidia-smi   
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.80.02    Driver Version: 450.80.02    CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla T4            On   | 00000000:00:1B.0 Off |                    0 |
| N/A   72C    P8    12W /  70W |      0MiB / 15109MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   1  Tesla T4            On   | 00000000:00:1C.0 Off |                    0 |
| N/A   67C    P8    11W /  70W |      0MiB / 15109MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   2  Tesla T4            On   | 00000000:00:1D.0 Off |                    0 |
| N/A   74C    P8    12W /  70W |      0MiB / 15109MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   3  Tesla T4            On   | 00000000:00:1E.0 Off |                    0 |
| N/A   62C    P8    11W /  70W |      0MiB / 15109MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

Accéder à des périphériques spécifiques

Pour permettre l'accès uniquement aux périphériques GPU-0 et GPU-3 :

services:
  test:
    image: tensorflow/tensorflow:latest-gpu
    command: python -c "import tensorflow as tf;tf.test.gpu_device_name()"
    deploy:
      resources:
        reservations:
          devices:
          - driver: nvidia
            device_ids: ['0', '3']
            capabilities: [gpu]