使用docker创建深度学习环境


新装的服务器版本为ubuntu18.04.3,装的cuda版本10.2,发现tf现在并不支持,tf对于cuda支持比较严格具体可以查看 tf支持的cuda版本 cuda的操作系统要求
所以通过docker,省去更换系统的麻烦。
docker部署深度学习环境,是不需要宿主机安装cuda的,只需要宿主机安装nvidia驱动即可。

宿主机更换apt源

sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vim /etc/apt/sources.list

选择合适的源 清华大学开源软件镜像站,复制到上面的文件中。

sudo apt-get update

显卡驱动

这里因为已经安装了就不重复了,目前安装驱动建议使用安装nvidia cuda提供的驱动,因为我们自己选择驱动比较麻烦,通过cuda自己安装合适的驱动。在安装时选择驱动,不选择cuda即可。具体可以百度一下。

安装docker

sudo apt-get 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"
sudo apt-get -y update
apt-cache madison docker-ce
sudo apt-get -y install docker-ce=5:19.03.5~3-0~ubuntu-bionic
sudo docker version

安装nvidia-docker

# Add the package repositories
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 Container Toolkit

docker使用

docker ps -a  # 查看目前的container

docker run --gpus all nvidia/cuda:10.0-base nvidia-smi # 使用所有gpu,测试,第一次运行会拉取cuda10.0base的镜像

docker exec -it cuda1 /bin/bash  # 进入容器
uname -a  # 查看系统版本
exit

卸载宿主机安装的cuda

sudo /usr/local/cuda-10.2/bin/cuda-uninstaller  # 卸载10.2的cuda,不知道主机的cuda是否会有影响,这里先卸载了

会跳出跟安装界面类似的选择框,全选后删除

创建带cuda的容器

选择合适版本的cuda容器 nvidia/cuda

docker pull nvidia/cuda:10.0-cudnn7-runtime-ubuntu18.04 # 拉取合适的镜像 镜像分为三种:base runtime devel

# 创建一个容器 后台运行 需要指定使用gpu  
# 可选 --privileged=true获取使用硬件的权限  --restart=on-failure 设置容器随Docker自动启动
# -v /home/docker-common-dir:/home/common-dir 将宿主机的/home/docker-common-dir映射到容器的/home/common-dir
docker run -dit -p2345:22 --name=cuda1 --gpus all -h=227_VM nvidia/cuda:10.0-cudnn7-runtime-ubuntu18.04 

-p2345:22是将宿主机的2345端口映射到容器的22端口 gpus all选择全部的gpu,可以'"device=1,2"'指定gpu

进入容器

docker exec -it cuda1 /bin/bash

更新apt

apt-get update
apt-get install vim
# 更换apt源,与主机更换源一样
cp /etc/apt/sources.list /etc/apt/sources.list.bak
rm /etc/apt/sources.list
vim /etc/apt/sources.list

安装ssh

apt-get update
apt-get install openssh-server
vim /etc/ssh/sshd_config

PermitRootLogin prohibit-password修改为PermitRootLogin yes
设置密码

passwd root

如果是宿主机Ubuntu18.04,安装ssh服务应该会自行启动并且已经加入自启项,但是在容器内安装则不会自动启动,而且一般设置自启项的方法对Docker容器不起作用 ,需要按照如下方法设置启动脚本
启动ssh服务,此时可以通过ssh://root:密码@宿主机IP -p2345连接容器。

service ssh start

创建启动脚本

cd /home
vim startup.sh

输入脚本内容,就是在之前/bin/bash基础上再加一个启动ssh

#!/bin/bash
service ssh start
/bin/bash

/bin/bash的作用是保持Docker容器的后台运行,使用-dit参数的时候会附加执行这个命令,但是当设置了启动脚本后就不会附加执行了,需要手动执行。
附加执行权限

chmod 777 startup.sh

以下是常用的包

作用
vim强大的Linux文本编辑库
openssh-serverssh远程连接库
net-tools包含ifconfig,netstat等指令
iputils-ping包含ping指令
wget下载文件指令
curl网络请求指令
git版本控制
bzip2conda的依赖
iptables包过滤防火墙,可以控制转发策略
command-not-found在你输入一个未安装的指令时提示安装

如果有编码问题,docker容器内出现无法输入中文,查看中文字符出现乱码情况,解决方法:在启动脚本中加入更换编码指令

vim /etc/profile
export LANG=C.UTF-8 # 加上此行并保存

将我们对容器的设置保存为镜像,方便以后使用

docker commit -m "一些说明" -a "作者" cuda1 cuda-base:1.0

以上就是用docker创建深度学习环境的过程

参考并特别感谢! 使用Docker搭建实验室共享GPU服务器

容器设置独立ip

docker容器网络配置


版权声明:本文为weixin_40548136原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。