昨天开始学习使用dockers,为了用上服务器上的GPU,但是很麻烦,麻烦在哪里呢:
非常不方便修改和查看代码,每次需要本地修改了传到服务器上,再拷贝到容器里!超级麻烦。
所以,需要新建一个容器,一步到位:共享与服务器的文件目录,本地通过jupyter可以修改代码。
这个关键点就在于docker run!
sudo docker run -it -d -p 8888:8888 --ipc=host --name pytorch1.3 -v /home/xx/:/workspace pytorch/pytorch:1.3-cuda10.1-cudnn7-devel /bin/bash
如果要使用GPU,主机环境是nvidia驱动加cuda,就需要将docker run换成nvidia-docker run,这样新启动的容器就有驱动了。
参数解析:
-it:终端交互式操作
-d:后台运行容器,并返回容器id
-p:指定端口映射
8888:8888:前一个8888是主机(这里是服务器)端口,后一个是容器端口
--ipc=host:让容器共享主机ipc命名空间
--name pytorch1.3:给这个容器命名为pytorch1.3
-v /home/xx/:/workspace:共享目录,/home.xx/是主机文件目录,/workspace是容器文件目录
pytorch/pytorch:是镜像名称
1.3-cuda10.1-cudnn7-devel是镜像版本
/bin/bash:终端交互
docker exec -u 0 -it ContainerName /bin/bash: 以root身份进入容器
如需升级pytorch: pip install --upgrade torch==1.8.1 -i https://pypi.tuna.tsinghua.edu.cn/simple/
接着就是pip自己需要的包了,pip intsall jupyter -i 国内源
有时候国内源一个不稳定会出现网络错误,可以换着来!
国内源:
https://pypi.tuna.tsinghua.edu.cn/simple/ # 清华大学
https://mirrors.aliyun.com/pypi/simple/ # 阿里云
https://pypi.douban.com/simple/ # 豆瓣
https://pypi.mirrors.ustc.edu.cn/simple/ # 中国科学技术大学
https://pypi.hustunique.com/ # 华中科技大学
安装vim
apt-get install vim
如果出错:E: Unable to locate package vim
那么:
cp /etc/apt/sources.list /etc/apt/sources.list.bak 先备份原来的文件,再执行:
echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list
echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
上面这些换源操作因为源的公钥问题已经作废,直接更新apt-get就行。
apt-get update 更新源
再执行apt-get install vim。
配置jupyter notebook可远程访问
(1)jupyter-notebook --generate-config
(2)设置jupyter的密码:jupyter-notebook password
(3)去复制生成的sha1码:vim /root/.jupyter/jupyter_notebook_config.json
linux vim编辑命令:
ins键:是进入编辑模式;
Esc键是进入命令模式,此时输入:q是直接退出,:wq是写完保存退出
这里复制密码只需要在命令模式下选中ctrl+c就行,然后:q退出
(4)在jupyter_notebook_config.py 文件填入配置:vim /root/.jupyter/jupyter_notebook_config.py
进入编辑模式,填写下面信息
# 允许通过任意绑定服务器的ip访问
c.NotebookApp.ip = '*'
# 用于访问的端口
c.NotebookApp.port = 8888
#注意,这里的8888是与上面启动的容器开放端口一致
# 不自动打开浏览器
c.NotebookApp.open_browser = False
# 设置登录密码
c.NotebookApp.password = u'sha1:xxxxxxxxxxxxxxxx' # 上面复制的sha1码
进入命令模式,:wq退出
(5)容器内启动jupyter:jupyter notebook --allow-root
如果想让jupyter在窗口关闭后在后台运行:nohup jupyter notebook --allow-root > jupyter.log 2>&1 &,日志会写到.log中。
(6)本地浏览器启动远程docker 的jupyter:http://服务器Ip:8888,这里的8888是与上面启动的服务器开放端口一致。
就可以输入自己设置的密码,就可以进入jupyter啦!
将.ipynb 文件转成.py
执行jupyter nbconvert --to script xxx.ipynb
可以直接编辑容器里面的代码真的太好了!