200字
Scaling 的力量与边界:LeHome SmolVLA 从 30k 到 90k 的训练复盘
2026-04-30
2026-05-10

摘要

在 30k baseline 提交之后,我继续对 SmolVLA 进行 scale:从 30k → 50k → 70k → 90k 逐步加训,每阶段评测四类衣物的效果。本文详细对比 70k 和 90k 在四类任务上的完整评测结果,记录"为什么明明 90k 多训了 20k 步,最终却选了 70k",以及我对 scaling 在这个任务上演化趋势的观察。


正文

效果可见B站视频:

1. 背景:30k 不够用

30k 四类 baseline 的结果:

类别 30k Success Rate
top_short 8.33%
top_long 50.00%
pant_long 16.67%
pant_short 75.00%

看 Isaac Sim 面板上的表现,top_long 和 pant_short 的 rollout 已经比较像样了,但 top_short 和 pant_long 还差得远——大部分 episode 动作看着有点意思,但几何判定过不了。

直觉上,30k step 对于一个四类混合任务可能不够。继续 scale。

2. 训练路线

训练策略:基于前一个 checkpoint resume 继续训练,而不是每次从头训。

阶段 起始 追加步数 累计步数 batch_size
Baseline Submit pretrained 30k 30k 48
Scale 50k 30k ckpt 20k 50k 48
Scale 70k 50k ckpt 20k 70k 48
Scale 90k 70k ckpt 20k 90k 48

每次 resume + 20k step,batch_size 保持 48。

# 从 50k resume 到 70k 的示例命令
tmux new -s smolvla70k
conda activate lehome311
source .venv/bin/activate
cd /root/gpufree-data/lehome-challenge

POLICY_PATH=$(ls -d outputs/train/smolvla_4types_from30k_plus20k_*/checkpoints/020000/pretrained_model | tail -n 1)
echo "resume from: $POLICY_PATH"

RUN_NAME=smolvla_4types_from50k_plus20k_$(date +%Y%m%d_%H%M%S)

LEHOME_DATASET_ROOT=Datasets/example/four_types_merged \
HF_HOME=/root/gpufree-data/hf-cache \
HF_HUB_OFFLINE=1 \
TRANSFORMERS_OFFLINE=1 \
HF_HUB_ENABLE_HF_TRANSFER=0 \
lerobot-train \
  --config_path=configs/train_smolvla_submit.yaml \
  --policy.path="$POLICY_PATH" \
  --policy.push_to_hub=false \
  --rename_map='{"observation.images.top_rgb":"observation.images.camera1","observation.images.left_rgb":"observation.images.camera2","observation.images.right_rgb":"observation.images.camera3"}' \
  --steps=20000 \
  --batch_size=48 \
  --save_freq=2000 \
  --log_freq=500 \
  --output_dir=outputs/train/${RUN_NAME} \
  2>&1 | tee outputs/train/${RUN_NAME}.log

每个阶段训练完后,对四类衣物各跑一轮完整评测。

3. 70k 评测结果(完整数据)

评测使用 custom_smolvla policy type,headless 模式,每类跑 12 个 episode。

3.1 top_long(70k)

Total Episodes: 12
Average Return: 149.14 ± 52.64
Success Rate: 58.33%

Per-Garment:
  Top_Long_Seen_0: 100.00%, Avg Return = 115.02
  Top_Long_Seen_1: 0.00%,   Avg Return = 210.31
  Top_Long_Seen_2: 100.00%, Avg Return = 131.10
  Top_Long_Seen_3: 100.00%, Avg Return = 127.94
  Top_Long_Seen_4: 100.00%, Avg Return = 130.72
  Top_Long_Seen_5: 100.00%, Avg Return = 91.60
  Top_Long_Seen_6: 0.00%,   Avg Return = 200.22
  Top_Long_Seen_7: 0.00%,   Avg Return = 130.28
  Top_Long_Seen_8: 100.00%, Avg Return = 112.65
  Top_Long_Seen_9: 100.00%, Avg Return = 107.07
  Top_Long_Unseen_0: 0.00%, Avg Return = 161.39
  Top_Long_Unseen_1: 0.00%, Avg Return = 271.36

