如何从docker-compose.yml指定nvidia运行时?

时间:2017-11-24 02:51:53

标签: docker tensorflow docker-compose tensorflow-gpu nvidia-docker

我可以通过以下命令从命令行运行一个具有访问GPU的tensorflow容器

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

我希望能够从docker-compose运行这个容器。是否可以从--runtime指定docker-compose.yml标志?

3 个答案:

答案 0 :(得分:21)

当前(2018年8月),用于Docker(nvidia-docker2supports Docker Compose的NVIDIA容器运行时。

  

是的,使用Compose格式2.3并将运行时:nvidia添加到您的GPU服务中。 Docker Compose必须为1.19.0或更高版本。

示例docker-compose.yml

version: '2.3'

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

更多example from NVIDIA blog uses Docker Compose,以展示如何使用NVIDIA Container Runtime启动多个GPU容器。

答案 1 :(得分:19)

您应该编辑/etc/docker/daemon.json,添加第一级密钥"default-runtime": "nvidia",重启docker守护程序(例如"sudo service docker restart"),然后该主机上的所有容器都将运行nvidia runtime。

有关daemon.json here

的更多信息

答案 2 :(得分:3)

或更妙的是:使用systemd并假设路径为/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

演示

由于我们在配置步骤中设置了--runtime=nvidia,因此无需指定default-runtime=nvidia

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

从我的tutorial about KATA runtime得到启发的解决方案。