这个想法出现在今年春天,那个时候我选了个R的课,这个课是经管院开的,和我寝室的位置离得挺远,当时想如果有个远程的环境每次上课我就可以不带电脑同时使用自己的环境了(保存什么的也会方便一些)。开始这个环境是放在阿里云学生机上的,但是它的单核CPU和2G内存实在是不太够,对于比较大的数据会很快卡死,而重新启动这个过程又十分麻烦。所以我决定把环境转移到台式机上,虽然在我干这件事情的时候R的课全程在家上完了,我也换了笔记本,笔记本性能不足的问题也就解决了,而且台式机用的是A卡,没有CUDA加速,这一切让做这件事显得很没有意义,但是……
闲着也是闲着。
内网穿透的问题
内网穿透通过zerotier实现,这个东西的性能很好,基本可以跑满带宽。配置也十分简单,下载好对应平台的软件,从官网上新建一个网络,官网会提供一个networkID,之后把自己的几台机器都加入这个ID就可以了。如果能够ping通台式机,则说明这个步骤已经正确。将其加入开机启动:
1 | sudo systemctl start zerotier-one.service |
Jupyter lab的安装和配置问题
其实我的Jupyter一直是通过anaconda安装的,但是之前出于一些我现在已经不明白当时的自己是怎么想得的原因,安装R是在CARN上下载了源码然后编译安装,之后需要让jupyter lab“连接”到R的内核,这个步骤需要通过IRKernel实现,令人惊奇的是这个过程的教程很好找甚至有点顺利:
1 | #安装必要的依赖包 |
虽然这些命令看起来很顺利,但实际上当时在阿里云上安装是很费劲的,因为内存的限制安装常常无法顺利进行……
但是事实上,如果安装了anaconda,这个过程非常简单:
首先要升级包
1 | conda update --all |
否则在我的例子中出现下述情况造成安装无法继续
1 | Solving environment: failed with initial frozen solve. Retrying with flexible solve. |
之后进行安装:
1 | conda install r-base r-essentials |
这可以和上面达成相同的效果,并且更简单。
之后需要配置Jupyter的远程访问:
1 | jupyter lab --generate-config |
这会生成 ~/.jupyter/jupyter_notebook_config.py
在这个文件末尾追加下述内容:
1 | c.NotebookApp.allow_remote_access = True |
其中密码可以在python中运行:
1 | from notebook.auth import passwd |
之后需要将jupyter配置为服务开机启动:
在/etc/systemd/system/
下建立一个名为jupyter.service
的服务配置文件,名字是jupyter
后缀是.service
,名字可以自己随便命名,该名字就是以后用systemctl
或 service
配置的服务名
在jupyter.service
文件中写入下面的命令
1 | [Unit] |
在终端中执行下面的命令,允许开机启动:
1 | systemctl start jupyter |