
כוונו עדין את Pi0.5, מודל ה-VLA להתאמת זרימה מבית Physical Intelligence, על נתוני רובוט משלכם. פקודות אמיתיות עבור openpi ו-lerobot pi05, מלכודות פורמט נתונים, מגבלות VRAM וחביון.
Pi0.5 הוא המודל שאליו פונים כאשר מדיניות צריכה לעבוד בחדר שמעולם לא ראתה. הוא גם המסורבל ביותר מבין חמש המדיניות ניתנות לאימון כאן כדי לבצע כוונון עדין ידנית: המאגר המקורי הוא JAX תחילה, פורט LeRobot העביר את הפריסה מ-lerobot-record בגרסה 0.6.0 והפך את ההתקנה הבסיסית לקטנה מדי לאימון, וכוונון עדין מלא אינו מתאים ל-4090. להלן: מה ש התאמת זרימה עולה בהסקה, שני נתיבי הפקודה, והמספר 485 ms שמחליט אם התוצאה שמישה.
מה שאתה צריך לדעת
- •VLA בהתאמת זרימה: VLM PaliGemma בגודל 3B בתוספת מומחה פעולה בגודל 300M המפענח מקטעי פעולה רציפים. שני נתיבים לכוונון עדין שלו, openpi ו-LeRobot pi05, בהפרש של 0.65 נקודות בממוצע LIBERO.
- •כוונון עדין מלא דורש יותר מ-70 GB של VRAM. openpi מפרט את LoRA ב-22.5 GB, בנתיב JAX שלו בלבד.
- •מערך הנתונים חייב להיות LeRobotDataset v3.0 עם קוונטילים q01 ו-q99 ב-meta/stats.json, אחרת אצווה אחת תיכשל.
- •בדוק תחילה את גרסת ה-lerobot שלך: 0.6.0 הפכה את חבילת הבסיס לקלה והעבירה את הפריסה מ-lerobot-record.
- •כאן הוא פועל ב-485 ms לכל שלב פעולה, דורש 50 אפיזודות, ועולה כ-4 עד 12 USD לריצה.
מהו Pi0.5 בפועל
Physical Intelligence פרסמה את pi0 באוקטובר 2024: מודל התאמת זרימה מודל ראייה-שפה-פעולה על VLM מאומן מראש: PaliGemma עם 3 מיליארד פרמטרים בתוספת מומחה פעולה בגודל 300M שאותחל מאפס, סך הכל 3.3 מיליארד. המאמר מדווח על אימון מוקדם של למעלה מ-10,000 שעות של נתוני רובוטים על פני 7 תצורות רובוטים ו-68 משימות. לפרטים נוספים ב מאמר ה-pi0.
Pi0.5 (arXiv 2504.16054, 22 April 2025) שומר על השלד הזה ומשנה את תזונת האימון: נתוני אינטרנט, זיהוי אובייקטים, הוראות מילוליות מבני אדם המאמנים את הרובוט, תוויות משימות משנה, נתונים חוצי-התגלמות מרובוטים בבתים רבים. התוצאה היא רובוט המנקה מטבחים בבתים שלא היו בקבוצת האימון. קובץ ה-README של openpi מוסיף פרט שהכותרת אינה כוללת: ה-pi0.5 ששוחרר אומן עם בידוד ידע (arXiv 2505.23705).
| מאפיין | pi0 | pi0.5 | |||
|---|---|---|---|---|---|
| וריאנט עמוד שדרה VLM | gemma_2b (PaliGemma) | gemma_2b (PaliGemma) | וריאנט מומחה פעולה | gemma_300m | gemma_300m |
| action_dim | 32 | 32 | |||
| action_horizon default | 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 מצהיר במפורש: המאגר תומך רק בראש ה-flow matching, לאימון והסקה של pi0.5 כאחד. המאמר מתאר שני שלבים והקוד מכיל רק את השני: אימון מוקדם מייצג כל פעולה כאסימונים בדידים באמצעות ה-FAST tokenizer, ובעת פריסה המודל מסיק משימת משנה ברמה גבוהה לפני כל מקטע פעולה. אף אחד מאלה אינו נמצא במאגר. כרטיס ה-lerobot/pi05_base מציג את אותה רשימה ומוסיף RL, למרות שמאמר ה-pi0.5 אינו מתאר כלל שלב למידת חיזוק. פורט ה-LeRobot יורש את ההיקף הזה, וכך גם כל מאמן מתארח עליו, כולל זה כאן. הרישוי גם מפוצל: דף התיעוד של pi05 מציין Apache 2.0, כרטיס ה-lerobot/pi05_base מתויג license: gemma.
מה ש-flow matching משנה באימון ובהסקה
מדיניות מדיניות שניתן לאמן על SO-100 מבצעת רגרסיה ישירה של פעולות (ACT) או ממירה אותן לאסימונים ומפענחת באופן אוטורגרסיבי (pi0-FAST). התאמת זרימה אינה עושה אף אחד מאלה: היא לומדת שדה וקטורי המעביר רעש לנתח פעולה, ואז משלבת אותו. מאמר ה-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 יורש את הטוקנייזר שלו, והטוקנייזר הזה נמצא במאגר מגודר. זו הדרך הנפוצה ביותר שבה הרצה ראשונה נכשלת, לפני ה-שלב אימון.
תיעוד LeRobot pi05 מצהיר זאת בבירור: pi0.5 משתמש בטוקנייזר המגודר google/paligemma-3b-pt-224, לכן קבלו את הרישיון שלו ב-Hub והריצו תחילה את hf auth login. הגישה ניתנת ידנית, לא באופן מיידי. דלגו על זה, התחילו הרצת ענן בתשלום, ותשלמו על פוד שלא יכול להוריד טוקנייזר.
לפני שמתחילים: פורמט מערך נתונים, פרקים, חומרה
Pi0.5 ב-LeRobot קורא LeRobot dataset בפריסת v3.0, שהגיעה עם lerobot 0.4.0 באוקטובר 2025: פרקים רבים לכל קובץ Parquet ו-MP4 במקום קובץ אחד לכל פרק, עם גבולות ב-meta/episodes/ במקום בשמות קבצים. הקליטו עם ה-לקוח שולחני או עקבו אחר הקליטו את מערך הנתונים הראשון שלכם וכבר יש לכם את זה.
| מצב | זיכרון GPU נדרש | דוגמת GPU |
|---|---|---|
| הסקה | יותר מ-8 GB | RTX 4090 |
| אימון עדין, LoRA | יותר מ-22.5 GB | RTX 4090 |
| אימון עדין, מלא | יותר מ-70 GB | A100 80 GB או H100 |
Pi0.5 ו-SmolVLA דורשים LeRobot v3.0. GR00T N1.7 ו-GR00T N1.5 דורשים v2.0 או v2.1 וקורסים על מערך נתונים בגרסה v3.0. סשן הקלטה אחד אינו יכול להזין את שניהם ללא המרה, והשגיאה אינה אומרת "גרסת מערך נתונים שגויה". ראה מערך נתונים נדחה: נדרש 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 מרושלים. חדש בתחום? התחל עם מדריך איסוף הנתונים.

