偷偷用 frp 使用内网 GPU

相信很多实验室的 GPU 只允许内网访问,但是广大学生并不想每次用 GPU 都得跑到实验室去,这时我们可以使用 frp 内网穿透。相比于 zerotier 工具,frp 并不能用 ifconfig 简单的检测出来,所以降低了被老师发现的风险(

你需要

  • 一台自己的有公网 ip 的服务器
  • 实验室的内网 GPU
  • 自己的电脑

frp 配置

有关 frp 的内容我在这里介绍过:

这里就不再赘述,直接放配置文件了

公网服务器端

frps.ini

[common]
bind_port = [port1]

内网 GPU 端

frpc.ini

[common]
server_addr = [server_ip]
server_port = [port1]

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = [port2]

这里的意思是,访问 server 端的 [remote_port] 就相当于访问 client 端的 [local_port]

systemd 配置

有关 systemd 的内容我在这篇帖子讲过:

此处不再赘述,直接贴配置文件

公网服务器端

frp.service

[Unit]
Description=frp to xxxx
After=network.target

[Service]
Type=simple
WorkingDirectory=xxx
ExecStart=/xxx/frps -c /xxx/frps.ini
Restart=always
RestartSec=10
[Install]
WantedBy=default.target

内网 GPU 端

frp.service

[Unit]
Description=frp to xxxx
After=network.target

[Service]
Type=simple
WorkingDirectory=/xxx/frp
ExecStart=/xxx/frp/frpc -c /xxx/frp/frpc.ini
Restart=always
RestartSec=10

[Install]
WantedBy=default.target

这样弄完之后,就可以通过 ssh username@server_ip:[port2] 来连接实验室的内网 GPU 了

进阶玩法 - 使用远程 GPU 上的 jupyter notebook

我们知道 jupyter notebook 的网页一般是 8888 端口,所以我们首先要给 frpc.ini 加个端口映射:

frpc.ini

[common]
server_addr = [server_ip]
server_port = [port1]

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = [port2]

[jupyter notebook]
type=tcp
local_ip = 127.0.0.1
local_port = 8888
remote_port = [port3]

然后我们还不能直接通过 server_ip:port3 来访问 GPU 上的 jupyter notebook 服务。我们的 jupyter notebook 默认是只支持本机打开的,不接受远程连接,我们需要进行一些配置。

参考帖子:科研第二步:远程在服务器上跑程序jupyter使用_使用远程服务器的jupyter-CSDN博客

这里为了防止删帖,故再次记录一遍。

1.服务器上安装 jupyter

在 anaconda 已经配置好的情况下,只需要使用:

conda install ipykernel

此时 jupyter 已经可以使用了,直接输入 jupyter notebook 或者 jupyter lab 是可以用的,但是这样是不会跳出网页的,因为我们是远程连接服务器使用的 jupyter,所以我们需要配置 jupyter 实现远程连接。

2.服务器远程使用 jupyter

生成 jupyter 配置文件

使用这个指令

jupyter notebook --generate-config

生成 jupyter 配置文件之后我们要给 jupyter 设置一个密码

设置密码

使用如下指令之后

jupyter notebook password

输入的密码会保存到 .jupyter/jupyter_notebook_config.json 文件中
注意:本操作为自动设置密码,即后面不用在配置文件中单独配置密码

设置远程 ip 可访问

打开 jupyter_notebook_config.py 文件,在文件中加入如下几行
jupyter_notebook_config.py 应该在 /$HOME/.jupyter 路径下
找到配置文件打开并设置

c.NotebookApp.ip = '*'    #允许所有ip访问,很重要
c.NotebookApp.open_browser = False    #不打开浏览器
c.NotebookApp.port = 8888             #端口为8888,可以自己设置

至此就可以使用刚才设置的密码和端口在自己电脑上的浏览器上连接jupyter了,首先在服务器上运行jupyter notebook或者jupyter lab
这里推荐jupyter lab,可以实现代码不增加网页
如服务器地址为 10.24.82.184 那么只需要在浏览器中输入10.24.82.184:8888 即可访问。

完结撒花~

END

rt,入坑后不知道啥情况,ssh一直被rejected,issue里找了很久,调试老半天没搞好。崩溃之下换了ZeroTier来内网穿透,家人们,好起来了!! 感谢@易老!!!(易新颢.手动.jpg)

参考文档: ZeroTier实现内网穿透、异地组网-腾讯云开发者社区-腾讯云 (tencent.com)

注册账号

https://my.zerotier.com/network
访问ZT官网,注册账号,创建新的Network,记录NETWORK_ID

服务器端:

使用脚本一键安装:

curl -s https://install.zerotier.com | sudo bash  

安装完成后会自动在/var/lib/zerotier-one/下生成相关文件及目录

加入网络,想穿透哪台,哪台就加入。

sudo zerotier-cli join fadaxxxxxxx  # 上面记录的NETWORK_ID
sudo zerotier-cli status  # 查看网络状态

59f31d396a2604f67d7680808ce9638

回到ZT管理界面,在新增加的设备上打勾

客户端:

进入官网进行下载:Download (zerotier.com)

安装好后,进入程序,右键选择Join new network,输入之前记录的NETWORD_ID。返回ZT客户端,点勾完成设备授权。

至此,就可以快乐的开始远程啦!!

SSH:

SSH的ID即ZT网络管理界面的Managed IPs,默认端口仍为22

zt你在校园网下还可以,但是你远离学校了,比如在家,或者去了其他地方,zt不是很稳定,不如frp

可能如果你用了内地的moon会好点,但是协会zt现在只有hk的moon

我之前是在穿戴里面校园网的时候用zt,后来也都用frp了,一直很稳定