目录
前言
上一篇文章中,我们已经介绍了如何配置深度学习的基础环境,本文中将继续介绍利用镜像创建容器并使用容器的方法。
基础环境的搭建:
一、Tensorflow容器的创建与配置
上文中已经将Tensorflow1和Tensorflow2的镜像下载完成,由于对于Tensorflow1和Tensorflow2的操作一致,本文将以Tensorflow2为例进行说明
1.创建容器
1).查看目前已有镜像,输入命令:
docker images
可以看到目前已有的所有镜像,如图:
2).从下载的镜像中运行容器:
docker run -d -it --name="XX" --gpus all XXXXX /bin/bash
其中XX为容器的名称,XXXXX为镜像的名称,如tensorflow/tensorflow:2.2.1-gpu-py3-jupyter等
运行成功后可以通过docker ps命令查询到当前容器:
3).进入容器,输入命令:
docker attach “容器名称”
或
docker exec -it “容器名称” /bin/bash
成功进入如图所示,可以看到Tensorflow的logo了:
到这一步,其实已经能够使用Tensorflow,为了更加方便使用,我们后面又安装了一些功能,大家可以根据自己的需要自行选择
2.配置容器
1).安装VIM
更新apt源
apt-get update
安装VIM
apt-get install vim
2).开启SSH
更新apt源
apt-get update
安装SSH
apt-get install openssh-server
允许root远程连接
vim /etc/ssh/sshd_config
将PermitRootLogin prohibit-password
修改为PermitRootLogin yes
为root设置密码
passwd root
3).配置Jupyter
因为配置本服务器的目的是让更多的人共享服务器,因此需要将容器中的jupyter设置成能通过个人主机进行远程访问使用
生成jupyter的配置文件:
jupyter notebook --generate-config
使用ipython生成密码,生成密码:
ipython
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:******'
修改配置文件:
vim "配置文件路径"
修改以下内容:
c.NotebookApp.ip='*' #绑定所有地址
c.NotebookApp.password = u'刚才生成的密码'
c.NotebookApp.open_browser = False #启动后是否在浏览器中自动打开
c.NotebookApp.port =8888 #指定一个访问端口,默认8888,注意和映射的docker端口对应
3.提交容器为镜像
退出容器:
Ctrl+P+Q
提交容器
docker commit -m "关于容器的说明" "要提交的容器名称" "提交后的镜像名称"
如我把刚才创建的容器提交为tensorflow2:v1镜像,则:
docker commit -m "关于容器的说明" tf2_test3 tensorflow2:v1
二、PyTorch容器的创建与配置
1.创建容器
PyTorch容器的创建和Tensorflow容器的创建一样,只是在执行docker run时所选择的镜像改为PyTorch镜像,如:
docker run -dit --name="pt_test3" --gpus all pytorch/pytorch:1.7.0-cuda11.0-cudnn8-runtime /bin/bash
2.安装jupyter
不同于Tensorflow的镜像,PyTorch的镜像中并没有预先安装jupyter,因此需要我们在容器中自行安装,安装步骤如下:
1)进入容器
docker exec -it pt_test3 /bin/bash
2)更新apt源
apt-get update
3)安装jupyter
pip install jupyter
3.配置容器
同上面Tensorflow的操作
4.提交容器为镜像
同上面Tensorflow的操作,如:
docker commit -m "关于容器的说明" pt_test3 pytorch:v1
三、容器的使用
创建完成新的镜像后,就可以开始使用容器进行深度学习的训练了,我们需要做如下操作:
1.从新的镜像中创建容器
根据个人需要,可以选择从不同环境,如Tensorflow1、Tensorflow2、PyTorch等。
创建容器的时候,需要将SSH端口和Jupyter端口进行映射,同时把宿主机的文件夹和容器文件夹进行映射,方便日后拷贝文件。
执行如下命令:
docker run -d -it -p XXXX:22 -p XXX:8888 -v "宿主机文件夹路径":"容器文件夹路径" --name="XX" --gpus all XXXXX /bin/bash
其中: 第一个XXXX为ssh映射端口号,第二个XXXX为jupyter的映射端口号 第三个XX为容器名称,建议容器名称为自己名字的缩写+环境,如hwj_tensorflow,第四个为XXXXX为镜像名称,如pytorch环境使用pytorch:v1 tensorflow环境使用tensorflow:v1
2.进入容器并配置
1)进入容器
docker attach “容器名称”
或
docker exec -it “容器名称” /bin/bash
2)开启SSH服务
service ssh start
3)开启Jupyter
jupyter notebook --allow-root
如出现jupyter命令没有被找到的情况:
export PATH=$PATH:~/.local/bin
3.使用容器
大家可以通过SSH和Jupyter两种方式进行使用,如果只是日常编写代码,建议直接通过自己的个人电脑连接容器中的jupyter更为方便。如果需要其他操作,如传文件等,建议使用SSH远程连接。
1)通过SSH使用,可以下载XShell软件或使用windows 10自带的ssh远程连接功能,通过服务器地址+映射后的端口号即可,如110.123.456.789:3309
ssh -p 端口号 用户名@服务器IP地址
2)通过jupter连接,只需要在个人电脑浏览器中输入服务器地址+映射后的jupyter端口号即可,如:http://110.123.456.789:9999
注意:两种连接方法,都是连接的容器,因此要使用我们在创建容器时做的映射端口,不是服务器本机的端口。
4.问题汇总
问题1:通过SSH远程连接PyTorch容器时,Python环境不能使用
解决方法:
在 /etc/profile中添加以下代码:
for item in `cat /proc/1/environ |tr '\0' '\n'`
do
export $item
done
总结
到此,我们就通过两篇文章,完成了最基本的多人GPU服务器共享与环境搭建,在使用的过程中,每人一个容器,相当于每人分到了一个独立的主机,可以在其中进行任意操作而不受其他人的影响。
值得注意的是,在使用的过程中,会有更多的关于docker、jupyter、Tensorflow、PyTorch的使用,我们会通过后面的文章和大家分享。