מסלול א': כוונון עדין עם מאגר openpi
היישום הייחוס: JAX ראשון, נבדק על Ubuntu 22.04 בלבד, מונע על ידי אובייקטי תצורה במקום דגלים. נתיב PyTorch הגיע בספטמבר 2025, מאומת על LIBERO. שלושה שלבים: המרת הנתונים שלך, הגדרת תצורה, אימון והגשה.
- 1שכפול והתקנה
openpi משתמש ב-uv. GIT_LFS_SKIP_SMUDGE הוא מה שמאפשר ל-LeRobot להיכנס כתלות ללא אובייקטי LFS.
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הוספת תצורת אימון
תצורות הן ערכי 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חישוב סטטיסטיקות נורמליזציה
רץ מול שם התצורה, לא מול מערך הנתונים. דילוג עליו הוא הכשל הקלאסי הראשון כאן.
bashuv run scripts/compute_norm_stats.py --config-name pi05_so100 - 5אימון
המשתנה מאפשר ל-JAX להשתמש ב-90 אחוז מזיכרון ה-GPU במקום ב-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, דיוק מעורב, FSDP, LoRA או משקלי EMA, ולכן ה-LoRA שמגיע ל-22.5 GB הוא JAX בלבד, באמצעות וריאנטים gemma_2b_lora ו-gemma_300m_lora. גרוע מכך: ההתקנה מעתיקה קבצים מתוקנים על גבי transformers 4.53.2 המותקן שלך, וה-README מזהיר כי עם מצב ה-hardlink ברירת המחדל של uv, זה משנה לצמיתות את transformers במטמון ה-uv ויכול לדלוף לפרויקטים אחרים. בטל זאת באמצעות uv cache clean transformers.
נתיב ב': כוונון עדין עם lerobot pi05
פורט LeRobot עוטף את אותם המשקלים בממשק שורת הפקודה שבו אתה כבר משתמש עבור 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, ההתקנה הבסיסית כוללת רק תלויות ליבה של למידת מכונה, והתוסף 'pi' אינו מוסיף קוד נתונים או אימון, ולכן כוונון עדין דורש גם את תוסף האימון. פקודות התקנה ישנות יותר נכשלות כאן בזמן הייבוא.
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 | חישוב מחדש במקום אחסון אקטיבציות | ברירת מחדל false, המנוף הראשון כאשר הרצה לא מתאימה |
| --peft.method_type=LORA | מתאמי LoRA במקום משקלים מלאים | דורש את תוסף peft, דוגמה מתועדת היא SmolVLA |
| --policy.rtc_training_max_delay | התניה של קידומת פעולה עבור RTC | ענף ראשי בלבד, לא ב-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 and 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 שלבים | לא בטופס |
| גרעין | 42 | 1,000 | בטופס |
| נתח פעולה | action_horizon 50 | chunk_size 50, n_action_steps 50 | לא בטופס |
| סוג נתונים של משקל | bfloat16 | float32 עד שתעביר --policy.dtype | לא בטופס |
| צבירת גרדיאנט | אין כזה כפתור, fsdp_devices במקום | נעדר מכל מהדורה עד כה | 16, והוא מושמט |
האם הפורט נאמן? צוות LeRobot כייל עדין את מודל הבסיס LIBERO ל-6k שלבים נוספים והשווה עם מספרי הייחוס של openpi בארבע חבילות: ממוצע של 97.5 אחוזים לעומת 96.85, מוביל ב-Libero 10, מאחור ב-Spatial. המסלול הוא בחירת כלי עבודה, לא בחירת איכות.
- יותר מ-10,000 hours של אימון מוקדם של רובוטים מאחוריו, כך ש-50 episodes של המשימה שלך יכולים להספיק.
- פעולות רציפות: אין טוקנייזר לכוונון, אין רצפת דיסקרטיזציה על זוויות המפרקים שלך.
- הפורט של LeRobot משיג 97.5 percent בממוצע LIBERO לעומת 96.85 של openpi, כך שה-CLI הידידותי יותר לא עולה דבר מדיד.
- נתיבים יעילים בפרמטרים משני הצדדים: openpi's JAX LoRA variants, LeRobot's PEFT integration.
- כוונון עדין מלא דורש יותר מ-70 GB. ה-22.5 GB LoRA נתון הוא מספר JAX של openpi; אף אחד לא פורסם עבור pi05 תחת PEFT.
- 485 ms לשלב פעולה, האיטי ביותר מבין החמישה כאן: פי שניים מ-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 אלפיות השנייה לכל שלב פעולה. זמני תגובה (round trips) באינטרנט ציבורי, בנוסף ל-485 אלפיות השנייה, הופכים מדיניות עבודה למדיניות מהוססת. הסקת מסקנות מרחוק (Remote inference) אפשרית עבור פעולות איסוף והנחה איטיות (slow pick-and-place), אך לא עבור תנועה תגובתית מהירה. אנו מעדיפים לומר זאת מאשר למכור הדגמה שעובדת רק ברשת מקומית (LAN). אם הזרוע שלך עוצרת בין מקטעים (chunks), התחל ב-מדיניות קופאת באמצע תנועה.
ל-Upstream יש תשובה, וחצי ממנה כבר נמצא במהדורה שתוכל להתקין. Real-Time Chunking מייצר את המקטע הבא בזמן שהזרוע עדיין מבצעת את המקטע הנוכחי, ולאחר מכן מנחה את השלבים החופפים של המקטע החדש להישאר קרובים לחלק שכבר בוצע, כך שהזרוע לא תיתקע או תזעזע בנקודת החיבור. הצורה בזמן הסקת המסקנות (inference-time form) נכללה ביומן השינויים 0.4.2 עבור Pi0, Pi0.5 ו-SmolVLA והיא דגל פריסה (rollout flag), לא אימון מחדש (retrain):
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 אלפיות השנייה עדיין מושקעות, אך מחוץ לנתיב הקריטי, כך שהתור לא מתרוקן בין מקטעים. הגרסה בזמן האימון (training-time variant) מ-arXiv 2512.05964 הולכת רחוק יותר: המודל לומד להתנות על קידומת פעולה נקייה, כך שבזמן הסקת המסקנות החפיפה נצבעת מחדש באופן קשיח עם צעדי זמן זרימה לכל פעולה במקום להיות מונחית, ומעבר ההכוונה לאחור נעלם. במהלך האימון הוא דוגם אורך קידומת לכל דוגמה ולוקח את אובדן הזרימה על הסיומת הנותרת. דגל זה קיים רק ב-main, לא ב-0.6.1, והעיכוב שעבורו אתה מאמן חייב להישאר מתחת ל-chunk_size.
שתי דרכים להשיג נקודת ביקורת (checkpoint) של Pi0.5
אתה שוכר או רוכש כרטיס 80 GB, מתקין אחת מהערימות לעיל, ממיר את מערך הנתונים שלך ומפקח על הריצה. אתה שומר על כל כפתור: JAX LoRA של openpi, מתאמי PEFT של LeRobot, פעולות יחסיות, מיפויי מקשים מותאמים אישית. אתה גם שומר על כל כשל.
- חומרה: A100 80 GB או H100, או כרטיס 24 GB בנתיב JAX LoRA של openpi.
- התקנה: אחר צהריים עבור הריצה הראשונה, בעיקר מיפוי מקשים והטוקנייזר המגודר.
- לא בטופס המתארח: מתאמי PEFT, פעולות יחסיות, 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אתה בוחר מודל ומערך נתונים ב-טופס האימון, ה-backend שוכר GPU בשוק ספוט לפי VRAM נדרש, מריץ את המאמן וכותב נקודות ביקורת לאחסון אובייקטים. Pi0.5 זמין רק בענן כאן. קיימים מדריכים עבור SO-100, SO-101, Koch v1.1 ו-LeKiwi.
| הגדרה | מה הפלטפורמה שולחת עבור Pi0.5 |
|---|---|
| Base checkpoint | lerobot/pi05_base |
| Policy type | pi05 |
| Batch size | 1 |
| Learning rate | 5e-5 |
| Max steps | 30000 |
| Gradient accumulation | 16, but see the warning below |
| Extra knobs in the form | seed, logFreq |
| Dataset format | LeRobot v3.0 |
| GPU tier | A100 80 GB or H100 80 GB |
המאמן שולח ערך צבירת גרדיאנט של 16 ול-lerobot 0.5.1 אין דגל לקבל אותו, ולכן הוא נשמט. לאף גרסת lerobot משוחררת אין כזה: הכפתור קיים רק ב-main, כ---accelerator.gradient_accumulation.steps. גודל אצווה אפקטיבי כאן הוא 1, לעומת 256 שמשתמשת תצורת pi05_libero של openpi. כדאי לדעת זאת לפני שקוראים עקומת הפסד. הכפתור אכן חל על GR00T N1.7 וריצות GR00T N1.5.
הסקת מסקנות פועלת באותה צורה: פוד מוקצה כדי לשרת את המדיניות והלקוח המקומי שלך מדבר איתו. לפוד יש כלב שמירה (watchdog) במצב סרק והוא משמיד את עצמו, כך שכרטיסייה נשכחת לא תחייב בשקט. אזהרת השהיה חלה, ולכן ACT ב-20 אלפיות השנייה לעיתים קרובות מנצח משימה מהירה.
כאשר זה לא עובד
| תסמין | הסיבה הסבירה ביותר |
|---|---|
| ריצה נדחתה לפני שהחלה | מערך נתונים v2.1 אבל Pi0.5 רוצה v3.0, או ההפך עבור GR00T |
| ImportError, חבילת datasets חסרה | lerobot 0.6.x ללא התוספת של האימון |
| ValueError לגבי q01 ו-q99 באצווה אחת | אין קוונטילים ב-meta/stats.json; חשב מחדש או השתמש ב-MEAN_STD |
| CUDA אזל הזיכרון בשלב 0 | כוונון עדין מלא מתחת ל-70 GB; נסה checkpointing או train_expert_only |
| שגיאת 401 או gated repo | רישיון טוקנייזר PaliGemma לא התקבל |
| הפסד יורד, הרובוט לא עושה כלום | אי התאמה בנורמליזציה, או שהמדיניות מעתיקה את המצב |
| הזרוע עוצרת בין חתיכות | השהיה לכל שלב בתוספת זמן הלוך ושוב; תור החתיכות מתרוקן |
| עובד בהגדרה אחת, נכשל באחרת | מעט מדי אפיזודות, או כולן בתצורה אחת |
- מערך נתונים נדחה: נדרשת גרסה 3
- חוסר זיכרון במהלך אימון
- ההפסד יורד אך המדיניות אינה עושה דבר
- המדיניות קופאת באמצע תנועה
- המדיניות פועלת רק בהגדרה אחת
- עבודת אימון תקועה בתור
עלות הרצה אחת
Pi0.5 נמצא בשכבה היקרה מכיוון שהוא דורש כרטיס 80 GB, ומחירי ספוט משתנים, כך שהנתון הוא טווח ולא מחיר. עבור משימות SO-100 רבות, אמן SmolVLA או ACT בשכבת ה-24 GB תחילה, וודא שהמשימה ניתנת ללמידה בכלל, ולאחר מכן הקדש לה שעות A100. אמן את המדיניות הראשונה שלך מציג את הלולאה הזולה יותר, ו-תמחור מפרט את השכבות הנוכחיות.
| שכבה | מדיניות | הרצה טיפוסית | מחיר לשעה | עלות להרצה |
|---|---|---|---|---|
| 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 מציגים את אותם נתונים זה מול זה. ה-זירה מכילה 85 מודלי VLA עם 332 תוצאות בנצ'מרק, כל אחת מקושרת למקור שלה, ורקע על המשפחה נמצא ב-סקירת ה-VLA שלנו.
אמנו את Pi0.5 ללא בניית הערימה
בחרו את מערך הנתונים ואת ההיפרפרמטרים בטופס. ה-backend שוכר כרטיס 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. שלב האימון המקדים של אסימונים בדידים עם ה-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. 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