
SO-100 LeRobot ڈیٹا سیٹ پر NVIDIA GR00T N1.7 کی فائن ٹیوننگ کے لیے ایک آزمائشی گائیڈ: حقیقی فلیگز، modality.json، v2.1 کی ضرورت، ایک رن کی لاگت کیا ہے، اور مشکلات۔
NVIDIA آپ کے پاس موجود بازو کے لیے ایک فائن ٹیوننگ مثال فراہم کرتا ہے۔ Isaac-GR00T ریپوزٹری کے اندر ایک فولڈر ہے جسے demo_data/cube_to_bowl_5: پانچ ایپی سوڈز، 4,148 فریمز 30 fps پر، پہلے ہی LeRobot v2.1 کے طور پر لکھے گئے ہیں، جس میں ایک مماثل موڈیلٹی کنفگ موجود ہے examples/SO100/ کے تحت۔ اس کی meta/info.json رپورٹ کرتا ہے robot_type: so101_follower، جو LeRobot میں اسی کنفگ کلاس کے برابر ہے جیسے so100_follower۔ یہ واقعی مفید ہے، کیونکہ اس کا مطلب ہے کہ GR00T N1.7 کے لیے ریفرنس پاتھ ایک چھ-ڈگری آف فریڈم ہابی آرم پر ماڈل لکھنے والوں نے برقرار رکھا ہے۔ یہ کوئی چھوٹا کیا ہوا ہیومنائیڈ ڈیمو نہیں ہے، یہ وہی بازو ہے۔
بری خبر یہ ہے کہ I recorded 60 episodes اور the arm does the task کے درمیان فاصلہ ہے۔ تقریباً چھ جگہیں ایسی ہیں جہاں یہ پائپ لائن خاموشی سے ناکام ہو جاتی ہے بجائے اس کے کہ شور مچائے، اور ان میں سے چار ایسی فائلوں میں رہتی ہیں جنہیں زیادہ تر لوگ کبھی نہیں کھولتے: meta/modality.json، پائتھون ڈیٹا کنفگ، meta/relative_stats.json، اور ڈیٹا سیٹ کی اپنی ورژن سٹرنگ۔ یہ گائیڈ حقیقی کمانڈز کے ساتھ دستی راستے کو شروع سے آخر تک دکھاتا ہے، پھر اسی کام کو AY-Robots پر ایک فارم کے طور پر دکھاتا ہے۔ نیچے دی گئی تمام چیزوں کو 20 اگست 2026 تک Isaac-GR00T مین برانچ (n1.7-ریلیز لائن) اور 3 اگست 2026 کو PyPI پر شائع ہونے والے lerobot 0.6.1 کے خلاف چیک کیا گیا تھا۔ اپ اسٹریم تیزی سے حرکت کرتا ہے، اور جہاں کسی فلیگ کا نام تبدیل کیا گیا تھا یہ مضمون اس کا ذکر کرتا ہے۔
شروع کرنے سے پہلے آپ کو کیا جاننے کی ضرورت ہے
- •GR00T N1.7 فائن ٹیوننگ کے لیے 40 GB یا اس سے زیادہ VRAM کی ضرورت ہوتی ہے۔ NVIDIA H100 یا L40 نوڈز کی سفارش کرتا ہے۔ ایک 24 GB RTX 4090 یہ کام نہیں کر پائے گا، اگرچہ یہ SmolVLA اور ACT کو تربیت دے گا۔
- •ڈیٹا سیٹ LeRobot v2 (v2.0 یا v2.1) ہونا چاہیے جس میں GR00T-مخصوص meta/modality.json شامل ہو۔ ایک LeRobot v3.0 ڈیٹا سیٹ لوڈ نہیں ہوتا اور اسے نیچے تبدیل کرنا پڑتا ہے۔
- •انٹری پوائنٹ gr00t/experiment/launch_finetune.py ہے، جو ایک tyro CLI ہے۔ اس میں کوئی --seed فلیگ نہیں ہے، لہذا رنز بٹ-فار-بٹ قابل تولید نہیں ہیں۔
- •ایک کسٹم بازو کے لیے ایمباڈیمنٹ ٹیگ NEW_EMBODIMENT ہے، اور یہ ٹیگ --modality-config-path کو لازمی بناتا ہے۔
- •فراہم کردہ SO-100 ریسیپی بازو کے جوڑوں کو RELATIVE ڈیلٹا کے طور پر اور گریپر کو ABSOLUTE ہدف کے طور پر پیش کرتی ہے۔ اس جوڑی کو الٹا کرنا ایک خاموش ناکامی ہے، غلطی نہیں۔
- •AY-Robots پر یہی کام ایک فارم ہے: 20000 سٹیپس، بیچ 32، لرننگ ریٹ 1e-4، تقریباً 4 سے 12 USD A100 80 GB یا H100 ٹیر پر۔
GR00T N1.7 دراصل کیا ہے
GR00T N1.7 ایک ویژن-لینگویج-ایکشن ماڈل ہے جس میں اصل GR00T N1 پیپر میں بیان کردہ دوہری نظام کا ڈھانچہ موجود ہے: ایک ویژن-لینگویج ماڈیول جو کیمروں اور ہدایات کو پڑھتا ہے، اور ایک ڈفیوژن ٹرانسفارمر جو اسے مسلسل موٹر کمانڈز کے ایک حصے میں بدل دیتا ہے۔ N1.7 نے پہلے نصف کو تبدیل کر دیا۔ N1.6 کا ایگل بیک بون ہٹا دیا گیا ہے، اور اس کی جگہ nvidia/Cosmos-Reason2-2B کو Qwen3-VL آرکیٹیکچر پر استعمال کیا گیا ہے۔ اس ماڈل کو روبوٹ ڈیٹا کے علاوہ تقریباً 20,000 گھنٹے کی ایگوسینٹرک انسانی ویڈیو پر پری ٹرین کیا گیا تھا۔ NVIDIA کی اپنی رپورٹ میں یہ اعداد و شمار 20,854 گھنٹے بتائے گئے ہیں اور یہ بھی بتایا گیا ہے کہ 1k سے 20k گھنٹے تک جانے سے اوسط ٹاسک تکمیل دوگنا سے زیادہ ہو جاتی ہے۔
دوسرا نصف بھی تبدیل ہوا ہے، ایسے طریقوں سے جو آپ کے رن کے لیے اہم ہیں۔ ایکشن ہیڈ 32 ڈفیوژن لیئرز سے کم ہو کر 16 ہو گیا، پیش گوئی شدہ ایکشن چنک 16 مراحل سے بڑھ کر 40 ہو گیا، اور زیادہ سے زیادہ اسٹیٹ اور ایکشن کی چوڑائی 29 سے 132 ہو گئی۔ یہ تینوں اعداد و شمار ریپوزٹری README میں موجود چینج لاگ سے لیے گئے ہیں؛ NVIDIA کی اپنی لانچ پوسٹ اب بھی سسٹم 1 کو 32-لیئر DiT کے طور پر بیان کرتی ہے، لہذا جہاں دونوں میں اختلاف ہو، اس ریپو پر بھروسہ کریں جسے آپ کلون کرنے والے ہیں۔ ایکشنز کو بطور ڈیفالٹ ایک نسبتی اینڈ-ایفیکٹر اسپیس میں ظاہر کیا جاتا ہے، موجودہ پوز سے ڈیلٹا کے طور پر نہ کہ مطلق اہداف کے طور پر، جو انسانی ویڈیو سے سیکھے گئے مینیپولیشن پرائرز کو روبوٹ کنٹرول میں منتقل کرنے کی اجازت دیتا ہے۔ ہیڈ خود ایک فلو-میچنگ ڈفیوژن ٹرانسفارمر ہے، جو Pi0.5 کی ہی فیملی سے ہے لیکن اس کے سامنے ایک مختلف بیک بون ہے۔ اگر آپ ابھی بھی پچھلی جنریشن پر ہیں، تو N1.7 بمقابلہ N1.5 اس بات کا احاطہ کرتا ہے کہ آیا اپ گریڈ آپ کی پائپ لائن کو دوبارہ بنانے کا جواز پیش کرتا ہے۔
| Property | Value | Where it comes from |
|---|---|---|
| پیرامیٹرز | 3,000,000,000 | Hugging Face model card |
| ویژن-لینگویج بیک بون | nvidia/Cosmos-Reason2-2B (Qwen3-VL), gated on Hugging Face | repo README |
| ایکشن ہیڈ | Flow-matching diffusion transformer, 16 layers (N1.6 had 32) | repo README |
| پیش گوئی شدہ ایکشن ہورائزن | 40 steps for the base checkpoint (N1.6 had 16) | getting_started/policy.md and repo README |
| زیادہ سے زیادہ اسٹیٹ اور ایکشن کی چوڑائی | 132 (N1.6 had 29) | repo README |
| کوڈ لائسنس | Apache 2.0 | Isaac-GR00T repository |
| ویٹس لائسنس | NVIDIA Open Model License Agreement | model card |
| لیٹنسی، H100 80 GB، PyTorch eager، 4 ڈینوائزنگ مراحل، 1 کیمرہ | 85.8 ms end to end, 11.7 Hz | model card timing table |
| وہی ہارڈویئر، TensorRT مکمل پائپ لائن | 27.9 ms end to end, 35.9 Hz | model card timing table |
| AY-Robots کی طرف سے اس کے پیش کردہ GR00T N1.7 کے لیے لیٹنسی | 152 ms per action step | AY-Robots policy catalog |
آخری تین قطاریں لوگوں کی زیادہ تر مایوسی کی وضاحت کرتی ہیں۔ 27.9 ms کی سرخی ایک H100 پر ایک کیمرے اور چار ڈینوائزنگ مراحل کے ساتھ TensorRT انجن کی ہے۔ اسی کارڈ پر سادہ PyTorch 85.8 ms ہے، اور ماڈل کارڈ اس فرق کو 3.08x بتاتا ہے۔ کسی بھی نمبر میں سرونگ لیئر، دوسرا کیمرہ یا نیٹ ورک ہاپ شامل نہیں ہے۔ AY-Robots کی طرف سے اس کے پیش کردہ GR00T N1.7 کے لیے 152 ms فی ایکشن اسٹیپ وہ اعداد و شمار ہے جس میں سرونگ لوپ میں شامل ہے، اور اس کے اوپر ایک پبلک انٹرنیٹ راؤنڈ ٹرپ بھی ہوتا ہے۔ اس پر مزید آخر میں۔ دوسرے ماڈلز کے ساتھ اعداد و شمار کے لیے، GR00T N1.7 بمقابلہ Pi0.5 اور GR00T N1.7 بمقابلہ SmolVLA انہیں ساتھ ساتھ پیش کرتے ہیں۔

