
标签:大模型开发 | 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%)、完整性校验,完全为大模型等超大文件设计。
rsync(Ubuntu 默认已装,保险检查)# 检查rsync是否安装(小白可跳过,直接执行安装)
which rsync || sudo apt install -y rsync
# ✅ 预期效果:输出/usr/bin/rsync(已安装)或自动安装完成痛点:手动配置免密登录要生成密钥、传公钥,小白容易搞乱路径;解决:用 Shell 脚本 1 键配置!
# 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}→ 无需输密码直接进入云服务器,说明配置成功!
rsync依赖 SSH 的 22 端口);rsync断点续传 + 压缩传输;#!/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 | 显示更详细的进度信息(剩余时间 / 传输速度) |
upload_llm_model.sh→ 赋予权限:chmod +x upload_llm_model.sh→ 运行:bash upload_llm_model.sh;rsync会自动识别「已上传的部分」,从断开位置继续传;ssh: connect to host 123.45.67.89 port 22: Connection timed out
rsync: failed to connect to 123.45.67.89 (123.45.67.89): Permission denied (publickey)
sudo ifconfig eth0 mtu 1300),或直接用「Windows Terminal」的「上传文件」功能(仅支持小模型)。LOCAL_MODEL_PATH改成目录路径:LOCAL_MODEL_PATH="/home/llmdev/llm/models/",rsync会自动上传目录下所有模型文件。--bwlimit=1000(限制上传速度为 1000KB/s=1MB/s)。✅ 你已经掌握了大模型开发必备的「模型云同步」能力:
rsync比scp适合传大模型的核心原因;预告:《Shell 闭环:大模型开发的「一键启动器」,5 分钟写脚本自动运行大模型推理》(完成「环境搭建→模型检查→上传→推理」的完整大模型开发闭环!)
rsync参数可能略有不同,需微调。