เมทริกซ์การฝึกของ AY-Robots โดยมีห้า policy เป็นแถว และแขนหุ่นยนต์สี่แขนเป็นคอลัมน์ แต่ละเซลล์เป็นลิงก์ไปยังคู่มือการปรับแต่งเฉพาะ
Pi0.5Flow Matchingการฝึก VLALeRobotการปรับแต่ง

วิธีการฝึก Pi0.5 ด้วยข้อมูลหุ่นยนต์ของคุณเอง

AY-Robots ResearchAugust 23, 202616 min อ่าน

ปรับแต่ง 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)

คุณสมบัติpi0pi0.5
รูปแบบแบ็คโบน VLMgemma_2b (PaliGemma)gemma_2b (PaliGemma)
รูปแบบผู้เชี่ยวชาญด้านการกระทำgemma_300mgemma_300m
action_dim3232
action_horizon เริ่มต้น5050
max_token_len48200
discrete_state_inputfalsetrue, สถานะถูกแบ่งเป็นช่วงๆ ในพรอมต์
จุดตรวจสอบพื้นฐานgs://openpi-assets/checkpoints/pi0_basegs://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
python
# 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
อ่านจาก src/openpi/models/pi0_config.py บน openpi main branch, 23 สิงหาคม 2026

แกนหลัก PaliGemma และเกตที่อยู่ด้านหน้า

PaliGemma (arXiv 2407.07726) เป็นตัวเข้ารหัสภาพ SigLIP-So400m บนโมเดลภาษา Gemma-2B ซึ่งมีพารามิเตอร์ประมาณ 3 พันล้านตัว Pi0.5 สืบทอด tokenizer ของมัน และ tokenizer นั้นอยู่ใน repository แบบ gated นี่เป็นวิธีที่พบบ่อยที่สุดที่การรันครั้งแรกจะล้มเหลว ก่อนที่จะถึง ขั้นตอนการฝึกอบรม.

ยอมรับใบอนุญาตแบบ gated ก่อนเช่า GPU

เอกสารของ 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 GBRTX 4090
การปรับแต่งละเอียด, LoRAmore than 22.5 GBRTX 4090
การปรับแต่งละเอียด, เต็มรูปแบบmore than 70 GBA100 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.

bash
# 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
จากเอกสารประกอบของ LeRobotDataset v3.0

แพลตฟอร์มต้องการอย่างน้อย 50 ตอนสำหรับ Pi0.5 ซึ่งเป็นจำนวนขั้นต่ำเดียวกับ GR00T และ ACT การฝึกอบรมล่วงหน้าเป็นส่วนสำคัญ ดังนั้น 50 ตอนที่สะอาดดีกว่า 200 ตอนที่ไม่มีคุณภาพ ยังใหม่กับเรื่องนี้ใช่ไหม? เริ่มต้นด้วย คู่มือการรวบรวมข้อมูล.

หน้า AY-Robots policies เปรียบเทียบห้านโยบายที่สามารถฝึกได้ตามพารามิเตอร์, ระดับ GPU, ความหน่วง และจำนวนตอนขั้นต่ำ
Pi0.5 อยู่ในระดับ A100 และ H100 โดยใช้เวลา 485 มิลลิวินาทีต่อขั้นตอนการดำเนินการ พร้อมด้วยจำนวนตอนขั้นต่ำ 50 ตอน

เส้นทาง A: ปรับแต่งด้วย openpi repository

