0%

远程Jupyter lab配置笔记

这个想法出现在今年春天,那个时候我选了个R的课,这个课是经管院开的,和我寝室的位置离得挺远,当时想如果有个远程的环境每次上课我就可以不带电脑同时使用自己的环境了(保存什么的也会方便一些)。开始这个环境是放在阿里云学生机上的,但是它的单核CPU和2G内存实在是不太够,对于比较大的数据会很快卡死,而重新启动这个过程又十分麻烦。所以我决定把环境转移到台式机上,虽然在我干这件事情的时候R的课全程在家上完了,我也换了笔记本,笔记本性能不足的问题也就解决了,而且台式机用的是A卡,没有CUDA加速,这一切让做这件事显得很没有意义,但是……

闲着也是闲着。

内网穿透的问题

内网穿透通过zerotier实现,这个东西的性能很好,基本可以跑满带宽。配置也十分简单,下载好对应平台的软件,从官网上新建一个网络,官网会提供一个networkID,之后把自己的几台机器都加入这个ID就可以了。如果能够ping通台式机,则说明这个步骤已经正确。将其加入开机启动:

1
2
sudo systemctl start zerotier-one.service
sudo systemctl enable zerotier-one.service

Jupyter lab的安装和配置问题

其实我的Jupyter一直是通过anaconda安装的,但是之前出于一些我现在已经不明白当时的自己是怎么想得的原因,安装R是在CARN上下载了源码然后编译安装,之后需要让jupyter lab“连接”到R的内核,这个步骤需要通过IRKernel实现,令人惊奇的是这个过程的教程很好找甚至有点顺利:

1
2
3
4
5
6
7
8
9
#安装必要的依赖包
install.packages(c('repr', 'IRdisplay',
'evaluate', 'crayon',
'pbdZMQ', 'devtools',
'uuid', 'digest'))

#IRkernel包没有放在CRAN上,需要通过GitHub安装
devtools::install_github('IRkernel/IRkernel')
IRkernel::installspec() #确保jupyterLab能找到R解释器安装位置

虽然这些命令看起来很顺利,但实际上当时在阿里云上安装是很费劲的,因为内存的限制安装常常无法顺利进行……

但是事实上,如果安装了anaconda,这个过程非常简单:

首先要升级包

1
conda update --all

否则在我的例子中出现下述情况造成安装无法继续

1
2
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.

之后进行安装:

1
conda install r-base r-essentials

这可以和上面达成相同的效果,并且更简单。

之后需要配置Jupyter的远程访问:

1
jupyter lab --generate-config

这会生成 ~/.jupyter/jupyter_notebook_config.py 在这个文件末尾追加下述内容:

1
2
3
4
5
6
c.NotebookApp.allow_remote_access = True
c.NotebookApp.open_browser = False
c.NotebookApp.ip = '0.0.0.0'
c.NotebookApp.notebook_dir = '/home/{your_name}/Desktop/WorkSpace'
c.NotebookApp.password = 'sha1:xxxxxxxxxxxxxxxxxx'
c.NotebookApp.port = 9000

其中密码可以在python中运行:

1
2
from notebook.auth import passwd
passwd()

之后需要将jupyter配置为服务开机启动:

/etc/systemd/system/下建立一个名为jupyter.service的服务配置文件,名字是jupyter后缀是.service,名字可以自己随便命名,该名字就是以后用systemctlservice配置的服务名

jupyter.service文件中写入下面的命令

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Jupyter lab
After=network.target
[Service]
Type=simple
ExecStart=/home/skelviper/anaconda3/bin/jupyter-lab --config=/home/skelviper/.jupyter/jupyter_notebook_config.py
User=skelviper
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target

在终端中执行下面的命令,允许开机启动:

1
2
systemctl start jupyter 
systemctl enable jupyter