Views
No views yet
memvla-bridge on real-robot data from
harrywang01/real_world_task.| Task | Instruction |
|---|---|
can | "Swap the positions of the pink and white soda cans by using another empty location as a buffer." |
wipe_new | "Brush the two plates with the brushes, and each brush can only be used once." |
uncover_new | "Lift the cups to find the small cube hidden underneath, and each cup may only be lifted once." |
memvla-bridge.pt (shihao1895/memvla-bridge).scripts/convert_realworld_hf_to_robomimic.py --bridge_format.per_device_batch_size=64, lr=1e-4, max_steps=4000,
save_interval=200, lr_scheduler=linear-warmup+cosine-decay,
warmup_ratio=0.05.repeated_diffusion_steps=1 (down from upstream default=4 — 4× speedup
with no measured loss-curve regression).num_workers=4, persistent_workers=True, prefetch_factor=2
(upstream MemoryVLA hardcoded num_workers=0; patched in
KuanchengWang/diffusion_policy@jinglin)..adapter is a flat state_dict containing only the trainable LoRA +
modules_to_save tensors. The save code (fsdp.py:save_checkpoint):_fsdp_wrapped_module. and _checkpoint_wrapped_module.
wrapper prefixes (otherwise LLaMA LoRA keys were silently dropped — the
earlier libero-100 ckpts had this bug);vlm. prefix so eval-time vla.load_state_dict(adapter)
finds vlm.llm_backbone.* matches (otherwise 128 LLaMA-LoRA keys
showed up as "unexpected" and LoRA was silently inactive);{llama: 128, cog: 18, action: 155, other: 40}.<task>/
checkpoints/
step-XXXXXX-epoch-YY-loss=Z.ZZZZ.adapter # every 200 steps (20 total)
config.yaml # run config
dataset_statistics.json # task-specific action norm stats1import torch
2adapter = torch.load("can/checkpoints/step-004000-epoch-09-loss=0.07.adapter",
3 map_location="cpu", weights_only=False)
4# adapter = {"adapter": OrderedDict[str, Tensor],
5# "global_step": int, "epoch": int}
6
7# At eval time (see eval_memoryvla_multitask_rollout.py):
8from vla import load_vla
9from memory_diffusion_policy.policy.memoryvla_lora import (
10 MemoryVLALoRAConfig, apply_memoryvla_lora,
11)
12vla = load_vla("memvla-bridge.pt", load_for_training=False)
13lora_cfg = MemoryVLALoRAConfig(**run_cfg["lora"])
14apply_memoryvla_lora(vla, lora_cfg)
15missing, unexpected = vla.load_state_dict(adapter["adapter"], strict=False)
16# Both lists should be small + benign (frozen base keys); 0 unexpected.