问题(Problem)
将 BFM-Zero(IsaacSim,双卡)迁移到 UniLab(MuJoCo,单卡)做 motion tracking,目标是在 MuJoCo 下复现参考级跟踪质量。目前迁移已能训练但保真未达标:
- v4(commit
0796a92f):可实现低精度跟踪(动作基本对、精度待提升)。
- v5(commit
412f70dd):部分动态动作明显退化(fall / jump / fight 类"站着不动 / 跟错目标")。
- v6:正在跑,旨在同时解决 v4 的精度不足与 v5 的动作退化。
迁移目标
- 迁移效果:MuJoCo 下跟踪 EMD 对齐参考。主指标
eval/humanoidverse_tracking_eval/emd(= state[:23] OT == 参考 obs_state_emd,参考 golden ≈ 0.74,目标 < 0.75)。
- 训练时长:参考 @19m steps 达 EMD 0.9,< 0.75 约需 50–100M steps。按下方单卡吞吐,50–100M ≈ 50–100h(5090 单卡)。实际0.8以内即可。
- 可支持设备:单卡即可训练(不依赖原仓库的双卡)。
吞吐 / 显存现状
| 环境 |
卡 |
显存 |
吞吐 |
| UniLab @ 5090 |
单卡 |
~27 G |
~1M steps/h |
| UniLab @ 6000 Ada |
单卡 |
~27 G |
~0.5M steps/h |
| 原仓库 BFM-Zero @ 5090 |
双卡 |
共 42 G |
~2M steps/h |
当前状态(结合 tensorboard 曲线 + 排查)
口径提示:v4 曲线为 eval_n_motions=16 + 旧 eval rollout(数值虚高),v5(5090)为 eval_n_motions=862 + 修正 rollout;两者 tensorboard 绝对值不可直接比。下方"当前代码全 862 重评"才是同口径对照。
v4(低精度跟踪 OK)
- tensorboard
emd(state[:23],16 条 / 旧 rollout):谷 ≈ 2.77 @18.5M → 2.95(旧 rollout 抬高)。
- 现象:能跟踪,精度不足;无明显乱做动作。
v5(部分动作退化)
- tensorboard(5090,862 条):
emd 谷 1.00 @18M → 回升 1.08 @43M;emd_dof29 谷 1.85 @29m → 1.97。触底回升,而参考单调降到 0.86。
- 同设备对照:
fidelity_v5_6000Ada(同 tatp、新代码)曲线压在 5090 上,emd 1.19 @9.6M 仍降 → 退化是代码驱动、可复现,非跨设备波动。
当前代码全 862 重评(同口径对照)
- 聚合
emd 打平:v4 1.038 / v5_5090 1.048;差异全在尾巴——5090 max 3.90 vs v4 2.74,emd>2.5 的动作 10 vs 4,退化最狠 7/12 是动态动作(fallAndGetUp / jumps / fight)。
- 失败动作是稀有 / 非典型动作(z 与全局均值近正交),即少数难动作被淹没、欠学。
根因(对照参考仓库生效链路)
- 专家速度平滑分辨率错(v5 专属):先重采样 30→50Hz 再 gaussian σ=2(~40ms 窗),参考在原生 30fps 算再插值(~67ms)。离线 RMS 偏差 lin 12% / ang 23% / dof 14%,dance/fall 最大 → 判别器 / backward 学偏 → 动态动作退化。
- 缺 EMD 优先级重采样(v4/v5 都缺):参考每次 eval 后按 per-motion EMD 上采样难动作(专家 buffer + 在线 RSI 双路);UniLab 移植了 buffer 机制但从未接线,复位均匀随机 → 稀有动作欠学、eval 触底回升。
- eval 指标命名反转:UniLab
emd(state[:23])== 参考 obs_state_emd;UniLab emd_dof29 == 参考 emd 列。绝对值差(~1.0 vs 参考 0.74)来自 MuJoCo vs IsaacGym rollout(sim2sim 本质,非 bug)。
交付物(Deliverable)
- v6:在 MuJoCo 单卡训出不再出现动作退化、且精度不低于 v4 的 tracking 权重。
- 已合入的修复(A/B):
- A 专家速度按原生 fps 计算再插值(对齐参考顺序);
- B 接线 EMD 优先级重采样(专家 buffer + 在线 RSI 双路),启动即校验
eval_n_motions == 专家动作数。
- 默认配置更新:
eval_n_motions 16→862,prioritization=true。
重训命令(v6)
uv run train --algo bfm --task g1_bfm --sim mujoco \
+training.log_dir=logs/bfm/fidelity_v6 \
algo.num_env_steps=100000000 \
algo.eval_n_motions=862 \
algo.eval_every_steps=1000000
完成定义(Definition of done)
eval/humanoidverse_tracking_eval/emd(state[:23])单调下降、不再触底回升。
- per-motion 尾巴(
max / p99)较 v5 明显收窄;动态动作不再"站着不动"。
- 最终
emd ≤ v4 水平(862 条 ≈ 1.04),并向参考 0.74 靠拢(受训练步数 + sim2sim gap 约束)。
- 日志每次 eval 后出现
[bfm] prioritization updated: p in [..,..](p 有分布)。
验证计划(Validation plan)
- 训练中盯
emd / emd_dof29 曲线趋势 + per-motion 尾巴。
- 收敛后用当前代码对 v6 与 v4 做同口径全 862 重评对比。
- 侧写脚本已在
scripts/:_diag_permotion_eval.py(per-motion + 尾巴/z)、_diag_vel_smoothing.py、_verify_A.py、_verify_B.py。
依赖 / 阻塞(Dependencies / blockers)
- 参考仓库:
/home/robot/ws/lxf/BFM-Zero(生效链路对照 + golden 0.74/0.86)。
- UniLab 单卡 eval 为串行(862 条 ~数十分钟/次,复用已有 eval、不额外加成本);如需提速可后续做并行 eval(不影响正确性)。
问题(Problem)
将 BFM-Zero(IsaacSim,双卡)迁移到 UniLab(MuJoCo,单卡)做 motion tracking,目标是在 MuJoCo 下复现参考级跟踪质量。目前迁移已能训练但保真未达标:
0796a92f):可实现低精度跟踪(动作基本对、精度待提升)。412f70dd):部分动态动作明显退化(fall / jump / fight 类"站着不动 / 跟错目标")。迁移目标
eval/humanoidverse_tracking_eval/emd(=state[:23]OT == 参考obs_state_emd,参考 golden ≈ 0.74,目标 < 0.75)。吞吐 / 显存现状
当前状态(结合 tensorboard 曲线 + 排查)
v4(低精度跟踪 OK)
emd(state[:23],16 条 / 旧 rollout):谷 ≈ 2.77 @18.5M → 2.95(旧 rollout 抬高)。v5(部分动作退化)
emd谷 1.00 @18M → 回升 1.08 @43M;emd_dof29谷 1.85 @29m → 1.97。触底回升,而参考单调降到 0.86。fidelity_v5_6000Ada(同 tatp、新代码)曲线压在 5090 上,emd1.19 @9.6M 仍降 → 退化是代码驱动、可复现,非跨设备波动。当前代码全 862 重评(同口径对照)
emd打平:v4 1.038 / v5_5090 1.048;差异全在尾巴——5090max3.90 vs v4 2.74,emd>2.5的动作 10 vs 4,退化最狠 7/12 是动态动作(fallAndGetUp / jumps / fight)。根因(对照参考仓库生效链路)
emd(state[:23])== 参考obs_state_emd;UniLabemd_dof29== 参考emd列。绝对值差(~1.0 vs 参考 0.74)来自 MuJoCo vs IsaacGym rollout(sim2sim 本质,非 bug)。交付物(Deliverable)
eval_n_motions == 专家动作数。eval_n_motions16→862,prioritization=true。重训命令(v6)
完成定义(Definition of done)
eval/humanoidverse_tracking_eval/emd(state[:23])单调下降、不再触底回升。max/p99)较 v5 明显收窄;动态动作不再"站着不动"。emd≤ v4 水平(862 条 ≈ 1.04),并向参考 0.74 靠拢(受训练步数 + sim2sim gap 约束)。[bfm] prioritization updated: p in [..,..](p 有分布)。验证计划(Validation plan)
emd/emd_dof29曲线趋势 + per-motion 尾巴。scripts/:_diag_permotion_eval.py(per-motion + 尾巴/z)、_diag_vel_smoothing.py、_verify_A.py、_verify_B.py。依赖 / 阻塞(Dependencies / blockers)
/home/robot/ws/lxf/BFM-Zero(生效链路对照 + golden 0.74/0.86)。