说明

还是有必要开个单章专门梳理一下jupyter的远程使用。前提条件:

  • 1 配置了内网穿透(一般不会用云主机开jupyter,不划算)
  • 2 配置jupyter的密码
  • 3 配置jupyter的可使用内核

1 内容

1.1 内网穿透

关于如何设置内网穿透可以看Python - 装机系列3 FRP,简单来的化可以执行这个脚本(前提是先在~/config/frp/frpc.ini放好你的配置,当然还要一台云主机作为frps)。

#!/bin/bash

# 从远程主机拷贝/或者wget获取软件。wget以后换成别的地址或者方式,避免过慢或者失败
mkdir /opt/frp && cd /opt/frp && wget https://github.com/fatedier/frp/releases/download/v0.34.0/frp_0.34.0_linux_amd64.tar.gz && tar -zxvf frp_0.34.0_linux_amd64.tar.gz

# 将配置文件替换下载文件夹里的文件
cp ~/config/frp/frpc.ini /opt/frp/frp_0.34.0_linux_amd64/frpc.ini

# 配置frpc服务(可自动重启)


echo "[Unit]">/lib/systemd/system/frpc.service
echo "Description=frpc service">>/lib/systemd/system/frpc.service
echo "After=network.target network-online.target syslog.target">>/lib/systemd/system/frpc.service
echo "Wants=network.target network-online.target">>/lib/systemd/system/frpc.service

echo "[Service]">>/lib/systemd/system/frpc.service
echo "Type=simple">>/lib/systemd/system/frpc.service

#启动服务的命令(此处写你的frpc的实际安装目录)
echo "ExecStart=/opt/frp/frp_0.34.0_linux_amd64/frpc -c /opt/frp/frp_0.34.0_linux_amd64/frpc.ini">>/lib/systemd/system/frpc.service

echo "[Install]">>/lib/systemd/system/frpc.service
echo "WantedBy=multi-user.target">>/lib/systemd/system/frpc.service

systemctl start frpc && systemctl enable frpc

在内网穿透的部分增加一个配置,将jupyter的8888端口映射出去:
~/config/frp/frpc.ini下修改

# 映射jupyter
[ssh001002]
type = tcp
local_ip = 127.0.0.1
local_port = 8888
remote_port = 10100

执行拷贝并重启frpc服务(会断开,需要重连)

cp ~/config/frp/frpc.ini /opt/frp/frp_0.34.0_linux_amd64/frpc.ini && systemctl restart frpc

1.2 启动jupyter

因为我是在准内网的情况下使用算网,为了方便我都是直接使用root账户,所以启动的时候。如果未来是准备对外的,那么还是不要用root用户,避免其他人通过jupyter植入恶意的脚本。
创建配置文件:

└─ $ jupyter notebook --generate-config
Writing default config to: /root/.jupyter/jupyter_notebook_config.py
在配置文件中增加两行
c.NotebookApp.allow_remote_access = True
c.NotebookApp.ip = '0.0.0.0'

启动

jupyter notebook --allow-root

此时在远端已经可以访问了YOURWEB:10100/, 将命令行出现的token帖进去登录

python怎么做外网穿透 python 内网穿透_python怎么做外网穿透


长期的使用肯定要设置方便的密码,打开任意一个notebook,使用默认的工具生成密码。

python怎么做外网穿透 python 内网穿透_python怎么做外网穿透_02


将结果写入vim /root/.jupyter/jupyter_notebook_config.py,重新启动jupyter,此时就可以密码登录了

python怎么做外网穿透 python 内网穿透_python怎么做外网穿透_03


后台启停:

(tfenv) ┌─root@andy-Z97X-UD3H:/home
└─ $ nohup jupyter notebook --allow-root >out.file  2>&1 & 
[1] 23272

后台停止

# 1 查找
ps -ef |grep jupyter
---
root     23272 22546  0 09:58 pts/0    00:00:00 /usr/bin/python3 /usr/bin/jupyter-notebook --allow-root
root     23278 22546  0 09:59 pts/0    00:00:00 grep --color=auto jupyter
# 2 杀进程
kill 23272
---
└─ $ [C 10:00:51.439 NotebookApp] received signal 15, stopping
[I 10:00:51.442 NotebookApp] Shutting down 0 kernels
[I 10:00:51.442 NotebookApp] Shutting down 0 terminals

[1]+  Done                    jupyter notebook --allow-root

1.3 内核

jupyter多少是个比较独立的环境,如果我们要让jupyter可以启动我们虚拟环境的内核,还要进行一个设置。具体可以参考Python - 装机系列8 给Jupyter增加内核(环境)

查看:当前可用内核

jupyter kernelspec list
---
Available kernels:
  python3    /usr/share/jupyter/kernels/python3

安装:激活虚拟环境后安装(activate 命令,我已经绑定了简写alias)

# 激活环境
tfenv
# 安装
# 如果没有这个包的化
pip3 install ipykernel
# 执行安装
(tfenv) ┌─root@andy-Z97X-UD3H:/home
└─ $ python3 -m ipykernel install --name tfenv
Installed kernelspec tfenv in /usr/local/share/jupyter/kernels/tfenv
# 检查
└─ $ jupyter kernelspec list
Available kernels:
  tfenv      /usr/local/share/jupyter/kernels/tfenv
  python3    /usr/share/jupyter/kernels/python3

启动服务, 可以看到tfenv环境内核可以创建。

python怎么做外网穿透 python 内网穿透_python怎么做外网穿透_04


设置完毕。

其他

如果使用Jupyter运行CUDA,似乎最好只有一个notebook使用GPU(目前还不太确定,但是我在载入模型时一直报错,直到我把其他的notebook都shutdown了)

python怎么做外网穿透 python 内网穿透_python怎么做外网穿透_05