
Pi0.5، مدل VLA تطبیق جریان از Physical Intelligence، را با دادههای ربات خودتان تنظیم دقیق کنید. دستورات واقعی برای openpi و lerobot pi05، مشکلات فرمت مجموعه داده، و محدودیتهای VRAM و تأخیر.
Pi0.5 مدلی است که وقتی یک سیاست باید در اتاقی کار کند که هرگز ندیده است، به سراغ آن میروید. همچنین ناخوشایندترین از پنج سیاستهای قابل آموزش در اینجا برای تنظیم دقیق به صورت دستی است: مخزن بالادستی ابتدا JAX است، پورت LeRobot استقرار را در نسخه 0.6.0 از lerobot-record خارج کرد و نصب پایه را برای آموزش بسیار کوچک کرد، و یک تنظیم دقیق کامل روی 4090 جا نمیشود. در ادامه: آنچه تطبیق جریان در استنتاج هزینه دارد، دو مسیر دستور، و عدد 485 میلیثانیه که تصمیم میگیرد آیا نتیجه قابل استفاده است یا خیر.
آنچه باید بدانید
- •یک VLA تطبیق جریان: یک VLM PaliGemma 3B به علاوه یک متخصص عمل 300M که تکههای عمل پیوسته را رمزگشایی میکند. دو مسیر برای تنظیم دقیق آن، openpi و LeRobot pi05، با 0.65 امتیاز اختلاف در میانگین LIBERO.
- •تنظیم دقیق کامل به بیش از 70 گیگابایت VRAM نیاز دارد. openpi LoRA را در 22.5 گیگابایت، فقط در مسیر JAX خود، فهرست میکند.
- •مجموعه داده باید LeRobotDataset v3.0 با کوانتیلهای q01 و q99 در meta/stats.json باشد، در غیر این صورت دسته اول خطا میدهد.
- •ابتدا نسخه lerobot خود را بررسی کنید: 0.6.0 بسته پایه را سبک کرد و استقرار را از lerobot-record خارج کرد.
- •در اینجا با سرعت 485 میلیثانیه در هر گام عمل اجرا میشود، به 50 اپیزود نیاز دارد و هزینه آن حدود 4 تا 12 دلار آمریکا در هر اجرا است.
Pi0.5 واقعاً چیست
Physical Intelligence در اکتبر 2024 pi0 را منتشر کرد: یک مدل بینایی-زبان-عمل تطبیق جریان بر روی یک VLM از پیش آموزشدیده: PaliGemma با 3 میلیارد پارامتر به علاوه یک متخصص عمل 300M که از ابتدا مقداردهی اولیه شده است، در مجموع 3.3 میلیارد. این مقاله آموزش اولیه را بر روی بیش از 10,000 ساعت داده ربات در 7 پیکربندی ربات و 68 وظیفه گزارش میدهد. اطلاعات بیشتر در مقاله pi0.
Pi0.5 (arXiv 2504.16054, 22 آوریل 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 |
| افق عمل پیشفرض | 50 | 50 |
| حداکثر طول توکن | 48 | 200 |
| ورودی حالت گسسته | false | true, حالت به سطلهایی در اعلان گسسته شده است |
| نقطه بازرسی پایه | gs://openpi-assets/checkpoints/pi0_base | gs://openpi-assets/checkpoints/pi05_base |
فایل README openpi صریحاً بیان میکند: مخزن فقط از سر تطبیق جریان (flow matching head) برای آموزش و استنتاج Pi0.5 پشتیبانی میکند. مقاله دو مرحله را توصیف میکند و کد فقط مرحله دوم را شامل میشود: پیشآموزش هر عمل را به عنوان توکنهای گسسته از طریق توکنایزر FAST نمایش میدهد، و در زمان استقرار مدل یک زیروظیفه سطح بالا را قبل از هر بخش عمل استنتاج میکند. هیچ یک از اینها در مخزن نیست. کارت lerobot/pi05_base همان لیست را ارائه میدهد و RL را اضافه میکند، اگرچه مقاله Pi0.5 هیچ مرحله یادگیری تقویتی را توصیف نمیکند. پورت LeRobot این دامنه را به ارث میبرد، و همچنین هر مربی میزبانی شده بر روی آن، از جمله مورد اینجا. مجوز نیز تقسیم شده است: صفحه مستندات Pi0.5 میگوید Apache 2.0، کارت lerobot/pi05_base با برچسب license: gemma مشخص شده است.
آنچه تطبیق جریان در مورد آموزش و استنتاج تغییر میدهد
یک سیاست که میتوانید روی SO-100 آموزش دهید یا مستقیماً اقدامات را رگرس میکند (ACT) یا آنها را توکنسازی کرده و به صورت خودرگرسیو رمزگشایی میکند (pi0-FAST). تطبیق جریان هیچکدام از اینها را انجام نمیدهد: این روش یک میدان برداری را یاد میگیرد که نویز را به یک قطعه عمل تمیز منتقل میکند، سپس آن را انتگرالگیری میکند. مقاله pi0 از 10 گام انتگرالگیری با اندازه گام 0.1 استفاده میکند؛ پیکربندی pi05 LeRobot نیز همان num_inference_steps: int = 10 را دارد.
- آموزش: تابع زیان یک قطعه عمل نویزدار را رگرس میکند. نیازی به تنظیم توکنساز یا گسستهسازی زوایای مفصل شما نیست.
- استنتاج: هر قطعه عمل، ده بار عبور رو به جلو از طریق متخصص عمل را هزینه دارد. این یک ویژگی ساختاری است، نه یک مشکل تنظیم.
- خروجی: اعمال پیوسته با ابعاد 32، که به صورت داخلی پدگذاری شدهاند، و تابع زیان بر روی ابعادی که ربات شما دارد اعمال میشود. یک بازوی 6-درجه آزادی به همراه گریپر از 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 را در طرحبندی 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 از کار میافتند. یک جلسه ضبط نمیتواند بدون تبدیل، هر دو را تغذیه کند و خطا نمیگوید "نسخه مجموعه داده اشتباه است". به مجموعه داده رد شد: 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
پیادهسازی مرجع: ابتدا JAX، فقط روی اوبونتو 22.04 آزمایش شده، با اشیاء پیکربندی به جای پرچمها هدایت میشود. یک مسیر PyTorch در سپتامبر 2025 ارائه شد که روی LIBERO اعتبارسنجی شده است. سه مرحله: دادههای خود را تبدیل کنید، یک پیکربندی تعریف کنید، آموزش دهید و سرویسدهی کنید.
- 1کلون و نصب کنید
openpi از uv استفاده میکند. GIT_LFS_SKIP_SMUDGE چیزی است که به LeRobot اجازه میدهد بدون 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 تبدیل کنید
بالادست مبدلهایی برای 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 اجازه میدهد تا ۹۰ درصد از حافظه GPU را به جای ۷۵ درصد پیشفرض استفاده کند. در یک کارت ۸۰ گیگابایتی، این موضوع تعیین میکند که آیا اجرا موفقیتآمیز خواهد بود یا خیر.
bashXLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_so100 \ --exp-name=my_experiment \ --overwrite - 6سرویسدهی کنید
سرور روی پورت ۸۰۰۰ گوش میدهد و به درخواستهای مشاهده پاسخ میدهد؛ زمان اجرای ربات شما کلاینت است.
bashuv run scripts/serve_policy.py policy:checkpoint \ --policy.config=pi05_so100 \ --policy.dir=checkpoints/pi05_so100/my_experiment/20000
پیادهسازی PyTorch اوپنپای از pi0-FAST، دقت ترکیبی (mixed precision)، FSDP، LoRA یا وزنهای EMA پشتیبانی نمیکند، بنابراین LoRA که به ۲۲.۵ گیگابایت میرسد، فقط JAX است، از طریق واریانتهای gemma_2b_lora و gemma_300m_lora. بدتر اینکه: این تنظیمات فایلهای پچشده را روی ترنسفورمرز ۴.۵۳.۲ نصبشده شما کپی میکند، و فایل README هشدار میدهد که با حالت هاردلینک پیشفرض uv، این به طور دائمی ترنسفورمرز را در کش uv تغییر میدهد و میتواند به پروژههای دیگر نشت کند. آن را با uv cache clean transformers خنثی کنید.
مسیر B: تنظیم دقیق با lerobot pi05
پورت LeRobot همان وزنها را در CLI که قبلاً برای ACT و SmolVLA استفاده میکنید، بستهبندی میکند. تمام موارد زیر در برابر lerobot 0.6.1، نسخهای که از ۳ اوت ۲۰۲۶ منتشر شده است، و مستندات pi05 در ۲۳ اوت ۲۰۲۶ بررسی شده است. نسخهها در اینجا اهمیت دارند: مجموعه دادههای v3.0 با نسخه 0.4.0 در اکتبر ۲۰۲۵ عرضه شدند، وبلاگ 0.5.0 در ۹ مارس ۲۰۲۶، pi0-FAST و Real-Time Chunking را معرفی میکند، و 0.6.0 در ۶ ژوئیه ۲۰۲۶، بسته پایه را سبک کرد و استقرار را به lerobot-rollout منتقل کرد.
یک چیز تغییر نکرد: lerobot-train و lerobot-record از قبل در نسخه 0.3.2، اوت ۲۰۲۵، نقاط ورودی بودند. یک آموزش که هنوز python -m lerobot.scripts.train را فراخوانی میکند، یک سال از تغییرات را پشت سر گذاشته است و در مورد بقیه نیز قابل اعتماد نیست.
- 1نصب با افزونههای صحیح
از نسخه 0.6.0، نصب پایه فقط وابستگیهای اصلی یادگیری ماشین را شامل میشود و افزونه pi هیچ کد مجموعه داده یا آموزشی اضافه نمیکند، بنابراین برای تنظیم دقیق به افزونه training نیز نیاز است. دستورات تکخطی قدیمیتر در زمان import با خطا مواجه میشوند.
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 گیگابایت استفاده میکنند. 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 یک policy را رد میکند و نامهای مجموعه داده 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 را فریز میکند، expert را آموزش میدهد | پیشفرض 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 | ستونهای مجموعه داده را به ویژگیهای policy نگاشت میکند | زمانی که کلیدهای دوربین شما متفاوت است، مورد نیاز است |
بدون کوانتیلها، در بچ اول با خطای 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 انجام میدهد.
سه مجموعه از پیشفرضها، و کدام یک به trainer میرسند
TrainConfig از openpi مرجع است، PI05Config از LeRobot چیزی است که lerobot-train وقتی شما چیزی نمیگویید استفاده میکند، و فرم اینجا مجموعه سومی را ارسال میکند. نکته غافلگیرکننده نرخ یادگیری است: هر دو پیشفرض بالادستی در 2.5e-5 به اوج میرسند، در حالی که پیکربندی pi05_libero خود openpi و این پلتفرم آن را به 5e-5 افزایش میدهند.
| تنظیم | TrainConfig از openpi | pi05 و lerobot-train از lerobot | 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 until you pass --policy.dtype | در فرم نیست |
| تجمع گرادیان | چنین گزینهای وجود ندارد، به جای آن fsdp_devices | تاکنون در هیچ نسخهای وجود نداشته است | 16، و حذف شده است |
آیا پورت قابل اعتماد است؟ تیم LeRobot مدل پایه LIBERO را برای 6 هزار گام دیگر تنظیم دقیق کرد و با اعداد مرجع openpi در چهار مجموعه مقایسه کرد: میانگین 97.5 درصد در مقابل 96.85، جلوتر در Libero 10، عقبتر در Spatial. این مسیر یک انتخاب ابزاری است، نه کیفیتی.
- بیش از 10,000 ساعت پیشآموزش ربات پشت آن است، بنابراین 50 اپیزود از وظیفه شما میتواند کافی باشد.
- اعمال پیوسته: بدون توکنایزر برای تنظیم، بدون محدودیت گسستهسازی روی زوایای مفصل شما.
- پورت LeRobot در میانگین LIBERO امتیاز 97.5 درصد را در مقابل 96.85 openpi کسب میکند، بنابراین CLI کاربرپسندتر هیچ هزینه قابل اندازهگیری ندارد.
- مسیرهای کارآمد پارامتر در هر دو طرف: نسخههای JAX LoRA از openpi، یکپارچهسازی PEFT از LeRobot.
- تنظیم دقیق کامل به بیش از 70 گیگابایت نیاز دارد. رقم 22.5 گیگابایت LoRA عدد 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 |

حلقه کنترل در این پنج مدل، ۲۰ تا ۴۸۵ میلیثانیه در هر گام عملیاتی اجرا میشود. رفت و برگشتهای اینترنت عمومی علاوه بر ۴۸۵ میلیثانیه، یک سیاست کاری را به سیاستی مردد تبدیل میکند. استنتاج از راه دور برای عملیات کند برداشت و جابجایی (pick-and-place) قابل اجرا است، نه برای حرکتهای واکنشی سریع. ما ترجیح میدهیم این را بگوییم تا اینکه یک دمو بفروشیم که فقط روی شبکه محلی (LAN) کار میکند. اگر بازوی شما بین تکهها مکث میکند، از توقف سیاست در میانه حرکت شروع کنید.
بالادست (Upstream) پاسخی دارد، و نیمی از آن در نسخهای که میتوانید نصب کنید، موجود است. تکهبندی بلادرنگ (Real-Time Chunking) تکه بعدی را در حالی که بازو هنوز در حال اجرای تکه فعلی است، تولید میکند، سپس گامهای همپوشان تکه جدید را هدایت میکند تا نزدیک به بخش از قبل اجرا شده باقی بماند، به طوری که بازو در محل اتصال متوقف یا دچار لرزش نشود. فرم زمان استنتاج در تغییرات نسخه 0.4.2 برای Pi0، Pi0.5 و SmolVLA ارائه شده و یک پرچم rollout است، نه نیاز به بازآموزی:
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این کار مدل را سریعتر نمیکند. بلکه شکاف را پنهان میکند: ۴۸۵ میلیثانیه همچنان صرف میشود، اما خارج از مسیر بحرانی، بنابراین صف بین تکهها خالی نمیماند. نوع زمان آموزش از arXiv 2512.05964 فراتر میرود: مدل یاد میگیرد که بر اساس یک پیشوند عملیاتی تمیز شرطی شود، بنابراین در زمان استنتاج، همپوشانی با گامهای زمانی جریان (flow timesteps) برای هر عمل به جای هدایت شدن، به سختی نقاشی میشود (hard-inpainted)، و گذر برگشتی هدایت ناپدید میشود. در طول آموزش، طول پیشوند را برای هر مثال نمونهبرداری میکند و افت جریان را روی پسوند باقیمانده اعمال میکند. این پرچم فقط در main وجود دارد، نه در 0.6.1، و تأخیری که برای آن آموزش میدهید باید کمتر از chunk_size باشد.
دو راه برای دریافت یک چکپوینت Pi0.5
شما یک کارت ۸۰ گیگابایتی را اجاره میکنید یا مالک آن هستید، یکی از پشتههای بالا را نصب میکنید، مجموعه داده خود را تبدیل میکنید و بر اجرای آن نظارت میکنید. شما هر کنترلکنندهای را در اختیار دارید: JAX LoRA از openpi، آداپتورهای PEFT از LeRobot، اقدامات نسبی، نگاشتهای کلید سفارشی. شما همچنین هر شکستی را تجربه میکنید.
- سختافزار: A100 80 GB یا H100، یا یک کارت ۲۴ گیگابایتی در مسیر 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شما مدل و مجموعه داده را در فرم آموزش، بکاند یک GPU را در بازار لحظهای بر اساس VRAM مورد نیاز اجاره میکند، ترینر را اجرا میکند و چکپوینتها را در فضای ذخیرهسازی اشیاء مینویسد. Pi0.5 در اینجا فقط ابری است. راهنماهایی برای SO-100، SO-101، Koch v1.1 و LeKiwi وجود دارد.
| تنظیم | آنچه پلتفرم برای Pi0.5 ارسال میکند |
|---|---|
| چکپوینت پایه | lerobot/pi05_base |
| نوع سیاست | pi05 |
| اندازه بچ | 1 |
| نرخ یادگیری | 5e-5 |
| حداکثر گامها | 30000 |
| تجمع گرادیان | 16، اما به هشدار زیر مراجعه کنید |
| کنترلکنندههای اضافی در فرم | seed, logFreq |
| فرمت مجموعه داده | LeRobot v3.0 |
| رده GPU | A100 80 GB or H100 80 GB |
ترینر یک مقدار تجمع گرادیان ۱۶ ارسال میکند و lerobot 0.5.1 پرچمی برای دریافت آن ندارد، بنابراین نادیده گرفته میشود. هیچ lerobot منتشر شدهای چنین پرچمی ندارد: این کنترلکننده فقط در شاخه اصلی، به عنوان --accelerator.gradient_accumulation.steps وجود دارد. اندازه بچ مؤثر در اینجا ۱ است، در مقابل ۲۵۶ که پیکربندی pi05_libero از openpi استفاده میکند. این نکته قبل از خواندن منحنی افت (loss curve) ارزش دانستن دارد. این کنترلکننده برای اجراهای GR00T N1.7 و GR00T N1.5 اعمال میشود.
استنتاج به همین روش کار میکند: یک پاد برای ارائه سیاست فراهم میشود و کلاینت محلی شما با آن ارتباط برقرار میکند. پاد دارای یک نگهبان بیکار است و خود را از بین میبرد، بنابراین یک تب فراموش شده به طور پنهانی صورتحساب نمیشود. هشدار تأخیر اعمال میشود، به همین دلیل ACT با ۲۰ میلیثانیه اغلب در یک کار سریع برنده میشود.
زمانی که کار نمیکند
| علامت | محتملترین علت |
|---|---|
| اجرا قبل از شروع رد شد | مجموعه داده 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؛ چکپوینتگذاری یا train_expert_only را امتحان کنید |
| خطای 401 یا مخزن دروازهدار | مجوز توکنایزر PaliGemma پذیرفته نشده است |
| افت (Loss) کاهش مییابد، ربات کاری نمیکند | عدم تطابق نرمالسازی، یا سیاست وضعیت را کپی میکند |
| بازو بین تکهها مکث میکند | تأخیر در هر گام به علاوه رفت و برگشت؛ صف تکهها خالی میشود |
| در یک تنظیم کار میکند، در دیگری شکست میخورد | تعداد اپیزودها خیلی کم است، یا همه در یک پیکربندی هستند |
- مجموعه داده رد شد: نسخه ۳ مورد نیاز است
- کمبود حافظه در حین آموزش
- کاهش ضرر اما سیاست هیچ کاری نمیکند
- سیاست در میانه حرکت متوقف میشود
- سیاست فقط در یک تنظیمات کار میکند
- کار آموزشی در صف گیر کرده است
هزینه یک اجرا چقدر است
Pi0.5 در رده گرانقیمت قرار میگیرد زیرا به یک کارت 80 GB نیاز دارد و قیمتهای لحظهای متغیر هستند، بنابراین این رقم یک محدوده است نه یک قیمت. برای بسیاری از وظایف SO-100، ابتدا SmolVLA یا ACT را روی رده 24 GB آموزش دهید، ابتدا تأیید کنید که آیا وظیفه اصلاً قابل یادگیری است، سپس ساعتهای A100 را روی آن صرف کنید. اولین سیاست خود را آموزش دهید آن حلقه ارزانتر را طی میکند، و قیمتگذاری ردههای فعلی را نشان میدهد.
| رده | سیاستها | اجرای معمول | قیمت هر ساعت | هزینه هر اجرا |
|---|---|---|---|---|
| A100 80 GB یا H100 | Pi0.5, GR00T N1.7, GR00T N1.5 | 3 تا 6 hours | 1.20 تا 2.00 USD | حدود 4 تا 12 USD |
| RTX 4090 یا هر کارت 24 GB | SmolVLA, ACT | 2 تا 5 hours | 0.30 تا 0.60 USD | حدود 1 تا 3 USD |

قبل از اختصاص یک شب: و همان اعداد را رو در رو مقایسه میکنند. شامل ۸۵ مدل VLA با ۳۳۲ نتیجه بنچمارک است که هر کدام به منبع خود لینک شدهاند، و اطلاعات پسزمینه در مورد این خانواده در .
آموزش Pi0.5 بدون نیاز به ساختن پشته
مجموعه داده و هایپرپارامترها را در یک فرم انتخاب کنید. بکاند یک کارت ۸۰ گیگابایتی را در بازار لحظهای اجاره میکند، ترینر را اجرا کرده و چکپوینتها را در فضای ذخیرهسازی اشیاء مینویسد. راهنماهایی برای SO-100، SO-101، Koch v1.1 و LeKiwi.
باز کردن راهنماهای آموزشآیا میتوانم Pi0.5 را روی یک RTX 4090 فاینتیون کنم؟▾
یک فاینتیون کامل خیر: openpi بیش از ۷۰ گیگابایت برای آن لیست میکند، بنابراین یک A100 80 GB یا یک H100. رقم ۲۲.۵ گیگابایتی LoRA آن به مسیر JAX تعلق دارد؛ پیادهسازی PyTorch LoRA ندارد. ادغام PEFT در LeRobot وجود دارد، اما مثال مستند آن SmolVLA است و هیچ رقم VRAM برای pi05 منتشر نشده است.
به چند اپیزود نیاز دارم؟▾
پنجاه، همان حداقل GR00T و ACT؛ فقط SmolVLA کمتر است، در ۳۰. چکپوینت پایه بیش از ۱۰,۰۰۰ ساعت پیشآموزش را حمل میکند، بنابراین فاینتیون به جای یادگیری از صفر، تطبیق مییابد: ۵۰ اپیزود تمیز و متنوع بهتر از دویست اپیزود از یک پیکربندی است.
تفاوت بین --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 را ارسال میکند؛ در غیر این صورت به ۵۰ و ۰ بازمیگردند.
آیا نسخه باز، Pi0.5 کامل مقاله را به من میدهد؟▾
خیر. هر دو فقط از سر عملگر تطبیق جریان پشتیبانی میکنند. مرحله پیشآموزش توکن گسسته با توکنساز عملگر FAST و پیشبینی زیروظیفه سطح بالا منتشر نشدند، و کارت lerobot/pi05_base RL را به آن لیست اضافه میکند، حتی با وجود اینکه مقاله pi0.5 هیچ مرحله یادگیری تقویتی را توصیف نمیکند. شما یک سیاست سطح پایین را آموزش میدهید که بر اساس یک رشته زبانی که شما ارائه میدهید شرطی شده است، نه مدلی که یک وظیفه طولانی را خودش تجزیه کند.
این راهنما بر اساس کدام نسخهها نوشته شده است؟▾
openpi در main و lerobot 0.6.1، انتشار از ۳ اوت ۲۰۲۶، هر دو در ۲۳ اوت ۲۰۲۶ خوانده شدند. مجموعه دادههای v3.0 با 0.4.0 در اکتبر ۲۰۲۵ رسیدند. 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