0 前言
放假在家,“M1 MacBook Pro ’Air‘ ” 的GPU太弱,于是研究出VS Code 上远程连接实验室主机的Jupyter服务,Jupyter并且能够选择Kernel的方案
1 准备工作
-
内网穿透
我使用的是Zerotier + 自己云服务器作跳板机搭建Moon节点,也可以尝试Zerotier私有化方案,我折腾过没有实现,所以就只是简单搭建Moon节点,如果没有修改Moon,Zerotier的内网穿透非常不稳定,所以没有服务器的建议使用其他内网穿透方案
-
远程机和本地机 SSH
配置好后一切皆可本地操作
-
Jupyter 内核的安装
安装自己的conda环境到Jupyter
2 操作过程
内网穿透的操作不再赘述,不是本次的重点,前提是你能访问到远程机即可
1 关于ssh,简单说明
macOS自带ssh,一般的Linux应该也会自带,如果没有,简单安装即可
安装了且已配置了rsa密钥登陆直接略过即可
Linux:
sudo apt update
sudo apt install openssh-server -y
sudo systemctl status ssh #查看状态
# 如果你的防火墙开启了,使用下面语句
sudo ufw allow ssh
Mac:
brew install openssh
Mac 配置免密码登录,不然的话每次登录都要输密码很麻烦,尤其是在VS Code当中,具体操作也很简单,在Mac端生成rsa密钥后发送到远程机即可,若已配置,也直接略过
Mac端生成rsa密钥
cd ~/.ssh # cd到.ssh
ssh-keygen # 输入后一路回车
ls # 默认应该是生成id_rsa
发送rsa密钥至远程机
user是你的ssh的用户,host是服务器地址,这时候还要输入密码。
Eg:ssh-copy-id -i id_rsa.pub [email protected]
ssh-copy-id -i [公钥文件] user@host # 安装提示完成,没记错的话应该是输入远程机对应用户的登陆密码即可
Mac端进行测试,免密直接登陆的话说明成功
ssh user@host
2 关于远程机的Jupyter环境
同样不再赘述了,你既然会打开这篇水文,相信你肯定都解决了Conda和 Jupyter 的环境 _
3 启动远程Jupyter
1 配置远程Jupyter的环境
jupyter notebook password # 设置密码,按照提示输入两次即可
jupyter notebook --generate-config # 生成Jupyter配置文件
# 结果:Writing default config to: /root/.jupyter/jupyter_notebook_config.py
2 修改配置文件
涉及Vim的基本操作,如果不懂也没关系,我专门重装了一次Jupyter,尽量把过程描述清楚
-
Mac终端中ssh连接后操作
-
查看并复制加密后的刚刚设置的密码
cat ~/.jupyter/jupyter_notebook_config.json
-
根据前面的提示,我们先进入到生成的jupyter_notebook_config.py
vim ~/.jupyter/jupyter_notebook_config.py
注意,有时候(例如你上次可能强制退出了…), 再次打开会提示让你选择打开模式,一定要选择读写模式,就像这样
可以使用末行模式的搜索跳转到具体的位置修改,我这里图省事,直接添加了
下面是模版,修改密钥后,其他的按需修改后Copy
c.NotebookApp.ip = '0.0.0.0' # listen on all IPs,远程访问时需要配置该项 c.NotebookApp.port = 8888 #Jupyter监听的端口 c.NotebookApp.open_browser = False #是否在键入`Jupyter`时打开浏览器 c.NotebookApp.password = 'argon2:$argon2id$v=19$m=10240,t=10,p=8$aK6oRidn6rvHCVhbhD1jnw$Ngt4MYXzzWM4uMWeeZM5Bn1qllqrJYuSHyjJi72Mi60' c.NotebookApp.allow_root = True #是否同意jupyter以root身份运行
不懂Vim操作的,仔细看,我尽力了~,熟悉的Vim的直接跳过吧
-
启动Jupyter服务测试
jupyter notebook
浏览器输入你远程机的 IP: + 端口号
IP: {your_port}
成功访问,Jupyter配置成功,下面进入本文的核心部分,其实如果你不需要VS Code,在Jupyter上装几个插件,Web页面的Jupyter也不是不能用
4 VS Code 配置
主要分为两步,在VS Code中配置SSH连接,以及VS Code中访问刚刚启动的远程服务
-
VS Code配置SSH
-
在VS Code中连接远程机的Jupyter
到这你可能会说,那我直接连接不就完了?配置ssh干什么?
VS Code直接远程连接Jupyter,切换Jupyter Kernel是很麻烦的,直接连接是默认的Kernel,甚至还有可能扫描不到任何Jupyter Kernel
要在VS Code中实现自由切换Kernel,本质是要让VS Code连接整个远程机,这样才能扫描到远程机的所有 Python 解释器,这当中显然包括Jupyter Kernel,
不信的话你可以试试~
- 右下角点Jupyter Server选择远程Jupyter,右下角点击确认连接,输入密码
-
找个文件测试一下,在ipynb文件中选择Kernel,可以看到成功扫描到了远程机中的所有Python解释器
-
运行确认无误,终于不是弱鸡的M1了
5 总结与问题
在VS Code中完美使用远程Jupyter还是不容易的
-