赞
踩
参考问题:
cuda - Using GPU from a docker container? - Stack Overflow
目录
最初的容器中使用显卡,需要指定硬件名。经历了两种方式
1. 使用lxc驱动程序运行docker守护进程,以便能够修改配置并让容器访问显卡设备(非常麻烦,参考链接中最久远的回答)
2. Docker 0.9中放弃了lxc作为默认执行上下文,但是依然需要指定显卡的名字
(1)找到你的显卡设备
- 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
(2)启动容器时,指定显卡设备
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
英伟达公司开发了nvidia-docker,该软件是对docker的包装,使得容器能够看到并使用宿主机的nvidia显卡.
本质上,他们找到了一种方法来避免在容器中安装CUDA/GPU驱动程序,并让它与主机内核模块匹配。
测试:
- # Install nvidia-docker and nvidia-docker-plugin
- wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb
- sudo dpkg -i /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb
-
- # Test nvidia-smi
- nvidia-docker run --rm nvidia/cuda nvidia-smi
指定使用两张卡:
docker run --rm --gpus 2 nvidia/cuda nvidia-smi
更详细得得用法见:User Guide — NVIDIA Cloud Native Technologies documentation
另外要注意nvidia-docker包括nvidia-docker1 和 nvidia-docker2,两者命令有一定差异
Docker 19.03
从Docker 19.03开始,安装好docker之后,只需要使用 --gpus 即可指定容器使用显卡。
所有显卡都对容器可见:
docker run --gpus all --name 容器名 -d -t 镜像id
只有显卡1对容器可见:
docker run --gpus="1" --name 容器名 -d -t 镜像id
如果不指定 --gpus ,运行nvidia-smi 会提示Command not found
注意:
1. 显卡驱动在所有方式中,都要先安装好,容器是不会有显卡驱动的,一台物理机的显卡只对应一个显卡驱动,当显卡驱动安装好后(即使未安装cuda),也可以使用命令nvidia-smi
2. nvidia-smi显示的是显卡驱动对应的cuda版本,nvcc -V 显示的运行是cuda的版本
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。