Mac如何优雅地在VS Code中使用远程Jupyter?

0 前言

放假在家,“M1 MacBook Pro ’Air‘ ” 的GPU太弱,于是研究出VS Code 上远程连接实验室主机的Jupyter服务,Jupyter并且能够选择Kernel的方案

1 准备工作

  • 内网穿透

    我使用的是Zerotier + 自己云服务器作跳板机搭建Moon节点,也可以尝试Zerotier私有化方案,我折腾过没有实现,所以就只是简单搭建Moon节点,如果没有修改Moon,Zerotier的内网穿透非常不稳定,所以没有服务器的建议使用其他内网穿透方案

    Zerotier搭建Moon节点

  • 远程机和本地机 SSH

    配置好后一切皆可本地操作

    macOS配置SSH连接Linux

  • 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 root@111.111.111.111

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,尽量把过程描述清楚

  1. Mac终端中ssh连接后操作
  2. 查看并复制加密后的刚刚设置的密码
    cat ~/.jupyter/jupyter_notebook_config.json
    

    image-20230105185135926

  3. 根据前面的提示,我们先进入到生成的jupyter_notebook_config.py
    vim ~/.jupyter/jupyter_notebook_config.py
    

    注意,有时候(例如你上次可能强制退出了…), 再次打开会提示让你选择打开模式,一定要选择读写模式,就像这样

    image-20230105184704612

    可以使用末行模式的搜索跳转到具体的位置修改,我这里图省事,直接添加了

    下面是模版,修改密钥后,其他的按需修改后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的直接跳过吧
    1. 在终端中按Esc,你想在开头插入就按“ 1G ”跳转开头,在最后插入就按 “ GG ”跳转最后一行,你也可以使用搜索跳转逐行修改(" / [search_content] "),回车后跳转该行,这时候如果不是插入模式,按 “i”进入编辑模式后修改即可

      image-20230105175835402

    2. 修改后,注意操作

      image-20230105184547068

      按‘esc’,末行模式操作,注意这里有可能会不成功,经验是:如果vim打开的时候没有让你选打开模式,那一般都没问题,如果没有直接保存退出,那就按照提示慢慢操作吧

      image-20230105185107356

  4. 启动Jupyter服务测试
    jupyter notebook 
    

    image-20230105184331894

    浏览器输入你远程机的 IP: + 端口号

    IP: {your_port}

    image-20230105185405795

    成功访问,Jupyter配置成功,下面进入本文的核心部分,其实如果你不需要VS Code,在Jupyter上装几个插件,Web页面的Jupyter也不是不能用

    4 VS Code 配置

    主要分为两步,在VS Code中配置SSH连接,以及VS Code中访问刚刚启动的远程服务

    1. VS Code配置SSH

      1. 安装插件

        image-20230105190524599

      2. 修改配置文件,注意保存后退出

        image-20230105190759508

        image-20230105190919937

        image-20230105191009230

        image-20230105191601692

      3. 再点击左下角图标连接刚刚写入的远程机即可
    2. 在VS Code中连接远程机的Jupyter

      到这你可能会说,那我直接连接不就完了?配置ssh干什么?
      VS Code直接远程连接Jupyter,切换Jupyter Kernel是很麻烦的,直接连接是默认的Kernel,甚至还有可能扫描不到任何Jupyter Kernel
      要在VS Code中实现自由切换Kernel,本质是要让VS Code连接整个远程机,这样才能扫描到远程机的所有 Python 解释器,这当中显然包括Jupyter Kernel,
      不信的话你可以试试~
      1. 右下角点Jupyter Server选择远程Jupyter,右下角点击确认连接,输入密码

      image-20230105195918837

      1. 找个文件测试一下,在ipynb文件中选择Kernel,可以看到成功扫描到了远程机中的所有Python解释器

        image-20230105200322982

      2. 运行确认无误,终于不是弱鸡的M1了

        image-20230105200649314

      5 总结与问题

      在VS Code中完美使用远程Jupyter还是不容易的

      1. 首先要保证能够用IP访问到远程机,这是一切的前提

      2. 在远程机上配置Jupyter,但是配置了之后启动Jupyter并出现像其他博客中那样带密码token的URL,所以每次在VS Code中打开窗口仍然需要输入Jupyter密码

      3. 在Mac本地和VS Code中配置SSH密钥实现免密登录

      4. 配置完成之后,再次使用的步骤为:

        1. 终端ssh登录,启动Jupyter
        2. VS Code ssh 登录远程机
        3. 在VS Code左侧的资源管理器中打开对应ipynb文件,如果是新建的文件夹还要注意修改Kernel

        总之呢,就是保证这三个位置没问题就可以正常运行了

        image-20230105203235891

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值