使用 docker 容器中的 GPU?

新手上路,请多包涵

我正在寻找一种从 docker 容器内使用 GPU 的方法。

容器将执行任意代码,所以我不想使用特权模式。

有小费吗?

从之前的研究中,我了解到 run -v 和/或 LXC cgroup 是可行的方法,但我不确定如何准确地完成

原文由 Regan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 672
2 个回答

写一个更新的答案,因为大多数已经存在的答案现在已经过时了。

早于 Docker 19.03 的版本过去需要 nvidia-docker2--runtime=nvidia 标志。

由于 Docker 19.03 ,您需要安装 nvidia-container-toolkit 包,然后使用 --gpus all 标志。

所以,这里是基础知识,

包安装

根据 Github 上的官方文档 安装 nvidia-container-toolkit 包。

对于基于 Redhat 的操作系统,请执行以下命令集:

 $ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo

$ sudo yum install -y nvidia-container-toolkit
$ sudo systemctl restart docker

对于基于 Debian 的操作系统,执行以下命令集:

 # Add the package repositories
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

$ sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
$ sudo systemctl restart docker

运行带有 GPU 支持的 docker

 docker run --name my_all_gpu_container --gpus all -t nvidia/cuda

请注意,标志 --gpus all 用于将所有可用的 gpus 分配给 docker 容器。

将特定 gpu 分配给 docker 容器(如果您的机器中有多个 GPU 可用)

 docker run --name my_first_gpu_container --gpus device=0 nvidia/cuda

或者

docker run --name my_first_gpu_container --gpus '"device=0"' nvidia/cuda

原文由 Rohit 发布,翻译遵循 CC BY-SA 4.0 许可协议

Regan 的回答很棒,但它有点过时了,因为正确的方法是避免使用 lxc 执行上下文,因为 Docker 从 docker 0.9 开始已将 LXC 作为默认执行上下文。

相反,最好通过 –device 标志告诉 docker 有关 nvidia 设备的信息,并且只使用本机执行上下文而不是 lxc。

环境

这些说明在以下环境中进行了测试:

  • Ubuntu 14.04
  • CUDA 6.5
  • AWS GPU 实例。

在您的主机上安装 nvidia 驱动程序和 cuda

请参阅 运行 Ubuntu 14.04 的 AWS GPU 实例上的 CUDA 6.5 以获取您的主机设置。

安装 Docker

 $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
$ sudo sh -c "echo deb https://get.docker.com/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update && sudo apt-get install lxc-docker

查找您的 nvidia 设备

ls -la /dev | grep nvidia

crw-rw-rw-  1 root root    195,   0 Oct 25 19:37 nvidia0
crw-rw-rw-  1 root root    195, 255 Oct 25 19:37 nvidiactl
crw-rw-rw-  1 root root    251,   0 Oct 25 19:37 nvidia-uvm

运行预装了 nvidia 驱动程序的 Docker 容器

我创建了一个预先安装了 cuda 驱动程序的 docker 映像。如果你想知道这个镜像是如何构建的,可以在 dockerhub 上找到 dockerfile。

您需要自定义此命令以匹配您的 nvidia 设备。这对我有用:

  $ sudo docker run -ti --device /dev/nvidia0:/dev/nvidia0 --device /dev/nvidiactl:/dev/nvidiactl --device /dev/nvidia-uvm:/dev/nvidia-uvm tleyden5iwx/ubuntu-cuda /bin/bash

验证 CUDA 是否正确安装

这应该从您刚刚启动的 docker 容器内部运行。

安装 CUDA 示例:

 $ cd /opt/nvidia_installers
$ ./cuda-samples-linux-6.5.14-18745345.run -noprompt -cudaprefix=/usr/local/cuda-6.5/

构建 deviceQuery 示例:

 $ cd /usr/local/cuda/samples/1_Utilities/deviceQuery
$ make
$ ./deviceQuery

如果一切正常,您应该会看到以下输出:

 deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 6.5, CUDA Runtime Version = 6.5, NumDevs =    1, Device0 = GRID K520
Result = PASS

原文由 tleyden 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题