
ปรับแต่ง Pi0.5 ซึ่งเป็น VLA แบบ flow-matching จาก Physical Intelligence ด้วยข้อมูลหุ่นยนต์ของคุณเอง คำสั่งจริงสำหรับ openpi และ lerobot pi05 ข้อผิดพลาดของรูปแบบชุดข้อมูล ข้อจำกัดของ VRAM และความหน่วง
Pi0.5 เป็นโมเดลที่คุณเลือกใช้เมื่อนโยบายต้องทำงานในห้องที่ไม่เคยเห็นมาก่อน นอกจากนี้ยังเป็นนโยบายที่จัดการยากที่สุดในบรรดาห้า นโยบายที่ฝึกได้ ที่นี่เพื่อ ปรับแต่ง ด้วยตนเอง: รีโพสิทอรีต้นน้ำเน้น JAX เป็นหลัก, พอร์ต LeRobot ได้ย้ายการปรับใช้ (deployment) ออกจาก lerobot-record ในเวอร์ชัน 0.6.0 และทำให้การติดตั้งพื้นฐานมีขนาดเล็กเกินไปสำหรับการฝึก, และการปรับแต่งแบบเต็มรูปแบบไม่สามารถทำได้บน 4090 ด้านล่าง: สิ่งที่ flow matching มีค่าใช้จ่ายเท่าใดในการอนุมาน, สองเส้นทางคำสั่ง, และตัวเลข 485 ms ที่ตัดสินว่าผลลัพธ์ใช้งานได้หรือไม่
สิ่งที่คุณต้องรู้
- •VLA แบบ flow-matching: PaliGemma VLM ขนาด 3B บวกกับ action expert ขนาด 300M ที่ถอดรหัสกลุ่มการกระทำต่อเนื่อง มีสองเส้นทางในการปรับแต่ง ได้แก่ openpi และ LeRobot pi05 ซึ่งมีคะแนนห่างกัน 0.65 จุดจากค่าเฉลี่ย LIBERO
- •การปรับแต่งแบบเต็มรูปแบบต้องใช้ VRAM มากกว่า 70 GB โดย openpi ระบุ LoRA ที่ 22.5 GB เฉพาะบนเส้นทาง JAX เท่านั้น
- •ชุดข้อมูลต้องเป็น LeRobotDataset v3.0 ที่มี q01 และ q99 quantiles ใน meta/stats.json มิฉะนั้นจะเกิดข้อผิดพลาดเมื่อประมวลผลแบทช์แรก
- •ตรวจสอบเวอร์ชัน lerobot ของคุณก่อน: 0.6.0 ทำให้แพ็คเกจพื้นฐานมีน้ำหนักเบาและย้ายการปรับใช้ (deployment) ออกจาก lerobot-record
- •ที่นี่ทำงานที่ 485 ms ต่อขั้นตอนการกระทำ ต้องการ 50 ตอน และมีค่าใช้จ่ายประมาณ 4 ถึง 12 USD ต่อการรัน
Pi0.5 คืออะไรกันแน่
Physical Intelligence ได้เผยแพร่ pi0 ในเดือนตุลาคม 2024: โมเดล flow matching วิสัยทัศน์-ภาษา-การกระทำ บน VLM ที่ได้รับการฝึกฝนล่วงหน้า: PaliGemma ที่มี 3 พันล้านพารามิเตอร์ บวกกับ action expert ขนาด 300M ที่เริ่มต้นจากศูนย์ รวมทั้งหมด 3.3 พันล้าน เอกสารรายงานการฝึกฝนล่วงหน้าด้วยข้อมูลหุ่นยนต์กว่า 10,000 ชั่วโมง ครอบคลุมการกำหนดค่าหุ่นยนต์ 7 แบบ และ 68 งาน อ่านเพิ่มเติมใน บทความ pi0.
Pi0.5 (arXiv 2504.16054, 22 April 2025) ยังคงโครงสร้างนั้นไว้และเปลี่ยนรูปแบบการฝึก: ข้อมูลเว็บ, การตรวจจับวัตถุ, คำแนะนำด้วยวาจาจากมนุษย์ที่ฝึกสอนหุ่นยนต์, ป้ายกำกับงานย่อย, ข้อมูลข้ามรูปแบบจากหุ่นยนต์ในบ้านหลายหลัง ผลลัพธ์คือหุ่นยนต์ที่ทำความสะอาดห้องครัวในบ้านที่ไม่ได้อยู่ในชุดข้อมูลการฝึก README ของ openpi เพิ่มรายละเอียดที่ชื่อเรื่องไม่ได้ระบุไว้: pi0.5 ที่เผยแพร่ออกมาได้รับการฝึกด้วยการแยกความรู้ (knowledge insulation) (arXiv 2505.23705)
| คุณสมบัติ | pi0 | pi0.5 |
|---|---|---|
| รูปแบบแบ็คโบน VLM | gemma_2b (PaliGemma) | gemma_2b (PaliGemma) |
| รูปแบบผู้เชี่ยวชาญด้านการกระทำ | gemma_300m | gemma_300m |
| action_dim | 32 | 32 |
| action_horizon เริ่มต้น | 50 | 50 |
| max_token_len | 48 | 200 |
| discrete_state_input | false | true, สถานะถูกแบ่งเป็นช่วงๆ ในพรอมต์ |
| จุดตรวจสอบพื้นฐาน | gs://openpi-assets/checkpoints/pi0_base | gs://openpi-assets/checkpoints/pi05_base |
README ของ openpi ระบุไว้อย่างชัดเจนว่า: repository นี้รองรับเฉพาะส่วนหัว flow matching สำหรับการฝึกและการอนุมานของ pi0.5 เท่านั้น เอกสารอธิบายสองขั้นตอน แต่โค้ดมีเพียงขั้นตอนที่สอง: การ pre-training แสดงการกระทำทุกอย่างเป็นโทเค็นแบบ discrete ผ่าน FAST tokenizer และเมื่อนำไปใช้งาน โมเดลจะอนุมานงานย่อยระดับสูงก่อนแต่ละส่วนของการกระทำ ไม่มีสิ่งใดอยู่ใน repository นี้ การ์ด lerobot/pi05_base ให้รายการเดียวกันและเพิ่ม RL แม้ว่าเอกสาร pi0.5 จะไม่ได้อธิบายขั้นตอนการเรียนรู้แบบเสริมแรงเลยก็ตาม พอร์ต LeRobot สืบทอดขอบเขตนั้น และเทรนเนอร์ที่โฮสต์ทั้งหมดบนนั้นก็เช่นกัน รวมถึง ตัวนี้ การอนุญาตใช้งานก็แยกกัน: หน้าเอกสาร pi05 ระบุ Apache 2.0 ส่วนการ์ด lerobot/pi05_base ถูกแท็กว่า license: gemma.
สิ่งที่ flow matching เปลี่ยนแปลงเกี่ยวกับการฝึกและการอนุมาน
A นโยบาย ที่คุณสามารถฝึกบน SO-100 ได้นั้นจะถดถอยการกระทำโดยตรง (ACT) หรือแปลงเป็นโทเค็นและถอดรหัสแบบอัตโนมัติ (pi0-FAST) Flow matching ไม่ได้ทำทั้งสองอย่าง: มันเรียนรู้สนามเวกเตอร์ที่ขนส่งสัญญาณรบกวนไปยัง กลุ่มการกระทำ ที่สะอาด แล้วจึงรวมเข้าด้วยกัน เอกสาร pi0 ใช้ 10 ขั้นตอนการรวมที่ขนาดขั้นตอน 0.1; การกำหนดค่า pi05 ของ LeRobot มี `num_inference_steps: int = 10` เหมือนกัน
- การฝึก: ค่าความคลาดเคลื่อนจะถดถอยกลุ่มการกระทำที่มีสัญญาณรบกวน ไม่มีตัวแปลงโทเค็นให้ปรับแต่ง ไม่มีการทำให้มุมข้อต่อของคุณเป็นแบบไม่ต่อเนื่อง
- การอนุมาน: หนึ่งกลุ่มการกระทำมีค่าใช้จ่ายในการส่งผ่านไปข้างหน้าสิบครั้งผ่านผู้เชี่ยวชาญการกระทำ นี่เป็นโครงสร้าง ไม่ใช่ปัญหาการปรับแต่ง
- ผลลัพธ์: การกระทำแบบต่อเนื่องที่มีมิติ 32, มีการเติมช่องว่างภายใน, ค่าความคลาดเคลื่อนจะถูกคำนวณจากมิติที่หุ่นยนต์ของคุณมี แขน 6-DoF พร้อมกริปเปอร์ใช้ 7
# openpi/src/openpi/models/pi0_config.py - the defaults every pi05 config inherits
@dataclasses.dataclass(frozen=True)
class Pi0Config(_model.BaseModelConfig):
dtype: str = "bfloat16"
paligemma_variant: _gemma.Variant = "gemma_2b"
action_expert_variant: _gemma.Variant = "gemma_300m"
action_dim: int = 32
action_horizon: int = 50
max_token_len: int = None # 200 if pi05 else 48
pi05: bool = False # flips discrete_state_input to Trueแกนหลัก PaliGemma และเกตที่อยู่ด้านหน้า
PaliGemma (arXiv 2407.07726) เป็นตัวเข้ารหัสภาพ SigLIP-So400m บนโมเดลภาษา Gemma-2B ซึ่งมีพารามิเตอร์ประมาณ 3 พันล้านตัว Pi0.5 สืบทอด tokenizer ของมัน และ tokenizer นั้นอยู่ใน repository แบบ gated นี่เป็นวิธีที่พบบ่อยที่สุดที่การรันครั้งแรกจะล้มเหลว ก่อนที่จะถึง ขั้นตอนการฝึกอบรม.
เอกสารของ LeRobot pi05 ระบุไว้อย่างชัดเจนว่า: pi0.5 ใช้ tokenizer แบบ gated google/paligemma-3b-pt-224 ดังนั้นโปรดยอมรับใบอนุญาตบน Hub และรัน hf auth login ก่อน การเข้าถึงจะได้รับอนุมัติด้วยตนเอง ไม่ใช่ทันที หากข้ามขั้นตอนนี้ไป เริ่มการรันบนคลาวด์แบบชำระเงิน คุณจะต้องจ่ายค่า pod ที่ไม่สามารถดาวน์โหลด tokenizer ได้
ก่อนเริ่มต้น: รูปแบบชุดข้อมูล, ตอน (episodes), ฮาร์ดแวร์
Pi0.5 ใน LeRobot อ่าน ชุดข้อมูล LeRobot ในรูปแบบ v3.0 ซึ่งมาพร้อมกับ lerobot 0.4.0 ในเดือนตุลาคม 2025: หลายตอนต่อไฟล์ Parquet และ MP4 แทนที่จะเป็นหนึ่งไฟล์ต่อ ตอน โดยมีขอบเขตอยู่ใน meta/episodes/ แทนที่จะเป็นชื่อไฟล์ บันทึกด้วย ไคลเอนต์เดสก์ท็อป หรือทำตาม บันทึกชุดข้อมูลแรกของคุณ แล้วคุณก็จะได้มันมา
| โหมด | หน่วยความจำ GPU ที่ต้องการ | ตัวอย่าง GPU |
|---|---|---|
| การอนุมาน | more than 8 GB | RTX 4090 |
| การปรับแต่งละเอียด, LoRA | more than 22.5 GB | RTX 4090 |
| การปรับแต่งละเอียด, เต็มรูปแบบ | more than 70 GB | A100 80 GB or H100 |
Pi0.5 และ SmolVLA ต้องการ LeRobot v3.0. GR00T N1.7 และ GR00T N1.5 ต้องการ v2.0 หรือ v2.1 และจะเกิดข้อผิดพลาดกับชุดข้อมูล v3.0 การบันทึกข้อมูลครั้งเดียวไม่สามารถใช้ได้กับทั้งสองเวอร์ชันหากไม่มีการแปลง และข้อผิดพลาดไม่ได้ระบุว่า "wrong dataset version". ดู ชุดข้อมูลถูกปฏิเสธ: ต้องใช้ v3.
# v2.1 -> v3.0, run against a dataset already on the Hub
python -m lerobot.scripts.convert_dataset_v21_to_v30 --repo-id=<HF_USER/DATASET_ID>
# aggregates episode-0000.parquet, episode-0001.parquet, ... -> file-0000.parquet
# aggregates episode-0000.mp4, episode-0001.mp4, ... -> file-0000.mp4
# rewrites meta/episodes/* with per-episode lengths, tasks and offsetsแพลตฟอร์มต้องการอย่างน้อย 50 ตอนสำหรับ Pi0.5 ซึ่งเป็นจำนวนขั้นต่ำเดียวกับ GR00T และ ACT การฝึกอบรมล่วงหน้าเป็นส่วนสำคัญ ดังนั้น 50 ตอนที่สะอาดดีกว่า 200 ตอนที่ไม่มีคุณภาพ ยังใหม่กับเรื่องนี้ใช่ไหม? เริ่มต้นด้วย คู่มือการรวบรวมข้อมูล.

