XLeRobot · 云端训练 · 2026-08-23

第一次用云端 GPU 训练

给从没租过云 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 那版), 那一版会失败,以本页为准。

A. 数据集本身 —— 全部通过

项实测值
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 不能跳⚠️

B. 相机参数对齐 —— 全部通过

这是最容易出错、又最难发现的一块:训练时的相机名和分辨率,必须和实测时 run_policy_trials.py 送进去的完全一致,否则模型会拿错的画面填错的槽, 而且不会报错,只会表现得「不太准」。

相机数据集里的形状实测时送进去的rename_map 映射到
head[240, 424, 3]424 × 240camera1✅
right_arm_wrist[480, 640, 3]640 × 480camera2✅
left_arm_wrist[480, 640, 3]640 × 480camera3✅

rename_map 的三行是从旧 checkpoint 的 train_config.json 原样抄出来的,与上一轮逐字一致 —— 不要改。 视频编码是 AV1,本机 pyav 15.1.0 带 libdav1d 解码器,云端新装的 av 也自带, 一般不会有问题;万一报解码错,把 --dataset.video_backend=torchcodec 加上试试。

C. ★ lerobot 版本 —— 这里发现了三个真问题 ★

#问题实测后果
1pip install -U lerobot 装到的是 PyPI 0.4.4, 本机是 0.6.2PyPI 最新 = 0.4.4落后两个大版本
20.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 环境(第 ③ 步有命令)。

开始之前

全流程

①Jetson:把数据集推到 HuggingFace✅ 已完成,跳过2026-08-20 已传

这一步不用做了。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/ 三个目录都在。看不到就别往下走。

②租一台机器约 5–10 分钟
  • 注册 runpod.io → 右上角充值(Billing → Add Credit)
  • ★ 左边选 Pods,不是 Serverless ★ —— Serverless 是部署按请求计费的推理接口, 跟训练完全不是一回事
  • Deploy → 挑一张 RTX 4090(24 GB) 或 A100
  • Template 选官方的 RunPod PyTorch 2.x —— 别选 Ubuntu, 那是裸系统,CUDA / PyTorch / Python 全要自己装
  • Container Disk 给 50 GB(默认往往只有 10–20 GB)—— SmolVLA 一个 checkpoint 约 1.8 GB,save_freq=2000 会存 10 个, 默认盘会在跑到一半时塞爆
  • ★ 计费方式选 On-Demand,不要选 Spot / Interruptible ★ —— Spot 便宜,但别人出价更高时机器会被直接抢走,20000 步跑到一半没了,钱照扣
  • Deploy → 等状态变 Running → 点 Connect → Start Web Terminal(手机上也能用)

RunPod 有两种停止方式,差别很大: Stop 只是关机,硬盘还在继续计费;Terminate 才是彻底删除、完全停止计费。 见第 ⑦ 步。

  • 注册 vast.ai → Billing 充值
  • Search 页面 → 左边筛选 GPU: RTX 4090,Disk: 50 GB+
  • 上方 Instance Configuration → 镜像选 pytorch/pytorch(带 CUDA 的官方镜像)
  • 看每台机器的 Reliability 分数,挑 0.99 以上的 —— 这是个人出租的机器,低分的会中途掉线
  • RENT → Instances 页等它变绿 → 点 Open 进 Jupyter,或用页面给的 SSH 命令

Vast 的机器质量参差。 便宜是真便宜,但磁盘慢的机器光下载数据集就要很久。 第一次用建议先租最贵的那档跑通流程,熟了再省钱。

  • 注册 lambdalabs.com → GPU Cloud → 绑卡
  • Launch instance → 挑一张 A10 或 A100(4090 一般没有)
  • 选区域 → 贴 SSH 公钥(准备阶段那一步生成的)
  • 等状态变 Running → 用页面上的 ssh ubuntu@<ip> 连,或点 Cloud IDE 开 JupyterLab

