我正在寻找一种从 docker 容器内使用 GPU 的方法。
容器将执行任意代码,所以我不想使用特权模式。
有小费吗?
从之前的研究中,我了解到 run -v
和/或 LXC cgroup
是可行的方法,但我不确定如何准确地完成
原文由 Regan 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在寻找一种从 docker 容器内使用 GPU 的方法。
容器将执行任意代码,所以我不想使用特权模式。
有小费吗?
从之前的研究中,我了解到 run -v
和/或 LXC cgroup
是可行的方法,但我不确定如何准确地完成
原文由 Regan 发布,翻译遵循 CC BY-SA 4.0 许可协议
Regan 的回答很棒,但它有点过时了,因为正确的方法是避免使用 lxc 执行上下文,因为 Docker 从 docker 0.9 开始已将 LXC 作为默认执行上下文。
相反,最好通过 –device 标志告诉 docker 有关 nvidia 设备的信息,并且只使用本机执行上下文而不是 lxc。
这些说明在以下环境中进行了测试:
请参阅 运行 Ubuntu 14.04 的 AWS GPU 实例上的 CUDA 6.5 以获取您的主机设置。
$ 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
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
我创建了一个预先安装了 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
这应该从您刚刚启动的 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 许可协议
2 回答2.4k 阅读✓ 已解决
2 回答795 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答1.4k 阅读
1 回答1.6k 阅读
2 回答1.2k 阅读
1 回答958 阅读
写一个更新的答案,因为大多数已经存在的答案现在已经过时了。
早于
Docker 19.03
的版本过去需要nvidia-docker2
和--runtime=nvidia
标志。由于
Docker 19.03
,您需要安装nvidia-container-toolkit
包,然后使用--gpus all
标志。所以,这里是基础知识,
包安装
根据 Github 上的官方文档 安装
nvidia-container-toolkit
包。对于基于 Redhat 的操作系统,请执行以下命令集:
对于基于 Debian 的操作系统,执行以下命令集:
运行带有 GPU 支持的 docker
请注意,标志
--gpus all
用于将所有可用的 gpus 分配给 docker 容器。将特定 gpu 分配给 docker 容器(如果您的机器中有多个 GPU 可用)
或者