本文最后面的模型训练案例后面单独出一期分享哦~
1、背景与概念
🎯 概念:
SSH隧道可以将远程服务的端口代理到本地,或者代理本地端口到远程服务。

🎯 为什么要用 SSH 隧道?
我们平时训练、微调模型时,本地电脑的配置往往很难达到模型训练的要求,这个时候,我们往往会到云平台上进行模型训练,这就遇到两个问题,分别如下
⛳️ 本地访问远程云平台非公网可访问的端口
有的云平台不支持公网开放单独的 IP:port,比如我们想访问 AutoDL 上一个“非”6006或6008 端口时,是访问不了的,SSH 隧道可以帮我们解决本地无法访问云平台上的非公网暴漏端口应用的问题。
PS:AutoDL为每个实例的6006和6008端口都映射了一个可公网访问的地址,你在上面部署的其他端口应用无法直接通过公网访问。
⛳️ 本地 Pycarm 外挂远程云平台GPU
本地使用 Pycharm 进行开发、训练,但是每次调试需要先上传代码到平台远端才能调试,这样会带来极大的不便,SSH 隧道可以实现,本地 Pycharm 直接打通云平台
-
你可以在本地 pycharm 中直接在云平台上运行命令,并在 pycharm 控制台中看到运行结果
-
同时文件支持双向同步
相当于你 “本机外挂了一个远程 GPU 卡”,你就说香不香!

2、SSH 隧道实现方式
以 AutoDL 云平台为例,下面介绍两种方式,一种为终端命令的方式(适合Linux/Mac用户),另一种为图形工具的方式(仅能用于Windows)
- AudoDL 原文
- ps:autodl SSH指令在哪里获取?

比如我的ssh为:
ssh -p 35714 root@connect.cqa1.seetacloud.com
记住这个串,后面链接的时候要使用
2.1 图形工具
2.1.1 AutoDL Windows客户端(免安装)
https://autodl-public.ks3-cn-beijing.ksyuncs.com/tool/AutoDL-SSH-Tools.zip
2.1.2 SSH可视化工具
类似 XShell、FinallShell、Xterminal 这样的客户端工具,均支持 SSH 隧道链接
下面我以 Xterminal 为例演示
🎯 Xterminal
- 官网:https://www.xterminal.cn/
- 邀请码(输入邀请码赠送优惠):xyyds
- (1)创建服务链接


- (2)点击左上角SSH 隧道,然后点
+隧 道

这里有点坑,想看下图配置方式

- 接下来,我们到 AutoDL 的 JupyterLab 中启动一个应用

# 如下命令可以快速启动一个,端口为 8899 的python应用,端口8899可以自定义
python -m http.server 8899

然后,你就在你本地浏览器通过访问 http://localhost:8899 访问你服务器上所映射的对应端口的应用了

2.2 SSH代理命令
2.2.1 代理实例中的端口到本地
具体步骤为:
- Step.1 在实例中启动您的服务(比如您的服务监听6006端口,下面以6006端口为例)
- Step.2 在本地电脑的终端(cmd / powershell / terminal等)中执行代理命令:
ssh -CNg -L 6006:127.0.0.1:6006 root@connect.cqa1.seetacloud.com -p 35714
其中root@connect.cqa1.seetacloud.com和35714分别是实例中SSH指令的访问地址与端口,请找到自己实例的ssh指令做相应替换。6006:127.0.0.1:8899是指代理实例内8899端口到本地的6006端口。
# 这是我在AutoDL上的示例信息
ssh -p 35714 root@connect.cqa1.seetacloud.com
# 对应的终端执行代码就是这个【代理示例内8899端口到本地6006端口】
ssh -CNg -L 6006:127.0.0.1:8899 root@connect.cqa1.seetacloud.com -p 35714
# 执行后提示输入密码,回车,然后终端就停在那里
接下来本地浏览器访问: http:localhost:6006 即可请求到 8899 这个端口的应用了

注意:执行完这条ssh命令,没有任何日志是正常的,只要没有要求重新输入密码或错误退出
Windows下的cmd/powershell如果一直提示密码错误,是因为无法粘贴,手动输入即可(正常不会显示正在输入的密码)

- Step.3 在本地浏览器中访问
http://127.0.0.1:6006即可打开服务,注意这里的6006端口要和上述6006:127.0.0.1:8899中的端口保持一致

2.2.2 代理本地端口到实例
# 上面代理实例中的端口到本地的Step.2中的命令:
ssh -CNg -L 6006:127.0.0.1:6006 root@123.125.240.150 -p 42151
# 只需将上面的命令修改参数-L为-R即代理本地端口到实例
ssh -CNg -R 6006:127.0.0.1:6006 root@123.125.240.150 -p 42151
3、本地 Pycharm 打通云平台示例
3.1 配置 Interpreter On SSH
-
创建一个新的
Interpreter选择 On SSH

-
输入 ssh 连接信息

-
输入密码

-
点 next

-
点 nex

-
搞定

3.2 排除同步路径
默认情况下,工程下所有文件都会被同步到远端服务
有一些 logs、model 等信息非常大,可以选排除,即不做同步,因为远端下载模型非常快,文件太大,本地同步也没啥用
-
打开设置





搞定了~
3.3 同步本地与远端的数据与库的安装
这回,你可以在本地尽情使用 Pycharm 调试你的项目了,而运行是在远端 AutoDL 的 GPU 实例上了。
简直不要太爽!

如上图,发现 src 没有同步过去,你也可以手动同步

-
妥,来了

-
又出问题了,没有安装一些库

-
那就安装一下,在你本地终端执行也可以,到远程 jupyter 上也行,因为本地已经开启了 SSH 隧道了


你离胜利的彼岸越来越近了,还剩最后一个问题
3.4 镜像的设置,并开始用本地pycharm调用远端 GPU 调试
-
运行 train.py 训练模型你会发现,下载 huggingface 模型链接超时了

-
原因:我们代码中,使用了 huggingface transformers 库,下载模型连不上网络
tokenizer = AutoTokenizer.from_pretrained('OpenMOSS-Team/bart-base-chinese')
- 解决办法一:在代码中设置国内镜像

- 解决办法二,在 pycharm 上设置



3.5 模型训练效果演示
预告:本预训练模型的训练实操后面单独出一期分享哦~
- 看看本地 pycharm 通过 SSH 隧道调用远端云服务 GPU 训练时控制台的输出
-
- 真心的,我本机 macos m1 芯片,跑起来电脑卡的都不动,换成这个卡,本地调试太爽了!

- 看看远程服务器显卡使用情况

- 打开 TensorBoard 看看损失收敛情况
-
- 注意:AutoDL 上日志写入路径必须是:
/root/tf-logs - 忽略我的收敛情况,刚开始训,着急给大家截图,等训完估计得明天了,先哄娃睡觉了,晚安各位😴
- 注意:AutoDL 上日志写入路径必须是:

-
好像有点问题,算了,我先早停了

-
看看模型训练后的效果
预告:本预训练模型的训练实操后面单独出一期分享哦~

方便的话,动动您发财的小手,帮忙点个关注,点点赞吧~
更多推荐
-
AI 证书
-
AI 工具集导航:
-
AI 大模型全栈 50 万字知识库:评论区扣 666 获取
3 年打磨,全是精华,从普通职场人士到大模型算法,应有尽有!


54

被折叠的 条评论
为什么被折叠?