کچھ بھی ٹائپ کرنے سے پہلے رن کو کیا درکار ہے۔
| ضرورت | فائن ٹیوننگ | انفرنس |
|---|---|---|
| VRAM، NVIDIA رہنمائی | 40 GB یا اس سے زیادہ، H100 یا L40 تجویز کردہ | 16 GB یا اس سے زیادہ، ایک RTX 4090 کام کرتا ہے |
| dGPU پر Python اور CUDA | 3.12 اور CUDA 12.8 | 3.12 اور CUDA 12.8 |
| ویڈیو بیک اینڈ | torchcodec 0.8.0، صرف FFmpeg 4 سے 7 | وہی |
| ڈیٹا سیٹ فارمیٹ | LeRobot v2 علاوہ meta/modality.json | قابل اطلاق نہیں |
| Hugging Face تک رسائی | nvidia/Cosmos-Reason2-2B کے لیے منظور شدہ | وہی |
| دیگر ٹولنگ | git-lfs اور uv | uv |
| groot1.7 ٹرینر کے لیے AY-Robots GPU ٹیر | A100 80 GB یا H100 80 GB | پوڈ خود بخود فراہم کیا جاتا ہے |
ہر GR00T چیک پوائنٹ، بشمول بیس nvidia/GR00T-N1.7-3B، پہلے استعمال پر nvidia/Cosmos-Reason2-2B لوڈ کرتا ہے، اور وہ ریپوزٹری گیٹڈ ہے۔ README میں ناکامی کی صحیح وضاحت کی گئی ہے: ماڈل لوڈنگ GatedRepoError / 401 Client Error کے ساتھ ناکام ہو جاتی ہے۔ جس چیز کا ذکر نہیں کیا گیا وہ یہ ہے کہ یہ کب ہوتا ہے، جو کہ کارڈ کرایہ پر لینے اور رن شروع ہونے کے بعد ہوتا ہے۔ ماڈل پیج پر رسائی کی درخواست کریں، پھر کچھ بھی کرایہ پر لینے سے پہلے uv run huggingface-cli login چلائیں یا HF_TOKEN ایکسپورٹ کریں۔
مرحلہ 0: اقساط خود
ذیل میں ہر چیز یہ فرض کرتی ہے کہ آپ نے پہلے ہی اقساط ریکارڈ کر لی ہیں۔ اگر آپ نے ایسا نہیں کیا ہے، تو یہ اصل پہلا قدم ہے اور یہی وہ ہے جو فیصلہ کرتا ہے کہ نتیجہ کتنا اچھا ہو سکتا ہے، کیونکہ نقالی سیکھنا ایسی معلومات کو بازیافت نہیں کر سکتا جو ڈیٹا میں موجود نہ ہو۔ پہلے دونوں بازوؤں کو کیلیبریٹ کریں، پھر فالوور کو ایک لیڈر آرم کے ساتھ چلائیں جبکہ lerobot-record پارکیٹ فائلیں اور کیمرہ سٹریمز لکھتا ہے۔ اگر کیلیبریشن درست نہیں ہے، تو آپ کے ڈیٹا سیٹ میں جوائنٹ کی قدریں اس روبوٹ سے تھوڑا مختلف روبوٹ کی وضاحت کرتی ہیں جو بعد میں پالیسی کو نافذ کرے گا، اور کوئی بھی تربیت اسے ٹھیک نہیں کر سکتی۔
lerobot-record \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower_arm \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30}}" \
--teleop.type=so100_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_leader_arm \
--dataset.repo_id=${HF_USER}/cube-into-bowl \
--dataset.num_episodes=60 \
--dataset.single_task="put the cube in the yellow bowl" \
--display_data=trueLeRobot کا اپنا مشورہ یہ ہے کہ کم از کم 50 اقساط ریکارڈ کی جائیں جن میں ہر آبجیکٹ کی جگہ کے لیے تقریباً 10 اقساط ہوں، کیمروں کو فکسڈ رکھیں، اور پکڑنے کے رویے کو مستقل رکھیں۔ تغیرات بعد میں شامل کریں، شروع میں نہیں۔ یاد رکھنے کے قابل اصول یہ ہے: اگر آپ صرف کیمرے کی تصاویر سے خود کام نہیں کر سکتے، تو پالیسی بھی نہیں کر سکتی۔ بازو کے مخصوص سیٹ اپ کے لیے، SO-100 کا آغاز اور SO-100 LeRobot صفحہ پورٹس، کیلیبریشن اور کیمرہ انڈیکس کا احاطہ کرتے ہیں۔ AY-Robots پر آپ یہ کام انٹرنیٹ پر براؤزر کے ذریعے ٹیلی آپریشن کا استعمال کرتے ہوئے بھی کر سکتے ہیں اور براہ راست سیشن سے ریکارڈ کر سکتے ہیں۔
مرحلہ 1: ڈیٹا سیٹ LeRobot v2.1 ہونا چاہیے
یہ سب سے عام رکاوٹ ہے۔ LeRobot کا موجودہ CODEBASE_VERSION مین پر v3.0 ہے، لہذا آج آپ کسی بھی موجودہ ٹول چین کے ساتھ جو کچھ بھی ریکارڈ کرتے ہیں وہ v3.0 کے طور پر سامنے آتا ہے۔ GR00T کا لوڈر v2 کی توقع کرتا ہے۔ ریپوزٹری اس کی وجہ واضح کرتی ہے: DROID، LIBERO اور Bridge جیسے بہت سے اپ اسٹریم ڈیٹا سیٹس v2 میں شائع کیے گئے ہیں، اور دونوں کے لیے مقامی سپورٹ منصوبہ بند ہے لیکن ابھی تک فراہم نہیں کی گئی۔ لہذا تبدیلی آپ پر منحصر ہے، اور یہ ایک ٹھوس وجہ سے اپنے ورچوئل انوائرمنٹ میں چلتی ہے: scripts/lerobot_conversion اپنا پائپراجیکٹ رکھتا ہے جو Python 3.10 یا 3.11 کا مطالبہ کرتا ہے اور lerobot کو ایک گٹ کمٹ پر پن کرتا ہے، جبکہ Isaac-GR00T کو خود Python 3.12 کی ضرورت ہے۔ کنورٹر کو ریپوزٹری روٹ سے انسٹال کریں اور آپ کو gr00t پیکیج ملتا ہے، جو کہ وہ غلطی ہے جس کے بارے میں اس کی README خبردار کرتی ہے۔ اگر آپ اس فارمیٹ سے نئے ہیں، تو LeRobot ڈیٹا سیٹ کی لغت کا اندراج بتاتا ہے کہ اس کے اندر اصل میں کیا ہے۔
# from the Isaac-GR00T repo root
cd scripts/lerobot_conversion
uv venv
source .venv/bin/activate
uv pip install -e . --verbose
# pulls the dataset from the Hub and writes a v2.1 copy into the default cache
python convert_v3_to_v2.py --repo-id <your-hf-user>/<your-dataset>
# or, back in the repo root, keep it next to the SO-100 example
uv run --project scripts/lerobot_conversion \
python scripts/lerobot_conversion/convert_v3_to_v2.py \
--repo-id <your-hf-user>/<your-dataset> \
--root examples/SO100/my_dataset_lerobotاگر v3.0 ڈیٹا سیٹ پہلے سے مقامی طور پر موجود ہے، تو اسکرپٹ اس کے ساتھ v2.1 لے آؤٹ بناتا ہے اور پھر تبدیل کرتا ہے: اصل کو ایک بہن فولڈر میں منتقل کر دیا جاتا ہے جس میں ورژن شامل ہوتا ہے، <name>_v3.0، اور تبدیل شدہ کاپی اصل راستہ لیتی ہے۔ (اسکرپٹ کا اپنا ڈاکسٹرنگ اس فولڈر کو _v30 کہتا ہے؛ کوڈ ورژن سٹرنگ شامل کرتا ہے، لہذا آپ کو اصل میں _v3.0 ملتا ہے۔) دوسری حیرت: آؤٹ پٹ ہمیشہ <root>/<repo-id> کے تحت آتا ہے، لہذا --root examples/SO100/my_dataset_lerobot آپ کو examples/SO100/my_dataset_lerobot/<your-hf-user>/<your-dataset> دیتا ہے، اور وہ لمبا راستہ ہی ہے جو --dataset-path بعد میں چاہتا ہے۔ جب کوئی تربیتی کام ورژن کی وجوہات کی بنا پر آپ کے ڈیٹا سیٹ کو مسترد کرتا ہے، تو v3 کے طور پر مسترد شدہ ڈیٹا سیٹ کا صفحہ درست علامات کی فہرست دیتا ہے۔
تبدیلی کے بعد GR00T جس ساخت کو چاہتا ہے وہ کلاسک v2 لے آؤٹ ہے: meta/info.json، meta/episodes.jsonl، meta/tasks.jsonl، پارکیٹ فائلیں اس کے تحت: data/chunk-000/، MP4 فائلیں اس کے تحت: videos/chunk-000/observation.images.
مرحلہ 2: modality.json، وہ چھ اعداد جو سب کچھ طے کرتے ہیں
LeRobot ڈیٹا سیٹ میں روبوٹ کی حالت اور عمل کو فلیٹ float32 اریوں کے طور پر ذخیرہ کیا جاتا ہے۔ SO-100 کے لیے دونوں کی شکل [6]: پانچ بازو کے جوڑ اور ایک گریپر۔ ڈیمو ڈیٹا سیٹ انہیں یہ نام دیتا ہے: shoulder_pan.pos, shoulder_lift.pos, elbow_flex.pos, wrist_flex.pos, wrist_roll.pos, gripper.pos، لیکن یہ نام info.json میں موجود ہیں اور پارکیٹ فائل میں کچھ بھی نہیں بتاتا کہ کون سا انڈیکس کون سا ہے۔ meta/modality.json یہ میپنگ فراہم کرتا ہے، اور GR00T اس کے بغیر تربیت نہیں کرے گا۔ SO-100 کے لیے ریپوزٹری میں موجود فائل یہاں لفظ بہ لفظ دی گئی ہے۔
{
"state": {
"single_arm": {
"start": 0,
"end": 5
},
"gripper": {
"start": 5,
"end": 6
}
},
"action": {
"single_arm": {
"start": 0,
"end": 5
},
"gripper": {
"start": 5,
"end": 6
}
},
"video": {
"front": {
"original_key": "observation.images.front"
},
"wrist": {
"original_key": "observation.images.wrist"
}
},
"annotation": {
"human.task_description": {
"original_key": "task_index"
}
}
}اسے اپنے تبدیل شدہ ڈیٹاسیٹ میں کاپی کریں meta/modality.json اور ویڈیو کیز کو اس نام سے تبدیل کریں جو آپ کے کیمروں کا اصل نام ہے۔ اگر آپ نے ایک ہی اوور ہیڈ کیمرے سے ریکارڈ کیا ہے جس کا نام top ہے، تو original_key ہے observation.images.top اور دوستانہ نام وہ ہے جس کا آپ کا ڈیٹا کنفگ حوالہ دے گا۔ دونوں کو متفق ہونا چاہیے، اور ان میں سے کوئی بھی آپ کے لیے دوسرے کو چیک نہیں کرتا۔ زبان کی تشریح بدتر ہے، کیونکہ ایک ہی کی تین جگہوں پر ظاہر ہونی چاہیے۔
| پرت | فائل | ریپو میں استعمال شدہ SO-100 فارم |
|---|---|---|
| پارکیٹ کالم | data/chunk-*/episode_*.parquet | annotation.human.task_description |
| modality.json کی | meta/modality.json, under "annotation", without the annotation. prefix | human.task_description |
| ڈیٹا کنفگ میں modality_keys | your so100_config.py | annotation.human.task_description |
annotation. کے بعد کے حصے ڈیٹاسیٹ کے مصنف نے منتخب کیے ہیں۔ SO-100 ڈیمو ڈیٹا annotation.human.task_description استعمال کرتا ہے؛ LIBERO اور SimplerEnv annotation.human.action.task_description استعمال کرتے ہیں۔ دونوں درست ہیں۔ اگر آپ نے LIBERO کی مثال سے ایک کنفگ کاپی کیا اور اسے اپنی SO-100 ریکارڈنگ کی طرف اشارہ کیا، تو زبان کا چینل کچھ بھی حل نہیں کرے گا اور ماڈل ایک خالی ہدایت پر تربیت حاصل کرے گا۔ نقصان پھر بھی کم ہوتا ہے۔ پالیسی پھر بھی کچھ کرتی ہے۔ یہ صرف اس بات کو نظر انداز کرتی ہے جو آپ نے اسے کرنے کو کہا تھا۔
مرحلہ 3: ڈیٹا کنفگ، رشتہ دار بازو اور مطلق گرفت کنندہ
موڈیلٹی کنفگ JSON کے بجائے ایک پائتھن فائل ہے، کیونکہ یہ یہ بھی فیصلہ کرتی ہے کہ ہر ایکشن گروپ کی نمائندگی کیسے کی جاتی ہے۔ یہ N1.7 ورک فلو کا وہ حصہ ہے جو N1.5 میں اسی شکل میں موجود نہیں تھا، اور یہ وہ حصہ ہے جسے دو بار پڑھنا چاہیے۔ بھیجی گئی SO-100 کنفگ پانچ بازو کے جوڑوں کی پیش گوئی کرتی ہے نسبتی موجودہ حالت سے ڈیلٹا کے طور پر اور گرپر کو ایک مطلق ہدف کی پوزیشن کے طور پر، کیونکہ ایک بائنری کھلے یا بند سگنل ڈیلٹا کے بجائے ہدف کے طور پر بہتر کام کرتا ہے۔
from gr00t.configs.data.embodiment_configs import register_modality_config
from gr00t.data.embodiment_tags import EmbodimentTag
from gr00t.data.types import (
ActionConfig, ActionFormat, ActionRepresentation, ActionType, ModalityConfig,
)
so100_config = {
"video": ModalityConfig(
delta_indices=[0], # current frame only
modality_keys=["front", "wrist"], # must match modality.json
),
"state": ModalityConfig(
delta_indices=[0],
modality_keys=["single_arm", "gripper"],
),
"action": ModalityConfig(
delta_indices=list(range(0, 16)), # predict 16 future steps
modality_keys=["single_arm", "gripper"],
action_configs=[
ActionConfig(rep=ActionRepresentation.RELATIVE, # arm joints
type=ActionType.NON_EEF,
format=ActionFormat.DEFAULT),
ActionConfig(rep=ActionRepresentation.ABSOLUTE, # gripper
type=ActionType.NON_EEF,
format=ActionFormat.DEFAULT),
],
),
"language": ModalityConfig(
delta_indices=[0],
modality_keys=["annotation.human.task_description"],
),
}
register_modality_config(so100_config, embodiment_tag=EmbodimentTag.NEW_EMBODIMENT)یہاں دو تفصیلات ایسی ہیں جو اگر آپ کو معلوم نہ ہوں تو آپ کا ایک دن ضائع کر سکتی ہیں۔ پہلی، action_configs پوزیشنل ہے: دستاویزات میں اسی لمبائی اور اسی ترتیب کی ضرورت ہوتی ہے جو modality_keys کی ہوتی ہے، اور وہ اسے غلط کرنے کے نتائج کے بارے میں واضح ہیں، جس کا مطلب ہے کہ غلط نمائندگی خاموشی سے لاگو ہو جاتی ہے۔ آپ کا گرپر ڈیلٹا کے طور پر تربیت یافتہ ہوتا ہے اور آپ کا بازو ایک مطلق ہدف کے طور پر، اور کوئی غلطی کا پیغام نہیں ہوتا۔ دوسری، register_modality_config اس بات کی تصدیق کرتا ہے کہ ٹیگ پہلے سے رجسٹرڈ نہیں ہے، لہذا اسی پائتھن پروسیس میں دوسری NEW_EMBODIMENT کنفگ Embodiment tag ... already registered کے ساتھ ختم ہو جاتی ہے۔ آپ ان میں سے دو کو ایک ہی اسکرپٹ میں امپورٹ نہیں کر سکتے۔ ایک تیسرا اصول بعد میں، تعیناتی کے وقت نافذ کیا جاتا ہے: ایکشن delta_indices صفر سے شروع ہونے والی متصل رینج ہونی چاہیے۔ ایک سپارس ونڈو جیسے [0, 4, 8] کو مسترد کر دیا جاتا ہے، کیونکہ ہر چیز جو نیچے کی طرف ہے وہ پیش گوئی شدہ چنک کو خطی طور پر انڈیکس کرتی ہے اور بصورت دیگر غلط قطاروں کو عمل میں لائے گی۔
نارملائزیشن کے اعداد و شمار، خاص طور پر meta/relative_stats.json، اس افق کی لمبائی کے لیے شمار کیے جاتے ہیں جو آپ نے انہیں تیار کرتے وقت رکھی تھی۔ ایکشن افق کو 16 سے 8 تک بغیر دوبارہ تیار کیے مختصر کرنے پر تربیت IndexError: boolean index did not match indexed array ... dimension is 8 but corresponding boolean dimension is 16 کے ساتھ ختم ہو جاتی ہے۔ اس کا حل ایک کمانڈ ہے: python gr00t/data/stats.py --dataset-path <path> --embodiment-tag NEW_EMBODIMENT --modality-config-path examples/SO100/so100_config.py۔ اسے delta_indices میں کسی بھی تبدیلی کے بعد چلائیں۔
مرحلہ 4: ماحول
N1.7 نے ریپوزٹری کو منتقل کر دیا ہے اور Python 3.12 پر۔ پرانا conda پلس pip install -e . پاتھ اب بھی README کے ایک سکیڑے ہوئے حصے میں موجود ہے، لیکن یہ خبردار کرتا ہے کہ GPU کی انحصاریاں بشمول flash-attn اور TensorRT کو دستی تنصیب کی ضرورت پڑ سکتی ہے۔ uv استعمال کریں جب تک کہ آپ کے پاس کوئی خاص وجہ نہ ہو۔ flash-attn کے محاذ پر، ایک تفصیل الجھن سے بچاتی ہے: آپ دیکھیں گے Installing flash-attn ہر uv run پر پرنٹ ہوتا ہے۔ یہ دوبارہ نہیں بن رہا ہے۔ uv ایک URL-pinned wheel کو دوبارہ توثیق کر رہا ہے جو پہلے سے کیشڈ ہے، اور اس میں دو یا تین سیکنڈ لگتے ہیں۔
- 1git-lfs انسٹال کریں، پھر سب ماڈیولز کے ساتھ کلون کریں
git-lfs لازمی ہے، اختیاری نہیں۔ اس کے بغیر demo_data/ میں موجود parquet فائلیں پوائنٹر سٹبز کے طور پر ڈاؤن لوڈ ہوتی ہیں، اور ڈیمو رن ایک ایسے ڈیٹا سیٹ پر ناکام ہو جاتا ہے جو فائل لسٹنگ میں موجود نظر آتا ہے۔
bashsudo apt install git-lfs && git lfs install git clone --recurse-submodules https://github.com/NVIDIA/Isaac-GR00T cd Isaac-GR00T - 2uv انسٹال کریں اور ماحول کو ہم آہنگ کریں
ڈیفالٹ انسٹالیشن GPU کی انحصاریاں بشمول flash-attn اور TensorRT کو کھینچتی ہے۔ ایک تازہ A100 یا H100 امیج پر یہ سب سے طویل واحد مرحلہ ہے، لہذا اسے کسی اور چیز پر توجہ دینے سے پہلے کریں۔
bashcurl -LsSf https://astral.sh/uv/install.sh | sh sudo apt-get update && sudo apt-get install -y ffmpeg uv sync --python 3.12 uv run python -c "import gr00t; print('GR00T installed successfully')" - 3Hugging Face کے خلاف تصدیق کریں
پہلی ٹریننگ شروع کرنے سے پہلے یہ کریں، نہ کہ آٹھ منٹ بعد ناکام ہونے پر۔
bashuv run huggingface-cli login # or: export HF_TOKEN=<your_token> - 4شپ کیے گئے SO-100 ڈیمو ڈیٹا پر صحت کی جانچ
اپنی ریکارڈنگ کو چھونے سے پہلے، demo_data/cube_to_bowl_5 پر 2000 مراحل چلائیں۔ یہ پانچ ایپی سوڈز ہیں، یہ تیزی سے مکمل ہوتا ہے، اور یہ آپ کے ڈیٹا کے بجائے ماحول کو ثابت کرتا ہے۔ اگر یہ رن ناکام ہو جاتا ہے، تو آپ اپنے ڈیٹا سیٹ کے ساتھ جو کچھ بھی کریں گے وہ مدد نہیں کرے گا۔
bashCUDA_VISIBLE_DEVICES=0 uv run python \ gr00t/experiment/launch_finetune.py \ --base-model-path nvidia/GR00T-N1.7-3B \ --dataset-path demo_data/cube_to_bowl_5 \ --embodiment-tag NEW_EMBODIMENT \ --modality-config-path examples/SO100/so100_config.py \ --num-gpus 1 \ --output-dir /tmp/test_finetune \ --max-steps 2000 \ --global-batch-size 32 \ --dataloader-num-workers 4
FFmpeg 8. torchcodec 0.8.0 صرف FFmpeg 4 سے 7 کو سپورٹ کرتا ہے، اور Ubuntu 25.10 اور بعد کے ورژن 8 کے ساتھ آتے ہیں۔ خرابی Could not load libtorchcodec ہے، جو ورژن کے تصادم کے بجائے ایک خراب انسٹالیشن کی طرح لگتی ہے۔ ایک پرانا رن ٹائم انسٹال کریں، مثال کے طور پر conda install -c conda-forge 'ffmpeg<8'، اور اس کی لائبریریوں کو LD_LIBRARY_PATH پر رکھیں۔ CUDA_HOME سیٹ نہیں ہے۔ فائن ٹیوننگ مکمل طور پر ناکام ہو جاتی ہے۔ bash scripts/deployment/dgpu/install_deps.sh کو ایک بار چلائیں، یا صرف export CUDA_HOME=/usr/local/cuda۔
مرحلہ 5: فائن ٹیون کمانڈ اور اس کے فلیگز اصل میں کیا ڈیفالٹ کرتے ہیں
ڈیمو ڈیٹا سیٹ کو اپنے ڈیٹا سیٹ سے تبدیل کریں اور وہ کنوبس شامل کریں جو آپ واقعی چاہتے ہیں۔ ذیل میں وہ مکمل فارم ہے جو ریپوزٹری اپنی نئی ایمباڈیمنٹ ٹیوٹوریل میں استعمال کرتی ہے، بشمول آگمینٹیشن اور چیک پوائنٹنگ فلیگز جو مختصر README مثال میں شامل نہیں ہیں۔ یہ تنگ معنوں میں ہے: لینگویج بیک بون اور ویژول انکوڈر منجمد رہتے ہیں، اور جو تربیت پاتا ہے وہ پروجیکٹر اور ڈفیوژن ایکشن ہیڈ ہے۔
export NUM_GPUS=1
CUDA_VISIBLE_DEVICES=0 uv run python \
gr00t/experiment/launch_finetune.py \
--base-model-path nvidia/GR00T-N1.7-3B \
--dataset-path ./my_dataset_lerobot \
--embodiment-tag NEW_EMBODIMENT \
--modality-config-path examples/SO100/so100_config.py \
--num-gpus $NUM_GPUS \
--output-dir /tmp/so100 \
--save-total-limit 5 \
--save-steps 2000 \
--max-steps 20000 \
--use-wandb \
--global-batch-size 32 \
--color-jitter-params brightness 0.3 contrast 0.4 saturation 0.5 hue 0.08 \
--dataloader-num-workers 4| فلیگ | FinetuneConfig میں ڈیفالٹ | یہ کیا کرتا ہے |
|---|---|---|
| --global-batch-size | 64 | گریڈینٹ ایکومولیشن سے پہلے تمام GPUs پر کل بیچ۔ بھیجی گئی مثالیں 32 استعمال کرتی ہیں۔ |
| --learning-rate | 1e-4 | وہی قدر جو AY-Robots اپنے groot1.7 ٹرینر کے لیے بھیجتا ہے۔ |
| --max-steps | 10000 | کل آپٹیمائزر سٹیپس۔ examples/finetune.sh ریپر بھی 10000 پر ڈیفالٹ کرتا ہے۔ |
| --gradient-accumulation-steps | 1 | مؤثر بیچ کو ضرب دیتا ہے۔ 1 سے اوپر کی قدریں ایک وارننگ جاری کرتی ہیں جو آپ کو جمع شدہ سائز بتاتی ہے۔ |
| --save-steps and --save-total-limit | 1000 and 5 | چیک پوائنٹ کی فریکوئنسی، اور کتنے رکھے جاتے ہیں۔ پرانے والے حذف کر دیے جاتے ہیں۔ |
| --weight-decay and --warmup-ratio | 1e-5 and 0.05 | examples/finetune.sh کے ذریعے بھی واضح طور پر سیٹ کیا گیا ہے۔ |
| --state-dropout-prob | 0.2 in the CLI, 0.8 in the model config | تربیت کے دوران پروپریوسیپٹیو حالت کو بے ترتیب طور پر گراتا ہے۔ اگر آپ کا کام حالت پر منحصر ہے تو اسے کم کریں۔ |
| --tune-llm and --tune-visual | False and False | بیک بون ڈیفالٹ کے طور پر منجمد رہتا ہے۔ |
| --tune-projector and --tune-diffusion-model | True and True | پروجیکٹر اور ڈفیوژن ایکشن ہیڈ ہی اصل میں تربیت پاتے ہیں۔ |
| --use-percentiles | True | خام کم از کم اور زیادہ سے زیادہ کے بجائے q01 اور q99 کے ساتھ نارملائز کریں۔ |
| --dataloader-num-workers | 2 | لوڈر ڈیزائن کے لحاظ سے CPU پر مبنی ہے۔ مثالیں اسے 4 تک بڑھاتی ہیں۔ |
| --seed | does not exist | اس CLI پر کوئی سیڈ فلیگ موجود نہیں ہے۔ |
وہ آخری قطار کوئی ٹائپو نہیں ہے۔ launch_finetune.py ایک tyro CLI ہے جو ایک dataclass سے تیار کیا گیا ہے، اور اس dataclass میں کوئی seed فیلڈ نہیں ہے۔ README میں الگ سے بتایا گیا ہے کہ غیر حتمی تصویری اضافہ کی وجہ سے رن کے درمیان 5 سے 6 فیصد فرق ہوتا ہے۔ ایک جیسے فلیگز کے ساتھ دو رن ایک جیسے چیک پوائنٹس پیدا نہیں کریں گے، جو اس وقت بہت اہمیت رکھتا ہے جب آپ یہ فیصلہ کرنے کی کوشش کر رہے ہوں کہ آیا ہائپر پیرامیٹر کی تبدیلی نے مدد کی یا آپ خوش قسمت تھے۔ موازنہ کے لیے، lerobot کا اپنا ٹرینر seed 1000 پر ڈیفالٹ کرتا ہے، اور LeRobot GR00T کی ترکیب --seed=42 واضح طور پر پاس کرتی ہے۔
فائن ٹیوننگ eval_strategy="no" کے ساتھ چلتی ہے، لہذا کوئی توثیقی نقصان کا وکر بالکل نہیں ہے۔ آپ کو صرف تربیتی نقصان ملتا ہے اور کچھ نہیں۔ نئی-embodiment گائیڈ آپ کو اسے --eval-strategy steps --eval-steps 500 کے ساتھ آن کرنے کو کہتی ہے، لیکن یہ فلیگ launch_finetune.py پر موجود نہیں ہے: CLI tyro کے ذریعے FinetuneConfig dataclass سے تیار کیا جاتا ہے، اور eval_strategy، eval_steps اور eval_batch_size اس کے بجائے TrainingConfig کے فیلڈز ہیں۔ ان کے ڈیفالٹ وہاں "no"، 500 اور 2 ہیں۔ ان تک پہنچنے کے لیے، مکمل انٹری پوائنٹ gr00t/experiment/launch_train.py استعمال کریں، جہاں نیسٹڈ فلیگ --training.eval-strategy ہے۔ بہر حال، صرف تربیتی نقصان کا گرنا آپ کو عمومیت کے بارے میں بہت کم بتاتا ہے، جو بالکل وہی صورتحال ہے جو نقصان گرتا ہے لیکن پالیسی کچھ نہیں کرتی پر بیان کی گئی ہے۔
20000-اسٹیپ رن کی لاگت کیا ہے
GR00T N1.7 کو 80 GB کارڈ کی ضرورت ہوتی ہے، لہذا لاگت کے سوال کا ایک محدود جواب ہے۔ AY-Robots پر groot1.7 ٹرینر A100 80 GB یا H100 80 GB ٹیر پر چلتا ہے، جہاں ایک رن اسپاٹ مارکیٹ میں 1.20 سے 2.00 USD فی گھنٹہ کی شرح سے 3 سے 6 گھنٹے لیتا ہے۔ یہ ڈیفالٹ 20000-اسٹیپ جاب کے لیے تقریباً 4 سے 12 USD ہے۔ وہی کام SmolVLA یا ACT 24 GB کارڈ پر 0.30 سے 0.60 USD فی گھنٹہ اور 1 سے 3 USD فی رن پر ہوتا ہے۔ یہ اصل سمجھوتہ ہے: GR00T فی کوشش تقریباً چار گنا زیادہ مہنگا ہے، اور آپ اسے اپنی میز کے نیچے 4090 پر نہیں چلا سکتے۔
| ماڈل | GPU ٹیر | عام رن | عام لاگت | کم از کم ایپی سوڈز |
|---|---|---|---|---|
| GR00T N1.7 | A100 80 GB or H100 80 GB | 3 to 6 hours | 4 to 12 USD | 50 |
| GR00T N1.5 | A100 80 GB or H100 80 GB | 3 to 6 hours | 4 to 12 USD | 50 |
| Pi0.5 | A100 80 GB or H100 80 GB | 3 to 6 hours | 4 to 12 USD | 50 |
| SmolVLA | RTX 4090 or any 24 GB card | 2 to 5 hours | 1 to 3 USD | 30 |
| ACT | RTX 4090 or any 24 GB card | 2 to 5 hours | 1 to 3 USD | 50 |
50-ایپی سوڈ کی کم از کم حد ایک فلور ہے، ہدف نہیں۔ NVIDIA کی اپنی FAQ زیادہ تقاضا کرتی ہے: ایک سادہ فکسڈ لوکیشن پک اینڈ پلیس کے لیے تقریباً 100 ٹراجیکٹریز، پیچیدہ یا کثیر مرحلہ مناظر کے لیے 500 یا اس سے زیادہ، اور عمدہ ہیرا پھیری کے لیے 100 سے 500۔ اگر آپ 20 ایپی سوڈز پر ہیں، تو شام کو ٹیوننگ کرنے کے بجائے دوپہر کو ریکارڈنگ میں گزاریں۔ ڈیٹا اکٹھا کرنے کی گائیڈ بتاتی ہے کہ ایک مفید ایپی سوڈ کو ضائع شدہ ایپی سوڈ سے کیا چیز الگ کرتی ہے، اپنا پہلا ڈیٹا سیٹ ریکارڈ کریں اس کا مختصر ورژن ہے، اور SO-100 ڈیٹا اکٹھا کرنا بازو کے لیے مخصوص ہے۔