การใช้งานอ้างอิง: JAX มาก่อน, ทดสอบบน Ubuntu 22.04 เท่านั้น, ขับเคลื่อนด้วยออบเจกต์ config แทนที่จะเป็น flag. เส้นทาง PyTorch มาถึงในเดือนกันยายน 2025, ตรวจสอบความถูกต้องบน LIBERO. มีสามขั้นตอน: แปลงข้อมูลของคุณ, กำหนด config, ฝึกและให้บริการ.

  1. 1
    โคลนและติดตั้ง

    openpi ใช้ uv. GIT_LFS_SKIP_SMUDGE คือสิ่งที่ทำให้ LeRobot เข้ามาเป็น dependency ได้โดยไม่มี LFS blobs.

    bash
    git 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. 2
    แปลงข้อมูลของคุณเป็นชุดข้อมูล LeRobot

    Upstream มีตัวแปลงสำหรับ LIBERO และ DROID และคาดหวังให้คุณปรับใช้ตัวใดตัวหนึ่ง งานคือการแมปคีย์.

    bash
    uv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/data
  3. 3
    เพิ่ม training config

    Configs คือรายการ TrainConfig ใน src/openpi/training/config.py. ตัวนี้ปรับใช้ pi05_droid_finetune โดยมีตัวโหลดน้ำหนักชี้ไปที่ pi05_base.

    python
    TrainConfig(
        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. 4
    คำนวณสถิติ norm

    รันกับชื่อ config ไม่ใช่ชุดข้อมูล การข้ามขั้นตอนนี้เป็นความล้มเหลวแรกที่พบบ่อยที่สุดที่นี่.

    bash
    uv run scripts/compute_norm_stats.py --config-name pi05_so100
  5. 5
    ฝึก

    ตัวแปรนี้ทำให้ JAX ใช้หน่วยความจำ GPU 90 เปอร์เซ็นต์ แทนที่จะเป็นค่าเริ่มต้น 75 เปอร์เซ็นต์ บนการ์ด 80 GB สิ่งนี้จะตัดสินว่าการรันจะสำเร็จหรือไม่.

    bash
    XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_so100 \
        --exp-name=my_experiment \
        --overwrite
  6. 6
    ให้บริการ

    เซิร์ฟเวอร์จะรับฟังที่พอร์ต 8000 และตอบคำถามเกี่ยวกับการสังเกต; รันไทม์ของหุ่นยนต์ของคุณคือไคลเอนต์.

    bash
    uv run scripts/serve_policy.py policy:checkpoint \
        --policy.config=pi05_so100 \
        --policy.dir=checkpoints/pi05_so100/my_experiment/20000
เส้นทาง PyTorch ไม่ใช่เส้นทาง JAX

การใช้งาน 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. 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. 2
    ยืนยันตัวตน

    ยอมรับใบอนุญาต paligemma-3b-pt-224 ในเบราว์เซอร์ จากนั้นเข้าสู่ระบบบนเครื่องที่ใช้ฝึกโมเดล

    bash
    hf auth login
  3. 3
    เพิ่มสถิติควอนไทล์

    Pi0.5 ทำให้ STATE และ ACTION เป็นปกติด้วยควอนไทล์ ดังนั้น meta/stats.json จึงต้องมี q01 และ q99 ชุดข้อมูลรุ่นเก่าจะมีเพียง min, max, mean, std เท่านั้น

    bash
    lerobot-edit-dataset \
        --repo_id your_dataset \
        --new_repo_id your_dataset \
        --operation.type recompute_stats \
        --operation.overwrite true
  4. 4
    ปรับแต่งจาก lerobot/pi05_base

    ตั้งค่าขนาดแบตช์ให้เหมาะสมกับการ์ดของคุณ เอกสารใช้ 64 บน LIBERO ที่ 80 GB ระบุ bfloat16 อย่างชัดเจน ค่าเริ่มต้นของการกำหนดค่าคือ float32

    bash
    lerobot-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. 5
    รันบนแขนกล

    ในเวอร์ชัน 0.6.x นี่คือ lerobot-rollout: lerobot-record จะปฏิเสธนโยบายและชื่อชุดข้อมูล eval_ Base จะควบคุมแขนกล ส่วน sentry จะบันทึกการทำงาน

    bash
    lerobot-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 TrainConfiglerobot pi05 และ lerobot-trainAY-Robots ส่ง
ขนาดแบตช์3281
อัตราการเรียนรู้สูงสุด2.5e-5, การลดลงแบบโคไซน์optimizer_lr 2.5e-55e-5
จำนวนขั้นตอนการฝึก30,000100,00030,000
ช่วงเวลาบันทึกจุดตรวจสอบ1,000 ขั้นตอน20,000 ขั้นตอนไม่อยู่ในฟอร์ม
Seed421,000อยู่ในฟอร์ม
Action chunkaction_horizon 50chunk_size 50, n_action_steps 50ไม่อยู่ในฟอร์ม
Weight dtypebfloat16float32 จนกว่าคุณจะส่ง --policy.dtypeไม่อยู่ในฟอร์ม
การสะสม Gradientไม่มีการตั้งค่านี้, ใช้ fsdp_devices แทนไม่มีในทุกรุ่นที่ผ่านมา16, และถูกละทิ้ง

พอร์ตนี้มีความแม่นยำหรือไม่? ทีม LeRobot ได้ปรับแต่งโมเดลพื้นฐาน LIBERO เพิ่มเติมอีก 6k ขั้นตอน และเปรียบเทียบกับตัวเลขการอ้างอิงของ openpi ในสี่ชุด: ค่าเฉลี่ย 97.5 เปอร์เซ็นต์ เทียบกับ 96.85, นำหน้าใน Libero 10, และตามหลังใน Spatial เส้นทางนี้เป็นทางเลือกของเครื่องมือ ไม่ใช่ทางเลือกด้านคุณภาพ

การปรับแต่ง Pi0.5 ด้วยข้อมูลของคุณเอง
ข้อดี
  • มีการฝึกอบรมหุ่นยนต์ล่วงหน้ามากกว่า 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จำนวนตอนขั้นต่ำ
ACT20 ms~80 MRTX 4090 or any 24 GB card50
GR00T N1.7152 ms~3 BA100 80 GB or H100 80 GB50
GR00T N1.5165 ms~3 BA100 80 GB or H100 80 GB50
SmolVLA245 ms~450 MRTX 4090 or any 24 GB card30
Pi0.5485 ms~3 BA100 80 GB or H100 80 GB50
หน้าเปรียบเทียบ AY-Robots สำหรับ GR00T N1.7 กับ Pi0.5 พร้อมพารามิเตอร์, ระดับ GPU, เวลาแฝง และรูปแบบชุดข้อมูล
ระดับ GPU เดียวกัน, จำนวนตอนขั้นต่ำเท่ากัน, เวอร์ชันชุดข้อมูลต่างกัน, ช่องว่างเวลาแฝงสามเท่า
การอนุมานต้องอยู่ใกล้กับเซอร์โว

ลูปควบคุมในห้าโมเดลนี้ใช้เวลา 20 ถึง 485 มิลลิวินาทีต่อขั้นตอนการกระทำ การเดินทางไปกลับผ่านอินเทอร์เน็ตสาธารณะที่เพิ่มขึ้นจาก 485 มิลลิวินาที จะทำให้ policy ที่ทำงานได้กลายเป็น policy ที่ลังเล การอนุมานระยะไกลเหมาะสำหรับงานหยิบวางที่ช้า ไม่ใช่สำหรับการเคลื่อนไหวตอบสนองที่รวดเร็ว เราอยากจะบอกความจริงนี้มากกว่าที่จะขายเดโมที่ใช้งานได้เฉพาะบน LAN หากแขนกลของคุณหยุดชั่วคราวระหว่างชิ้นส่วน ให้เริ่มต้นที่ policy หยุดนิ่งกลางการเคลื่อนไหว

Upstream มีคำตอบ และครึ่งหนึ่งของคำตอบนั้นอยู่ในเวอร์ชันที่คุณสามารถติดตั้งได้แล้ว Real-Time Chunking จะสร้างชิ้นส่วนถัดไปในขณะที่แขนกลยังคงดำเนินการชิ้นส่วนปัจจุบันอยู่ จากนั้นจะนำทางขั้นตอนที่ทับซ้อนกันของชิ้นส่วนใหม่ให้คงอยู่ใกล้กับส่วนที่ดำเนินการไปแล้ว เพื่อไม่ให้แขนกลหยุดชะงักหรือกระตุกที่รอยต่อ รูปแบบการอนุมานที่มาพร้อมกับการเปลี่ยนแปลงในเวอร์ชัน 0.4.2 สำหรับ Pi0, Pi0.5 และ SmolVLA เป็นเพียงแฟล็กสำหรับการใช้งาน ไม่ใช่การฝึกใหม่:

bash
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
execution_horizon คือจำนวนขั้นตอนของชิ้นส่วนก่อนหน้า ที่ชิ้นส่วนใหม่จะต้องสอดคล้องกัน; เอกสาร RTC ระบุช่วงปกติไว้ที่ 8 ถึง 12 แบ็กเอนด์การอนุมานเริ่มต้นคือ --inference.type=sync.

มันไม่ได้ทำให้โมเดลเร็วขึ้น มันซ่อนช่องว่าง: 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
bash
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
คำสั่งที่ไม่มีฟอร์มโฮสต์รัน และ pip ไม่สามารถติดตั้งได้: training-time RTC เป็นแฟล็กของ main branch

เมื่อมันไม่ทำงาน

อาการสาเหตุที่เป็นไปได้มากที่สุด
การรันถูกปฏิเสธก่อนเริ่มชุดข้อมูล 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 หน่วยความจำไม่พอที่สเต็ป 0Full fine-tune ต่ำกว่า 70 GB; ลองใช้ checkpointing หรือ train_expert_only
ข้อผิดพลาด 401 หรือ gated repoไม่ยอมรับใบอนุญาต PaliGemma tokenizer
Loss ลดลง, หุ่นยนต์ไม่ทำอะไรความไม่ตรงกันของการทำให้เป็นมาตรฐาน หรือนโยบายคัดลอกสถานะ
แขนหยุดชั่วคราวระหว่างชิ้นส่วนความหน่วงเวลาต่อสเต็ปบวกกับการเดินทางไปกลับ; คิวชิ้นส่วนหมด
ทำงานได้ในการตั้งค่าหนึ่ง แต่ล้มเหลวในการตั้งค่าอื่นจำนวนตอนน้อยเกินไป หรือทั้งหมดอยู่ในการกำหนดค่าเดียว

ค่าใช้จ่ายต่อการรันหนึ่งครั้ง

Pi0.5 อยู่ในระดับราคาแพงเนื่องจากต้องใช้การ์ด 80 GB และราคาแบบ Spot มีการเปลี่ยนแปลง ดังนั้นตัวเลขจึงเป็นช่วงราคามากกว่าราคาที่แน่นอน สำหรับงาน SO-100 หลายอย่าง ให้ฝึก SmolVLA หรือ ACT บนระดับ 24 GB ก่อน เพื่อยืนยันว่างานสามารถเรียนรู้ได้จริง จากนั้นจึงค่อยใช้เวลา A100 ชั่วโมงกับมัน ฝึก Policy แรกของคุณ จะแนะนำขั้นตอนที่ประหยัดกว่า และ ราคา แสดงระดับราคาปัจจุบัน

ระดับPolicyการรันโดยทั่วไปราคาต่อชั่วโมงค่าใช้จ่ายต่อการรัน
A100 80 GB or H100Pi0.5, GR00T N1.7, GR00T N1.53 to 6 hours1.20 to 2.00 USDabout 4 to 12 USD
RTX 4090 or any 24 GB cardSmolVLA, ACT2 to 5 hours0.30 to 0.60 USDabout 1 to 3 USD
ตารางค่าใช้จ่ายของ AY-Robots แสดง GPU ที่แต่ละนโยบายต้องการ, เวลาทำงานและราคาโดยทั่วไป, และจำนวนตอนที่จำเป็นก่อนที่นโยบายจะใช้งานได้
ระดับสองชั้นเดียวกันบนหน้าผลิตภัณฑ์: Pi0.5 เช่าการ์ด 80 GB, SmolVLA และ ACT ใช้ได้กับ 4090

ก่อนที่จะใช้เวลาช่วงเย็น: 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

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started