给从没租过云 GPU 的人写的。先在下面选一个平台,页面只显示那一家的步骤。 通用的部分(推数据集、训练命令、拉回实测)五家都一样。
| 平台 | 付款 | 连 HuggingFace | 挂机跑 20000 步 | 适不适合你这一轮 |
|---|---|---|---|---|
| RunPod | 信用卡 | 直连 | 可以 | 推荐 —— 有现成 PyTorch 模板,手机浏览器能操作 |
| Vast.ai | 信用卡 | 直连 | 通常可以 | 更便宜,但机器是个人出租的,磁盘速度和稳定性参差 |
| Lambda | 信用卡 | 直连 | 可以 | 界面最简单,缺点是热门卡经常没货 |
| Colab | 信用卡 | 直连 | 会被断 | 不推荐 —— 会话超时会让 20000 步中途丢失 |
| AutoDL | 支付宝/微信 | 要加速 | 可以 | 人在国外的话付款和控制台都别扭,且必须走学术加速 |
价格我不写 —— 五家都在变,以你打开时页面上显示的为准。 界面标签也可能改版,以屏幕上的实际文字为准。
为什么必须去云端,而不是本机再跑一次。
Jetson 显存只塞得下 batch_size=2。20000 步 × 2 = 40000 个样本,
数据集有 19453 帧 —— 只过了 2.1 遍。官方 SmolVLA 配方是 batch=64,
同样 20000 步 = 65.8 遍。这是硬件天花板,本机重跑多少次都还是 2.1 遍。
本机那个 checkpoint(smolvla_20260820-1502)有两个真的进了权重的缺陷。
这一轮只改这两处,别的一律不动 —— 跑完如果变好,你能说清是什么让它变好的。
| # | 问题 | 现状 | 这轮改成 |
|---|---|---|---|
| 1 | 只训了 2.1 遍数据 | batch_size=2 |
batch_size=64 |
| 2 | 整个「右近」点位没进训练 | eval_split=0.2 切掉了 ep40–49 |
eval_split=0 |
第 2 条值得多看一眼。eval_split 按集号顺序掐掉末尾
(lerobot/datasets/factory.py:176,eps[:len(eps)-n_eval])。
你只有一个 task、50 集 → 训练 = ep0–39,验证 = ep40–49。
而 ep40–49 正好是你录的整个「右近」点位:模型从来没见过近距离的右侧杯子。
数据集本身是均衡的(左近 10 / 左远 12 / 中前 9 / 右远 9 / 右近 10),
不用补录。eval_split=0 就把那 10 集找回来。
操作者要求:「事无巨细的检查一遍,确保不要出任何问题」。下面是 2026-08-23 实际跑过的核对,不是清单模板 —— 每一行的「实测值」都来自 本机命令或 lerobot 源码,不是我记得的。
核对结果:发现 3 个会让你【直接跑失败】的问题,都已修进本页命令。
如果你在别处看到过我更早给的命令(含 pip install -U lerobot 那版),
那一版会失败,以本页为准。
| 项 | 实测值 | |
|---|---|---|
| Hub 上是否存在 | 是,2026-08-20 上传,9 个文件 / 233.7 MB | ✅ |
| 集数 / 帧数 | total_episodes 50 / total_frames 19453 | ✅ |
| 数据集格式 | codebase_version v3.0 | ✅ |
| 帧率 | fps 30 | ✅ |
| 机器人类型 | robot_type xlerobot | ✅ |
| 语言指令 | 1 条:"Pick up the cup and place it down" | ✅ |
| 状态 / 动作维数 | 都是 17(左臂6 右臂6 头2 底盘3) | ✅ |
| 归一化统计量 | meta/stats.json 在,state/action 均 17 维 | ✅ |
| 仓库可见性 | private → 第 ③ 步的 login 不能跳 | ⚠️ |
这是最容易出错、又最难发现的一块:训练时的相机名和分辨率,必须和实测时
run_policy_trials.py 送进去的完全一致,否则模型会拿错的画面填错的槽,
而且不会报错,只会表现得「不太准」。
| 相机 | 数据集里的形状 | 实测时送进去的 | rename_map 映射到 | |
|---|---|---|---|---|
head | [240, 424, 3] | 424 × 240 | camera1 | ✅ |
right_arm_wrist | [480, 640, 3] | 640 × 480 | camera2 | ✅ |
left_arm_wrist | [480, 640, 3] | 640 × 480 | camera3 | ✅ |
rename_map 的三行是从旧 checkpoint 的
train_config.json 原样抄出来的,与上一轮逐字一致 —— 不要改。
视频编码是 AV1,本机 pyav 15.1.0 带 libdav1d 解码器,云端新装的 av 也自带,
一般不会有问题;万一报解码错,把 --dataset.video_backend=torchcodec 加上试试。
| # | 问题 | 实测 | 后果 |
|---|---|---|---|
| 1 | pip install -U lerobot 装到的是 PyPI 0.4.4,
本机是 0.6.2 | PyPI 最新 = 0.4.4 | 落后两个大版本 |
| 2 | 0.4.4 的 [project.scripts] 里没有
lerobot-train | 只有 calibrate/record/replay/eval 等 8 个 | 命令第一个词就不存在 |
| 3 | --dataset.eval_split v0.6.0 才加 |
0.4.4 里 0 处 | 参数不认识,报错退出 |
顺便确认没问题的:--rename_map 在 v0.3.3 就有 ✅;
0.4.4 也能读 v3.0 数据集 ✅;--policy.path 是解析器的合法别名
(parser.py:42 PATH_KEY)✅。
解法:装本机同一个 commit,而不是 PyPI 版本。
该 commit 在 huggingface/lerobot 的 origin/main 上,公开可装。
本页第 ③ 步已经改成这个装法。
⚠️ 附带条件:lerobot 0.6.2 要求 requires-python >= 3.12,
而云端 PyTorch 模板常见是 Python 3.10 / 3.11。
装之前先 python -V,低于 3.12 就先建一个 3.12 环境(第 ③ 步有命令)。
cat ~/.ssh/id_rsa.pub,没有就 ssh-keygen 生成。这一步不用做了。2026-08-23 核对 Hub:
total_episodes 50、total_frames 19453、三路视频齐全、合计 233.7 MB,
与本机一致。⚠️ 但仓库是 private 的,所以第 ③ 步的 huggingface-cli login 不能跳 ——
不登录的话第 ④ 步会 404 说找不到数据集。
huggingface-cli login # 粘 write token
huggingface-cli upload-large-folder --repo-type=dataset \
Suyang99/xlerobot-cup-grasp-20260820-0230 \
~/.cache/huggingface/lerobot/Suyang99/xlerobot-cup-grasp-20260820-0230
传完去数据集页面
确认 meta/、data/、videos/ 三个目录都在。看不到就别往下走。
RunPod PyTorch 2.x —— 别选 Ubuntu,
那是裸系统,CUDA / PyTorch / Python 全要自己装save_freq=2000 会存 10 个,
默认盘会在跑到一半时塞爆RunPod 有两种停止方式,差别很大:
Stop 只是关机,硬盘还在继续计费;Terminate 才是彻底删除、完全停止计费。
见第 ⑦ 步。
pytorch/pytorch(带 CUDA 的官方镜像)Vast 的机器质量参差。 便宜是真便宜,但磁盘慢的机器光下载数据集就要很久。 第一次用建议先租最贵的那档跑通流程,熟了再省钱。
ssh ubuntu@<ip> 连,或点 Cloud IDE 开 JupyterLabLambda 经常缺货。如果所有型号都灰着,说明当前没有可用机器 —— 换个区域试试,或者换平台。别一直刷。
为什么这一轮不推荐 Colab:会话有时长上限,闲置会被回收。
20000 步跑到一半被断,进度就没了(除非把 --output_dir 指到挂载的 Google Drive 上,
但那样 checkpoint 写入会很慢)。真要用,把步数降到 8000 先看效果。
PyTorch 2.x + Python 3.10 那一档(基础镜像,别选社区镜像)# ① 先看 Python 版本 —— lerobot 0.6.2 要求 >= 3.12
python -V
# ② 如果低于 3.12,先建一个(模板自带 conda 就用 conda,没有就用 uv/venv)
conda create -y -n lr python=3.12 && conda activate lr
# ③ ★ 装本机同一个 commit,不要装 PyPI 版 ★
# PyPI 最新只有 0.4.4,里面【没有 lerobot-train 这个命令】,
# 也没有 --dataset.eval_split。见上面「起飞前检查 C」。
pip install "lerobot[smolvla] @ git+https://github.com/huggingface/lerobot.git@22bd7a2f489b367d8df42de803b1e8c4ca63a3f9"
# ④ 确认装对了:这两条都要有输出
lerobot-train --help | head -3
python -c "import lerobot; print(lerobot.__version__)" # 应该打印 0.6.2
# ⑤ 登录(数据集是 private 的,这步不能跳)
huggingface-cli login
这些平台在境外,直连 huggingface.co 没有任何问题 ——
不需要加速、不需要镜像。[smolvla] 这个 extra 会带上
transformers / num2words / accelerate,少了它 SmolVLA 起不来。
第 ④ 步是硬门槛。lerobot-train --help 如果报
command not found,说明装成了 PyPI 版 —— 停下来,别往下走,
回到第 ③ 步用带 git+https 的那条重装。
Colab 是笔记本,每条命令前面要加 !:
!python -V # 需要 >= 3.12,Colab 常见是 3.11 —— 低了就换平台
!pip install "lerobot[smolvla] @ git+https://github.com/huggingface/lerobot.git@22bd7a2f489b367d8df42de803b1e8c4ca63a3f9"
!lerobot-train --help | head -3 # 没输出就是装错了,别往下走
from huggingface_hub import notebook_login
notebook_login() # 粘同一个 token
# ★ 国内机器多半连不上 huggingface.co,先开学术加速 ★
source /etc/network_turbo
python -V # 需要 >= 3.12
pip install "lerobot[smolvla] @ git+https://github.com/huggingface/lerobot.git@22bd7a2f489b367d8df42de803b1e8c4ca63a3f9"
lerobot-train --help | head -3 # 没输出就是装错了,别往下走
huggingface-cli login # 粘同一个 token
这是 AutoDL 最容易卡住的地方。如果登录或下载卡住/超时:
source /etc/network_turbo 跑过了 —— 每开一个新终端都要重跑export HF_ENDPOINT=https://hf-mirror.comunset HF_ENDPOINTlerobot-train \
--policy.path=lerobot/smolvla_base \
--dataset.repo_id=Suyang99/xlerobot-cup-grasp-20260820-0230 \
--rename_map='{"observation.images.head":"observation.images.camera1","observation.images.right_arm_wrist":"observation.images.camera2","observation.images.left_arm_wrist":"observation.images.camera3"}' \
--batch_size=64 \
--num_workers=8 \
--steps=20000 \
--dataset.eval_split=0 \
--policy.device=cuda \
--save_freq=2000 --log_freq=100 \
--output_dir=outputs/train/ft --job_name=ft
rename_map 是从你现有 checkpoint 的 train_config.json 原样抄的,
和上一轮完全一致。不要改 —— 改了实机那边 build_obs 的键名就对不上,
模型会拿错的画面填错的槽。| 显存 | 常见型号 | batch_size 从多少起 |
|---|---|---|
| 80 GB | A100 80G / H100 | 64 |
| 40–48 GB | A100 40G / A6000 / L40S | 64 |
| 24 GB | 4090 / A10 / L4 | 64 起跑,OOM 就降 32 |
| 16 GB | T4 / V100 | 16 —— 只有 16 遍数据,效果打折 |
语言指令不用写进命令。LeRobot 从数据集的 meta/tasks.parquet 自己读,
你这个数据集里是 "Pick up the cup and place it down"。
实机试跑时的指令必须和它逐字一致。
--log_freq=100 每 100 步打一行,里面有 it/s(每秒几步)。
总时长 = 步数 ÷ it/s。我不知道各家 GPU 上这个模型的确切速度 —— 下面这张表是让你
看到第一行日志后自己查,不是预测。
| 日志里的 it/s | 20000 步要多久 | 10000 步要多久 |
|---|---|---|
| 1 | 5.6 小时 | 2.8 小时 |
| 2 | 2.8 小时 | 1.4 小时 |
| 3 | 1.9 小时 | 0.9 小时 |
| 5 | 1.1 小时 | 0.6 小时 |
| 8 | 0.7 小时 | 0.3 小时 |
嫌久就砍步数 —— 这一轮砍得起。真正的差距在 batch,不在步数:
| 配置 | 看过样本 | = 几遍数据 |
|---|---|---|
| 本机现有 checkpoint(batch 2 × 20000) | 40,000 | 2.1 遍 |
| batch 64 × 5000 步 | 320,000 | 16.4 遍 |
| batch 64 × 10000 步 | 640,000 | 32.9 遍 |
| batch 64 × 20000 步(本页命令) | 1,280,000 | 65.8 遍 |
10000 步已经是现在的 16 倍数据量,时间减半。第一次跑建议就用
--steps=10000 先看效果 —— save_freq=2000 会一路存 checkpoint,
觉得不够再从最后一个接着往下训。
| 看到什么 | 意味着 | 怎么办 | |
|---|---|---|---|
loss 稳定下降 | 正常 | 不用管 | |
loss 变 nan | 训崩了 | 停掉,把日志发我 | |
| CUDA out of memory | 显存不够 | 按上面那张表降 batch_size | |
卡在 Resolving data files | 下载慢 | 等一会;一直不动就是机器网络差,换一台 | 回第 ③ 步开学术加速 |
关掉网页标签会杀掉训练进程。要挂着跑就用 tmux:
tmux new -s ft # 在里面跑训练命令
# 按 Ctrl+B 松开,再按 D -> 脱离
tmux a -t ft # 回来看
Colab 上 tmux 帮不了你 —— 断的是整个运行时,不是终端。 把浏览器标签开着别关,别让电脑休眠。这也是不推荐 Colab 跑这一轮的原因。
huggingface-cli upload Suyang99/xlerobot-smolvla-ft \
outputs/train/ft/checkpoints/last/pretrained_model
!huggingface-cli upload Suyang99/xlerobot-smolvla-ft \
outputs/train/ft/checkpoints/last/pretrained_model
unset HF_ENDPOINT # 如果第 ③ 步设过镜像
source /etc/network_turbo
huggingface-cli upload Suyang99/xlerobot-smolvla-ft \
outputs/train/ft/checkpoints/last/pretrained_model
传完去模型页面确认这五样都在:
model.safetensors、config.json、train_config.json、
tokenizer/、两个 policy_*processor*。齐了才能关机。
RunPod:点 Terminate,不是 Stop。
Stop 只关机,硬盘还在扣钱;Terminate 才彻底停。
确认第 ⑥ 步传完再点 —— Terminate 会把机器里的文件全删掉。
Vast.ai:Instances 页面点 DESTROY(垃圾桶图标)。
只按 STOP 的话存储仍在计费。确认第 ⑥ 步传完再点。
Lambda:实例列表点 Terminate。
按小时计费,不 Terminate 会一直扣。确认第 ⑥ 步传完再点 —— 机器里的文件会一起没。
Colab:菜单「代码执行程序 → 断开连接并删除运行时」。 免费版不计费,但 Pro 会消耗计算单元。
AutoDL:控制台 → 实例 → 关机。 不是关浏览器,是点关机按钮。按小时计费,忘了关会扣到余额见底。 确认第 ⑥ 步传完再关。
cd ~/Robotic_challenge
huggingface-cli download Suyang99/xlerobot-smolvla-ft \
--local-dir 05-training/runs/ft/checkpoints/last/pretrained_model
然后在面板上把模型切到这个新 checkpoint,用和训练数据一致的指令跑 10 次, 和旧模型对比。面板上有 checkpoint 下拉框和任务描述对照条。
| 症状 | 原因 | 解法 |
|---|---|---|
| 关掉网页,训练没了 | 终端进程被杀 | 用 tmuxColab 无解,别关标签页 |
| CUDA out of memory | batch 太大 | 按第 ④ 步那张显存表降 |
| 训完发现指令对不上 | 实测用了别的句子 | 指令必须与数据集逐字一致 |
| 账单比预期高 | 没真正停止计费 | 第 ⑦ 步 —— 关机 ≠ 停止计费 |
| 跑到一半机器被收走 | 选了 Spot / Interruptible | 用 On-Demand 重开 |
| 404 找不到数据集 | 数据集是私有的,没登录 | 先 huggingface-cli login |
| 磁盘写满,训练中断 | Container Disk 太小 | 50 GB 起;已经在跑就删掉早期 checkpoint |
| 下载/登录一直超时 | 直连 huggingface.co | source /etc/network_turbo,每个新终端都要重跑 |
| 上传报 403 / 只读 | 设了 HF_ENDPOINT 镜像 |
unset HF_ENDPOINT 后改用学术加速 |
| 机器中途掉线 | 租到了低可靠性的出租机 | 只挑 Reliability > 0.99 的 |
| 所有型号都灰着 | 缺货 | 换区域,或换平台 |
| 跑到一半会话断了 | Colab 超时回收 | 降到 --steps=8000,或换别家 |
| 现象 | 云端重训会不会改善 |
|---|---|
| 整体动作不准、抓不到 | 很可能 —— 欠拟合是首要嫌疑 |
| 右侧近距离抓不准 | 很可能 —— 那 10 集终于进训练了 |
| 偏前(伸过头) | 部分 —— 右侧原来只学过远位 |
| 偏右 / 偏高 | 不确定 —— 要靠重放对照实验定性 |
| 运行时一卡一卡 | 完全不会 —— 那是推理端的 1.7 s 停顿,跟训练无关 |
并行做的事(不要等训练跑完):跑一次
--replay-episode 45 --send 的重放对照实验(45 属于「右近」组)。
重放的是录制时真实发生过的动作 —— 如果重放也偏,那就跟模型无关,重训救不了;
如果重放落点准,问题就锁定在策略上。这是判断「偏右」到底是模型还是硬件几何的唯一决定性测试。
数据集大小、点位分组、eval_split 切法均为本机实测 / 源码核对结果,非估计值。 各平台的价格与界面以其官网为准。