مرحلہ 6: بازو کو چھونے سے پہلے اوپن لوپ تشخیص
تازہ چیک پوائنٹ کو کسی فزیکل بازو پر یہ جاننے کے لیے نہ لگائیں کہ آیا تربیت نے کام کیا ہے۔ پہلے اوپن-لوپ ایویلویشن چلائیں۔ یہ ایک ریکارڈ شدہ ایپی سوڈ کو دوبارہ چلاتا ہے، ماڈل سے ہر قدم پر کارروائیوں کا مطالبہ کرتا ہے، اور MSE اور MAE کے ساتھ پیش گوئی کو زمینی حقیقت کے خلاف پلاٹ کرتا ہے۔ اس پر کوئی لاگت نہیں آتی اور یہ مراحل 2 اور 3 سے نقشہ سازی کی غلطیوں کو پکڑ لیتا ہے۔
uv run python gr00t/eval/open_loop_eval.py \
--dataset-path ./my_dataset_lerobot \
--embodiment-tag NEW_EMBODIMENT \
--model-path /tmp/so100/checkpoint-20000 \
--traj-ids 0 \
--execution-horizon 16 \
--steps 400 \
--modality-keys single_arm gripperریپوزٹری جان بوجھ کر کسٹم ڈیٹا کے لیے ہدف MSE شائع کرنے سے انکار کرتی ہے، اور یہ ایک درست فیصلہ ہے: یہ تعداد آپ کے ایکشن یونٹس، آپ کے کام اور آپ کے ڈیٹا سیٹ کے سائز پر منحصر ہے، لہذا کسی اور کے بازو سے کاپی کی گئی حد کا کوئی مطلب نہیں ہے۔ جو چیز معنی خیز ہے وہ رجحان ہے۔ یہ وہ ریفرنس رن ہے جسے ریپو ایک سنگل H100 پر پانچ ایپی سوڈ ڈیمو ڈیٹا سیٹ اور 2000 مراحل کے ساتھ دستاویز کرتا ہے۔
| چیک پوائنٹ | ٹرایج 0 پر اوسط MSE | ٹرایج 0 پر اوسط MAE |
|---|---|---|
| 500 | 87.5 | 5.63 |
| 1000 | 25.4 | 3.30 |
| 1500 | 13.2 | 2.18 |
| 2000 | 10.0 | 1.76 |
شکل ہی سگنل ہے، نہ کہ مطلق اقدار۔ غلطی کو مسلسل کم ہونا چاہیے جیسے جیسے جمع ہوتے ہیں۔ تمام پانچ تربیتی اقساط پر اوسط نکالنے پر، صرف ٹراجیکٹری 0 کے بجائے، ریپو کے آخری چیک پوائنٹ نے تقریباً 7.5 MSE اور 1.5 MAE اسکور کیا، لہذا حوالہ رن بھی مختلف طریقے سے پڑھا جاتا ہے اس بات پر منحصر ہے کہ آپ کن اقساط کا اوسط نکالتے ہیں۔ اپنے ڈیٹا میں کوئی بھی تبدیلی کرنے سے پہلے غیر ترمیم شدہ ڈیمو کمانڈ پر اپنی بیس لائن ریکارڈ کریں: اگر آپ ایک معلوم-اچھے رن کو دوبارہ پیدا نہیں کر سکتے، تو آپ سیٹ اپ کی غلطی کو ڈیٹا کے مسئلے سے الگ نہیں کر سکتے۔ ریپوزٹری عام علامات کو اسباب سے بھی جوڑتی ہے، اور ان میں سے ہر ایک آپریشنل ہے نہ کہ ماڈل کی خرابی۔
| علامت | ممکنہ وجہ |
|---|---|
| چیک پوائنٹس پر MSE فلیٹ یا بڑھ رہا ہے | لرننگ ریٹ بہت کم ہے، یا ڈیٹا بالکل لوڈ نہیں ہو رہا ہے۔ --dataset-path اور ڈیٹالوڈر ورکرز کو چیک کریں۔ |
| پیش گوئی کا منحنی خط فلیٹ یا مستقل ہے | modality.json کیز یا --modality-config-path مماثل نہیں ہیں۔ ایکشن کیز میپ نہیں کی گئی ہیں۔ |
| MSE بہت زیادہ، یا تربیت کے دوران NaN نقصان | ایکشن اور اسٹیٹ نارملائزیشن۔ meta/stats کی تصدیق کریں اور یہ کہ ایکشن کی حدود جسمانی طور پر قابل قبول ہیں۔ |
| traj 0 پر اچھا، روکی ہوئی اقساط پر خراب | ڈیٹا کی کمی، کوئی بگ نہیں۔ پانچ ڈیمو اقساط عمومی نہیں ہو سکتیں۔ |
دوسرا راستہ: Isaac-GR00T کے بجائے lerobot-train
LeRobot کا موجودہ ریلیز، 0.6.1 جو 3 اگست 2026 سے PyPI پر دستیاب ہے، انہی بنیادی وزن کو فائن-ٹیون کرنے کا ایک دوسرا اور کافی مختلف طریقہ پیش کرتا ہے۔ LeRobot GR00T N1.7 کو ایک پالیسی قسم کے طور پر پیش کرتا ہے اور اسے اپنے lerobot-train انٹری پوائنٹ کے ذریعے تربیت دیتا ہے۔ یہاں دو چیزیں اہم ہیں۔ LeRobot CLI کنسول اسکرپٹس کا ایک سیٹ ہے، لہذا جو کچھ بھی آپ پڑھتے ہیں جس میں لکھا ہے python lerobot/scripts/train.py پرانا ہے اور نہیں چلے گا۔ اور LeRobot نے GR00T N1.5 کی حمایت مکمل طور پر ختم کر دی ہے، N1.5 چیک پوائنٹس اور کنفگس کو ایک مائیگریشن نوٹ کے ساتھ مسترد کر دیا ہے، لہذا اگر آپ کو LeRobot کے ذریعے N1.5 کی ضرورت ہے تو آپ کو lerobot==0.5.1 کو پن کرنا ہوگا، جو اسے سپورٹ کرنے والا آخری ریلیز تھا اور 7 اپریل 2026 کو شائع ہوا تھا۔
pip install "lerobot[groot]" "lerobot[training]"
hf auth login
lerobot-train \
--dataset.repo_id=$HF_USER/$DATASET_NAME \
--dataset.image_transforms.enable=true \
--policy.type=groot \
--policy.device=cuda \
--policy.base_model_path=nvidia/GR00T-N1.7-3B \
--policy.embodiment_tag=new_embodiment \
--policy.chunk_size=16 \
--policy.n_action_steps=16 \
--policy.use_relative_actions=true \
--policy.relative_exclude_joints='["gripper"]' \
--policy.use_bf16=true \
--seed=42 \
--batch_size=64 \
--steps=20000 \
--save_freq=5000 \
--output_dir=$OUTPUT_DIR| پہلو | Isaac-GR00T launch_finetune.py | lerobot-train --policy.type=groot |
|---|---|---|
| ڈیٹا سیٹ ورژن | صرف LeRobot v2، تبدیلی درکار ہے | نیٹو LeRobot ڈیٹا سیٹ، کوئی ڈاؤن گریڈ نہیں |
| موڈیلٹی میپنگ | meta/modality.json کے علاوہ ایک Python ڈیٹا کنفگ | کوئی modality.json نہیں؛ رویہ کمانڈ لائن پر --policy.* فلیگز کے ذریعے سیٹ کیا جاتا ہے |
| سیڈ | کوئی سیڈ فلیگ نہیں | --seed، LeRobot ڈیفالٹ 1000 |
| نسبتی اعمال | ڈیٹا کنفگ میں فی کی ActionConfig | --policy.use_relative_actions کے علاوہ --policy.relative_exclude_joints |
| حوالہ جاتی نتائج شائع کیے گئے | ڈیمو ڈیٹا پر SO-100 اوپن لوپ MSE رجحان | LIBERO سوئیٹس، چار سوئیٹس میں 96.5 فیصد اوسط |
| ڈپلائمنٹ پاتھ | run_gr00t_server.py کے علاوہ ZMQ پر eval_so100.py | lerobot-rollout، ریئل ٹائم چنکنگ کے ساتھ (queue_threshold 5 یا اس سے کم رہنا چاہیے) |
- ہر فلیگ نظر آتا ہے اور قابل تبدیلی ہے۔ آپ ویژول انکوڈر کو ان فریز کر سکتے ہیں، state_dropout_prob کو منتقل کر سکتے ہیں، یا ایکشن ہورائزن کو مختصر کر سکتے ہیں۔
- اوپن لوپ پلاٹس مقامی فائلیں ہیں۔ checkpoint-5000 کا checkpoint-20000 کے خلاف فرق کرنا ایک شیل کمانڈ ہے۔
- آپ کسی بھی پلیٹ فارم کے آن لائن رہنے پر انحصار نہیں کرتے، اور چیک پوائنٹ آپ کی ڈسک پر ایک معیاری فارمیٹ میں موجود ہوتا ہے۔
- LIBERO، SimplerEnv اور DROID کے لیے ریپو کی بینچ مارک مثالیں آپ کو اپنے ڈیٹا پر بھروسہ کرنے سے پہلے دوبارہ پیدا کرنے کے لیے معلوم اچھے رن فراہم کرتی ہیں۔
- ماحول زیادہ تر کام ہے۔ FFmpeg ورژن، CUDA_HOME، git-lfs، گیٹڈ بیک بون، torchcodec: ان میں سے کوئی بھی ماڈل کے مسائل نہیں ہیں اور ان میں سے ہر ایک رن کو روک دیتا ہے۔
- v3.0 سے v2.1 کی تبدیلی کے لیے ایک الگ ورچوئل اینوائرمنٹ کی ضرورت ہوتی ہے جس میں اس کا اپنا انسٹالیشن مرحلہ ہوتا ہے، اور یہ آپ کی ڈیٹا سیٹ ڈائریکٹری کو اپنی جگہ پر دوبارہ لکھ دیتا ہے۔
- GPU کرایہ داری ڈیبگنگ شروع کرنے پر بلنگ شروع کرتی ہے، نہ کہ ٹریننگ شروع ہونے پر، اور رن ختم ہونے پر کوئی چیز انسٹنس کو نہیں روکتی۔
- کوئی سیڈ نہ ہونے کا مطلب ہے کہ بٹ بہ بٹ تولید پذیری نہیں، صرف آگمنٹیشن سے 5 سے 6 فیصد رن ٹو رن تغیر کے علاوہ۔
ایک ہی چیک پوائنٹ حاصل کرنے کے دو طریقے
آپ GPU کرائے پر لیتے ہیں اور ہر قدم کے مالک ہوتے ہیں۔ حقیقت پسندانہ طور پر، پہلی بار یہ ایک دوپہر کا کام ہے اور اس کے بعد ہر بار بیس منٹ کا۔
- SO-100 پر lerobot-record کے ساتھ ایپی سوڈز ریکارڈ کریں۔ آپ کو ایک LeRobot v3.0 ڈیٹا سیٹ ملے گا۔
- اسے اپنے ورچوئل انوائرنمنٹ میں scripts/lerobot_conversion/convert_v3_to_v2.py کے ساتھ v2.1 میں تبدیل کریں۔
- meta/modality.json اور ایک Python موڈیلٹی کنفگ لکھیں، جو EmbodimentTag.NEW_EMBODIMENT کے تحت رجسٹرڈ ہو۔
- ایک 80 GB کارڈ کرائے پر لیں، سب ماڈیولز کے ساتھ کلون کریں، uv sync کریں، Hugging Face کے خلاف تصدیق کریں۔
- launch_finetune.py چلائیں، پھر کئی چیک پوائنٹس پر open_loop_eval.py چلائیں، اور ہارڈ ویئر کو چھونے سے پہلے MSE کے رجحان کا موازنہ کریں۔
- انسٹنس کو تباہ کرنے سے پہلے چیک پوائنٹ کو مشین سے ہٹا دیں، پھر بازو تک سرونگ پاتھ بنائیں۔
کرائے کے انسٹنس کو بند کرنے سے پہلے چیک پوائنٹ کو اس سے کاپی کر لیں۔ --save-total-limit 5 کا مطلب یہ بھی ہے کہ تربیت کے آگے بڑھنے کے ساتھ پرانے چیک پوائنٹس حذف ہو جاتے ہیں، لہذا وہ چیک پوائنٹ جو آپ کو 5000 قدم پر چاہیے تھا، 20000 قدم پر موجود نہ ہو۔
یہی کام ایک فارم کے طور پر۔ آپ ماڈل اور ڈیٹا سیٹ کا انتخاب کرتے ہیں، بیک اینڈ مطلوبہ VRAM کے مطابق اسپاٹ مارکیٹ سے GPU کرائے پر لیتا ہے، ٹرینر چلاتا ہے، اور چیک پوائنٹس کو آبجیکٹ اسٹوریج میں لکھتا ہے۔ GR00T N1.7 on SO-100 گائیڈ بالکل یہی امتزاج ہے؛ ٹریننگ میٹرکس میں ہر دوسرا ماڈل اور بازو کا جوڑا شامل ہے، بشمول SO-101 پر GR00T N1.7۔
| groot1.7 ٹرینر کیا بھیجتا ہے | Value |
|---|---|
| بیچ سائز | 32 |
| لرننگ ریٹ | 1e-4 |
| زیادہ سے زیادہ اقدامات | 20000 |
| گریڈینٹ جمع کرنا | 1, and it does take effect for this trainer |
| فارم میں ظاہر ہونے والا اضافی نوب | saveSteps |
| بیس چیک پوائنٹ | nvidia/GR00T-N1.7-3B |
| قبول شدہ ڈیٹا سیٹ فارمیٹ | LeRobot v2.0 or v2.1 |
ڈیٹا سیٹ Hugging Face repo id سے، آپ کی اپنی مشین سے، یا اس سیشن سے آ سکتا ہے جسے آپ نے ڈیسک ٹاپ کلائنٹ کے ساتھ ریکارڈ کیا تھا۔ انفرنس ایک الگ قدم ہے: پلیٹ فارم ایک پوڈ فراہم کرتا ہے جو پالیسی کو سرور کرتا ہے، اور آپ کا مقامی روبوٹ کلائنٹ اس اینڈ پوائنٹ سے بات کرتا ہے۔ پوڈز ایک آئیڈل واچ ڈاگ رکھتے ہیں اور ایک آئیڈل مدت کے بعد خود کو تباہ کر دیتے ہیں، لہذا ایک بھولی ہوئی براؤزر ٹیب رات بھر بل نہیں کرتی۔ اگر آپ کلک نہیں کرنا چاہتے، تو وہی آپریشنز CLI اور MCP سرور پر موجود ہیں۔
GR00T N1.7 اور Pi0.5 یہاں صرف کلاؤڈ پر ہیں؛ صرف SmolVLA اور ACT مقامی طور پر بھی چلتے ہیں۔ v2.1 کی ضرورت بھی ختم نہیں ہوتی، کیونکہ v3.0 ڈیٹا سیٹ کو GR00T لوڈر کے قبول کرنے سے پہلے اسے تبدیل کرنا پڑتا ہے۔ اور کوئی بھی آپ کے لیے modality.json سیمنٹکس نہیں لکھتا: اگر آپ کی کیمرہ کیز یا آپ کی زبان کی کی غلط ہیں، تو وہ دونوں راستوں پر غلط ہیں۔ یہ دیکھنے کے لیے کہ بیک اینڈ آپ کی طرف سے کیا کرتا ہے اور کیا نہیں کرتا، ٹریننگ دستاویزات دیکھیں۔