Lambda 经常缺货。如果所有型号都灰着,说明当前没有可用机器 —— 换个区域试试,或者换平台。别一直刷。

  • 打开 colab.research.google.com → 新建笔记本
  • 菜单 代码执行程序 → 更改运行时类型 → 硬件加速器选 GPU,类型挑能选到的最好的(A100 > L4 > T4)
  • 免费版给 T4(16 GB),batch 只能到 16 左右;要 A100 得订 Colab Pro+

为什么这一轮不推荐 Colab:会话有时长上限,闲置会被回收。 20000 步跑到一半被断,进度就没了(除非把 --output_dir 指到挂载的 Google Drive 上, 但那样 checkpoint 写入会很慢)。真要用,把步数降到 8000 先看效果。

  • 注册 autodl.com → 充值(支付宝/微信)
  • 算力市场 → 挑一台 RTX 4090(24 GB)
  • 镜像选 PyTorch 2.x + Python 3.10 那一档(基础镜像,别选社区镜像)
  • 数据盘 50 GB 以上
  • 创建 → 开机 → 点 JupyterLab → 左下角开一个 Terminal
③装环境约 5 分钟
# ① 先看 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.com
  • 但镜像只能下载不能上传 —— 第 ⑥ 步传模型回去前必须 unset HF_ENDPOINT
④开始训练命令五家都一样整段复制,不用改
lerobot-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 GBA100 80G / H10064
40–48 GBA100 40G / A6000 / L40S64
24 GB4090 / A10 / L464 起跑,OOM 就降 32
16 GBT4 / V10016 —— 只有 16 遍数据,效果打折

语言指令不用写进命令。LeRobot 从数据集的 meta/tasks.parquet 自己读, 你这个数据集里是 "Pick up the cup and place it down"。 实机试跑时的指令必须和它逐字一致。

⑤看着它跑 · 要跑多久按 it/s 自己算

--log_freq=100 每 100 步打一行,里面有 it/s(每秒几步)。 总时长 = 步数 ÷ it/s。我不知道各家 GPU 上这个模型的确切速度 —— 下面这张表是让你 看到第一行日志后自己查,不是预测。

日志里的 it/s20000 步要多久10000 步要多久
15.6 小时2.8 小时
22.8 小时1.4 小时
31.9 小时0.9 小时
51.1 小时0.6 小时
80.7 小时0.3 小时

嫌久就砍步数 —— 这一轮砍得起。真正的差距在 batch,不在步数:

配置看过样本= 几遍数据
本机现有 checkpoint(batch 2 × 20000)40,0002.1 遍
batch 64 × 5000 步320,00016.4 遍
batch 64 × 10000 步640,00032.9 遍
batch 64 × 20000 步(本页命令)1,280,00065.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 跑这一轮的原因。

⑥把模型传回 Hub约 3 分钟
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*。齐了才能关机。

⑦★ 停止计费 ★30 秒

RunPod:点 Terminate,不是 Stop。 Stop 只关机,硬盘还在扣钱;Terminate 才彻底停。 确认第 ⑥ 步传完再点 —— Terminate 会把机器里的文件全删掉。

Vast.ai:Instances 页面点 DESTROY(垃圾桶图标)。 只按 STOP 的话存储仍在计费。确认第 ⑥ 步传完再点。

Lambda:实例列表点 Terminate。 按小时计费,不 Terminate 会一直扣。确认第 ⑥ 步传完再点 —— 机器里的文件会一起没。

Colab:菜单「代码执行程序 → 断开连接并删除运行时」。 免费版不计费,但 Pro 会消耗计算单元。

AutoDL:控制台 → 实例 → 关机。 不是关浏览器,是点关机按钮。按小时计费,忘了关会扣到余额见底。 确认第 ⑥ 步传完再关。

⑧Jetson:拉回来,实测五家都一样约 5 分钟
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 memorybatch 太大按第 ④ 步那张显存表降
训完发现指令对不上实测用了别的句子指令必须与数据集逐字一致
账单比预期高没真正停止计费第 ⑦ 步 —— 关机 ≠ 停止计费
跑到一半机器被收走选了 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 切法均为本机实测 / 源码核对结果,非估计值。 各平台的价格与界面以其官网为准。