官网如是介绍JupyterLab: JupyterLab is the next-generation web-based user interface for Project Jupyter。可见,Jupyter Lab是Jupyter的下一代计划,其包含了Jupyter Notebook所有功能,可作为一种基于web的集成开发环境,你可以使用它编写notebook、操作终端、编辑markdown文本、查看文本文件及图片等功能。本文将介绍在Anaconda中利用jupyter搭建个性化Python、R语言远程编程环境。
Q: 我们为什么需要远程python、R语言环境?
A: 因为我们的笔记本电脑、台式电脑计算资源有限;而云端服务器往往具有大内存,多cpu核心的特点。通过配置远程环境,我们几乎可以在任何配置的个人电脑上,在有网络的条件下,利用云端环境资源进行数据分析工作。
安装Anaconda
Miniconda是Anaconda的最小化版本,只包含conda、python以及一些必须的包。我推荐大家安装Miniconda,它轻灵小巧,需要什么软件就自己安装什么软件,从管理上来讲也具有更高的可控性。首先,我们进入Miniconda官网下载和系统适配的版本并安装:
# 以下所有安装演示均在terminal中进行
$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh # 下载linux 64bit 版本
$ /bin/bash Miniconda3-latest-Linux-x86_64.sh # 启动安装,接下来按照提示完成即可
Do you wish the installer to initialize Miniconda3
by running conda init? [yes|no]
[no] >>> no # 强烈建议此处选择no!!!!! 其他填yes或则默认即可
接下来在.bashrc
中添加环境变量,并加载环境变量:
echo 'export PATH="~/miniconda3/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
conda info --envs # 测试一下conda能否正常使用
配置conda源
可以使用国内conda镜像源加速包的下载速度,比如可以使用中科大conda镜像源:
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/
conda config --set show_channel_urls yes
安装配置jupyter lab
jupyterlab的安装很简单,jupyter官网也列出了很多安装方式。但以我的经验和踩坑经历,建议尽量别在base环境下安装包,更加明智的选择是按照你的工作类型、项目创建不同的虚拟环境,以免一个环境被破坏,全盘奔溃。所以这里我们先创建一个虚拟环境,再进行各种包的安装以及环境配置。
conda create --name common python=3.9
source activate common
pip install jupyterlab # 推荐在conda中使用pip安装各种包
下面先生成密钥,然后再在~/.jupyter/jupyter_lab_config.py
中修改配置文件即可:
jupyter lab --generate-config # 生成默认配置文件 ~/.jupyter/jupyter_lab_config.py`
## 获得密码加密字符
ipython
# --------------------------------------------------
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]:'argon2:$argon2id$v=19$m=10240,t=10,p=8$QvGXtD5s1nGlo3x5/GqxPw$VIBJtxm4Lld9h88WxkDLsjt67jJgJMOhLmsVNtWOyeQ'
修改配置文件中的以下项:
## 将配置文件中这些配置取消注释并做相应的修改
c.ServerApp.ip='*'
c.ServerApp.password = u'argon2:$argon2id$v=19$m=10240,t=10,p=8$QvGXtD5s1nGlo3x5/GqxPw$VIBJtxm4Lld9h88WxkDLsjt67jJgJMOhLmsVNtWOyeQ'
c.ServerApp.open_browser = False
c.ServerApp.allow_remote_access = True
c.ServerApp.port =8899 #可自行指定一个端口, 访问时使用该端口
# c.ExtensionApp.open_browser = False # 如安装jupyter插件可以进行该设置
远程连接jupyter lab
接着,我们在远程服务器开启jupyter lab。下面代码中,nohup
和&
配合可以使代码进入后台运行,且程序不会随着terminal的关闭而终止。关于更多linux命令后台运行的方法,请参考Linux 后台运行程序方法总结
source activate common
nohup jupyter lab &
然后在本地使用ssh和服务器建立连接,其中-N
:SSH没有命令要被远程执行; -f
:SSH在后台执行; -L
:指定port forwarding的配置:
ssh -p port -N -f -L localhost:8899:localhost:8899 username@ip
最后在本地浏览器中访问:http://localhost:8899/lab ,如果访问成功那么你就可以通过本地浏览器在任何有网络条件下利用云服务器资源工作啦。
定制化编程环境
上面已经实现了local连接远程服务器jupyterlab 并进行编程地功能,是不是就okay了呢?当然不是,我们知道,R语言、python的包都是不断更新的,但是有的项目中我们需要特定的包,另一个项目又可能最新的包,如果我们需要在local使用远程不同虚拟环境怎么办呢?且往下看:
R语言
默认jupyter lab使用的应该是系统的R,我们一般使用自己虚拟环境中创建的R环境,这样不需要管理员权限就可以方便地管理自己的packages:
conda install -c conda-forge r-base=4.1.2 # 指定所需版本
which R
在R语言中安装相关package:
> install.packages('IRkernel')
> IRkernel::installspec(name = 'R4', displayname = 'R4')
[InstallKernelSpec] Installed kernelspec ir36-common in ~/.local/share/jupyter/kernels/R4
Python
类似R语言,首先需要安装一个ipykernel,然后再安装一个kernel到~/.local/share/jupyter/kernels
目录下,原理一模一样:
pip install ipykernel
python -m ipykernel install --user --name python3-commom
现在大功告成告成!使用ssh
连接远程服务器之后,在本地浏览器中访问:http://localhost:8899/lab,你会发现现在你可以自定义任何环境来跑你的任务了!
计算集群环境下使用远程环境
相信很多小伙伴平时工作都是使用计算集群,因此我们需要在计算节点使用jupyter,而不是登录节点,以免造成登录节点卡顿。我们以PBS管理系统下的计算集群为例,向计算节点提交jupyter任务,并通过个人电脑访问计算节点资源。我们首先编写pbs任务脚本(run.pbs),向high计算队列提交一个100小时的计算任务,向comput13节点申请28个cpu核心:
#!/bin/sh
#an example for Intel MPI job.
#DO NOT RUN THIS SCRIPT DIRECTLY,
#PLEASE RUN THIS SCRIPT WITH qsub: qsub intelmpi_job.pbs
#
#PBS -N test
#PBS -o log.log
#PBS -e log.err
#PBS -q high
#PBS -l nodes=comput13:ppn=28
#PBS -l walltime=100:00:00
cd ~
source activate common
jupyter lab
接着,通过命令行qsub run.pbs
提交任务,等任务跑起来之后,然后在个人电脑上通过ssh
进行连接:
## pbs任务在名称为comput13 的计算节点运行
ssh -p port -N -f -L localhost:8899:comput13:8899 username@ip
同样地,在本地浏览器中访问:http://localhost:8899/lab即可使用。
卸载conda
rm -r miniconda3/ .conda/ .jupyter/ .condarc .local/share/jupyter/
结语
jupyter lab是一个非常棒的交互式数据分析工具,然而受限于本机的计算能力有时候也会很卡,或则影响我们其他工作,能灵活运用好远程资源可以解放我们的local电脑资源,提高工作效率!