ACT 模型训练
ACT Model Training
配置并训练 ACT(Action Chunking Transformer)模型
未开始
完成后会同步到学习路径和首页统计
数据有了 50 条 7500 帧,终于到 AI 部分 —— 训练 ACT 模型。
很多人以为 ACT 是"一个模型",其实它是三个组件的组合:Transformer Encoder(看图像+状态提特征)、CVAE(处理"同一情况多种合理动作"的多模态性)、Transformer Decoder(一次输出未来 100 步动作)。第三个是关键 —— 第 1 章讲的复合误差,正是被"一次预测一段动作"压住的。
这一章带你启动训练、读懂 loss 曲线、抢救 NaN、用 wandb 监控,并算清楚"50 条数据为什么够训 20 万步"。
训练是把数据变成能力的转化器,也是最容易"跑了一夜白跑"的环节:
- 不懂健康 loss 长什么样 → 跑了 8 小时不知道是成了还是废了
- 不会抢救 NaN → 梯度一爆全程作废,还以为要重训
- 不会调 batch_size → 要么 OOM 要么显存浪费、收敛慢
- 不用 wandb → 全靠刷终端,多次实验没法对比
理解这一章,你的每一次训练都是"知道自己在干什么"。
- 理解 ACT 模型的架构和优势
- 配置训练超参数
- 完成模型训练并监控进度
- 1ACT 使用 Transformer 预测动作序列
- 2Action Chunking 提高时序一致性
- 3CVAE 结构增强策略的多样性
ACT 的三段式结构
flowchart LR
Img["📷 相机帧"] --> Enc["Transformer Encoder"]
State["📐 关节状态"] --> Enc
Enc --> CVAE["CVAE (latent z)"]
CVAE --> Dec["Transformer Decoder"]
Dec --> Out["📦 未来 100 步动作"]
style Enc fill:#7c5cff,stroke:#7c5cff,color:#fff
style CVAE fill:#f59e0b,stroke:#f59e0b,color:#fff
style Dec fill:#22c55e,stroke:#22c55e,color:#fff
style Out fill:#0ea5e9,stroke:#0ea5e9,color:#fff启动训练
一条命令搞定(前提:第 5 章数据集已录好)。policy=act 选 ACT、env=so100 选机器人、dataset_repo_id 指向你的数据集。
默认跑 20 万步,RTX 3060 上约 6-8 小时、CPU 上 1-2 天。可中途 Ctrl+C,加 resume=true 续训。
启动 ACT 训练
python lerobot/scripts/train.py \ policy=act env=so100 \ dataset_repo_id=your-name/so100-pick-cup[INFO] Building ACT model (params: 84.5M)... step 0 loss 1.247 step 100 loss 0.456 step 500 loss 0.182 ...
checkpoint 自动保存,断了不怕,resume=true 接着来。
读懂 loss 曲线
健康的 loss:前 1000 步快速下降(模型开始学)→ 中段稳步降 → 后期变化 < 5%(收敛,可以停)。
不健康信号:loss 变 NaN(梯度爆炸)、loss 反弹上升(学习率太大)、loss 卡在初始值不降(数据有问题)。
看一眼前 1000 步就能判断"学没学起来",不用等几小时。
抢救 NaN loss + 调 batch_size
loss 变 NaN 几乎总是梯度爆炸。应急两板斧:学习率降一个量级 + 开梯度裁剪。NaN 不可逆,必须从这里重来,不会"自己恢复"。
batch_size 在显存允许内越大越好(梯度估计更准、收敛快)。12 GB 显存一般能塞 32;OOM 就往下调。
NaN 抢救 / 调参
python lerobot/scripts/train.py policy=act \ training.lr=1e-5 training.grad_clip_norm=10 \ training.batch_size=8NaN 出现后,之前的进度作废(权重被污染),必须降学习率重训,不能续训。
启动 ACT 训练
python lerobot/scripts/train.py policy=act env=so100 dataset_repo_id=your-name/so100-task使用 wandb 监控
wandb login && python lerobot/scripts/train.py policy=act env=so100 wandb.enable=true恢复训练
python lerobot/scripts/train.py policy=act resume=trueloss 跑着跑着变成 NaN。
根本原因
学习率过大导致梯度爆炸(也可能数据有极端值)。
正确认识
学习率 ÷10(如 1e-4 → 1e-5)+ 开 grad_clip_norm。重新开始训练,NaN 不可逆。
`CUDA out of memory`,训练起不来。
根本原因
batch_size 相对显存太大。
正确认识
先 training.batch_size=4;还不行开 grad_accumulation_steps=4;再不行 amp=true 混合精度。90% 第一步解决。
「ACT 比 BC 强是因为用了 Transformer 吧?」
根本原因
把 backbone 当成了创新点。
正确认识
Transformer 只是骨架。真正让 ACT 强的是 Action Chunking(一次出一段动作治复合误差)+ CVAE(处理多模态)。论文消融显示去掉 Chunking 性能掉 50%+。
- 训练启动无报错
- Loss 持续下降
- 检查点正常保存
算一个 epoch 多少步
50 条演示、每条 ~150 帧 = 7500 样本,batch_size=8。一个 epoch(过完整份数据一遍)大约多少 step?训练 20 万步约等于多少个 epoch?
CUDA out of memory
- 原因:
- GPU 显存不足以运行当前 batch_size
- 解决:
- 减小 batch_size 或启用梯度累积
python lerobot/scripts/train.py policy=act training.batch_size=8- ACT 原论文 (Zhao et al. 2023)
想理解 Action Chunking / CVAE 的数学和消融实验,读这篇。
- Weights & Biases (wandb)
训练监控标配,加 `wandb.enable=true` 即可实时看 loss 曲线、对比实验。
ACT = Transformer Encoder + CVAE + Decoder(一次出 100 步)。让它强的是 Action Chunking + CVAE,不是 Transformer 本身。
policy=act env=so100 dataset_repo_id=... 启动;健康 loss 前 1k 快降、后期收敛;NaN → 学习率÷10 + 梯度裁剪重训;OOM → 调小 batch_size;用 wandb 监控。
下一章把训练好的模型部署到真实机械臂上。
本章讨论区
登录后即可参与讨论 —— 点击右上角的 登录 按钮
加载中…