ubantu16.04平台下docker+cuda+nvidia docker+tensorflow深度学习环境搭建

首先,先说一下我走的弯路。
一开始我的nvidia显卡驱动安装的是官网下载的NVIDIA-Linux-x86_64-390.67.run,即390版本,cuda安装的9.2版本,并且安装好nvidia-docker,结果输入nvidia-docker run --rm nvidia/cuda nvidia-smi出现如下错误:

docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \"process_linux.go:385: running prestart hook 1 caused \\\"error running hook: exit status 1, stdout: , stderr: exec command: [/usr/bin/nvidia-container-cli --load-kmods configure [email protected]/sbin/ldconfig.real --device=all --compute --utility --require=cuda>=9.0 --pid=1820 /var/lib/docker/overlay2/411ceb61ef509e53e1938ce2c997fcf979c54a4b3e9863debcab1a3fa8da67da/merged]\\\\nnvidia-container-cli: initialization error: cuda error: unknown error\\\\n\\\"\"": unknown.
“`
谷歌之后据国外玩家说是版本兼容的问题。于是又重新卸载nvidia驱动和cuda,更换版本重新安装。网上找到有教程是用cuda9.0版本的,于是参考教程走了一遍,下面是我的操作步骤。

1.先卸载已安装的nvidia驱动和cuda

卸载nvidia驱动
sudo ./NVIDIA-Linux-x86_64-390.67.run --uninstall
卸载cuda
sudo apt-get remove cuda
sudo apt-get autoclean

查看安装了哪些cuda相关的库
sudo dpkg -l |grep cuda
删除的已安装的库,要注意版本
sudo dpkg -P cuda-repo-ubuntu1604-9-1-local_9.1.85-1_amd64

2.安装cuda9.0

CUDA9.0下载地址:点此跳转至下载页

ubantu16.04平台下docker+cuda+nvidia docker+tensorflow深度学习环境搭建
进入到安装文件所在目录中,依次执行一下命令:
sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb
sudo apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda

再CUDA完成安装之后,还需要添加环境变量,打开终端,输入下面的命令:
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
如果是64位系统,再输入:
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
如果是32位系统,再输入:
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

上述过程完成了整个的CUDA9.0的安装,可以使用命令nvcc -V查看cuda版本
ubantu16.04平台下docker+cuda+nvidia docker+tensorflow深度学习环境搭建
此时显卡驱动也自动安装好了,为cuda自带的版本。可以通过命令cat /proc/driver/nvidia/version查看显卡驱动版本,也可以使用命令nvidia-smi查看显卡驱动详细信息。如出现下图类似结果说明安装成功。
ubantu16.04平台下docker+cuda+nvidia docker+tensorflow深度学习环境搭建

3.安装docker

若先前有安装docker需要先卸载(若没有安装过则无需执行),执行命令:
sudo apt-get remove docker docker-engine docker.io
Docker的安装有多个方式,这里以最常见的方式为例。首先依次执行以下命令(反斜杠\代表一行,只是换行写更清晰),把docker仓库加进到apt里:
sudo apt-get update

sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo apt-key fingerprint 0EBFCD88

sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

正式安装docker:
sudo apt-get update
sudo apt-get install docker-ce
apt-cache madison docker-ce
sudo docker run hello-world

最后一个命令是验证docker是否安装成功,它会下载并执行hello-world镜像。如果安装正确,应该可以正确执行。

4.安装NVIDIA-Docker

安装完成docker并检查安装正确(能跑出来hello-world)后,如果需要docker容器中有gpu支持,需要再安装NVIDIA-Docker。依次执行命令:
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
上面最后一条命令是检查是否安装成功,安装成功,则会显示关于GPU的信息,类似前面的一个截图:
ubantu16.04平台下docker+cuda+nvidia docker+tensorflow深度学习环境搭建

5.下载使用TensorFlow镜像

根据需要的版本下载tensorflow镜像并开启tensorflow容器:
CPU版本
docker run -it -p 8888:8888 tensorflow/tensorflow
GPU版本
nvidia-docker run -it -p 8888:8888 tensorflow/tensorflow:latest-gpu

执行以上命令的结果类似如下:
ubantu16.04平台下docker+cuda+nvidia docker+tensorflow深度学习环境搭建

6.如何使用

打开浏览器,输入http://ip:8888,可以打开docker容器中的Jupyter服务的登陆页面,如下:
ubantu16.04平台下docker+cuda+nvidia docker+tensorflow深度学习环境搭建
输入刚刚token后面的值后,点击login会看到一下画面:
ubantu16.04平台下docker+cuda+nvidia docker+tensorflow深度学习环境搭建
点击第一个1_hello_tensorflow.ipynb,然后可以选择执行所有代码(见下图):
ubantu16.04平台下docker+cuda+nvidia docker+tensorflow深度学习环境搭建
看到有输入输出,说明成功了
ubantu16.04平台下docker+cuda+nvidia docker+tensorflow深度学习环境搭建