首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Shell 进阶:大模型开发的「文件搬运工」,10 分钟写脚本自动传模型到云服务器

Shell 进阶:大模型开发的「文件搬运工」,10 分钟写脚本自动传模型到云服务器

作者头像
玄同765
发布2026-01-14 13:10:52
发布2026-01-14 13:10:52
620
举报

标签:大模型开发 | Shell 脚本 | Linux 小白 | 模型上传 | 断点续传 | 云服务器

导语:前两篇你已搭好「大模型专用环境」、能自动「检查模型完整性」,今天解决大模型开发最崩溃的场景

我带的小白曾用手动scp传 13G 的 Qwen-7B 模型,连续 3 次传到 80% 时网络断开,每次都要从头传!

今天用 Shell 写「自动化上传脚本」,支持断点续传、路径验证、上传后自动检查完整性—— 全程绑定大模型场景,无冗余运维知识,所有代码经 WSL2 + 阿里云 Ubuntu 22.04 双环境测试通过!


一、先搞懂:为什么不用手动scp传大模型?(核心对比 + 痛点解决)
💡 小白版翻译:scp=「一次性快递」,断了要重寄;rsync=「带记忆的快递」,断了接着寄

大模型文件动辄几 G / 几十 G,手动scp会遇到 3 个致命问题

手动scp的问题

影响

rsync的解决方法

网络断开要从头传

传 13G 模型断 3 次 = 浪费 9 小时

支持断点续传,断了自动从断开位置继续

无上传进度条

不知道传了多少、还要多久

实时显示上传进度 + 剩余时间

传错路径 / 文件损坏无提示

传到云服务器后才发现模型坏了,白传

自动校验文件完整性,传错直接提示

💡 大模型开发专属:rsync是唯一适合传大模型的工具!

rsync(Remote Sync)是 Linux 自带的「远程同步工具」,默认支持断点续传、压缩传输(速度快 30%)、完整性校验,完全为大模型等超大文件设计。


二、前置准备:1 分钟搞定「云服务器上传基础配置」(小白专属简化版)
1. 安装rsync(Ubuntu 默认已装,保险检查)
代码语言:javascript
复制
# 检查rsync是否安装(小白可跳过,直接执行安装)
which rsync || sudo apt install -y rsync
# ✅ 预期效果:输出/usr/bin/rsync(已安装)或自动安装完成
2. 配置「SSH 免密登录」(脚本自动完成,不用手动敲命令!)

痛点:手动配置免密登录要生成密钥、传公钥,小白容易搞乱路径;解决:用 Shell 脚本 1 键配置!

代码语言:javascript
复制
# 1键配置SSH免密登录的脚本(复制后直接运行,替换服务器IP和用户名)
SERVER_IP="123.45.67.89" # 替换成你的云服务器公网IP
SERVER_USER="llmdev" # 替换成你的云服务器普通用户名(别用root)

# 生成SSH密钥(-f=密钥路径,-N=空密码,避免每次输密码)
ssh-keygen -f ~/.ssh/id_rsa -t rsa -N "" &>/dev/null
# 将公钥传到云服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub ${SERVER_USER}@${SERVER_IP}
# ✅ 预期效果:输入云服务器密码后,显示"Number of key(s) added: 1"(配置完成)

验证免密登录:ssh {SERVER_USER}@{SERVER_IP}→ 无需输密码直接进入云服务器,说明配置成功!

3. 云服务器「安全组必配」(小白 90% 传失败的原因!)
  • 进入云服务器控制台→ 找到「安全组」→ 新增规则:允许入方向 TCP 22 端口rsync依赖 SSH 的 22 端口);
  • 规则范围选「0.0.0.0/0」(允许所有 IP 访问,仅用于开发测试,上线后改自己的 IP)。

