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
?
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.json
ici
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.
Ou mieux: en utilisant systemd
et en supposant que le chemin est /usr/libexec/oci/hooks.d/nvidia
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
systemctl daemon-reload
systemctl restart docker
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 .