เส้นทาง A: ปรับแต่งด้วย openpi repository
การใช้งานอ้างอิง: JAX มาก่อน, ทดสอบบน Ubuntu 22.04 เท่านั้น, ขับเคลื่อนด้วยออบเจกต์ config แทนที่จะเป็น flag. เส้นทาง PyTorch มาถึงในเดือนกันยายน 2025, ตรวจสอบความถูกต้องบน LIBERO. มีสามขั้นตอน: แปลงข้อมูลของคุณ, กำหนด config, ฝึกและให้บริการ.
- 1โคลนและติดตั้ง
openpi ใช้ uv. GIT_LFS_SKIP_SMUDGE คือสิ่งที่ทำให้ LeRobot เข้ามาเป็น dependency ได้โดยไม่มี LFS blobs.
bashgit clone --recurse-submodules git@github.com:Physical-Intelligence/openpi.git cd openpi GIT_LFS_SKIP_SMUDGE=1 uv sync GIT_LFS_SKIP_SMUDGE=1 uv pip install -e . - 2แปลงข้อมูลของคุณเป็นชุดข้อมูล LeRobot
Upstream มีตัวแปลงสำหรับ LIBERO และ DROID และคาดหวังให้คุณปรับใช้ตัวใดตัวหนึ่ง งานคือการแมปคีย์.
bashuv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/data - 3เพิ่ม training config
Configs คือรายการ TrainConfig ใน src/openpi/training/config.py. ตัวนี้ปรับใช้ pi05_droid_finetune โดยมีตัวโหลดน้ำหนักชี้ไปที่ pi05_base.
pythonTrainConfig( name="pi05_so100", model=pi0_config.Pi0Config( pi05=True, action_dim=32, # pi05 is trained with 32-dim actions action_horizon=16, ), # Copy LeRobotLiberoDataConfig in the same file and rewrite the key # mapping for your camera names, then reference your copy here. data=LeRobotLiberoDataConfig( repo_id="your_hf_username/my_so100_dataset", base_config=DataConfig(prompt_from_task=True), ), weight_loader=weight_loaders.CheckpointWeightLoader( "gs://openpi-assets/checkpoints/pi05_base/params" ), batch_size=32, num_train_steps=20_000, ) - 4คำนวณสถิติ norm
รันกับชื่อ config ไม่ใช่ชุดข้อมูล การข้ามขั้นตอนนี้เป็นความล้มเหลวแรกที่พบบ่อยที่สุดที่นี่.
bashuv run scripts/compute_norm_stats.py --config-name pi05_so100 - 5ฝึก
ตัวแปรนี้ทำให้ JAX ใช้หน่วยความจำ GPU 90 เปอร์เซ็นต์ แทนที่จะเป็นค่าเริ่มต้น 75 เปอร์เซ็นต์ บนการ์ด 80 GB สิ่งนี้จะตัดสินว่าการรันจะสำเร็จหรือไม่.
bashXLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_so100 \ --exp-name=my_experiment \ --overwrite - 6ให้บริการ
เซิร์ฟเวอร์จะรับฟังที่พอร์ต 8000 และตอบคำถามเกี่ยวกับการสังเกต; รันไทม์ของหุ่นยนต์ของคุณคือไคลเอนต์.
bashuv run scripts/serve_policy.py policy:checkpoint \ --policy.config=pi05_so100 \ --policy.dir=checkpoints/pi05_so100/my_experiment/20000
การใช้งาน PyTorch ของ openpi ไม่รองรับ pi0-FAST, mixed precision, FSDP, LoRA หรือ EMA weights ดังนั้น LoRA ที่มีขนาดถึง 22.5 GB จึงใช้งานได้เฉพาะกับ JAX เท่านั้น ผ่านตัวแปร gemma_2b_lora และ gemma_300m_lora ที่แย่กว่านั้นคือ: การตั้งค่าจะคัดลอกไฟล์ที่แก้ไขแล้วทับ transformers 4.53.2 ที่คุณติดตั้งไว้ และ README เตือนว่าด้วยโหมด hardlink เริ่มต้นของ uv สิ่งนี้จะแก้ไข transformers ในแคชของ uv อย่างถาวร และอาจส่งผลกระทบต่อโปรเจกต์อื่น ๆ ได้ ยกเลิกได้ด้วย uv cache clean transformers.
เส้นทาง B: ปรับแต่งด้วย lerobot pi05
พอร์ต LeRobot ห่อหุ้ม weights เดียวกันใน CLI ที่คุณใช้อยู่แล้วสำหรับ ACT และ SmolVLA. ข้อมูลทั้งหมดด้านล่างนี้ได้รับการตรวจสอบกับ lerobot 0.6.1, ซึ่งเป็นเวอร์ชันที่เผยแพร่ตั้งแต่วันที่ 3 สิงหาคม 2026, และเอกสาร pi05 ณ วันที่ 23 สิงหาคม 2026 เวอร์ชันมีความสำคัญที่นี่: ชุดข้อมูล v3.0 มาพร้อมกับเวอร์ชัน 0.4.0 ในเดือนตุลาคม 2025, บล็อก 0.5.0 เมื่อวันที่ 9 มีนาคม 2026 นำเสนอ pi0-FAST และ Real-Time Chunking, และเวอร์ชัน 0.6.0 เมื่อวันที่ 6 กรกฎาคม 2026 ทำให้แพ็กเกจพื้นฐานมีน้ำหนักเบาลง และย้ายการปรับใช้ไปยัง lerobot-rollout
สิ่งหนึ่งที่ไม่ได้เปลี่ยนแปลงคือ: lerobot-train และ lerobot-record เป็นจุดเริ่มต้นที่มีอยู่แล้วในเวอร์ชัน 0.3.2, สิงหาคม 2025 บทช่วยสอนที่ยังคงเรียกใช้ python -m lerobot.scripts.train นั้นเก่ากว่าการเปลี่ยนแปลงเป็นปี และไม่น่าเชื่อถือในส่วนอื่น ๆ ด้วย
- 1ติดตั้งด้วยส่วนเสริมที่ถูกต้อง
ตั้งแต่เวอร์ชัน 0.6.0 การติดตั้งพื้นฐานจะรวมเฉพาะส่วนที่จำเป็นสำหรับ ML เท่านั้น และส่วนเสริม pi จะไม่เพิ่มโค้ดสำหรับชุดข้อมูลหรือการฝึก ดังนั้นการปรับแต่ง (fine-tune) จึงต้องใช้ส่วนเสริม training ด้วย คำสั่งแบบบรรทัดเดียวรุ่นเก่าจะล้มเหลวที่นี่ในขั้นตอนการนำเข้า
bash# policy dependencies plus the training stack pip install 'lerobot[pi,training]' # from a source checkout pip install -e ".[pi,training]" # driving an SO-100 afterwards needs the robot extras too pip install 'lerobot[core_scripts,feetech]' - 2ยืนยันตัวตน
ยอมรับใบอนุญาต paligemma-3b-pt-224 ในเบราว์เซอร์ จากนั้นเข้าสู่ระบบบนเครื่องที่ใช้ฝึกโมเดล
bashhf auth login - 3เพิ่มสถิติควอนไทล์
Pi0.5 ทำให้ STATE และ ACTION เป็นปกติด้วยควอนไทล์ ดังนั้น meta/stats.json จึงต้องมี q01 และ q99 ชุดข้อมูลรุ่นเก่าจะมีเพียง min, max, mean, std เท่านั้น
bashlerobot-edit-dataset \ --repo_id your_dataset \ --new_repo_id your_dataset \ --operation.type recompute_stats \ --operation.overwrite true - 4ปรับแต่งจาก lerobot/pi05_base
ตั้งค่าขนาดแบตช์ให้เหมาะสมกับการ์ดของคุณ เอกสารใช้ 64 บน LIBERO ที่ 80 GB ระบุ bfloat16 อย่างชัดเจน ค่าเริ่มต้นของการกำหนดค่าคือ float32
bashlerobot-train \ --dataset.repo_id=${HF_USER}/my_so100_dataset \ --policy.type=pi05 \ --policy.pretrained_path=lerobot/pi05_base \ --policy.gradient_checkpointing=true \ --policy.dtype=bfloat16 \ --policy.device=cuda \ --policy.push_to_hub=false \ --output_dir=./outputs/pi05_so100 \ --job_name=pi05_so100 \ --batch_size=4 \ --num_workers=8 \ --steps=30000 \ --save_freq=5000 \ --seed=1000 - 5รันบนแขนกล
ในเวอร์ชัน 0.6.x นี่คือ lerobot-rollout: lerobot-record จะปฏิเสธนโยบายและชื่อชุดข้อมูล eval_ Base จะควบคุมแขนกล ส่วน sentry จะบันทึกการทำงาน
bashlerobot-rollout \ --strategy.type=base \ --policy.path=${HF_USER}/my_policy \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM1 \ --robot.cameras="{ up: {type: opencv, index_or_path: /dev/video10, width: 640, height: 480, fps: 30}}" \ --task="Put lego brick into the transparent box" \ --duration=60 # same run, recorded into an eval_ dataset lerobot-rollout \ --strategy.type=sentry \ --policy.path=${HF_USER}/my_policy \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM1 \ --dataset.repo_id=${HF_USER}/eval_so100 \ --dataset.single_task="Put lego brick into the transparent box" \ --duration=600
| แฟล็ก | หน้าที่ | หมายเหตุ |
|---|---|---|
| --policy.type=pi05 | เลือก Pi0.5 | จำเป็นเมื่อใช้ pretrained_path, ละเว้นเมื่อใช้ --policy.path |
| --policy.pretrained_path | โหลดเฉพาะน้ำหนัก | ชื่อฟีเจอร์จากชุดข้อมูลของคุณ, การตั้งค่าที่เก็บไว้จะถูกรีเซ็ต |
| --policy.path | น้ำหนักพร้อมไฟล์ config.json ของเช็คพอยต์ | การตั้งค่าที่เก็บไว้ เช่น n_action_steps จะถูกสืบทอด |
| --policy.n_action_steps | จำนวนขั้นตอนที่ใช้ต่อหนึ่งส่วน | กลับไปใช้ค่าเริ่มต้น 50, ไม่เกิน chunk_size (ค่าเริ่มต้น 50) |
| --policy.train_expert_only | ตรึง VLM, ฝึกผู้เชี่ยวชาญ | ค่าเริ่มต้นเป็น false, ใช้หน่วยความจำน้อยลง, อาจมีผลต่อความสำเร็จบ้าง |
| --policy.gradient_checkpointing | คำนวณใหม่แทนการจัดเก็บ activations | ค่าเริ่มต้นเป็น false, เป็นตัวเลือกแรกเมื่อการรันไม่พอดี |
| --peft.method_type=LORA | อะแดปเตอร์ LoRA แทนน้ำหนักเต็ม | ต้องใช้ส่วนเสริม peft, ตัวอย่างในเอกสารคือ SmolVLA |
| --policy.rtc_training_max_delay | การปรับสภาพคำนำหน้าการกระทำสำหรับ RTC | เฉพาะ main branch เท่านั้น, ไม่มีใน 0.6.1, ต้องน้อยกว่า chunk_size |
| --rename_map | แมปคอลัมน์ชุดข้อมูลไปยังฟีเจอร์นโยบาย | จำเป็นเมื่อคีย์กล้องของคุณแตกต่างกัน |
หากไม่มีควอนไทล์ คุณจะได้รับ ValueError: QUANTILES normalization mode requires q01 and q99 stats ในแบตช์แรก ให้คำนวณสถิติใหม่ แต่ผลลัพธ์จะอยู่ใน $HF_LEROBOT_HOME/your_dataset ไม่ใช่แคชที่ --dataset.repo_id อ่าน ดังนั้นให้ฝึกโดยใช้ --dataset.root ชี้ไปที่นั่น หรือพุชขึ้น Hub หรือข้ามควอนไทล์ด้วย --policy.normalization_mapping='{"ACTION": "MEAN_STD", "STATE": "MEAN_STD", "VISUAL": "IDENTITY"}' ตามที่คำสั่งอ้างอิงของ LIBERO ทำ
ค่าเริ่มต้นสามชุด และชุดใดบ้างที่ไปถึงตัวฝึก
TrainConfig ของ openpi เป็นค่าอ้างอิง, PI05Config ของ LeRobot คือสิ่งที่ lerobot-train ใช้เมื่อคุณไม่ได้ระบุอะไร, และฟอร์มนี้จะส่งชุดค่าที่สาม สิ่งที่น่าประหลาดใจคืออัตราการเรียนรู้: ค่าเริ่มต้นของทั้งสองแหล่งสูงสุดที่ 2.5e-5, ในขณะที่การตั้งค่า pi05_libero ของ openpi เองและแพลตฟอร์มนี้เพิ่มเป็น 5e-5
| การตั้งค่า | openpi TrainConfig | lerobot pi05 และ lerobot-train | AY-Robots ส่ง |
|---|---|---|---|
| ขนาดแบตช์ | 32 | 8 | 1 |
| อัตราการเรียนรู้สูงสุด | 2.5e-5, การลดลงแบบโคไซน์ | optimizer_lr 2.5e-5 | 5e-5 |
| จำนวนขั้นตอนการฝึก | 30,000 | 100,000 | 30,000 |
| ช่วงเวลาบันทึกจุดตรวจสอบ | 1,000 ขั้นตอน | 20,000 ขั้นตอน | ไม่อยู่ในฟอร์ม |
| Seed | 42 | 1,000 | อยู่ในฟอร์ม |
| Action chunk | action_horizon 50 | chunk_size 50, n_action_steps 50 | ไม่อยู่ในฟอร์ม |
| Weight dtype | bfloat16 | float32 จนกว่าคุณจะส่ง --policy.dtype | ไม่อยู่ในฟอร์ม |
| การสะสม Gradient | ไม่มีการตั้งค่านี้, ใช้ fsdp_devices แทน | ไม่มีในทุกรุ่นที่ผ่านมา | 16, และถูกละทิ้ง |
พอร์ตนี้มีความแม่นยำหรือไม่? ทีม LeRobot ได้ปรับแต่งโมเดลพื้นฐาน LIBERO เพิ่มเติมอีก 6k ขั้นตอน และเปรียบเทียบกับตัวเลขการอ้างอิงของ openpi ในสี่ชุด: ค่าเฉลี่ย 97.5 เปอร์เซ็นต์ เทียบกับ 96.85, นำหน้าใน Libero 10, และตามหลังใน Spatial เส้นทางนี้เป็นทางเลือกของเครื่องมือ ไม่ใช่ทางเลือกด้านคุณภาพ
- มีการฝึกอบรมหุ่นยนต์ล่วงหน้ามากกว่า 10,000 ชั่วโมง ดังนั้น 50 ตอนของงานของคุณก็อาจเพียงพอแล้ว
- การกระทำแบบต่อเนื่อง: ไม่ต้องปรับแต่ง tokenizer, ไม่มีข้อจำกัดในการแยกส่วนของมุมข้อต่อของคุณ
- พอร์ต LeRobot ทำคะแนนเฉลี่ย 97.5 เปอร์เซ็นต์ใน LIBERO เทียบกับ 96.85 ของ openpi ดังนั้น CLI ที่ใช้งานง่ายกว่าจึงไม่มีค่าใช้จ่ายที่วัดได้
- เส้นทางที่ประหยัดพารามิเตอร์ทั้งสองด้าน: รูปแบบ JAX LoRA ของ openpi, การรวม PEFT ของ LeRobot
- การปรับแต่งแบบเต็มรูปแบบต้องใช้พื้นที่มากกว่า 70 GB ตัวเลข LoRA 22.5 GB เป็นของ JAX ของ openpi; ยังไม่มีการเผยแพร่สำหรับ pi05 ภายใต้ PEFT
- 485 มิลลิวินาทีต่อขั้นตอนการกระทำ, ช้าที่สุดในห้าตัวเลือกนี้: ช้ากว่า SmolVLA สองเท่า, ช้ากว่า ACT ยี่สิบสี่เท่า
- ต้องใช้ LeRobot v3.0 ดังนั้นชุดข้อมูลที่บันทึกไว้สำหรับการรัน GR00T จำเป็นต้องมีการแปลง และในทางกลับกัน
- ตัวเลือกใหม่จะถูกเพิ่มใน main ก่อน: หน่วยความจำ RTC และ MEM ในระหว่างการฝึกไม่ได้อยู่ในเวอร์ชัน 0.6.1 ดังนั้นเอกสารล่าสุดอาจหมายถึงการติดตั้งจาก git
ความเป็นจริง 485 มิลลิวินาที และจุดที่มันไม่สามารถใช้งานได้อีกต่อไป
สิ่งนี้เป็นตัวตัดสินโปรเจกต์ของคุณ ดังนั้นจึงมาก่อนตารางค่าใช้จ่าย ต่อขั้นตอนการดำเนินการที่วัดได้สำหรับ Pi0.5 คือ 485 มิลลิวินาที เมื่อเทียบกับอีกสี่รายการ:
| นโยบาย | เวลาอนุมานต่อขั้นตอนการดำเนินการ | พารามิเตอร์ | ระดับ GPU | จำนวนตอนขั้นต่ำ |
|---|---|---|---|---|
| ACT | 20 ms | ~80 M | RTX 4090 or any 24 GB card | 50 |
| GR00T N1.7 | 152 ms | ~3 B | A100 80 GB or H100 80 GB | 50 |
| GR00T N1.5 | 165 ms | ~3 B | A100 80 GB or H100 80 GB | 50 |
| SmolVLA | 245 ms | ~450 M | RTX 4090 or any 24 GB card | 30 |
| Pi0.5 | 485 ms | ~3 B | A100 80 GB or H100 80 GB | 50 |

ลูปควบคุมในห้าโมเดลนี้ใช้เวลา 20 ถึง 485 มิลลิวินาทีต่อขั้นตอนการกระทำ การเดินทางไปกลับผ่านอินเทอร์เน็ตสาธารณะที่เพิ่มขึ้นจาก 485 มิลลิวินาที จะทำให้ policy ที่ทำงานได้กลายเป็น policy ที่ลังเล การอนุมานระยะไกลเหมาะสำหรับงานหยิบวางที่ช้า ไม่ใช่สำหรับการเคลื่อนไหวตอบสนองที่รวดเร็ว เราอยากจะบอกความจริงนี้มากกว่าที่จะขายเดโมที่ใช้งานได้เฉพาะบน LAN หากแขนกลของคุณหยุดชั่วคราวระหว่างชิ้นส่วน ให้เริ่มต้นที่ policy หยุดนิ่งกลางการเคลื่อนไหว
Upstream มีคำตอบ และครึ่งหนึ่งของคำตอบนั้นอยู่ในเวอร์ชันที่คุณสามารถติดตั้งได้แล้ว Real-Time Chunking จะสร้างชิ้นส่วนถัดไปในขณะที่แขนกลยังคงดำเนินการชิ้นส่วนปัจจุบันอยู่ จากนั้นจะนำทางขั้นตอนที่ทับซ้อนกันของชิ้นส่วนใหม่ให้คงอยู่ใกล้กับส่วนที่ดำเนินการไปแล้ว เพื่อไม่ให้แขนกลหยุดชะงักหรือกระตุกที่รอยต่อ รูปแบบการอนุมานที่มาพร้อมกับการเปลี่ยนแปลงในเวอร์ชัน 0.4.2 สำหรับ Pi0, Pi0.5 และ SmolVLA เป็นเพียงแฟล็กสำหรับการใช้งาน ไม่ใช่การฝึกใหม่:
lerobot-rollout \
--strategy.type=base \
--policy.path=${HF_USER}/my_policy \
--inference.type=rtc \
--inference.rtc.execution_horizon=10 \
--inference.rtc.max_guidance_weight=10.0 \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM1 \
--robot.cameras="{ up: {type: opencv, index_or_path: /dev/video10, width: 640, height: 480, fps: 30}}" \
--task="Put lego brick into the transparent box" \
--duration=60มันไม่ได้ทำให้โมเดลเร็วขึ้น มันซ่อนช่องว่าง: 485 มิลลิวินาทียังคงถูกใช้ไป แต่ไม่ได้อยู่ในเส้นทางวิกฤต ดังนั้นคิวจึงไม่หมดลงระหว่างชิ้นส่วน รูปแบบการฝึกจาก arXiv 2512.05964 ไปไกลกว่านั้น: โมเดลเรียนรู้ที่จะปรับเงื่อนไขตามคำนำหน้าการกระทำที่สะอาด ดังนั้นในการอนุมาน การทับซ้อนจะถูกเติมเต็มอย่างสมบูรณ์ด้วยไทม์สเต็ปการไหลต่อการกระทำ แทนที่จะเป็นการนำทาง และการส่งผ่านย้อนกลับของการนำทางจะหายไป ในระหว่างการฝึก มันจะสุ่มความยาวคำนำหน้าต่อตัวอย่าง และคำนวณค่าความสูญเสียการไหลบนส่วนท้ายที่เหลือ แฟล็กนั้นมีอยู่ใน main เท่านั้น ไม่ใช่ในเวอร์ชัน 0.6.1 และความล่าช้าที่คุณฝึกจะต้องน้อยกว่า chunk_size
สองวิธีในการรับเช็คพอยต์ Pi0.5
คุณเช่าหรือเป็นเจ้าของกราฟิกการ์ดขนาด 80 GB ติดตั้งหนึ่งในสแต็กด้านบน แปลงชุดข้อมูลของคุณ และดูแลการรัน คุณยังคงควบคุมทุกอย่างได้: JAX LoRA ของ openpi, PEFT adapters ของ LeRobot, การกระทำเชิงสัมพันธ์, การแมปคีย์ที่กำหนดเอง คุณยังคงต้องรับมือกับทุกความล้มเหลวด้วย
- ฮาร์ดแวร์: A100 80 GB หรือ H100 หรือการ์ด 24 GB บนเส้นทาง JAX LoRA ของ openpi
- การตั้งค่า: ใช้เวลาช่วงบ่ายสำหรับการรันครั้งแรก ส่วนใหญ่เป็นการแมปคีย์และ gated tokenizer
- ไม่มีในรูปแบบโฮสต์: PEFT adapters, การกระทำเชิงสัมพันธ์, RTC ระหว่างการฝึก, หน่วยความจำ MEM
lerobot-train \
--dataset.repo_id=${HF_USER}/my_so100_dataset \
--policy.type=pi05 \
--policy.pretrained_path=lerobot/pi05_base \
--policy.rtc_training_max_delay=10 \
--policy.gradient_checkpointing=true \
--policy.dtype=bfloat16 \
--batch_size=4 --steps=30000 --seed=1000คุณเลือกรุ่นและชุดข้อมูลใน ฟอร์มการฝึก แบ็กเอนด์จะเช่า GPU ในตลาดแบบสปอตตาม VRAM ที่ต้องการ รันตัวฝึก และเขียน เช็คพอยต์ ไปยังที่เก็บอ็อบเจกต์ Pi0.5 มีให้ใช้งานบนคลาวด์เท่านั้นที่นี่ มีคู่มือสำหรับ SO-100, SO-101, Koch v1.1 และ LeKiwi.
| การตั้งค่า | สิ่งที่แพลตฟอร์มส่งสำหรับ Pi0.5 |
|---|---|
| เช็คพอยต์พื้นฐาน | lerobot/pi05_base |
| ประเภทนโยบาย | pi05 |
| ขนาดแบตช์ | 1 |
| อัตราการเรียนรู้ | 5e-5 |
| จำนวนสเต็ปสูงสุด | 30000 |
| การสะสม Gradient | 16 แต่โปรดดูคำเตือนด้านล่าง |
| การตั้งค่าเพิ่มเติมในฟอร์ม | seed, logFreq |
| รูปแบบชุดข้อมูล | LeRobot v3.0 |
| ระดับ GPU | A100 80 GB หรือ H100 80 GB |
ตัวฝึกส่งค่าการสะสม gradient เป็น 16 และ lerobot 0.5.1 ไม่มีแฟล็กที่จะรับค่านี้ ดังนั้นจึงถูกละทิ้งไป ไม่มี lerobot เวอร์ชันที่เผยแพร่แล้วที่มีแฟล็กนี้: การตั้งค่านี้มีอยู่เฉพาะใน main branch เท่านั้น ในรูปแบบ --accelerator.gradient_accumulation.steps ขนาดแบตช์ที่มีผลจริงที่นี่คือ 1 เทียบกับ 256 ที่การกำหนดค่า pi05_libero ของ openpi ใช้ เป็นสิ่งสำคัญที่ควรรู้ก่อนที่คุณจะอ่านกราฟการสูญเสีย การตั้งค่านี้ใช้ได้กับการรัน GR00T N1.7 และ GR00T N1.5
การอนุมานทำงานในลักษณะเดียวกัน: พ็อดจะถูกจัดเตรียมเพื่อให้บริการนโยบาย และไคลเอนต์ในเครื่องของคุณจะสื่อสารกับพ็อดนั้น พ็อดมี watchdog สำหรับสถานะว่างและจะทำลายตัวเอง ดังนั้นแท็บที่ถูกลืมจะไม่เรียกเก็บเงินโดยไม่แจ้งให้ทราบ ข้อควรระวังเรื่องความหน่วงเวลายังคงมีผล ซึ่งเป็นเหตุผลว่าทำไม ACT ที่ 20 ms มักจะชนะงานที่รวดเร็ว
เมื่อมันไม่ทำงาน
| อาการ | สาเหตุที่เป็นไปได้มากที่สุด |
|---|---|
| การรันถูกปฏิเสธก่อนเริ่ม | ชุดข้อมูล v2.1 แต่ Pi0.5 ต้องการ v3.0 หรือกลับกันสำหรับ GR00T |
| ImportError, แพ็กเกจ datasets หายไป | lerobot 0.6.x ที่ไม่มี training extra |
| ValueError เกี่ยวกับ q01 และ q99 ในแบตช์แรก | ไม่มี quantiles ใน meta/stats.json; คำนวณใหม่หรือใช้ MEAN_STD |
| CUDA หน่วยความจำไม่พอที่สเต็ป 0 | Full fine-tune ต่ำกว่า 70 GB; ลองใช้ checkpointing หรือ train_expert_only |
| ข้อผิดพลาด 401 หรือ gated repo | ไม่ยอมรับใบอนุญาต PaliGemma tokenizer |
| Loss ลดลง, หุ่นยนต์ไม่ทำอะไร | ความไม่ตรงกันของการทำให้เป็นมาตรฐาน หรือนโยบายคัดลอกสถานะ |
| แขนหยุดชั่วคราวระหว่างชิ้นส่วน | ความหน่วงเวลาต่อสเต็ปบวกกับการเดินทางไปกลับ; คิวชิ้นส่วนหมด |
| ทำงานได้ในการตั้งค่าหนึ่ง แต่ล้มเหลวในการตั้งค่าอื่น | จำนวนตอนน้อยเกินไป หรือทั้งหมดอยู่ในการกำหนดค่าเดียว |
- ชุดข้อมูลถูกปฏิเสธ: ต้องใช้ v3
- หน่วยความจำไม่พอระหว่างการฝึก
- ค่า Loss ลดลงแต่ Policy ไม่ทำงาน
- Policy หยุดทำงานกลางคัน
- Policy ทำงานได้เพียงการตั้งค่าเดียว
- งานฝึกติดค้างในคิว
ค่าใช้จ่ายต่อการรันหนึ่งครั้ง
Pi0.5 อยู่ในระดับราคาแพงเนื่องจากต้องใช้การ์ด 80 GB และราคาแบบ Spot มีการเปลี่ยนแปลง ดังนั้นตัวเลขจึงเป็นช่วงราคามากกว่าราคาที่แน่นอน สำหรับงาน SO-100 หลายอย่าง ให้ฝึก SmolVLA หรือ ACT บนระดับ 24 GB ก่อน เพื่อยืนยันว่างานสามารถเรียนรู้ได้จริง จากนั้นจึงค่อยใช้เวลา A100 ชั่วโมงกับมัน ฝึก Policy แรกของคุณ จะแนะนำขั้นตอนที่ประหยัดกว่า และ ราคา แสดงระดับราคาปัจจุบัน
| ระดับ | Policy | การรันโดยทั่วไป | ราคาต่อชั่วโมง | ค่าใช้จ่ายต่อการรัน |
|---|---|---|---|---|
| A100 80 GB or H100 | Pi0.5, GR00T N1.7, GR00T N1.5 | 3 to 6 hours | 1.20 to 2.00 USD | about 4 to 12 USD |
| RTX 4090 or any 24 GB card | SmolVLA, ACT | 2 to 5 hours | 0.30 to 0.60 USD | about 1 to 3 USD |

ก่อนที่จะใช้เวลาช่วงเย็น: GR00T N1.7 เทียบกับ Pi0.5 และ Pi0.5 เทียบกับ SmolVLA แสดงตัวเลขเดียวกันแบบตัวต่อตัว The Arena มีโมเดล VLA 85 ตัวพร้อมผลการทดสอบ 332 รายการ ซึ่งแต่ละรายการเชื่อมโยงไปยังแหล่งที่มา และข้อมูลพื้นฐานเกี่ยวกับตระกูลนี้อยู่ใน ภาพรวม VLA ของเรา.
ฝึก Pi0.5 โดยไม่ต้องสร้างสแต็ก
เลือกชุดข้อมูลและไฮเปอร์พารามิเตอร์ในแบบฟอร์ม แบ็กเอนด์จะเช่าการ์ด 80 GB ในตลาดสปอต รันเทรนเนอร์ และเขียนเช็คพอยต์ไปยังที่เก็บอ็อบเจกต์ คู่มือสำหรับ SO-100, SO-101, Koch v1.1 และ LeKiwi
เปิดคู่มือการฝึกฉันสามารถปรับแต่ง Pi0.5 บน RTX 4090 ได้หรือไม่?▾
ไม่ใช่การปรับแต่งแบบเต็มรูปแบบ: openpi ระบุว่าต้องใช้มากกว่า 70 GB สำหรับการปรับแต่งนั้น ดังนั้นจึงต้องใช้ A100 80 GB หรือ H100 ตัวเลข LoRA 22.5 GB เป็นของเส้นทาง JAX; การใช้งาน PyTorch ไม่มี LoRA การรวม PEFT ของ LeRobot มีอยู่จริง แต่ตัวอย่างที่บันทึกไว้คือ SmolVLA และไม่มีตัวเลข VRAM ที่เผยแพร่สำหรับ pi05
ฉันต้องใช้กี่ตอน?▾
ห้าสิบตอน ซึ่งเป็นจำนวนขั้นต่ำเดียวกับ GR00T และ ACT; มีเพียง SmolVLA เท่านั้นที่ต่ำกว่า คือ 30 ตอน เช็คพอยต์พื้นฐานมีการฝึกอบรมล่วงหน้ามากกว่า 10,000 ชั่วโมง ดังนั้นการปรับแต่งจึงเป็นการปรับตัวมากกว่าการเรียนรู้จากศูนย์: 50 ตอนที่สะอาดและหลากหลายดีกว่าสองร้อยตอนจากการกำหนดค่าเดียว
ความแตกต่างระหว่าง --policy.path และ --policy.pretrained_path คืออะไร?▾
--policy.path โหลดน้ำหนักและ config.json ของเช็คพอยต์ ดังนั้นการตั้งค่าที่เก็บไว้ เช่น n_action_steps จะถูกสืบทอด และต้องละเว้น --policy.type ส่วน --policy.pretrained_path โหลดเฉพาะน้ำหนัก: ชื่อฟีเจอร์มาจากชุดข้อมูลของคุณ การตั้งค่าที่เก็บไว้จะถูกรีเซ็ต และต้องระบุ --policy.type นี่คือเหตุผลที่คำสั่ง LIBERO ส่งผ่าน n_action_steps=10 และ empty_cameras=1 อย่างชัดเจน มิฉะนั้นจะกลับไปใช้ค่าเริ่มต้นที่ 50 และ 0
เวอร์ชันโอเพนซอร์สให้ Pi0.5 เต็มรูปแบบตามที่ระบุในเอกสารหรือไม่?▾
ไม่ ทั้งสองรองรับเฉพาะส่วนหัวการดำเนินการแบบ flow matching เท่านั้น ขั้นตอนการฝึกอบรมล่วงหน้าแบบ discrete-token ด้วย FAST action tokenizer และการคาดการณ์งานย่อยระดับสูงยังไม่ได้รับการเผยแพร่ และการ์ด lerobot/pi05_base เพิ่ม RL เข้าไปในรายการนั้น แม้ว่าเอกสาร pi0.5 จะไม่ได้อธิบายขั้นตอนการเรียนรู้แบบเสริมแรงก็ตาม คุณฝึกนโยบายระดับต่ำที่กำหนดเงื่อนไขด้วยสตริงภาษาที่คุณให้มา ไม่ใช่โมเดลที่แยกย่อยงานยาวๆ ด้วยตัวเอง
คู่มือนี้เขียนขึ้นสำหรับเวอร์ชันใด?▾
openpi บน main และ lerobot 0.6.1 ซึ่งเป็นเวอร์ชันที่เผยแพร่ตั้งแต่วันที่ 3 สิงหาคม 2026 ทั้งคู่ถูกอ่านเมื่อวันที่ 23 สิงหาคม 2026 ชุดข้อมูล v3.0 มาพร้อมกับ 0.4.0 ในเดือนตุลาคม 2025 เวอร์ชัน 0.6.0 ทำให้แพ็คเกจพื้นฐานมีน้ำหนักเบาลง ดังนั้น lerobot[pi] เพียงอย่างเดียวจึงไม่ติดตั้งสแต็กการฝึกอีกต่อไป และย้ายการปรับใช้ไปยัง lerobot-rollout ส่วน Training-time RTC มีเฉพาะบน main เท่านั้น; เทรนเนอร์ที่โฮสต์อยู่ที่นี่รันเวอร์ชัน 0.5.1
Sources
- Physical-Intelligence/openpi: open-source models and packages for robotics
- openpi training configs, including pi05_libero and pi05_droid_finetune
- pi0: A Vision-Language-Action Flow Model for General Robot Control
- pi0.5: a Vision-Language-Action Model with Open-World Generalization
- Knowledge Insulating Vision-Language-Action Models: Train Fast, Run Fast, Generalize Better
- PaliGemma: A versatile 3B VLM for transfer
- Training-Time Action Conditioning for Efficient Real-Time Chunking
- LeRobot pi05 documentation on the main branch, including training-time RTC
- LeRobot documentation: parameter efficient fine-tuning with PEFT
- LeRobotDataset v3.0 format documentation
- LeRobot release notes: v0.3.2 through v0.6.1, with the v0.6.0 breaking changes
- LeRobot v0.5.0: Scaling Every Dimension
- lerobot/pi05_base model card
- LeRobot documentation: Real-Time Chunking (RTC)
- openpi Pi0Config: the model defaults pi0 and pi05 inherit
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started