o(*≧▽≦)ツ:做深度学习的人通常要在服务器运行代码,而jupyter notebook会是一个很好的交互工具,那么如何在本地浏览器访问服务器的jupyter notebook呢?

一、安装jupyter notebook

在服务器上安装 jupyter notebook

pip3 install jupyter (我不喜欢用conda来安装)


报错解决 OSError [Errno 99] Cannot assign requested address

直接输入 jupyter notebook 会有如下报错

在这里插入图片描述

解决方法:jupyter notebook --ip=0.0.0.0 --port=8080,具体请看 这里

二、启动 jupyter notebook

在远程服务器上运行下面命令

jupyter notebook --no-browser --ip=0.0.0.0 --port=8080 --allow-root

现在远程云主机B运行了一个jupyter notebook服务,端口为8080,本地主机A需要访问这个jupyter notebook服务。

法一:开放公网安全组端口

在B的安全组开放8080端口

点击下面的地址,就可以在本地浏览器(因为有公网ip,所以任何电脑都行,只要token正确)打开服务器的jupyter notebook服务了

在这里插入图片描述
在这里插入图片描述

如果再打开一个jupter notebook的话,它会自动开启另一个端口,如8081,这时如果你打不开,大概率是因为你服务器的端口没有开放,可以在阿里云的防火墙里设置

在这里插入图片描述

法二:本地端口转发

上面我是通过打开安全组的8081端口,来实现用公网ip:8081在本地浏览器访问远端jupyter notebook

但是这有一点风险性。

比较好的方法是公网只开放22端口(用于登录服务器界面),而私网的所有端口都是开放的,用本地端口转发。

比如:这里我没有在防火墙开放5600端口,那我就不能用公网:5600访问了,只能用localhost:5600访问了,但是远程服务器又没有浏览器界面!!!

在这里插入图片描述

本地浏览器当然也无法访问私网
在这里插入图片描述

解决方法:本地端口转发

语法:

ssh -L [本地IP]:本地Port:远程IP:远程Port root@xxx

在这里插入图片描述
上图来自:5分钟学会SSH端口转发,远程工作用得着 | 如何充分利用云服务器


执行下面命令:

ssh -L 7080:127.0.0.1:5600 wsh

现在你就可以用本地的7080端口访问远程服务器的jupyter notebook服务了

在这里插入图片描述

本地浏览器输入:

http://127.0.0.1:7080/?token=1f3bb3220b3aeb244733d43aaf801034a93500a65a42d192

注意:后面的token要和服务器显示的一致,所以为了方便,你本地和远程的端口设成同一个比较好。

在这里插入图片描述

三、进阶1:ssh命令直接进docker容器

请看:利用远程服务器和docker容器端口映射-p 3361:22 实现ssh命令直接进docker容器

四、进阶2:本地访问远程服务器中docker容器的Jupyter

参考博文:Docker,救你于「深度学习环境配置」的苦海

20.11.7 今天在本地跑了个CIFAR10的数据集,大概50000条数据吧,结果博主的电脑内存直接从7GB飙到了15GB,炸掉死机,所以博主决定用实验室服务器跑实验了。

在远程服务器启动docker的时候做好端口映射,我把服务器的3050端口映射为的docker容器的8888端口
在这里插入图片描述在容器内启动 jupyter notebook (最好用conda jupyter来安装,因为我的pytorch是用的conda环境)

jupyter notebook --no-browser --ip=0.0.0.0 --NotebookApp.token= --port=8888 --allow-root

说明:

  1. 一定要配置参数 --ip=0.0.0.0,如果不配置该参数,jupyter默认是不给容器外部访问的。--ip=0.0.0.0不要写成 --ip=127.0.0.1,容易连不上
  2. --NotebookApp.token= 设置免密登录

在这里插入图片描述

接下来你有两种方法访问jupyter

方法一:
你可以直接在本地浏览器用 服务器ip:3050 进行访问(前提是你电脑ip和这个服务器ip在同一个局域网内)

在这里插入图片描述
方法二:

也可以用将服务器的3050端口转发到本地的8888端口,然后用127.0.0.1:8080访问(即使你的ip和服务器ip不在同一个局域网也ok)

在这里插入图片描述

在这里插入图片描述

大功告成!!!

附:如果按照上面步骤操作了,但出现了下面的情况,可能是我proxy插件daili的问题,改成直接连接就行了!

在这里插入图片描述

五、相关参考

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