Home/Projects/AutoBio × π0
AutoBio 机器人实验室主题插画
PROJECT 08 · 旗舰 · 已完成(单任务复现)

AutoBio × π0:VLA 基础模型的 LoRA 微调复现

2026.10●RTX 5090 · WSL2●openpi / π0 · LoRA●权重公开

在 AutoBio(面向数字生物实验室的机器人操作仿真基准)上,对 VLA 基础模型 π0(PaliGemma 2B + 300M 动作专家)做 LoRA 微调: 先修复上游冻结快照里的几处损坏,再用单张消费级显卡训练约 7.5 小时, 把 thermal_cycler_close(合上 PCR 仪盖)任务从 zero-shot 的 0/6 提升到 18/20(90%)。权重、逐回合结果、训练曲线和 rollout 视频全部公开,可复现。

90%评测成功率 · 18/20
7.5h单卡训练时长 · 5000 步
22.2GB峰值显存 / 24GB
0.0041最终训练 loss(自 0.1061)
训练损失曲线
① 训练损失(每 100 步记录一次,真实数据):0.1061 → 0.0041,前几百步下降最快,之后缓慢收敛。
成功率对比
② 与基线对比:zero-shot 完全不会做这个任务;5k 步 LoRA 达到 90%。上游论文用 30k 步全量微调、H800 集群约 1500 GPU 时达到 99.7%——两者不是对等比较,仅作参照。

逐回合评测结果(seed 0,共 20 回合)

每一格是一次真实 rollout,来自评测脚本保存的原始 JSON,没有任何挑选。

■ 成功 □ 失败
诚实标注这次结果的边界:这是 12 个任务里最容易的一个(single task); 单种子、20 回合的置信区间较宽(Wilson 95% 约 68%–98%); zero-shot 的 0/6 只是 6 回合冒烟测试,不是严格估计; 与上游论文的全量微调(30k 步、H800 集群)在算力、步数、微调方式上都不对等。 它证明的是「我能在真实 VLA 代码栈上完整地跑通数据→训练→评测并修好途中的工程问题」, 而不是一个可外推的 SOTA 数字。

复现途中修的上游问题(fork 改动)

训练配置(全部真实记录)

# 单卡 RTX 5090 D v2 (24GB) · WSL2 Ubuntu 24.04 · 2026-10 XLA_FLAGS="--xla_gpu_enable_triton_gemm=false" \ uv run scripts/train.py thermal_cycler_close-lora \ --exp-name lora5k --batch-size 16 --save-interval 1000 # 基座 pi0_base;LoRA:主干 rank=16/alpha=16,动作专家 rank=32/alpha=32 # 数据:thermal_cycler_close-mujoco(100 episodes,LeRobot v2.0) # 5000 步 · ~5.3 s/step · ~7.5 h · 峰值显存 22.2 GB

公开产物

完整复现笔记 约 2800 字长文:环境改造、上游修复、同种子对照、11 条踩坑实录 约 12 分钟 →

AutoBio 基准(仿真资产、任务、数据集与论文)的全部功劳属于上游 AutoBio 团队;本仓库只是其上的复现学习与修复。

这段经历给我的

  • 第一次完整走通 VLA 基础模型的微调闭环:LeRobot 数据 → norm stats → LoRA 训练 → checkpoint 服务 → MuJoCo EGL 无头评测。
  • 学会在真实科研代码上排障:过期导入、SLURM 假设、新架构(sm_120)的 CUDA/JAX 兼容,一个个啃下来。
  • 理解了 LoRA 的取舍:用 1/200 的训练预算换来接近的可感效果,代价是泛化与上限。

下一步

用同样流程做更难的任务(拧盖、移液)与多种子评测,把置信区间收窄;再尝试 RDT 基座的对比。更远的目标是把「微调 VLA 基座」变成自己工具箱里的常规操作,接到自己的仿真项目上。

PythonJAXopenpiπ0LoRAMuJoCo EGLLeRobot v2.0WSL2