jupyter 配置远程python、R语言环境

  官网如是介绍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电脑资源,提高工作效率!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容