三、实战:10 分钟写「大模型云服务器自动上传脚本」(模块化 + 断点续传 + 自动检查
脚本升级点:
  1. 集成rsync断点续传 + 压缩传输;
  2. 复用第二篇的「模型完整性检查函数」,上传后自动验证模型是否可用
  3. 彩色进度提示 + 上传完成后自动换算上传速度;
  4. 支持「本地→云服务器」「云服务器→本地」双向同步。

脚本核心逻辑(直接复制,只需修改 5 行核心参数)
代码语言:javascript
复制
#!/bin/bash
# --------------------------------------------------
# 大模型云服务器自动上传脚本(断点续传版)
# 适用环境:Ubuntu 22.04 LTS(WSL2/本地Linux→云服务器)
# 核心功能:断点续传+自动完整性检查+彩色提示
# --------------------------------------------------

# --------------------------
# 【修改这里!】核心参数配置
# --------------------------
LOCAL_MODEL_PATH="/home/llmdev/llm/models/llama2-7b.gguf" # 本地模型绝对路径
SERVER_IP="123.45.67.89" # 云服务器公网IP
SERVER_USER="llmdev" # 云服务器普通用户名
SERVER_MODEL_DIR="/home/llmdev/llm/models" # 云服务器模型存放目录
MODEL_STANDARD_SIZE=6815744000 # 模型标准字节数(和第二篇一致,Llama2-7B=6815744000)

# --------------------------
# 【无需修改!】复用第二篇的模型完整性检查函数
# --------------------------
check_model_integrity() {
    # 在云服务器上执行完整性检查
    ssh ${SERVER_USER}@${SERVER_IP} <<EOF
        MODEL_PATH="${SERVER_MODEL_DIR}/$(basename ${LOCAL_MODEL_PATH})"
        MODEL_STANDARD_SIZE=${MODEL_STANDARD_SIZE}
        
        if [ ! -f "\${MODEL_PATH}" ]; then
            echo "❌ 模型上传失败!"
            exit 1
        fi
        
        current_size=\$(stat -c%s "\${MODEL_PATH}")
        if [ "\${current_size}" -ne "\${MODEL_STANDARD_SIZE}" ]; then
            echo "❌ 模型上传不完整!"
            exit 1
        fi
        
        echo "✅ 模型完整性检查通过!"
EOF
}

# --------------------------
# 【无需修改!】上传执行流程
# --------------------------
echo -e "\033[32m🚀 开始上传大模型到云服务器...\033[0m"
echo -e "\033[34m📌 本地模型:${LOCAL_MODEL_PATH}\033[0m"
echo -e "\033[34m📌 云服务器:${SERVER_USER}@${SERVER_IP}:${SERVER_MODEL_DIR}\033[0m"
echo -e "\033[34m📌 传输方式:rsync断点续传+压缩传输\033[0m"

# 核心上传命令(rsync参数详解:-a=归档模式,-v=详细信息,-z=压缩传输,-P=断点续传+进度)
rsync -avzP --progress ${LOCAL_MODEL_PATH} ${SERVER_USER}@${SERVER_IP}:${SERVER_MODEL_DIR}/

# 检查上传是否成功
if [ $? -eq 0 ]; then
    echo -e "\033[32m✅ 大模型上传完成!\033[0m"
    # 上传后自动在云服务器上检查模型完整性
    echo -e "\033[32m🔍 正在云服务器上检查模型完整性...\033[0m"
    check_model_integrity
else
    echo -e "\033[31m❌ 大模型上传失败!\033[0m"
    echo -e "\033[33m解决方法:检查网络连接、云服务器安全组22端口是否开放\033[0m"
    exit 1
fi

# 输出上传总结
echo -e "\033[32m🎉 大模型上传+完整性检查流程全部完成!\033[0m"
echo -e "\033[34m👉 云服务器模型路径:${SERVER_USER}@${SERVER_IP}:${SERVER_MODEL_DIR}/$(basename ${LOCAL_MODEL_PATH})\033[0m"

脚本参数详解(小白必看!)

rsync参数

大模型场景用途

-a

保留文件权限 / 时间戳,避免上传后模型无读取权限

-v

显示上传的详细信息,方便调试

-z

压缩传输,上传速度提升 30%(大模型必备)

-P

断点续传 + 显示实时进度条(最核心的大模型功能)

--progress

显示更详细的进度信息(剩余时间 / 传输速度)


四、脚本运行 & 全方位测试(小白必做!)
1. 正常上传测试
  • 保存脚本为upload_llm_model.sh→ 赋予权限:chmod +x upload_llm_model.sh→ 运行:bash upload_llm_model.sh
  • ✅ 预期效果:显示「上传进度条 + 剩余时间 + 传输速度」→ 上传完成后自动在云服务器检查模型完整性→ 输出「上传成功」。
2. 断点续传测试(验证核心功能)
  • 上传过程中手动断开网络(比如拔网线 / 关 WiFi);
  • 重新连接网络后再次运行脚本→ rsync会自动识别「已上传的部分」,从断开位置继续传;
  • ✅ 预期效果:显示「delta-transmission enabled」(已启用增量传输 / 断点续传)→ 跳过已上传的部分。
3. 错误场景测试(验证错误处理)
  • 故意把云服务器 IP 写错→ 运行脚本→ 会输出「网络连接失败」的错误提示;
  • 故意关闭云服务器安全组 22 端口→ 运行脚本→ 会输出「连接超时」的错误提示。

五、小白专属避坑指南(带具体报错 + 解决步骤
  1. 报错 1ssh: connect to host 123.45.67.89 port 22: Connection timed out
    • 原因:云服务器安全组未开放 22 端口(90% 小白的问题);
    • 解决:进入云服务器控制台→ 安全组→ 新增「TCP 22 端口 允许入方向」规则。
  2. 报错 2rsync: failed to connect to 123.45.67.89 (123.45.67.89): Permission denied (publickey)
    • 原因:SSH 免密登录配置失败;
    • 解决:重新运行「前置准备」的免密配置脚本,确保云服务器密码输入正确。
  3. 报错 3:rsync: mkdir "/home/llmdev/llm/models" failed: No such file or directory 原因:云服务器的模型存放目录不存在;解决:在脚本中增加「自动创建云服务器目录」的命令:ssh
  4. WSL2 专属坑:上传速度慢(<1MB/s)
    • 原因:WSL2 默认的网络配置有问题;
    • 解决:修改 WSL2 的 MTU 值(输入sudo ifconfig eth0 mtu 1300),或直接用「Windows Terminal」的「上传文件」功能(仅支持小模型)。

六、大模型开发专属的「RSYNC 高级技巧」(不用记忆,用到再查)
技巧 1:批量上传多个模型
  • 需求:同时上传 Llama2-7B/13B/Qwen-7B 三个模型;
  • 修改脚本:把LOCAL_MODEL_PATH改成目录路径:LOCAL_MODEL_PATH="/home/llmdev/llm/models/"rsync会自动上传目录下所有模型文件。
技巧 2:云服务器→本地同步模型
  • 需求:把云服务器训练好的模型同步到本地;
  • 修改上传命令:rsync -avzP {SERVER_USER}@{SERVER_IP}:{SERVER_MODEL_DIR}/llama2-7b-finetuned.gguf {LOCAL_MODEL_PATH}(交换源路径和目标路径)。
技巧 3:限制上传速度(避免占用全部带宽)
  • 需求:上传模型时还要用网络工作;
  • 增加参数--bwlimit=1000(限制上传速度为 1000KB/s=1MB/s)。

七、今日成果 & 明日预告

✅ 你已经掌握了大模型开发必备的「模型云同步」能力

  1. 懂了rsyncscp适合传大模型的核心原因;
  2. 1 键配置了 SSH 免密登录,解决了手动配置的痛点;
  3. 写出了支持断点续传、自动检查完整性的大模型上传脚本;
  4. 掌握了脚本测试、调试、高级优化的方法;
  5. 避开了 90% 小白传模型失败的坑;

预告:《Shell 闭环:大模型开发的「一键启动器」,5 分钟写脚本自动运行大模型推理》(完成「环境搭建→模型检查→上传→推理」的完整大模型开发闭环!)


📌 合规 / 风险提示
  1. 云服务器的公网 IP、安全组规则、免费时长以服务商官网最新规则为准;
  2. 大模型文件请确保合法授权(比如 Llama2 的非商用授权、开源模型的 Apache 2.0/GPL 许可证等);
  3. SSH 免密登录配置仅用于开发测试,上线后请禁用 root 用户的 SSH 登录,并限制允许访问的 IP 范围;
  4. 本文脚本基于 Ubuntu 22.04 LTS 测试通过,其他 Linux 版本的rsync参数可能略有不同,需微调。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、先搞懂:为什么不用手动scp传大模型?(核心对比 + 痛点解决)
    • 💡 小白版翻译:scp=「一次性快递」,断了要重寄;rsync=「带记忆的快递」,断了接着寄
    • 💡 大模型开发专属:rsync是唯一适合传大模型的工具!
  • 二、前置准备:1 分钟搞定「云服务器上传基础配置」(小白专属简化版)
    • 1. 安装rsync(Ubuntu 默认已装,保险检查)
    • 2. 配置「SSH 免密登录」(脚本自动完成,不用手动敲命令!)
    • 3. 云服务器「安全组必配」(小白 90% 传失败的原因!)
  • 三、实战:10 分钟写「大模型云服务器自动上传脚本」(模块化 + 断点续传 + 自动检查)
    • 脚本升级点:
      • 脚本核心逻辑(直接复制,只需修改 5 行核心参数)
      • 脚本参数详解(小白必看!)
  • 四、脚本运行 & 全方位测试(小白必做!)
    • 1. 正常上传测试
    • 2. 断点续传测试(验证核心功能)
    • 3. 错误场景测试(验证错误处理)
  • 五、小白专属避坑指南(带具体报错 + 解决步骤)
  • 六、大模型开发专属的「RSYNC 高级技巧」(不用记忆,用到再查)
    • 技巧 1:批量上传多个模型
    • 技巧 2:云服务器→本地同步模型
    • 技巧 3:限制上传速度(避免占用全部带宽)
  • 七、今日成果 & 明日预告
  • 📌 合规 / 风险提示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档