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 valeurall
, 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). Sicount
est défini surall
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 denvidia-smi
sur l'hôte. Si aucundevice_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 exempledriver: 'nvidia'
options
. Paires clé-valeur représentant les options spécifiques au pilote.
ImportantVous devez définir le champ
capabilities
. Sinon, il retourne une erreur lors du déploiement du service.
count
etdevice_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]