本文使用docker避免了复杂的深度学习环境搭建过程,同时解决了新入手RTX3090显卡的吃灰问题
写在前面
楼主的个人服务器使用ubuntu 16.04系统,NVIDIA驱动已安装455.23.04
第一步:服务器中安装docker, nvidia-docker, docker-compose
- 将docker.sh文件上传至服务器,并在对应目录下运行 bash docker.sh
docker.sh脚本文件如下:
#!/bin/bash
function yellow_echo ()
{
local what=$*
echo -e "\e[1;33m-- Info: ${what} \e[0m"
}
function green_echo ()
{
local what=$*
echo -e "\e[1;32m-- Info: ${what} \e[0m"
}
function red_echo ()
{
local what=$*
echo -e "\e[1;31m-- Error: ${what} \e[0m"
}
#安装docker
yellow_echo "Start to install 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
sudo apt-get -y install docker-ce
if [ $? -ne 0 ]; then
red_echo "Failed to install docker"
exit -1
else
green_echo "Install docker successfully"
fi
#安装nvidia-docker
yellow_echo "Start to install nvidia-docker"
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
sudo apt-get install -y nvidia-docker2
if [ $? -ne 0 ]; then
red_echo "Failed to install nvidia-docker2"
exit -1
else
green_echo "Install nvidia-docker2 successfully"
fi
sudo pkill -SIGHUP dockerd
: '
#安装docker-compose
yellow_echo "Start to install docker-compose"
sudo apt-get -y install python-pip
sudo pip install docker-compose
if [ $? -ne 0 ]; then
red_echo "Failed to install docker-compose"
exit -1
else
green_echo "Install docker-compose successfully"
fi
#向docker daemon添加registry config
yellow_echo "Start to modify docker daemon.json"
sudo sed -i "/\"runtimes\":/i\ \"insecure-registries\":[\"10.58.122.61:90\"]," /etc/docker/daemon.json
if [ $? -ne 0 ]; then
red_echo "Failed to modify docker daemon.json"
exit -1
else
green_echo "Modify docker daemon.json successfully"
fi
#docker命令免sudo,执行一下命令然后重新登录
sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo service docker restart
if [ $? -ne 0 ]; then
red_echo "Failed to restart docker"
exit -1
else
green_echo "Restart docker successfully"
fi
'
- 安装完成后检查是否安装成功
a)sudo docker run hello-world
显示如上界面表示docker安装成功
b)sudo docker run --rm --gpus all nvidia/cuda:11.1-based nvidia-smi
显示如上界面表示nvidia-docker安装成功,楼主实验室服务器太抢手,狠心用奖学金买了一块3090,自己配了一台小服务器(吃土猛冲)!
第二步:拉镜像
为了快速拉镜像首先需要给docker换源
sudo vim /etc/docker/daemon.json
将其中的内容替换为:
{
"registry-mirrors": ["https://dftbcros.mirror.aliyuncs.com"]
}
systemctl restart docker
重启docker- 进如下链接拉pytorch的最新镜像
镜像地址
docker pull nvcr.io/nvidia/pytorch:20.11-py3
镜像大小为13.2G,需要拉10分钟左右sudo docker images
查看已安装的镜像
第三步:docker容器设置
-
sudo docker run -p 23:22 --name="torch-remote" -v ~/workspace/remote_work --restart=always -itd --shm-size 8g --gpu all nvcr.io/nvidia/pytorch:20.11=py3
a) 此命令用于新建容器, -p后的23为新建docker的通信端口,22默认为服务器的端口,不可更改;
b) 为了后续方便的使用这个容器,最好加上–restrat=always,避免ssh连接出问题; -
docker ps
查看正在运行的容器
-
sudo docker exec -it 56c6 bash
此命令用于进入上面正在运行的容器内,56c6代表新建的容器ID,也可用torch-remote -
容器内设置SSH(此时在容器内显示为root用户)
a)apt update
b)apt install -y openssh-server
c)vim /etc/ssh/sshd_config
进入sshd_config文件中,在最后一行添加 PermitRootLogin yes, 这个很重要,只有添加这句后pycharm才能通过SSH连接到docker;
d)service ssh restart
重启SSH服务
e)passwd
设置root密码,pycharm连接时需要,确认后务必记住
f)exit
退出容器 -
测试docker的端口
ssh root@56c6 22
如果前面的配置正常这里会显示
#0.0.0.0:23
第四步:在专业版Pycharm中配置远程环境
楼主这里使用pycharm2020.3专业版,用edu邮箱申请了一年免费使用
- 随便新建一个项目,然后Tools——Deployment——Configuration
红线划的是初次配置时没有点亮的,写这篇博客的时候没有删之前的配好的,有点懒…
点左上角的+,选择SFTP,服务名可以根据自己的喜好设置一个,再点SSH configuration后面的…
Host: 设置为服务器的ip(使用ifconfig查询);port:必须对应到新建容器时设置的docker端口,这里使用23; user name: 设置为root; password 为4 e)中设置的root密码;
设置完后,点击Test Connection,如果设置成功则显示如上图,如果失败请检查docker的端口设置是否正确!!!
特别注意 :如果Docker容器重启,此时连接会暂时失效,需要进入对应的容器中重启SSH服务!!!
service ssh restart
接下来,File——Settings 设置项目的远程python解释器
选中需要远程连接使用的项目,点python interpreter后的设置图形,选择Add,接着选择SSH interpreter,再选择Existing server configuration, 在其中选择刚刚测试成功的连接。点击NEXT
上图中的1处必须正确选择docker中对应的python解释器的路径,楼主第一次设置失败问题就出在这里,如果不清楚路径,建议重新进入容器,使用命令which python 查具体的路径。
2处为在本地上传代码到服务器的路径,可以根据自己使用习惯设置。
最后,选择一个简单的cuda测试代码,Tools——Deployment——Upload to…上传本地代码到服务器中,如果配置成功的话,就会显示楼主给出的这个界面,接着就可以愉快的开启本地-远程调试模式喽!
测试代码链接