Back

服务器端配置 Jupyter Notebook 以使用 R

终于放心跑上百G数据了

最近有跑大型 R 交互任务的需要,服务器上却没有配置 Rstudio Server,我也没有 root 权限。 为了避免和运维费时费力的无尽扯皮自己配置了 Jupyter Notebook

conda 配置环境

# 新建名字为 R 的空环境
conda create -n R
# 进入环境
conda activate R

# 安装 r-base
conda install -c conda-forge r-base -y
# 安装 jupyter
conda install jupyter -y

在 r-base 中安装 IRkernel

# 进入 R 交互模式
R
# 安装 IRkernel 依赖
> install.packages(c('repr', 'IRdisplay', 'evaluate', 'crayon', 'pbdZMQ', 'devtools', 'uuid', 'digest'))
# 安装 IRkernel
> install.packages('IRkernel')
# 激活 IRkernel,此步骤需要保证 Jupyter 已经在环境下安装完毕
> IRkernel::installspec()
# 可以退出 R 交互模式了
> quit()

配置 Jupyter Notebook

# 生成配置文件
jupyter notebook --generate-config # 记住这一步告诉你的 config 路径

iPython:

# 进入 ipython 生成密码
ipython
In [1]: from notebook.auth import passwd
In [2]: passwd() # 记住这个密码,网页登录用
Enter password: 
Verify password: 
Out[2]: 'sha1:XXX……XXX' # 记住这个字符串,之后要用
In [3]: quit() # 退出 ipython

修改 Jupyter 配置文件

Jupyter 配置文件修改:

c.NotebookApp.ip='0.0.0.0' # 允许任意 ip 连接至 notebook, 之后 qrsh 调用交互计算节点时有用
c.NotebookApp.password = u'(sha1:XXX……XXX#填入上一步的密文)'
c.NotebookApp.port =随便给个高位端口 #也可以指定其他端口

保存退出

# 启动 jupyter notebook
jupyter notebook

远程链接 服务器的 Jupyter 服务

# 保证终端已经安装了 ssh,将本地端口通过 ssh通道 链接至 远程服务器服务
ssh 账户名@服务器的ip/domin 127.0.0.1:1234:127.0.0.1:上一步设置的端口
# 按提示输入服务器的账户密码

如果使用了其它 ssh 客户端(e.g. Xshell),可以在 ssh 属性中配置隧道,偷懒以上这一步本地转发。

Xshell配置隧道
Xshell配置隧道

本地使用远程 Jupyter

  1. 打开浏览器,访问 127.0.0.1:1234
  2. 输入 ipython passwd() 时手动输入的密码

完成。

调用临时的交互节点资源运行 Jupyter

一般在递交节点上跑任务总是不大好,而且 R 会占据大量的内存,对自己和他人均造成不便。因此,对于支持调用 qrsh 的 HPC,应当申请临时的交互计算节点运行 jupyter。

# 申请临时交互计算服务器,可以自己定义需要的资源,具体可查网上的文档
qrsh

# 进入随机分配的计算节点,示例中被分配到的节点为 snode019
user@snode019 13:00:37 ~ $

# 正常启动 Jupyter
jupyter notebook

建立隧道时将目标地址从 127.0.0.1 更换为 snode019 就可以了。

补充说明

为了让你的 Jupyter 更好用,还可以配置 NBextension 等 Jupyter 插件,然而那些对 Python 的支持更好,R 的话只能凑合用了,譬如察看环境变量,一些 R 包自定义的对象(如 Seurat Obj )就会与环境变量功能的脚本有一些冲突……然后不能用。最好的办法是换 python 工具或者自己造轮子。

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy