Views
No views yet
pi05) vision-language-action policy
fine-tuned on an SO-101 arm for a two-task cup manipulation setup: pick a cup up from the table and
place it onto a blue circle.train_expert_only=true) — see configuration_pi05.py: "Freeze entire VLM, train
only action expert and projections".lerobot/pi05_base — the last
pre-relative-actions revision, matching LeRobot 0.4.xaailabkaist/so101_recovery_2task
(749 episodes · 151,255 frames · 30 fps · 8 operators)front, wrist, 480×640)expert 5K · full 5K · full 10K — see the
two-task collectionpick up the cup near the blue circle
place the cup on the blue circle

| Trainable parameters | 0.693 B (19.2 %) |
| Frozen | PaliGemma VLM, 2.923 B |
| Steps | 10,000 (run stopped early at 10K; config said 20K) |
| Batch size | 64 |
| Precision | bfloat16, gradient_checkpointing=true |
| Optimizer | AdamW · lr 2.5e-5 · wd 0.01 · betas (0.9, 0.95) · grad-clip 1.0 |
| Schedule | cosine decay with warmup — auto-scaled by LeRobot (20K steps < 30K decay): warmup 1,000→666, decay 30,000→20,000; peak 2.5e-5, LR at this checkpoint ≈1.4e-5 (configured floor 2.5e-6 never reached — run stopped at 10K) |
| Chunk | chunk_size=50, n_action_steps=50, n_obs_steps=1 |
| Seed | 1000 |
| Hardware | 1× NVIDIA RTX PRO 6000 Blackwell (96 GB) |
| VRAM / speed | 28.2 GB · 3.93 s/step |
| Final loss at this checkpoint | 0.087 |


expert-only is essentially flat after warmup (~step 1K):
0.129 → 0.087 over the remaining ~3.8 epochs; full fine-tuning keeps descending. The run was stopped
at 10K rather than the configured 20K on the strength of these curves.1from lerobot.policies.pi05.modeling_pi05 import PI05Policy
2
3policy = PI05Policy.from_pretrained("aailabkaist/pi05_recovery_2task_expert_10k")1python -m lerobot.async_inference.policy_server --host=0.0.0.0 --port=8080 --fps=30
2python -m lerobot.async_inference.robot_client \
3 --server_address=<host>:8080 \
4 --policy_type=pi05 --pretrained_name_or_path=aailabkaist/pi05_recovery_2task_expert_10k \
5 --task="pick up the cup near the blue circle" \
6 --actions_per_chunk=50 --chunk_size_threshold=0.2 \
7 --aggregate_fn_name=weighted_average --fps=30