主题
基于Mujoco训练的开源项目:LIFT框架用单张 4090 把大规模预训练接到高效微调
摘要
在人形机器人控制里,难点从来不只是“在仿真中学会走路”,而是如何把仿真中的大规模预训练能力,延续到新环境中的高效、安全微调。
LIFT(Large-scale pretraIning and efficient FineTuning)给出了一条完整路线:先在大规模并行仿真中进行策略预训练,再用预训练数据训练带物理先验的世界模型,最后在新环境中执行确定性动作、把随机探索限制在世界模型内部,从而兼顾安全性与样本效率。论文和开源仓库给出的结论非常有吸引力:
- 可在单张 RTX 4090 上完成可部署的人形控制预训练;
- 在真实 Booster T1 上,仅使用 80–590 秒真实数据,就能显著改善姿态、步态和平稳前进能力;
- 整体流程从预训练、世界模型训练到微调链路完整,具备较强复现价值。([GitHub][1], [arXiv][2])
一、背景:为什么 LIFT 值得单独写一篇
过去几年,人形机器人强化学习大致沿着两条路线前进。
第一条路线关注大规模并行仿真中的高效预训练。借助 GPU 并行环境,策略可以在海量仿真样本上快速学习,得到很强的基础运动能力。
第二条路线关注少量真实数据下的快速适应。在真实机器人上,数据昂贵、试错危险,因此研究者更关注样本效率、安全性和部署稳定性。
问题在于,这两条路线之间通常存在断层。很多方法可以在仿真里训得很好,但一旦到了新环境、真实系统或者不同动力学条件下,就很难继续稳定、高效地优化。LIFT 的核心价值就在于,它不是单独提出一个更强的控制器,而是试图把下面三件事真正接起来:
- 大规模仿真预训练;
- 物理先验世界模型建模;
- 新环境中的安全、高效微调。
从这个角度看,LIFT 的意义不只是“指标更高”,而是把预训练和微调串成了一条完整工程流水线。([GitHub][1], [arXiv][2])
二、LIFT 到底解决了什么问题
如果把问题说得更直接一点,LIFT 解决的是这个矛盾:
人形机器人需要探索,但真实机器人又承受不起直接的随机探索。
传统强化学习里,探索往往意味着随机动作。但在人形机器人上,随机动作很可能带来姿态不稳、摔倒甚至硬件风险。LIFT 的关键设计就是探索与执行解耦:
- 在真实环境中,只执行策略的确定性动作;
- 真正的随机探索,不在真机上做,而是在世界模型内部 rollout 完成。
这意味着真实系统主要负责提供可靠的数据锚点,而世界模型负责承担大部分探索成本。对于高风险控制场景,这个思路非常自然,也非常务实。([arXiv][2])
三、LIFT 的三阶段框架
LIFT 在仓库和论文中都被概括为一个三阶段方法。
1. 策略预训练
第一阶段在 MuJoCo Playground 中进行大规模并行仿真预训练,核心算法是 SAC。
这里的重点不只是“用了 SAC”,而是把 SAC 真的扩展到了大规模 GPU 并行仿真场景里,配合:
- large-batch updates
- high UTD ratio
- domain randomization
目标是训练出一个强基础策略,使其具备较强的零样本部署与迁移潜力。([GitHub][1])
2. 世界模型预训练
第二阶段不急着直接上真机微调,而是先利用第一阶段保存下来的离线数据,训练一个physics-informed world model。
论文的思路不是让网络从零拟合全部动力学,而是引入物理先验,再用残差网络去补偿接触、摩擦和未建模动态。
可以把它理解为:
text
下一状态 = 物理主干预测 + 神经网络残差修正这样做的好处是,模型不仅更容易学稳,也更适合后续在模型内部进行 rollout。([GitHub][1], [arXiv][2])
3. 高效微调
第三阶段是 LIFT 最有辨识度的一步。
在新环境或真实系统中,机器人执行确定性动作来采集真实数据;与此同时,策略的随机探索则通过世界模型进行,从而在保证安全的前提下保留探索能力。
这一步的关键不是“完全依赖模型”,而是:
- 真实环境提供真实分布数据;
- 世界模型提供廉价探索与额外训练样本;
- 策略与世界模型随着新数据不断共同更新。
这也正是 LIFT 能兼顾安全性与样本效率的根本原因。([GitHub][1], [arXiv][2])
四、为什么 LIFT 选 SAC,而不是继续走 PPO 路线
很多人看到 LIFT,第一反应可能是:为什么不是 PPO,而是 SAC?
原因在于,LIFT 想要解决的不是单纯“训练稳定性”,而是如何在大规模并行仿真中,把离策略方法的样本效率真正发挥出来。从论文和仓库信息看,LIFT 的 SAC 预训练包含几个关键点。
1. 大规模 GPU 并行仿真
MuJoCo Playground 提供了高吞吐的并行环境,使 SAC 能持续获得大量样本。这让 off-policy 方法的 replay buffer 优势真正发挥出来。([GitHub][1])
2. 高 UTD 比
UTD(Update-To-Data)可以简单理解为“每收集一批数据,要做多少次梯度更新”。
高 UTD 是 off-policy 方法提升样本效率的重要抓手。论文附录也给出了相关实验,显示更高的 UTD 和更大的 batch size 可以显著加快收敛。([arXiv][2])
3. 域随机化
为了增强 sim-to-real 能力,LIFT 在预训练时引入了域随机化。这样策略不会只记住一个“理想物理世界”,而是能在一系列扰动条件下保持鲁棒性。([GitHub][1])
4. 自动熵调节
SAC 自带最大熵目标和温度参数 alpha 的自动调节机制,这让它在探索和利用之间可以动态平衡,更适合大规模离策略训练。([arXiv][2])
综合来看,LIFT 不是简单“把 PPO 换成 SAC”,而是证明了:在大规模并行仿真上,SAC 也可以被工程化到足够强、足够稳,并成为后续模型驱动微调的起点。
五、世界模型部分为什么是 LIFT 的关键
如果说第一阶段解决的是“如何学到强基础策略”,那么第二阶段解决的就是“如何让微调更高效、更安全”。
LIFT 的世界模型有三个值得特别关注的点。
1. 物理先验
世界模型不是纯黑盒网络,而是引入了结构化物理知识。论文中明确提到其结合了类似 Lagrangian dynamics 的物理先验,再由网络去拟合残差部分。([arXiv][2])
2. 残差学习
现实中的接触、摩擦、冲击以及建模误差很难被显式物理公式完全覆盖。残差网络的作用,就是补上这些“物理主干解释不了的部分”。
3. 不确定性建模
从仓库实现思路看,世界模型采用了集成模型设计,并输出均值与方差信息,用概率建模的方式估计预测不确定性。这样做有两个直接收益:
- 预测更稳健;
- 模型分歧可以间接反映不确定性,帮助微调阶段做更保守、更安全的策略更新。([GitHub][1])
换句话说,LIFT 不是随便加一个 world model,而是把它作为连接安全性、探索效率和微调性能的中心模块。
六、论文最值得记住的结果:4090 和 80–590 秒真实数据
如果只记住 LIFT 的两个结论,我认为就是下面这两个。
1. 单张 RTX 4090 就能做可部署的人形预训练
这件事非常关键。
过去提到“大规模人形预训练”,很多人默认需要昂贵算力集群;但 LIFT 论文和仓库给出的信息是,该框架已经能够在单张 RTX 4090 上完成可部署的人形控制预训练,仓库也明确说明代码在 NVIDIA H800 和 4090 上测试过。([GitHub][1], [arXiv][2])
这意味着 LIFT 不只是“研究上看起来很强”,而是已经进入了高端单卡可尝试复现的工程区间。
2. 真实 Booster T1 只需 80–590 秒数据就能显著改善表现
这比“训练时间更短”更重要。
在人形机器人里,真实数据并不是越多越好,因为每一分钟数据都意味着试验成本、看护成本和硬件风险。LIFT 的结果表明,在真实 Booster T1 上,仅使用 80–590 秒真实数据,就能明显改善:
- 机体姿态更直立;
- 步态更平滑;
- 前向速度更稳定。([arXiv][2])
这说明 LIFT 真正把“仿真预训练的先验”转化成了“现实微调的效率”。
七、代码结构怎么理解
从工程视角看,LIFT 仓库结构比较清楚,理解起来可以按阶段来。
| 阶段 | 关键文件 | 作用 |
|---|---|---|
| 策略预训练 | train_in_mujoco_playground.py | 创建环境、训练 SAC、保存 checkpoint 与 buffer |
| SAC 实现 | policy_pretrain/train.py | replay buffer、采样更新、目标网络软更新 |
| 网络与损失 | policy_pretrain/sac_networks.py、policy_pretrain/losses.py | actor / critic / alpha 相关实现 |
| 世界模型训练 | train_wm_from_file.py、world_model/pretrain_wm.py | 从离线数据训练世界模型 |
| 世界模型结构 | world_model/wm_networks.py、world_model/wm_losses.py、world_model/wm_base.py | 模型结构、损失、数据处理 |
| 评测与微调 | eval_in_brax.py、finetune.py | sim2sim 验证与模型驱动微调 |
如果只想先跑通最小链路,其实只要盯住四个入口脚本:
train_in_mujoco_playground.pytrain_wm_from_file.pyeval_in_brax.pyfinetune.py
八、实例教程:一条最小可复现路径
如果你现在没有真机,最合理的做法不是一上来追求完整 sim2real,而是先跑通:
仿真预训练 -> 世界模型训练 -> Brax 评测 / 微调
第一步:准备代码与运行环境
仓库推荐环境为 Ubuntu 22.04 和 Python 3.10,并说明代码已在 4090 与 H800 上测试。([GitHub][1]) 这里推荐使用算力自由平台云仿真镜像:4090显卡,一键开启Mujoco环境,镜像地址:https://www.gpufree.cn/images/101302

