
微调 NVIDIA Cosmos Predict 2.5 生成机器人视频

这是一份实操指南,展示了如何使用 LoRA 和 DoRA 对 NVIDIA Cosmos Predict 2.5(2B 参数的世界模型)进行参数高效微调,以生成机器人操作视频。全文从数据准备、训练代码实现到推理和评估指标,提供了完整的技术细节和实验结论。
背景与动机:收集真实机器人演示数据昂贵且缓慢,而微调后的视频生成模型可以生成合成轨迹来训练机器人策略。但全参数微调 2B 模型成本高且容易灾难遗忘。LoRA/DoRA 通过注入小型可训练适配器模块,冻结基础模型,显著降低显存需求,同时生成的适配器文件小且易于切换,使得单 GPU 微调成为可能。
数据准备:示例使用了与 GR00T Dreams 相同的微调数据集:92 个机器人操作视频(带文本提示,描述拾取和放置任务)作为训练集,50 个(提示,第一帧图像)对作为测试集。训练数据文件夹结构包含 metas、videos 和 metadata.csv;评估数据为平铺的 .txt 和 .png 文件。
训练实现:代码基于 diffusers 和 accelerate。核心步骤包括:
– VideoDataset:加载视频和文本对,对于长视频随机采样连续帧窗,实现时间增强。
– 初始化适配器:加载预训练模型后,冻结 VAE、文本编码器和 DiT 所有权重。LoRA 适配器注入到 DiT 的注意力投影(to_q, to_k, to_v, to_out.0)和前馈层(ff.net.0.proj, ff.net.2)。LoRA 参数上转换为 float32 以在 bf16 混合精度下保持数值稳定。设置 use_dora=True 即可切换为 DoRA,无需修改训练循环。
– 损失函数:采用 rectified flow 公式,模型学习预测噪声到干净的“速度”(velocity)。视频的前两帧作为条件,不添加噪声,只对后续帧计算 MSE 损失。
– 优化器与调度器:使用 AdamW 和线性预热调度器,学习率先线性升至 scheduler_f_max × learning_rate,然后线性衰减至 scheduler_f_min × learning_rate。
– 检查点:每 checkpointing_epochs 个 epoch 保存 LoRA 权重为 pytorch_lora_weights.safetensors 文件。
训练命令:使用 accelerate launch 启动,关键参数:lora_rank=32 对应约 50M 可训练参数,lora_alpha 设为与 rank 相同(缩放因子保持 1.0)。多 GPU 训练自动分发。实证表明,100 epoch 即能取得不错结果,在单张 H100 上耗时 17 小时,在 8 张 H100 上耗时 2.5 小时。
推理与评估:推理时通过 load_lora_weights 和 fuse_lora 合并适配器权重,消除推理开销。评估采用三个指标:
– Sampson 误差(越低越好):衡量生成视频的几何一致性,包括时间 Sampson 误差(帧间稳定性)和跨视图 Sampson 误差(多视图对齐)。
– LLM-as-a-Judge:使用 Cosmos Reason2 对每个视频从 1-5 打分,包括物理合理性(video_physics.yaml)和指令遵循(video_IF.yaml)两个 rubric。
实验结果(定性与定量):
– 微调前:基础模型生成视频存在抖动、错误地生成人类手(而非机器手)、无法可靠使用指定手。
– 微调后(LoRA/DoRA):三个问题均得到解决,Sampson 误差下降,物理合理性和指令遵循分数提升。
– 训练 100 epoch(~2.5 小时 on 8×H100)已足以显著改善所有指标。
– LoRA 和 DoRA 表现相似:DoRA 的幅度-方向分解在低 rank 时可能有帮助,但在此任务中非必要。
– rank 影响:较大 rank(32 vs 8)提升了指令遵循能力(模型有更多容量学习具体手和物体),但对几何一致性和物理合理性无提升。推测几何和物理先验已冻结在大模型权重中,LoRA 只需将分布偏移到域内机器人外观和任务结构,rank 8 即可胜任。
何时使用 DoRA vs LoRA:若显存紧张或适配器文件大小关键,从 LoRA r=8 开始;若预算充足且观察到低 rank 下 LoRA 训练不稳定,DoRA r=32 可作为替代。
该指南还提供了 Cosmos Cookbook、Hugging Face 和 GitHub 资源链接,方便读者进一步探索。