Seen 实例 7/10 成功,Unseen 全部失败。

3.2 top_short(70k)

Total Episodes: 12
Average Return: 203.72 ± 111.41
Success Rate: 25.00%

Per-Garment:
  Top_Short_Seen_1: 100.00%, Avg Return = 90.27
  Top_Short_Seen_2: 100.00%, Avg Return = 112.11
  Top_Short_Seen_5: 100.00%, Avg Return = 244.29
  (其余 9 个均为 0.00%)

12 个 episode 中只有 3 个成功。和 30k top_short 成功率一模一样(25%),scale 没有带来提升。但成功的几个 episode 的 Avg Return 在降低(90、112),说明成功的轨迹变高效了。

3.3 pant_long(70k)

Total Episodes: 12
Average Return: 123.52 ± 48.47
Success Rate: 41.67%

Per-Garment:
  Pant_Long_Seen_3: 100.00%, Avg Return = 97.39
  Pant_Long_Seen_5: 100.00%, Avg Return = 67.85
  Pant_Long_Seen_6: 100.00%, Avg Return = 84.53
  Pant_Long_Seen_9: 100.00%, Avg Return = 175.19
  Pant_Long_Unseen_0: 100.00%, Avg Return = 100.88
  (其余 7 个均为 0.00%)

相比 30k 的 16.67%,涨到了 41.67%。虽然绝对值不算高,但趋势是好的。

3.4 pant_short(70k)

Total Episodes: 12
Average Return: 136.63 ± 53.45
Success Rate: 83.33%

Per-Garment:
  Pant_Short_Seen_0: 100.00%, Avg Return = 102.02
  Pant_Short_Seen_1: 0.00%,   Avg Return = 188.84
  Pant_Short_Seen_2: 100.00%, Avg Return = 79.87
  Pant_Short_Seen_3: 100.00%, Avg Return = 127.27
  Pant_Short_Seen_4: 100.00%, Avg Return = 127.89
  Pant_Short_Seen_5: 100.00%, Avg Return = 84.13
  Pant_Short_Seen_6: 100.00%, Avg Return = 127.25
  Pant_Short_Seen_7: 100.00%, Avg Return = 134.12
  Pant_Short_Seen_8: 100.00%, Avg Return = 109.85
  Pant_Short_Seen_9: 100.00%, Avg Return = 104.69
  Pant_Short_Unseen_0: 0.00%, Avg Return = 267.19
  Pant_Short_Unseen_1: 100.00%, Avg Return = 186.48

Seen 9/10 成功!Unseen 1/2 成功。这个结果相当不错,而且 Avg Return 整体在 100-130 之间,说明轨迹比较高效。

4. 90k 评测结果(完整数据)

4.1 top_long(90k)

Total Episodes: 12
Average Return: 154.72 ± 66.58
Success Rate: 41.67%

Per-Garment:
  Top_Long_Seen_1: 100.00%, Avg Return = 129.40
  Top_Long_Seen_2: 100.00%, Avg Return = 111.76
  Top_Long_Seen_3: 100.00%, Avg Return = 126.03
  Top_Long_Seen_4: 100.00%, Avg Return = 138.33
  Top_Long_Unseen_0: 100.00%, Avg Return = 133.35
  (其余 7 个均为 0.00%)

70k 是 58.33%,90k 反而掉到了 41.67%。回退了

4.2 top_short(90k)

Total Episodes: 12
Average Return: 168.92 ± 76.70
Success Rate: 25.00%

Per-Garment:
  Top_Short_Seen_1: 100.00%, Avg Return = 100.79
  Top_Short_Seen_2: 100.00%, Avg Return = 104.74
  Top_Short_Seen_4: 100.00%, Avg Return = 158.97
  (其余 9 个均为 0.00%)

和 70k 持平,都是 25%。top_short 就是顽固,怎么 scale 都没用。

4.3 pant_long(90k)

Total Episodes: 12
Average Return: 122.73 ± 34.11
Success Rate: 33.33%