چیک پوائنٹ کو دوبارہ بازو پر لانا
Isaac-GR00T ZMQ پر ایک سرور-کلائنٹ تقسیم استعمال کرتا ہے۔ پالیسی GPU پر چلتی ہے، اور روبوٹ مشین پر ایک پتلا کلائنٹ مشاہدات بھیجتا ہے اور ایکشن چنکس وصول کرتا ہے۔ SO-100 مثال نقل کرنے کے لیے کافی مکمل ہے: run_gr00t_server.py کو اپنے چیک پوائنٹ اور --embodiment-tag NEW_EMBODIMENT کے ساتھ شروع کریں، پھر روبوٹ کی طرف سیریل پورٹ، روبوٹ آئی ڈی، کیمرہ انڈیکس اور زبان کی ہدایات کے ساتھ eval_so100.py چلائیں۔ اس کمانڈ میں کیمرہ کے نام آپ کے modality.json سے دوستانہ ناموں سے مماثل ہونے چاہئیں، نہ کہ OS ڈیوائس نمبرز سے۔
# GPU side
uv run python gr00t/eval/run_gr00t_server.py \
--model-path /tmp/so100/checkpoint-20000 \
--embodiment-tag NEW_EMBODIMENT \
--device cuda:0 \
--host 0.0.0.0 --port 5555
# robot side, from gr00t/eval/real_robot/SO100
uv run --no-sync python eval_so100.py \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM2 \
--robot.id=orange_follower \
--robot.cameras="{ front: {type: opencv, index_or_path: 6, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30}}" \
--policy_host=localhost --policy_port=5555 \
--lang_instruction="put the cube in the yellow bowl"جب آپ بازو کو دوبارہ وائر کر رہے ہوں: SO-100 Feetech STS3215 بس سرووس کو 7.4 V ریل پر چلاتا ہے۔ انہیں 12 V فراہم کرنا انہیں تباہ کر دیتا ہے، اور یہ ایک آسان غلطی ہے اگر آپ کے پاس LeKiwi بھی ہے، جس کا بیس 12 V پر چلتا ہے جبکہ اس کا بازو نہیں۔ پہلی پاور اپ سے پہلے سپلائی چیک کریں، دھویں کے بعد نہیں۔ SO-100 ہارڈویئر صفحہ اور SO-100 بمقابلہ LeKiwi دیکھیں۔ اگر بازو پاور اپ ہو جاتا ہے لیکن کچھ حرکت نہیں کرتا، تو سروو جواب نہیں دے رہا سے شروع کریں۔
اب پالیسی کہاں چلتی ہے اس کے بارے میں ایماندارانہ حصہ، کیونکہ تربیت اور سرونگ کی ہارڈویئر کہانیاں مختلف ہیں۔ فائن ٹیوننگ کو 40 GB یا اس سے زیادہ کی ضرورت ہوتی ہے۔ انفرنس کو نہیں: README اسے 16 GB یا اس سے زیادہ بتاتا ہے اور RTX 4090 کا واضح طور پر نام لیتا ہے، لہذا آپ کے پاس موجود ایک کارڈ ایک چیک پوائنٹ کو سرو کر سکتا ہے جو اس نے کبھی پیدا نہیں کیا ہوگا۔ یہ فیصلہ کرنے والی چیز کہ پالیسی کتنی جوابدہ محسوس ہوتی ہے وہ VRAM نہیں ہے، بلکہ یہ ہے کہ سرور کہاں واقع ہے۔ AY-Robots پر GR00T N1.7 صرف کلاؤڈ پر ہے، لہذا کنٹرول لوپ ہر ایکشن سٹیپ کے 152 ms کے علاوہ ایک پبلک انٹرنیٹ راؤنڈ ٹرپ ادا کرتا ہے، اور صرف SmolVLA اور ACT مقامی طور پر بھی چلتے ہیں۔ سست پک اینڈ پلیس کے لیے ایک ریموٹ پوڈ قابل برداشت ہے۔ کسی بھی رد عمل والی چیز کے لیے ایسا نہیں ہے: پالیسی اس طرح ہچکچاتی ہے جو بالکل تربیت کی ناکامی کی طرح لگتی ہے لیکن وہ نہیں ہے۔ ACT 20 ms فی ایکشن سٹیپ پر وہ ماڈل ہے جو سب سے سخت لوپ کو برداشت کرتا ہے، SmolVLA 245 ms پر ہے، اور کسی بھی مقدار میں لیٹنسی ٹیوننگ ایک راؤنڈ ٹرپ کو واپس نہیں خرید سکتا جو پہلے ہی خرچ ہو چکا ہے۔ اپنی پہلی پالیسی چلائیں سرونگ سائیڈ کو شروع سے آخر تک بیان کرتا ہے۔
اصل میں کیا غلط ہوتا ہے
- پہلی رن پر GatedRepoError۔ آپ کو nvidia/Cosmos-Reason2-2B تک رسائی نہیں دی گئی ہے، یا آپ نے تصدیق نہیں کی۔ یہ GPU کلاک کے پہلے ہی شروع ہونے کے بعد ہوتا ہے۔
- لوڈ ہونے پر ڈیٹا سیٹ مسترد کر دیا گیا۔ تقریباً ہمیشہ ایک v3.0 ڈیٹا سیٹ ہوتا ہے۔ اسے نیچے تبدیل کریں۔ دیکھیں v3 کے طور پر مسترد شدہ ڈیٹا سیٹ۔
- مختلف بولین ڈائمینشنز کے بارے میں IndexError۔ آپ نے delta_indices کو تبدیل کیا اور اعدادوشمار کو دوبارہ نہیں بنایا۔
- بیچ 32 پر میموری ختم ہو گئی۔ --global-batch-size کو کم کریں اور --gradient-accumulation-steps کو بڑھائیں، یا --num-shards-per-epoch کو کم کریں، جس کی کنفگ واضح طور پر تجویز کرتی ہے جب VRAM محدود ہو۔ دیکھیں ٹریننگ کے دوران میموری ختم ہونا۔
- نقصان کم ہوتا ہے، پالیسی کچھ نہیں کرتی۔ بطور ڈیفالٹ کوئی توثیقی تقسیم نہیں ہے، لہذا ایک صاف ٹریننگ کریو بہت کم ثابت کرتا ہے۔ یہ صفحہ تشخیص کا احاطہ کرتا ہے۔
- آپ کے سیٹ اپ میں کام کرتا ہے اور کہیں اور نہیں۔ ایک چھوٹی ڈیٹا سیٹ کے ساتھ متوقع ہے جو ایک ہی روشنی کی حالت میں فلمایا گیا ہو۔ NVIDIA رنگ جِٹر آگمنٹیشن کے علاوہ مختلف روشنیوں میں 20 سے 50 اقساط کی سفارش کرتا ہے۔ مزید یہاں۔
- گریپر کبھی صحیح طریقے سے بند نہیں ہوتا۔ چیک کریں کہ action_configs میں گریپر ایکشن ABSOLUTE ہے اور بازو کے جوڑ RELATIVE ہیں، اسی ترتیب میں۔ گریپر بند نہیں ہوتا دیگر وجوہات کی فہرست دیتا ہے۔
- ایک کیمرہ ریکارڈنگ کے دوران خاموشی سے بند ہو جاتا ہے۔ قسط پھر بھی محفوظ ہو جاتی ہے اور ویڈیو کی ابھی بھی موجود ہوتی ہے، یہی وجہ ہے کہ یہ مسئلہ خراب ہے۔ کیمرہ کا پتہ نہیں چلا اس کا احاطہ کرتا ہے۔
ناکامی کے طریقوں کا پورا انڈیکس یہاں موجود ہے ۔ اگر آپ کسی ایک ماڈل کو ڈیبگ کرنے کے بجائے ماڈلز کے درمیان انتخاب کر رہے ہیں، اور کے ساتھ منسلک ذرائع کے ساتھ بینچ مارک نمبرز ہیں، اور وہ موازنہ ہے جس کی زیادہ تر لوگوں کو درحقیقت ضرورت ہے، کیونکہ یہ ایک ایسے ماڈل کے درمیان انتخاب ہے جسے آپ اپنی میز کے نیچے کارڈ پر تربیت دے سکتے ہیں اور ایک ایسا ماڈل جسے آپ کو فائن ٹیون کرنے کے لیے 80 GB نوڈ کرایہ پر لینا پڑتا ہے۔ ان ماڈلز کے ایسے برتاؤ کی وجوہات کے پس منظر کے لیے، اور پہلے پڑھنے کے قابل ہیں۔ اور اگر آپ کے پاس ابھی تک بازو نہیں ہے، بغیر کسی سائن اپ کے ایک فزیکل SO-100 کو سٹریم کرتا ہے۔
GR00T N1.7 کو فائن ٹیون کرنے سے پہلے مجھے کتنی اقساط کی ضرورت ہے؟▾
AY-Robots groot1.7 ٹرینر کے لیے 50 اقساط کی ایک سخت حد مقرر کرتا ہے۔ NVIDIA کی اپنی FAQ زیادہ مطالبہ کرتی ہے: ایک مقررہ مقام پر سادہ پک اینڈ پلیس کے لیے تقریباً 100 ٹراجیکٹریز، پیچیدہ یا کثیر مرحلہ مناظر کے لیے 500 یا اس سے زیادہ، اور عمدہ ہیرا پھیری کے لیے 100 سے 500۔ 50 سے کم پر آپ تقریباً ہمیشہ ہائپر پیرامیٹرز کو ٹیون کرنے کے بجائے زیادہ ڈیٹا ریکارڈ کرنا بہتر سمجھتے ہیں۔ اگر اس کے بعد کامیابی مستحکم ہو جاتی ہے، تو NVIDIA HG-DAgger کی سفارش کرتا ہے: پالیسی چلائیں، جب یہ ناکام ہو تو مداخلت کریں، اور ان اصلاحات کو ڈیٹا سیٹ میں شامل کریں۔
میرا ڈیٹا سیٹ لوڈ ہونے میں کیوں ناکام ہوتا ہے، اور میں کیسے بتاؤں کہ یہ کون سا ورژن ہے؟▾
meta/info.json کھولیں اور codebase_version پڑھیں۔ LeRobot کا مین پر موجودہ CODEBASE_VERSION v3.0 ہے، لہذا حالیہ ٹول چین کے ساتھ ریکارڈ کیا گیا کوئی بھی چیز v3.0 ہے، اور GR00T لوڈر v2 کی توقع کرتا ہے۔ Isaac-GR00T ریپو سے scripts/lerobot_conversion/convert_v3_to_v2.py کے ساتھ تبدیل کریں، جو تبدیل شدہ ڈیٹا سیٹ میں codebase_version: v2.1 لکھتا ہے۔ یہ اسکرپٹ اپنے ورچوئل اینوائرمنٹ میں چلتا ہے کیونکہ اسے GR00T پنز سے مختلف lerobot ورژن کی ضرورت ہوتی ہے۔
کیا میں RTX 4090 پر GR00T N1.7 کو فائن ٹیون کر سکتا ہوں؟▾
نہیں۔ NVIDIA فائن ٹیوننگ کے لیے 40 GB یا اس سے زیادہ VRAM کی سفارش کرتا ہے اور H100 یا L40 نوڈز کا نام لیتا ہے؛ دیگر کارڈز کام کرتے ہیں لیکن بہت زیادہ وقت لیتے ہیں۔ ایک 4090 میں 24 GB ہے۔ AY-Robots اسی وجہ سے GR00T N1.7 صرف A100 80 GB اور H100 80 GB ٹیر پر پیش کرتا ہے۔ انفرنس ایک مختلف کہانی ہے: ماڈل کو سرو کرنے کے لیے 16 GB کافی ہے، لہذا ایک 4090 ایک ایسی پالیسی چلا سکتا ہے جسے وہ تربیت نہیں دے سکتا۔ اگر آپ ایک VLA چاہتے ہیں جسے آپ 24 GB پر تربیت دے سکتے ہیں، تو وہ تقریباً 450 M پیرامیٹرز پر SmolVLA یا تقریباً 80 M پر ACT ہے۔
ایک جیسے فلیگز کے ساتھ دو رن مختلف چیک پوائنٹس کیوں دیتے ہیں؟▾
کیونکہ launch_finetune.py میں کوئی سیڈ نہیں ہے۔ یہ ایک ڈیٹا کلاس سے تیار کردہ ایک ٹائرو CLI ہے جس میں کوئی سیڈ فیلڈ نہیں ہے، لہذا کوئی بھی چیز RNG کو پن نہیں کرتی۔ ریپو الگ سے غیر متعین امیج آگمنٹیشن کی وجہ سے رن کے درمیان 5 سے 6 فیصد فرق نوٹ کرتا ہے۔ اگر دوبارہ پیدا کرنے کی صلاحیت اہمیت رکھتی ہے، تو اس کے بجائے LeRobot روٹ استعمال کریں: lerobot-train --seed لیتا ہے اور شائع شدہ GR00T ریسیپی --seed=42 پاس کرتی ہے۔
کیا مجھے Isaac-GR00T استعمال کرنا چاہیے یا lerobot-train؟▾
Isaac-GR00T استعمال کریں اگر آپ ریفرنس امپلیمینٹیشن، ایکشن ریپریزنٹیشن پر فی کی کنٹرول، TensorRT ایکسپورٹ، یا اپنے ڈیٹا پر بھروسہ کرنے سے پہلے بینچ مارک مثالوں کو دوبارہ تیار کرنا چاہتے ہیں۔ lerobot-train استعمال کریں اگر آپ کا ڈیٹا سیٹ پہلے ہی LeRobot v3.0 ہے اور آپ اسے تبدیل نہیں کرنا چاہتے، اگر آپ کو سیڈ چاہیے، یا اگر آپ کا باقی اسٹیک پہلے ہی LeRobot ہے۔ دونوں ایک ہی nvidia/GR00T-N1.7-3B ویٹس کو فائن ٹیون کرتے ہیں۔ نوٹ کریں کہ LeRobot نے GR00T N1.5 سپورٹ مکمل طور پر ختم کر دیا ہے: N1.5 چیک پوائنٹس کو مائیگریشن نوٹ کے ساتھ مسترد کر دیا جاتا ہے، اور آپ کو انہیں استعمال کرتے رہنے کے لیے lerobot==0.5.1 کو پن کرنا ہوگا۔
کیا مجھے فرنٹ کیمرے کے ساتھ کلائی کے کیمرے کی بھی واقعی ضرورت ہے؟▾
شپ شدہ SO-100 کنفیگریشن دونوں کا استعمال کرتی ہے، اور modality.json فرنٹ اور کلائی کو الگ الگ ویڈیو کیز کے طور پر نقشہ بناتا ہے۔ آپ ایک کیمرے کے ساتھ تربیت دے سکتے ہیں، اور ماڈل کارڈ کی لیٹنسی ٹیبل ایک کیمرے کے ساتھ ماپی جاتی ہے، لیکن کلائی کا منظر ہی وہ ہے جو پالیسی کو رابطے کے لمحے گریپر کے بارے میں قابل استعمال معلومات فراہم کرتا ہے۔ اگر آپ کے رول آؤٹس میں گریپر غلط وقت پر بند ہوتا ہے، تو ایک گمشدہ یا غلط طریقے سے نشانہ بنایا گیا کلائی کا کیمرہ پہلی چیزوں میں سے ایک ہے جسے چیک کرنا چاہیے۔
اپنے SO-100 پر GR00T N1.7 کو ماحول بنانے سے پہلے فائن ٹیون کریں
ایک فارم میں ماڈل، ڈیٹا سیٹ اور ہائپر پیرامیٹرز کا انتخاب کریں۔ بیک اینڈ اسپاٹ مارکیٹ پر ایک A100 80 GB یا H100 کرایہ پر لیتا ہے، ٹرینر کو بیچ 32، لرننگ ریٹ 1e-4 اور 20000 مراحل کے ساتھ چلاتا ہے، اور چیک پوائنٹس کو آبجیکٹ اسٹوریج میں لکھتا ہے۔ تقریباً 4 سے 12 USD فی رن۔
GR00T N1.7 ٹریننگ گائیڈ کھولیںSources
- NVIDIA Isaac-GR00T repository README, N1.7 main branch
- Isaac-GR00T: Fine-tune on Custom Embodiments (NEW_EMBODIMENT)
- Isaac-GR00T: Finetuning Models for the SO100/SO101 Robot
- Isaac-GR00T: Robot Data Preparation Guide, the GR00T LeRobot format
- Isaac-GR00T: modality config and ActionConfig reference
- Isaac-GR00T: Policy API Guide and the embodiment tag list
- Isaac-GR00T: FinetuneConfig dataclass with every CLI default
- Isaac-GR00T: the shared finetune launcher wrapper
- GR00T N1.7 FAQ: data volume, augmentation and deployment
- nvidia/GR00T-N1.7-3B model card, including the inference timing table
- nvidia/Cosmos-Reason2-2B, the gated VLM backbone used by N1.7
- GR00T N1: An Open Foundation Model for Generalist Humanoid Robots
- NVIDIA Isaac GR00T N1.7: Open Reasoning VLA Model for Humanoid Robots
- LeRobot: GR00T Policy, the lerobot-train recipe
- LeRobot: Imitation Learning on Real-World Robots (lerobot-record, lerobot-train)
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started