jupyter notebook远程连接服务器
文章目录
- jupyter notebook远程连接服务器
- jupyter是什么
- 配置步骤
- 安装jupyter
- 生成jupyter配置文件
- 编辑jupyter配置文件
- 设置密码
- ssh隧道
- 启动顺序
- jupyter添加kernel
- 下载ipykernel包
- 添加kernel
- 测试
- 遇到的问题
jupyter是什么
Jupyter Notebook是一个交互式笔记本,支持运行 40 多种编程语言。
Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。 用途包括:数据清理和转换,数值模拟,统计建模,机器学习等等。
配置步骤
安装jupyter
登录服务器后,激活虚拟环境,使用pip
命令安装jupyter:
此时使用jupyter notebook
命令打开试一下:
但此时在本地是打不开上面链接的,需要进行配置。
生成jupyter配置文件
使用如下命令生成jupyter配置文件:
jupyter notebook --generate-config
生成jupyter配置文件之后我们可以给jupyter设置一个密码。
编辑jupyter配置文件
编辑jupyter配置文件的目的是设置远程ip可访问,根据配置文件所在位置找到并打开jupyter_notebook_config.py文件,在文件中加入如下几行(使用vim编辑器):
c.NotebookApp.ip = '*' #允许所有ip访问,很重要
c.NotebookApp.open_browser = False #不自动打开浏览器
c.NotebookApp.port = 8888 #端口为8888,可以自己设置
c.NotebookApp.enable_mathjax = True
c.NotebookApp.allow_remote_access = True
c.NotebookApp.allow_root = True
设置密码
使用如下命令设置jupyter密码(输入jupyter密码。这个密码要自己记住,等下打开juputer浏览器时需要用到):
jupyter notebook password
输入的密码会保存到 .jupyter/jupyter_notebook_config.json文件中。
注意:本操作为自动设置密码,即后面不用在配置文件中单独配置密码。
ssh隧道
至此如果使用的不是内网服务器就可以使用刚才设置的密码和端口在自己电脑上的浏览器上连接jupyter了,首先在服务器上运行jupyter notebook。
如服务器地址为10.24.82.184,那么只需要在浏览器中输入10.24.82.184:8888,8888正是刚才在配置文件中设置的端口号。
但如果使用的是内网服务器,需要通过跳板机连接,那么还需要设置ssh隧道
,实现端口转发(映射),才能在本地访问到(这里的原理参考PyCharm+ssh跳板机+服务器中SSH隧道部分)。
在本地命令行输入如下命令即可:
ssh -N -f -L <jupyter端口>:<内网服务器ip>:<jupyter端口> -p <跳板机端口> username@<跳板机ip>
上述命令各个参数的含义如下:
- N 告诉SSH客户端,这个连接不需要执行任何命令。仅仅做端口转发
- f 告诉SSH客户端在后台运行
- L 做本地映射端口
到这里,就可以在本地打开浏览器,输入localhost:<服务器端生成的端口号>
访问到jupyter notebook了。
输入前面设置的jupyter密码:
启动顺序
1、启动jupyter notebook服务
2、设置ssh隧道,即在命令行输入:
ssh -N -f -L <jupyter端口>:<内网服务器ip>:<jupyter端口> -p <跳板机端口> username@<跳板机ip>
3、在本地打开浏览器,输入localhost:<服务器端生成的端口号>
访问到jupyter notebook了。
jupyter添加kernel
因为已经可以使用jupyter了,但是发现,在jupyter上运行ipynb的时候,内核只有一个默认的python3。
下载ipykernel包
在conda环境中(激活的虚拟环境中)使用如下命令下载ipykernel:
conda install ipykernel
添加kernel
首先使用conda进入想要添加的环境的虚拟环境(激活虚拟环境):
conda activate <虚拟环境名>
然后使用which python
查看当前虚拟环境python所在的路径,然后cd进入该文件夹。示例,进入虚拟环境lxl的python所在的路径,只需要进入到虚拟环境名称这个文件夹就好了,不用进入到bin/python:
然后在该目录下使用:
python -m ipykernel install --user --name [虚拟环境名] --display-name [想要在jupyter上显示的环境名]
以lxl这个虚拟环境为例,我想让它在jupyter上显示lxl:
python -m ipykernel install --user --name lxl --display-name lxl
测试
首先使用FilZilla将用到的文件d2l-zh上传到服务器上:
然后打开jupyter notebook(在同一目录下使用jupyter notebook
命令才能看到d2l-zh文件,这点在博客「测试」部分有写道):
执行后:
在本地打开浏览器,输入localhost:<服务器端生成的端口号>
访问到jupyter notebook了。
输入前面设置的jupyter密码:
就可以看到上传的d2l-zh文件夹了:
这样就会在服务器上开始训练了。
训练结果:
可以看到在服务器上的训练速度每秒处理6219张样本
,对比在博客「测试」部分在本地电脑上的训练速度每秒处理1640张样本
要快的多得多。
遇到的问题
在本地打开浏览器,输入localhost:<服务器端生成的端口号>
访问到jupyter notebook后,其他文件可以正常打开,但是打开.ipynb
文件会报500 : Internal Server Error
:
参考这篇博客修改nbconvert版本为5.4.1后重启jupyter notebook服务发现在控制台又报如下权限错误PermissionError: [Errno 13] Permission denied: '/usr/local/share/jupyter/nbconvert/templates/conf.json'
:
参考文章修改nbconvert版本为5.6.1后重启jupyter notebook服务,发现可以正常打开.ipynb
文件,至此问题解决。