Diffusion Policy 模型训练
Diffusion Policy 最初由 Columbia University 等提出,项目页为 diffusion-policy.cs.columbia.edu,官方代码在 columbia-ai-robotics/diffusion_policy。LeRobot 也提供了 PyTorch 版本实现,源码位于 LeRobot diffusion policy,并发布了 PushT 示例模型 lerobot/diffusion_pusht。
本文只覆盖 LeRobot 路径。若你需要严格复现原始论文中的 benchmark,请直接使用原始 Diffusion Policy 仓库和对应数据处理流程。
何时使用
Diffusion Policy 将动作序列建模为条件去噪过程,适合连续、平滑、存在多种可行动作模式的控制任务 。它通常比 ACT 更重,训练步数也更长;但在需要预测一段连续轨迹、动作平滑性很重要的任务中,它是合理选择。
优先考虑 Diffusion Policy 的情况:
- 动作轨迹连续且对平滑性敏感。
- 任务存在多种可行操作路径。
- 数据量比 ACT 基线更充分。
- 可以接受更长训练和较慢推理。
如果目标是先验证数据链路,建议先用 ACT 或 SmolVLA 建立基线,再训练 Diffusion Policy。
官方依据
LeRobot v0.5.0 的公开示例包括:
examples/training/train_policy.py:演示如何用DiffusionConfig和DiffusionPolicy在 PushT 上训练。lerobot/diffusion_pusht模型卡:记录了 LeRobot 训练命令,核心参数为--policy.type=diffusion、--dataset.repo_id=lerobot/pusht、--batch_size=64、--steps=200000。
按 LeRobot v0.5.0 的安装方式,训练应使用 lerobot-train:
lerobot-train \
--output_dir=outputs/train/diffusion_pusht \
--policy.type=diffusion \
--dataset.repo_id=lerobot/pusht \
--seed=100000 \
--env.type=pusht \
--batch_size=64 \
--steps=200000 \
--eval_freq=25000 \
--save_freq=25000 \
--wandb.enable=true
对自有机器人数据,通常不配置 --env.type,先做离线训练和 checkpoint 加载检查。
使用 LeRobot GPU 镜像
艾欧智能已经构建并发布 ioaitech/lerobot-gpu:v0.5.0 Docker 镜像。该镜像包含 LeRobot v0.5.0、GPU 训练依赖、视频解码依赖和 lerobot-train 命令,可直接用于 Diffusion Policy 训练。中国大陆环境可改为 swr.cn-east-3.myhuaweicloud.com/ioaitech/lerobot-gpu:v0.5.0。
最小验证
docker run --rm --gpus all --shm-size 16g \
-v /path/to/lerobot_dataset:/data/input \
-v /path/to/output:/outputs \
ioaitech/lerobot-gpu:v0.5.0 \
bash -lc 'lerobot-train \
--policy.type=diffusion \
--dataset.repo_id=local/my_dataset \
--dataset.root=/data/input \
--batch_size=8 \
--steps=1000 \
--output_dir=/outputs/diffusion_smoke \
--job_name=diffusion_smoke \
--policy.device=cuda \
--wandb.enable=false'