使用docker的好处在于,便于进行环境管理,不会影响到宿主机和其他人,非常的安全、方便。一台服务器可以很方便的给小组的几个人使用。而且,很多大牛的源码基于tensorflow、mxnet、pytorch等等不同框架,还有令人头疼的版本问题,这时与其尝试在一个账户里跑,或者是用anaconda管理环境,还不如直接拖一个docker,用完就扔,简直拔oUo无情。而且也有越来越多的源码提供了docker配置方法,简单方便。

这篇博客主要是记录一下在docker里如何使用jupyter lab。jupyter lab可以理解为jupyter notebook的升级版,支持可视化效果。在公司开发的时候,linux gpu 服务器本身是没有可视化终端(xserver)给到你个人的,而计算机视觉的算法调试过程中,及时、方便的看一看实际效果是很有帮助的。而且,ipynb文件和py文件的转换也很方便,许多源代码也都提供了ipynb的演示文件帮助大家熟悉代码,看效果。因此,我一般开发的时候是终端指令配合jupyter lab,感觉比较方便。

之所以突然有时间,也是因为服务器挂了,在等修复。本身的配置并不复杂,只是网上的内容实在鱼龙混杂,我也想借此机会,锻炼一下自己把事情讲清楚的能力。本文参考了基于docker的服务器端使用jupyter notebook的方法,当然,原文使用的是jupyter notebook,我用的是jupyter lab。

首先,我用的服务器是ubuntu(一直以为是centos。。。),然后,我已经docker run 了一个镜像,指令大概是

nvidia-docker run -d -it --runtime=nvidia --name="container_name" -p 3090:22 -p 3091:8888 -p 3092:3092 xxxx

其中,--name是容器的名字,-p是端口映射,22和8888是默认的,22给ssh连接,8888给jupyter,xxxx则是你想用的原始镜像的id前四位。

这时候会自动登进去,你可能首先需要更新一下 

apt-get update

然后可能要安装pip,这些请大家自行搜索,必要的时候切换国内的源。

apt-get install python-pip

安装编辑器vim

apt-get install vim

然后是安装jupyterlab

pip install jupyterlab

这里其实最好用这一行,改换成国内源:

pip install jupyterlab -i https://pypi.tuna.tsinghua.edu.cn/simple

然后,键入python,进入python命令行,这时候其实也可以输入下import tensorflow 或者torch看看自己拉的镜像对不对。

然后输入以下代码:

from notebook.auth import passwd
passwd()

输完之后,设定一个密码,会生成一个sha1的秘钥,会有如下的结果(此处盗图~~~):

记得把这个复制出来保存。

jetson docker 容器中调用cuda docker jupyterlab_linux

然后ctrl+d退出,键入

jupyter lab --generate-config

这个大家看一下,和原文仅仅是notebook改成了lab,但是启动的似乎是一个文件。。。

然后vim修改文件

vim ~/.jupyter/jupyter_notebook_config.py

在其中添加几行,我翻了一下,全是注释,所以我图省事就直接在文件开头加了几行字:

c.NotebookApp.ip='*'
c.NotebookApp.password = u'sha1:41e4da01dde4:e820dc9c0398eda2dc9323c9e4a51ea1228166a2'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888
c.NotebookApp.allow_remote_access = True

这里的password就得改成你自己刚刚保存的那个。

然后就可以启动jupyter lab 啦:

nohup jupyter lab --allow-root &

其中,nohup和&配合使用,让jupyter lab一直后台运行,也可以普通运行,不加这两个,退出的时候用ctrl+p+q。

顺便提醒下在docker里千万不能顺手就ctrl+c关闭某个东西,搞不好服务就停了。

这个时候,在浏览器里输入

http://你.的.服务器.地址:3091

其中3091是我启动docker时刚刚绑定8888的端口号。

这时候应该就可以看到jupyterlab了,要求你登陆。

在这里运行ipynb可以看到分布输出和图像,很方便调试和查错。而且有时候要拷个、移动个啥东西也要敲一行命令也是很烦的,jupyterlab好歹是个图形界面,很方便。

最后再补充啰嗦一句,如果你拖的是pytorch镜像的话,ssh进入的话会导致python指令找不到,输入python3出来的是3.6.8而不是3.5.2,而且import torch也找不到。考虑到到时候配置环境可能出现的多个python问题,这时候最好就是以后都用docker attach的方式进docker,不要用ssh了,ssh就纯粹用于jupyterlab和cyberduck等文件传输工具。