如果你当前使用的是已经预装代码和环境的镜像,可以直接进入项目目录:
bash
cd /root/LIFT-humanoid
conda activate lift如果你需要从头拉取代码并安装环境,可以执行:
bash
git clone https://github.com/bigai-ai/LIFT-humanoid.git /root/LIFT-humanoid
cd /root/LIFT-humanoid
conda create -n lift python=3.10 -c conda-forge -y
conda activate lift
cd /root/LIFT-humanoid/mujoco_playground
pip install -e .
cd /root/LIFT-humanoid/brax_env
pip install -e .
cd /root/LIFT-humanoid
pip install -r requirements.txt- 如果
git拉取较慢或网络不稳定,建议先在本地完成下载,再将项目文件同步到目标目录。
第二步:固定 mujoco_menagerie 依赖版本
为了避免 mujoco_menagerie 版本差异带来的兼容性问题,建议固定到下面这个提交(若镜像环境git不下,可采用本地下载同步的方式进行):
14ceccf557cc47240202f2354d684eca58ff8de4
可按下面的方式准备依赖:
bash
git clone https://github.com/google-deepmind/mujoco_menagerie.git
cd mujoco_menagerie
git checkout 14ceccf557cc47240202f2354d684eca58ff8de4
cd ..
tar -czf /tmp/mujoco_menagerie_fixed.tar.gz mujoco_menagerie
cd /root/LIFT-humanoid
rm -rf mujoco_playground/mujoco_playground/external_deps/mujoco_menagerie
mkdir -p mujoco_playground/mujoco_playground/external_deps
tar -xzf /tmp/mujoco_menagerie_fixed.tar.gz \
-C mujoco_playground/mujoco_playground/external_deps解压后的目录应为:
bash
/root/LIFT-humanoid/mujoco_playground/mujoco_playground/external_deps/mujoco_menagerie- 如果根分区空间不足,也可以把数据放在大盘,再通过软链接把
external_deps/mujoco_menagerie指向对应目录。
第三步:准备更大的临时目录和数据目录
训练 LIFT 时,buffer 数据和中间缓存都可能比较大。为了避免系统默认 /tmp 或系统盘被占满,建议把数据与临时文件都放到更大的盘上。
bash
mkdir -p /root/gpufree-data/tmp之后训练时统一指定:
bash
TMPDIR=/root/gpufree-data/tmp第四步:预训练策略并保存 replay buffer
下面这条命令是仓库推荐的典型入口之一,适合后续继续训练世界模型并做微调。
bash
cd /root/gpufree-data
TMPDIR=/root/gpufree-data/tmp CUDA_VISIBLE_DEVICES=0 \
python /root/LIFT-humanoid/train_in_mujoco_playground.py \
--env_name=T1LowDimSimFinetuneJoystickFlatTerrain \
--domain_randomization \
--num_timesteps 40000000 \
--num_evals 10 \
--save_buffer_data这一步的输出通常会包含:
- 预训练好的策略参数;
- 训练日志;
- 后续世界模型训练要用到的 replay buffer 数据。([GitHub][1])
如果只是先验证流程是否通,可以先把 --num_timesteps 临时降到较小值,例如 40000,等流程跑通后再切回正式训练配置。
第五步:用离线数据训练世界模型
bash
cd /root/gpufree-data
TMPDIR=/root/gpufree-data/tmp CUDA_VISIBLE_DEVICES=0 \
python -u /root/LIFT-humanoid/train_wm_from_file.py \
--env_name=T1LowDimSimFinetuneJoystickFlatTerrain \
--data_path=/root/gpufree-data/logs/T1LowDimSimFinetuneJoystickFlatTerrain-YYYYmmdd-HHMMSS-<suffix> \
--use_tb这一步会读取阶段一保存的数据,训练 physics-informed world model。([GitHub][1])
如果你已经完成过一次策略预训练,也可以直接像下面这样,指向现有日志目录启动世界模型训练:
bash
cd /root/gpufree-data
TMPDIR=/root/gpufree-data/tmp CUDA_VISIBLE_DEVICES=0 \
python -u /root/LIFT-humanoid/train_wm_from_file.py \
--env_name=T1LowDimSimFinetuneJoystickFlatTerrain \
--data_path=/root/gpufree-data/logs/T1LowDimSimFinetuneJoystickFlatTerrain-20260322-101451 \
--use_tb第六步:在 Brax 中做零样本评测
bash
CUDA_VISIBLE_DEVICES=0 \
python /root/LIFT-humanoid/eval_in_brax.py \
--env t1 \
--model /root/LIFT-humanoid/models/T1LowDimSimFinetuneJoystickFlatTerrain_policy40009000.pkl这一步的作用是先验证:预训练策略迁移到 Brax 后,是否已经具备可接受的基础表现。
第七步:做 sim2sim 微调
bash
CUDA_VISIBLE_DEVICES=0 \
python /root/LIFT-humanoid/finetune.py \
--env_name=T1LowDimSimFinetuneJoystickFlatTerrain \
--suffix=sim2sim \
--ac_training_state_path=/root/LIFT-humanoid/models/T1LowDimSimFinetuneJoystickFlatTerrain_policy40009000.pkl \
--wm_training_state_path=/root/LIFT-humanoid/models/T1LowDimSimFinetuneJoystickFlatTerrain_wm_state40.pkl这一步能帮助你先在仿真内验证 LIFT 的微调链路是否工作正常,再考虑进一步接真机。
九、验证方案
对于 LIFT,我建议把验证拆成三个层次。
1. 预训练是否成立
要验证的问题是:在大规模并行仿真里,SAC 是否真的学到了足够强的基础策略。
建议观察:
- episode return 曲线是否稳定提升;
- 速度跟踪误差是否下降;
- 姿态稳定性是否改善;
- 不同随机种子下结果是否稳定。
2. 世界模型是否有效
要验证的问题是:世界模型是否学到了足够有用的动力学近似。
建议观察:
- 单步预测误差;
- 多步 rollout 漂移;
- 不同模型成员之间的分歧;
- world model rollout 是否能给策略带来额外收益。
3. 微调是否真正带来收益
这是 LIFT 最关键的验证点。
建议重点关注:
- 前向速度跟踪误差;
- 角速度跟踪误差;
- 机体姿态稳定性;
- 步态平滑性;
- 连续稳定步行时间;
- 摔倒或急停频次;
- action-rate penalty 是否下降。
论文附录提到,在真实微调实验中,LIFT 在多个随机种子下都能提升 episode return、前向速度跟踪与角速度跟踪,并降低 action-rate penalty。([arXiv][2])
十、结果解释
LIFT 的实验结果,不应只被理解为“比某个 baseline 高了多少”,而应被理解为它验证了下面这件事:
一个在大规模仿真中预训练出的强策略,确实可以在极少量真实数据的帮助下继续被安全地修正。
这件事为什么重要?
因为在人形机器人里,最昂贵的从来不是算力,而是真机试错。
如果一种方法需要大量真实随机探索,那它就很难真正落地;而 LIFT 给出的答案是:
- 先在仿真中把大部分能力学出来;
- 再用世界模型承接探索;
- 最后只用很少的真实数据做“校准式”微调。
从工程角度看,这比单纯追求“真机端从头学”更现实,也更可扩展。
十一、LIFT 的限制与现实边界
LIFT 很强,但也不是没有前提。论文里至少提到了几个值得正视的限制。
1. 真实实验依赖额外状态估计
例如 base height estimation 在真实 Booster T1 上并不是天然可得,因此实验中依赖外部动捕系统。([arXiv][2])
2. 基座线速度估计存在漂移问题
论文提到线速度是通过 IMU 加速度积分估计的,这种方式容易引入漂移,进而影响速度跟踪表现。([arXiv][2])
3. 真实数据虽少,但整体墙钟时间不一定短
“只需要 80–590 秒真实数据”并不等于“几分钟就能完成整个微调过程”。
因为真实采集、世界模型更新、模型 rollout、策略更新通常是串行进行的,所以总墙钟时间仍可能达到数小时。([arXiv][2])
这几点提醒我们:LIFT 降低的是真实数据量和风险,不代表整个工程流程已经完全没有部署成本。
十二、总结
LIFT 的价值,不在于单独提出了一个更强的控制器,而在于它把“仿真中的大规模预训练能力”和“现实中的高效、安全微调能力”真正接成了一条完整流水线。
更具体一点说,LIFT 的关键贡献可以概括为三点:
- 用大规模并行仿真 + SAC,证明人形控制预训练可以做到强而且可部署;
- 用物理先验世界模型,把探索成本从真实环境转移到模型内部;
- 用仅 80–590 秒真实数据,在真实 Booster T1 上获得显著改善,同时把训练硬件门槛压到单张 RTX 4090也可以尝试的范围。([GitHub][1], [arXiv][2])
如果从技术路线演进的角度看,LIFT 最重要的地方并不是“又一个更高分的方法”,而是它证明了:大规模预训练和高效微调,终于可以在同一套人形控制框架中连起来。
参考资料
[1]: https://github.com/bigai-ai/LIFT-humanoid GitHub - bigai-ai/LIFT-humanoid [2]: https://arxiv.org/html/2601.21363v3 Towards Bridging the Gap between Large-Scale Pretraining and Efficient Finetuning for Humanoid Control