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

ris*_*sem 26 docker docker-compose tensorflow nvidia-docker tensorflow-gpu

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

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

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

ced*_*hee 25

目前(2018年8月),Docker的NVIDIA容器运行时(nvidia-docker2)支持Docker Compose.

是的,使用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
Run Code Online (Sandbox Code Playgroud)

来自NVIDIA博客的更多示例使用Docker Compose来展示如何使用NVIDIA Container Runtime启动多个GPU容器.

  • 目前,此选项仅适用于docker-compose v2。有关更多信息,请在此处查看相应的请求请求https://github.com/docker/compose/pull/5405 (2认同)

Gab*_*tti 23

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

更多信息在daemon.json 这里


Abd*_*UMI 5

或者更好:使用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
Run Code Online (Sandbox Code Playgroud)

重新开始

systemctl daemon-reload
systemctl restart docker
Run Code Online (Sandbox Code Playgroud)

演示

不需要指定,--runtime=nvidia因为我们default-runtime=nvidia在配置步骤中设置。

docker run --rm gcr.io/tensorflow/tensorflow:latest-gpu
Run Code Online (Sandbox Code Playgroud)

解决方案灵感来自我关于 KATA 运行时的教程