相信很多实验室的 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