web-dev-qa-db-fra.com

Comment spécifier le runtime nvidia à partir de docker-compose.yml?

Je peux exécuter un conteneur tensorflow avec accès au GPU à partir de la ligne de commande avec la commande suivante

$ Sudo docker run --runtime=nvidia --rm gcr.io/tensorflow/tensorflow:latest-gpu

Je voudrais pouvoir exécuter ce conteneur à partir de docker-compose. Est-il possible de spécifier le --runtime drapeau de docker-compose.yml?

25
rissem

Vous devez modifier /etc/docker/daemon.json, en ajoutant la première clé de niveau "default-runtime": "nvidia", redémarrez le démon docker (ex. "Sudo service docker restart"), puis tous les conteneurs de cet hôte s'exécuteront avec nvidia runtime.

Plus d'informations sur daemon.jsonici

Actuellement (août 2018), runtime de conteneur NVIDIA pour Docker ( nvidia-docker2 ) prend en charge Docker Compose .

Oui, utilisez le format Compose 2.3 et ajoutez runtime: nvidia à votre service GPU. Docker Compose doit être la version 1.19.0 ou supérieure.

Exemple docker-compose.yml:

version: '2.3'

services:
  nvsmi:
    image: ubuntu:16.04
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
    command: nvidia-smi

Plus l'exemple du blog NVIDIA utilise Docker Compose pour montrer comment lancer plusieurs conteneurs GPU avec NVIDIA Container Runtime.

25
cedrickchee

Ou mieux: en utilisant systemd et en supposant que le chemin est /usr/libexec/oci/hooks.d/nvidia

Configurer

mkdir -p /etc/systemd/system/docker.service.d/
cat > /etc/systemd/system/docker.service.d/nvidia-containers.conf <<EOF
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -D --add-runtime nvidia=/usr/libexec/oci/hooks.d/nvidia --default-runtime=nvidia
EOF

Redémarrer

systemctl daemon-reload
systemctl restart docker

Démo

Pas besoin de spécifier --runtime=nvidia puisque nous avons défini default-runtime=nvidia dans l'étape de configuration.

docker run --rm gcr.io/tensorflow/tensorflow:latest-gpu

Solution Inspirée de mon tutoriel sur le runtime KATA .

3
Abdennour TOUMI