Per-Garment:
  Pant_Long_Seen_3: 100.00%, Avg Return = 174.67
  Pant_Long_Seen_5: 100.00%, Avg Return = 79.76
  Pant_Long_Seen_6: 100.00%, Avg Return = 98.77
  Pant_Long_Unseen_0: 100.00%, Avg Return = 111.30
  (其余 8 个均为 0.00%)

70k 是 41.67%,90k 掉到 33.33%。又回退了。

4.4 pant_short(90k)

Total Episodes: 12
Average Return: 132.61 ± 57.43
Success Rate: 83.33%

Per-Garment:
  Pant_Short_Seen_0: 100.00%, Avg Return = 101.98
  Pant_Short_Seen_1: 0.00%,   Avg Return = 212.14
  Pant_Short_Seen_2: 100.00%, Avg Return = 71.23
  Pant_Short_Seen_3: 100.00%, Avg Return = 82.07
  Pant_Short_Seen_4: 100.00%, Avg Return = 128.95
  Pant_Short_Seen_5: 100.00%, Avg Return = 88.13
  Pant_Short_Seen_6: 100.00%, Avg Return = 122.54
  Pant_Short_Seen_7: 100.00%, Avg Return = 132.82
  Pant_Short_Seen_8: 100.00%, Avg Return = 162.85
  Pant_Short_Seen_9: 100.00%, Avg Return = 99.32
  Pant_Short_Unseen_0: 0.00%, Avg Return = 268.39
  Pant_Short_Unseen_1: 100.00%, Avg Return = 120.96

Seen 9/10 成功,和 70k 完全一致。83.33% 持平。

5. 汇总对比

类别 30k 70k 90k 70k vs 90k
top_long 50.00% 58.33% 41.67% ↓ 退步
top_short 8.33% 25.00% 25.00% → 持平
pant_long 16.67% 41.67% 33.33% ↓ 退步
pant_short 75.00% 83.33% 83.33% → 持平

6. 分析与选择

6.1 为什么选 70k

  1. top_long 从 58.33% 掉到 41.67%,这是 90k 最明显的退化。掉了足足 16.67 个百分点。
  2. pant_long 也退步了,从 41.67% 掉到 33.33%。
  3. top_short 和 pant_short 持平,没有因为额外训练而受益。
  4. 没有任何一个类别在 90k 有明显提升。

这不是"过拟合"的典型症状(因为 loss 仍然在下降),但评测指标确实在变差。可能是训练分布和评测分布的 mismatch 在加训后被放大,也可能是某些类别在训练后期被"遗忘"了。

6.2 各类别的趋势观察

top_short 是最顽固的:从 30k(8.33%)到 70k(25%)到 90k(25%),在 25% 上面锁死了。可能的原因:

  • 短袖折叠策略本身更难学
  • 数据量不够
  • 需要不同的数据增强策略

pant_short 是最稳定的:30k 就 75%,70k 83.33%,90k 83.33%。可以说 30k 就基本学好了,后面的 scale 只是微调。

top_long 和 pant_long 是最"摇摆"的:它们对训练步数敏感,70k 是峰值,90k 回退。

6.3 没做的事情

  • 没做数据增强变体对比
  • 没试更大的 batch_size(L40 48G 不够)
  • 没试学习率调度策略调整
  • 没做 checkpoint ensemble

这些都是"如果时间够可能会更好"的方向。但在 solo 参赛、临近截止的约束下,我选择在 70k 打住,推进到 pi0.5 做最后一搏。

7. 小结

在 SmolVLA 上走完了 30k → 70k → 90k 的 scaling 实验。核心发现:

  1. 小规模 scaling(30k → 70k)带来了整体提升,尤其是 pant_long(16.67% → 41.67%)
  2. 继续 scale 到 90k 出现了 top_long 和 pant_long 的回退
  3. top_short 始终是短板,最高只到 25%
  4. pant_short 始终是强项,稳定在 75-83%

最终选择 70k checkpoint 作为提交结果。

Scaling 的力量与边界:LeHome SmolVLA 从 30k 到 90k 的训练复盘
作者
若离
发表于
2026-04-30
License
CC BY-NC-SA 4.0

评论