新装的服务器版本为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-server | ssh远程连接库 |
| net-tools | 包含ifconfig,netstat等指令 |
| iputils-ping | 包含ping指令 |
| wget | 下载文件指令 |
| curl | 网络请求指令 |
| git | 版本控制 |
| bzip2 | conda的依赖 |
| 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服务器