当我们clone别人编写的深度学习项目代码之后,都需要给这个项目代码配置一个独立唯一的运行环境。例如人脸识别项目的配置环境是tensorflow-gpu1.12.0+cudn9+cudn7,代码限制必须使用tensorflow-gpu1.12.0版本,用其他版本会报错。而你的硬件机器系统又刚好是ubuntu18.04系统,只能适配cudn10.0以上版本,换言之,你安装运行不了tensorflow-gpu1.12.0。难道你重装个Ubuntu16.04系统吗?显然随着项目的增多,每次都重装系统显得繁琐低能。根据官方的解释,我们可以通过docker在一台机器上创建多个不同版本的tensorflow-gpu容器来解决这个问题。本篇文章会从零开始讲述如何完成这个任务。如果你连docker是什么都不知道,建议先在菜鸟教程里面学习一遍
nvidia-smi
,正确安装了显卡驱动之后如图所示nvcc -V
和cudnncat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
版本,cuda和cudnn的安装可以参考我另外一篇博客,博主电脑的版本分别是cuda10.0和cudnn7.6.5# 关闭docker
sudo systemctl stop docker
# 卸载旧版本:
sudo apt-get purge docker-ce
# 安装新版本
sudo apt update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 查看版本号和来源
apt-cache madison docker-ce
# 启动docker
systemctl start docker
sudo systemctl start docker
sudo systemctl enable docker
# 查看docker版本
sudo docker info
# 安装完毕
# 总共6句shell命令,复制过去一句一句执行就行,前提是你系统是Ubuntu16.04或者是18.04
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
其实可以不修改镜像仓库源,运行下面代码。如果出现如图所示结果,则表示nvidia-docker安装成功。但是因为官方docker镜像源的服务器在国外,下载的过程非常慢。
# 修改镜像源步骤,新建打开文件/ect/docker/daemon.json
vim /ect/docker/daemon.json
# 添加下面语句到文件中,修改为阿里云
{
"registry-mirrors": ["https://y0qd3iq.mirror.aliyuncs.com"]
}
# 重启docker服务
service docker restart
# 查看是否生效
docker info|grep Mirrors -A 1
# 可以看到如下输出,表示成功
WARNING: No swap limit support
Registry Mirrors:
https://y0qd3iq.mirror.aliyuncs.com/
验证是否安装成功
#### Test nvidia-smi with the latest official CUDA image
docker run --gpus all nvidia/cuda:10.0-base nvidia-smi
(这里涉及到的dockers命令自行学习),推荐地址,自己跟着教程试一遍代码就全懂了,我就算在这里解释,相信你也是会有种吃不跑的感觉。
# 拉取并以终端可交互的形式运行容器
docker run --gpus all -it -v $PWD:/tmp -w /tmp tensorflow/tensorflow:1.12.0-gpu-py3 /bin/bash
结果如图:
进行容器,验证tensorflow-gpu是否可以正常运行。参考官网
# 进入容器
docker run --gpus all -it -v $PWD:/tmp -w /tmp tensorflow/tensorflow:1.12.0-gpu-py3 /bin/bash
#coding:utf-8
import tensorflow as tf
print (tf.__version__)
# 单GPU 检测
with tf.device('/device:GPU:0'):
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print(sess.run(c))