配置Jupyter Notebook在局域网下访问

一、Overviw

在学习和运用Python中,Jupyter是个非常得力的助手,特别在数据科学和机器学习领域里,更是效率放大器。Jupyter包括Jupyter Notebook和JupyterLab,由于我在学习的资料还在用前者,因此这篇博文讲围绕Jupyter Notebook来讲述。 以下内容,我也将它缩略成Jupyter,请读者留意。

大部分情况下,我都是在一台Mac上运行它,但随着研究深入,对CUDA需求也越来越迫切,Mac显得”力不从心”了。不过,好在我还有一台PC,上面有NVIDIA 3080 Laptop,可以从容地调用CUDA,一般规模的学习和研究,就足够了。

我喜欢在Mac上工作和学习,有超过十年的时间了。如果要换到PC上,我需要重新熟悉软件环境,搭建各种服务,这不是我期望的。再者,PC虽然有CUDA,但是发热大,噪音大。坐在旁边,手嫌烫,耳朵嫌吵。我是非常不乐意使用这台PC的。–显然,打游戏除外。

因此,我需要实现这么一个目标:由于Jupyter以Web形式提供服务,那么,从Mac上通过浏览器访问PC上Jupyer,应该是行得通的。不过,我也不需要过分放大这个目标,只需要在LAN(局域网)内访问,并且支持单用户就好。

注:以下内容均是在PC上进行操作。

二、准备工作:获得配置文件

首先执行如下命令,生成配置文件:

> jupyter notebook --generate-config
Writing default config to: C:\Users\用户名\.jupyter\jupyter_notebook_config.py

在上述输出中, jupyter_notebook_config.py 即为生成的配置文件。–注:无论PC和Mac,该文件都是在当前用户目录下的.jupyter 文件夹中。

三、第一步配置:监听IP

在上面的文件中,寻找 c.NotebookApp.ip ,阅读其注释:

## The IP address the notebook server will listen on.
#  Default: 'localhost'

根据上面的内容,可以设置监听的地址有:localhost127.0.0.1。当然,也可以是本机在LAN下的IP地址,形如:192.168.1.100。要囊括这些情况,就可以设置为 0.0.0.0 ,如下:

c.NotebookApp.ip = '0.0.0.0'

四、第二步配置:监听端口

接下来就是检查端口,特别是当你启用了PC上的WSL。如果在WSL里也开启Jupyter,那么势必会和PC上的Jupyter的端口冲突了。那么就可以修改下面这个配置项上,避免他们冲突。

## The port the notebook server will listen on (env: JUPYTER~PORT~).
#  Default: 8888
c.NotebookApp.port = 8888

五、第三步配置:访问密码

由于局域网下,只有一个人访问PC的Jupyter,因此设置密码显得”多余”。但是,如果不设置密码,则需要再访问URL里,保证有 token 参数。 这显然不友好,因此设置密码就是必须的了。

从配置文件里,查找 c.NotebookApp.password ,阅读它的注释:

## Hashed password to use for web authentication.
#
#  To generate, type in a python/IPython shell:
#
#    from notebook.auth import passwd; passwd()
#
#  The string should be of the form type:salt:hashed-password.

于是打开ipython,执行上述命令,可以轻松获得密码:

In [1]: from notebook.auth import passwd; passwd()
Enter password:
Verify password:
Out[1]: 'argon2:$argon2id$v=19$m=10240,t=10,p=8$AvMw+......YK/9M'

在配置文件里,给 c.NotebookApp.password 附上上面的结果。

注意:上述代码是在Python 3.6.13版本上执行,有可能无法正常在更新版本上执行。

六、收尾配置:工作

在上面三步后,几乎全部的配置就完成了。如果,你觉得每次启动Jupyter,它都要打开浏览器,很没有必要,可以找到 c.NotebookApp.open_browser ,将其设置为 False

## Whether to open in a browser after starting. The specific browser used is
#  platform dependent and determined by the python standard library webbrowser
#  module, unless it is overridden using the --browser (NotebookApp.browser)
#  configuration option.
c.NotebookApp.open_browser = False

七、总结

在我进行这些操作时,有两份资料12对我帮助很大,在此,感谢它们。特别是《配置 jupyter notebook 允许远程访问》1一文,提到了screen。当然,这对PC没有用处,对Linux用户是有帮助的。不过,我更擅长用tmux ,它也能够在断开SSH连接后,依然保证进程存活。

最后,设置Jupyter在LAN下工作,本身是非常简单的,难以体现出”技术难度”。不过,找到这些信息,是要花些功夫的,权当是一份备忘录吧。

Footnotes

  1. 配置 jupyter notebook 允许远程访问
  2. Project Jupyter Documentation

Leave a comment

Your comment