docker一般都是使用基于CPU的应用,而如果是GPU的话,就需要安装特有的硬件环境,比如需要安装nvidia driver。
nvidia-docker是一个可以使用GPU的docker,nvidia-docker是在docker上做了一层封装,通过nvidia-docker-plugin,然后调用到docker上,其最终实现的还是在docker的启动命令上携带一些必要的参数。因此在安装nvidia-docker之前,还是需要安装docker的。
安装
1、首先安装docker
不再赘述,可参考以下链接,也可以自行百度或谷歌
Ubuntu Docker 安装
2、安装nvidia-docker
(1)若安装过nvidia-docker 1.0,首先需要卸载:
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge nvidia-docker
(2)添加第三方库以及更新软件
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
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
(3)安装nvidia-docker 2.0
sudo apt-get install nvidia-docker2
sudo pkill -SIGHUP dockerd
(4)检测是否成功
sudo docker run --runtime=nvidia nvidia/cuda:9.0-devel nvcc --version
如果安装成功,会显示cuda的版本信息:
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176
nvidia-docker1.0和2.0之间的区别:
1.0使用 nvidia-docker 命令启动docker服务,如nvidia-docker run -itd …
2.0使用 docker run --runtime-nvidia 启动docker服务
参考:Docker的CUDA环境配置以及各种深度学习框架的安装及创建镜像
使用
可自己写dockerfile,更简便的方法是直接拉取官方镜像
在拉取cuda镜像时,镜像与本机cuda版本可以不一致,但显卡驱动一定要满足cuda版本
参考官方github的回答
sudo docker run --runtime=nvidia --rm -it nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04
进入docker后,检查是否配置成功的方法:
(1)nvidia-smi查看gpu信息
(2)cat /usr/local/cuda/version.txt 查看cuda版本
(3)cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2 查看cudnn版本
参考:
docker初认知(二)安装nvidia-docker并build cuda+pytorch的image
nvidia-dokcer常见问题总汇
可能出现的问题
1、docker: Error response from daemon: Unknown runtime specified nvidia
参考:https://github.com/NVIDIA/nvidia-docker/issues/838
解决方案1:
restart daemon
sudo systemctl daemon-reload
sudo systemctl restart docker
但对我来说不管用…
解决方案2:
将–runtime=nvidia换成–gpus=all
sudo docker run --gpus=all --rm nvidia/cuda nvidia-smi
解决方案3:
据说是因为没有注册,这个需要自行验证