SO-100 بازو پر GR00T N1.7 کی تربیت کے لیے AY-Robots کا گائیڈ صفحہ، جس میں مطلوبہ GPU ٹیر، ڈیٹا سیٹ فارمیٹ اور ٹرینر کی ڈیفالٹس دکھائی گئی ہیں۔
GR00T N1.7SO-100فائن ٹیوننگLeRobotVLA

اپنے SO-100 ڈیٹا سیٹ پر GR00T N1.7 کو تربیت کیسے دیں

AY-Robots ResearchAugust 23, 202628 min پڑھنے کا وقت

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 اس بات کا احاطہ کرتا ہے کہ آیا اپ گریڈ آپ کی پائپ لائن کو دوبارہ بنانے کا جواز پیش کرتا ہے۔

PropertyValueWhere it comes from
پیرامیٹرز3,000,000,000Hugging Face model card
ویژن-لینگویج بیک بونnvidia/Cosmos-Reason2-2B (Qwen3-VL), gated on Hugging Facerepo 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.0Isaac-GR00T repository
ویٹس لائسنسNVIDIA Open Model License Agreementmodel card
لیٹنسی، H100 80 GB، PyTorch eager، 4 ڈینوائزنگ مراحل، 1 کیمرہ85.8 ms end to end, 11.7 Hzmodel card timing table
وہی ہارڈویئر، TensorRT مکمل پائپ لائن27.9 ms end to end, 35.9 Hzmodel card timing table
AY-Robots کی طرف سے اس کے پیش کردہ GR00T N1.7 کے لیے لیٹنسی152 ms per action stepAY-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 انہیں ساتھ ساتھ پیش کرتے ہیں۔

AY-Robots کا GR00T N1.7 ماڈل صفحہ پیرامیٹر کی گنتی، GPU ٹیر، انفرنس لیٹنسی اور ماڈل کی بیان کردہ طاقتوں اور حدود کو دکھا رہا ہے۔
The /policies/groot-n1-7 صفحہ وہی تفصیلات کی پٹی رکھتا ہے جو آپ بصورت دیگر ماڈل کارڈ اور ریپو README سے دستی طور پر جمع کرتے۔

کچھ بھی ٹائپ کرنے سے پہلے رن کو کیا درکار ہے۔

ضرورتفائن ٹیوننگانفرنس
VRAM، NVIDIA رہنمائی40 GB یا اس سے زیادہ، H100 یا L40 تجویز کردہ16 GB یا اس سے زیادہ، ایک RTX 4090 کام کرتا ہے
dGPU پر Python اور CUDA3.12 اور CUDA 12.83.12 اور CUDA 12.8
ویڈیو بیک اینڈtorchcodec 0.8.0، صرف FFmpeg 4 سے 7وہی
ڈیٹا سیٹ فارمیٹLeRobot v2 علاوہ meta/modality.jsonقابل اطلاق نہیں
Hugging Face تک رسائیnvidia/Cosmos-Reason2-2B کے لیے منظور شدہوہی
دیگر ٹولنگgit-lfs اور uvuv
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 پارکیٹ فائلیں اور کیمرہ سٹریمز لکھتا ہے۔ اگر کیلیبریشن درست نہیں ہے، تو آپ کے ڈیٹا سیٹ میں جوائنٹ کی قدریں اس روبوٹ سے تھوڑا مختلف روبوٹ کی وضاحت کرتی ہیں جو بعد میں پالیسی کو نافذ کرے گا، اور کوئی بھی تربیت اسے ٹھیک نہیں کر سکتی۔

bash
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=true
موجودہ LeRobot پر lerobot-record۔ ایپی سوڈ کی لمبائی 60 s اور ری سیٹ کا وقت 60 s پر ڈیفالٹ ہوتا ہے۔ so100_follower اور so101_follower دونوں ایک ہی LeRobot config class کے خلاف رجسٹرڈ ہیں، یہی وجہ ہے کہ Isaac-GR00T SO100 مثال so101 نام استعمال کرتی ہے؛ دونوں SO-100 پر کام کرتے ہیں۔ کیمرے کے وہ نام جو آپ یہاں منتخب کرتے ہیں (front, wrist) وہی نام ہیں جو modality.json میں دوبارہ ظاہر ہونے چاہئیں۔

LeRobot کا اپنا مشورہ یہ ہے کہ کم از کم 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 ڈیٹا سیٹ کی لغت کا اندراج بتاتا ہے کہ اس کے اندر اصل میں کیا ہے۔

bash
# 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
کنورٹر --repo-id، ایک اختیاری --root، اور --force-conversion لیتا ہے، جو کسی بھی موجودہ مقامی سنیپ شاٹ کو حذف کرتا ہے اور اسے دوبارہ ڈاؤن لوڈ کرتا ہے۔ یہ codebase_version: v2.1 کو meta/info.json میں لکھتا ہے۔
تبدیلی موجودہ جگہ پر اوور رائٹ کرتی ہے

اگر 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./، اور ایک اضافی فائل جو معیاری LeRobot کے پاس نہیں ہے۔ یہ اضافی فائل ہی ہے جہاں زیادہ تر باقی ناکامیاں موجود ہیں۔

مرحلہ 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 کے لیے ریپوزٹری میں موجود فائل یہاں لفظ بہ لفظ دی گئی ہے۔

json
{
  "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"
    }
  }
}
examples/SO100/modality.json۔ انڈیکس صفر سے شروع ہوتے ہیں اور پائتھن سلائسنگ کی پیروی کرتے ہیں، لہذا single_arm [0:5] ہے اور gripper [5:6] ہے۔

اسے اپنے تبدیل شدہ ڈیٹاسیٹ میں کاپی کریں meta/modality.json اور ویڈیو کیز کو اس نام سے تبدیل کریں جو آپ کے کیمروں کا اصل نام ہے۔ اگر آپ نے ایک ہی اوور ہیڈ کیمرے سے ریکارڈ کیا ہے جس کا نام top ہے، تو original_key ہے observation.images.top اور دوستانہ نام وہ ہے جس کا آپ کا ڈیٹا کنفگ حوالہ دے گا۔ دونوں کو متفق ہونا چاہیے، اور ان میں سے کوئی بھی آپ کے لیے دوسرے کو چیک نہیں کرتا۔ زبان کی تشریح بدتر ہے، کیونکہ ایک ہی کی تین جگہوں پر ظاہر ہونی چاہیے۔

پرتفائلریپو میں استعمال شدہ SO-100 فارم
پارکیٹ کالمdata/chunk-*/episode_*.parquetannotation.human.task_description
modality.json کیmeta/modality.json, under "annotation", without the annotation. prefixhuman.task_description
ڈیٹا کنفگ میں modality_keysyour so100_config.pyannotation.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 کنفگ پانچ بازو کے جوڑوں کی پیش گوئی کرتی ہے نسبتی موجودہ حالت سے ڈیلٹا کے طور پر اور گرپر کو ایک مطلق ہدف کی پوزیشن کے طور پر، کیونکہ ایک بائنری کھلے یا بند سگنل ڈیلٹا کے بجائے ہدف کے طور پر بہتر کام کرتا ہے۔

python
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)
examples/SO100/so100_config.py، ضروریات کے مطابق مختصر کیا گیا۔ NON_EEF کا مطلب جوائنٹ اسپیس ہے؛ EEF کو x, y, z کے نو جہتی ویکٹر کے علاوہ 6D گردش کی توقع ہوگی۔

یہاں دو تفصیلات ایسی ہیں جو اگر آپ کو معلوم نہ ہوں تو آپ کا ایک دن ضائع کر سکتی ہیں۔ پہلی، action_configs پوزیشنل ہے: دستاویزات میں اسی لمبائی اور اسی ترتیب کی ضرورت ہوتی ہے جو modality_keys کی ہوتی ہے، اور وہ اسے غلط کرنے کے نتائج کے بارے میں واضح ہیں، جس کا مطلب ہے کہ غلط نمائندگی خاموشی سے لاگو ہو جاتی ہے۔ آپ کا گرپر ڈیلٹا کے طور پر تربیت یافتہ ہوتا ہے اور آپ کا بازو ایک مطلق ہدف کے طور پر، اور کوئی غلطی کا پیغام نہیں ہوتا۔ دوسری، register_modality_config اس بات کی تصدیق کرتا ہے کہ ٹیگ پہلے سے رجسٹرڈ نہیں ہے، لہذا اسی پائتھن پروسیس میں دوسری NEW_EMBODIMENT کنفگ Embodiment tag ... already registered کے ساتھ ختم ہو جاتی ہے۔ آپ ان میں سے دو کو ایک ہی اسکرپٹ میں امپورٹ نہیں کر سکتے۔ ایک تیسرا اصول بعد میں، تعیناتی کے وقت نافذ کیا جاتا ہے: ایکشن delta_indices صفر سے شروع ہونے والی متصل رینج ہونی چاہیے۔ ایک سپارس ونڈو جیسے [0, 4, 8] کو مسترد کر دیا جاتا ہے، کیونکہ ہر چیز جو نیچے کی طرف ہے وہ پیش گوئی شدہ چنک کو خطی طور پر انڈیکس کرتی ہے اور بصورت دیگر غلط قطاروں کو عمل میں لائے گی۔

delta_indices کو تبدیل کریں اور آپ کو اعداد و شمار کو دوبارہ تیار کرنا ہوگا۔

نارملائزیشن کے اعداد و شمار، خاص طور پر 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 کو دوبارہ توثیق کر رہا ہے جو پہلے سے کیشڈ ہے، اور اس میں دو یا تین سیکنڈ لگتے ہیں۔

  1. 1
    git-lfs انسٹال کریں، پھر سب ماڈیولز کے ساتھ کلون کریں

    git-lfs لازمی ہے، اختیاری نہیں۔ اس کے بغیر demo_data/ میں موجود parquet فائلیں پوائنٹر سٹبز کے طور پر ڈاؤن لوڈ ہوتی ہیں، اور ڈیمو رن ایک ایسے ڈیٹا سیٹ پر ناکام ہو جاتا ہے جو فائل لسٹنگ میں موجود نظر آتا ہے۔

    bash
    sudo apt install git-lfs && git lfs install
    git clone --recurse-submodules https://github.com/NVIDIA/Isaac-GR00T
    cd Isaac-GR00T
  2. 2
    uv انسٹال کریں اور ماحول کو ہم آہنگ کریں

    ڈیفالٹ انسٹالیشن GPU کی انحصاریاں بشمول flash-attn اور TensorRT کو کھینچتی ہے۔ ایک تازہ A100 یا H100 امیج پر یہ سب سے طویل واحد مرحلہ ہے، لہذا اسے کسی اور چیز پر توجہ دینے سے پہلے کریں۔

    bash
    curl -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')"
  3. 3
    Hugging Face کے خلاف تصدیق کریں

    پہلی ٹریننگ شروع کرنے سے پہلے یہ کریں، نہ کہ آٹھ منٹ بعد ناکام ہونے پر۔

    bash
    uv run huggingface-cli login   # or: export HF_TOKEN=<your_token>
  4. 4
    شپ کیے گئے SO-100 ڈیمو ڈیٹا پر صحت کی جانچ

    اپنی ریکارڈنگ کو چھونے سے پہلے، demo_data/cube_to_bowl_5 پر 2000 مراحل چلائیں۔ یہ پانچ ایپی سوڈز ہیں، یہ تیزی سے مکمل ہوتا ہے، اور یہ آپ کے ڈیٹا کے بجائے ماحول کو ثابت کرتا ہے۔ اگر یہ رن ناکام ہو جاتا ہے، تو آپ اپنے ڈیٹا سیٹ کے ساتھ جو کچھ بھی کریں گے وہ مدد نہیں کرے گا۔

    bash
    CUDA_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 مثال میں شامل نہیں ہیں۔ یہ تنگ معنوں میں ہے: لینگویج بیک بون اور ویژول انکوڈر منجمد رہتے ہیں، اور جو تربیت پاتا ہے وہ پروجیکٹر اور ڈفیوژن ایکشن ہیڈ ہے۔

bash
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
ایک GPU۔ آٹھ کارڈز کے لیے، لانچر کو uv run torchrun --nproc_per_node=8 --master_port=29500 سے تبدیل کریں اور --num-gpus 8 سیٹ کریں۔ uv run torchrun استعمال کریں، نہ کہ صرف torchrun، ورنہ آپ کو غلط ماحول ملے گا۔
فلیگFinetuneConfig میں ڈیفالٹیہ کیا کرتا ہے
--global-batch-size64گریڈینٹ ایکومولیشن سے پہلے تمام GPUs پر کل بیچ۔ بھیجی گئی مثالیں 32 استعمال کرتی ہیں۔
--learning-rate1e-4وہی قدر جو AY-Robots اپنے groot1.7 ٹرینر کے لیے بھیجتا ہے۔
--max-steps10000کل آپٹیمائزر سٹیپس۔ examples/finetune.sh ریپر بھی 10000 پر ڈیفالٹ کرتا ہے۔
--gradient-accumulation-steps1مؤثر بیچ کو ضرب دیتا ہے۔ 1 سے اوپر کی قدریں ایک وارننگ جاری کرتی ہیں جو آپ کو جمع شدہ سائز بتاتی ہے۔
--save-steps and --save-total-limit1000 and 5چیک پوائنٹ کی فریکوئنسی، اور کتنے رکھے جاتے ہیں۔ پرانے والے حذف کر دیے جاتے ہیں۔
--weight-decay and --warmup-ratio1e-5 and 0.05examples/finetune.sh کے ذریعے بھی واضح طور پر سیٹ کیا گیا ہے۔
--state-dropout-prob0.2 in the CLI, 0.8 in the model configتربیت کے دوران پروپریوسیپٹیو حالت کو بے ترتیب طور پر گراتا ہے۔ اگر آپ کا کام حالت پر منحصر ہے تو اسے کم کریں۔
--tune-llm and --tune-visualFalse and Falseبیک بون ڈیفالٹ کے طور پر منجمد رہتا ہے۔
--tune-projector and --tune-diffusion-modelTrue and Trueپروجیکٹر اور ڈفیوژن ایکشن ہیڈ ہی اصل میں تربیت پاتے ہیں۔
--use-percentilesTrueخام کم از کم اور زیادہ سے زیادہ کے بجائے q01 اور q99 کے ساتھ نارملائز کریں۔
--dataloader-num-workers2لوڈر ڈیزائن کے لحاظ سے CPU پر مبنی ہے۔ مثالیں اسے 4 تک بڑھاتی ہیں۔
--seeddoes not existاس CLI پر کوئی سیڈ فلیگ موجود نہیں ہے۔

وہ آخری قطار کوئی ٹائپو نہیں ہے۔ launch_finetune.py ایک tyro CLI ہے جو ایک dataclass سے تیار کیا گیا ہے، اور اس dataclass میں کوئی seed فیلڈ نہیں ہے۔ README میں الگ سے بتایا گیا ہے کہ غیر حتمی تصویری اضافہ کی وجہ سے رن کے درمیان 5 سے 6 فیصد فرق ہوتا ہے۔ ایک جیسے فلیگز کے ساتھ دو رن ایک جیسے چیک پوائنٹس پیدا نہیں کریں گے، جو اس وقت بہت اہمیت رکھتا ہے جب آپ یہ فیصلہ کرنے کی کوشش کر رہے ہوں کہ آیا ہائپر پیرامیٹر کی تبدیلی نے مدد کی یا آپ خوش قسمت تھے۔ موازنہ کے لیے، lerobot کا اپنا ٹرینر seed 1000 پر ڈیفالٹ کرتا ہے، اور LeRobot GR00T کی ترکیب --seed=42 واضح طور پر پاس کرتی ہے۔

تصدیق بطور ڈیفالٹ بند ہے، اور دستاویزی فلیگ اس CLI پر موجود نہیں ہے

فائن ٹیوننگ 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.7A100 80 GB or H100 80 GB3 to 6 hours4 to 12 USD50
GR00T N1.5A100 80 GB or H100 80 GB3 to 6 hours4 to 12 USD50
Pi0.5A100 80 GB or H100 80 GB3 to 6 hours4 to 12 USD50
SmolVLARTX 4090 or any 24 GB card2 to 5 hours1 to 3 USD30
ACTRTX 4090 or any 24 GB card2 to 5 hours1 to 3 USD50

50-ایپی سوڈ کی کم از کم حد ایک فلور ہے، ہدف نہیں۔ NVIDIA کی اپنی FAQ زیادہ تقاضا کرتی ہے: ایک سادہ فکسڈ لوکیشن پک اینڈ پلیس کے لیے تقریباً 100 ٹراجیکٹریز، پیچیدہ یا کثیر مرحلہ مناظر کے لیے 500 یا اس سے زیادہ، اور عمدہ ہیرا پھیری کے لیے 100 سے 500۔ اگر آپ 20 ایپی سوڈز پر ہیں، تو شام کو ٹیوننگ کرنے کے بجائے دوپہر کو ریکارڈنگ میں گزاریں۔ ڈیٹا اکٹھا کرنے کی گائیڈ بتاتی ہے کہ ایک مفید ایپی سوڈ کو ضائع شدہ ایپی سوڈ سے کیا چیز الگ کرتی ہے، اپنا پہلا ڈیٹا سیٹ ریکارڈ کریں اس کا مختصر ورژن ہے، اور SO-100 ڈیٹا اکٹھا کرنا بازو کے لیے مخصوص ہے۔

The AY-Robots training guide for GR00T N1.7 on the SO-100, showing the spec strip with GPU tier, required dataset format and the trainer defaults
The /train/groot-n1-7-on-so-100 guide leads with the facts you would otherwise reconstruct by hand: GPU tier, dataset format, and the exact defaults the trainer sends.

مرحلہ 6: بازو کو چھونے سے پہلے اوپن لوپ تشخیص

تازہ چیک پوائنٹ کو کسی فزیکل بازو پر یہ جاننے کے لیے نہ لگائیں کہ آیا تربیت نے کام کیا ہے۔ پہلے اوپن-لوپ ایویلویشن چلائیں۔ یہ ایک ریکارڈ شدہ ایپی سوڈ کو دوبارہ چلاتا ہے، ماڈل سے ہر قدم پر کارروائیوں کا مطالبہ کرتا ہے، اور MSE اور MAE کے ساتھ پیش گوئی کو زمینی حقیقت کے خلاف پلاٹ کرتا ہے۔ اس پر کوئی لاگت نہیں آتی اور یہ مراحل 2 اور 3 سے نقشہ سازی کی غلطیوں کو پکڑ لیتا ہے۔

bash
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
پلاٹس /tmp/open_loop_eval/traj_<id>.jpeg میں محفوظ ہوتے ہیں جب تک کہ آپ --save-plot-path پاس نہ کریں۔ ڈیفالٹس: --execution-horizon 16, --steps 200, --denoising-steps 4, --traj-ids 0.

ریپوزٹری جان بوجھ کر کسٹم ڈیٹا کے لیے ہدف MSE شائع کرنے سے انکار کرتی ہے، اور یہ ایک درست فیصلہ ہے: یہ تعداد آپ کے ایکشن یونٹس، آپ کے کام اور آپ کے ڈیٹا سیٹ کے سائز پر منحصر ہے، لہذا کسی اور کے بازو سے کاپی کی گئی حد کا کوئی مطلب نہیں ہے۔ جو چیز معنی خیز ہے وہ رجحان ہے۔ یہ وہ ریفرنس رن ہے جسے ریپو ایک سنگل H100 پر پانچ ایپی سوڈ ڈیمو ڈیٹا سیٹ اور 2000 مراحل کے ساتھ دستاویز کرتا ہے۔

چیک پوائنٹٹرایج 0 پر اوسط MSEٹرایج 0 پر اوسط MAE
50087.55.63
100025.43.30
150013.22.18
200010.01.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 کو شائع ہوا تھا۔

bash
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
LeRobot-native GR00T N1.7 ریسیپی۔ relative_exclude_joints پر غور کریں: گریپر کو نسبتی اعمال سے خارج کر دیا گیا ہے، جو کہ وہی فیصلہ ہے جو so100_config.py ActionRepresentation.ABSOLUTE کے ساتھ کرتا ہے۔
پہلوIsaac-GR00T launch_finetune.pylerobot-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.pylerobot-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 کرائے پر لیتے ہیں اور ہر قدم کے مالک ہوتے ہیں۔ حقیقت پسندانہ طور پر، پہلی بار یہ ایک دوپہر کا کام ہے اور اس کے بعد ہر بار بیس منٹ کا۔

  1. SO-100 پر lerobot-record کے ساتھ ایپی سوڈز ریکارڈ کریں۔ آپ کو ایک LeRobot v3.0 ڈیٹا سیٹ ملے گا۔
  2. اسے اپنے ورچوئل انوائرنمنٹ میں scripts/lerobot_conversion/convert_v3_to_v2.py کے ساتھ v2.1 میں تبدیل کریں۔
  3. meta/modality.json اور ایک Python موڈیلٹی کنفگ لکھیں، جو EmbodimentTag.NEW_EMBODIMENT کے تحت رجسٹرڈ ہو۔
  4. ایک 80 GB کارڈ کرائے پر لیں، سب ماڈیولز کے ساتھ کلون کریں، uv sync کریں، Hugging Face کے خلاف تصدیق کریں۔
  5. launch_finetune.py چلائیں، پھر کئی چیک پوائنٹس پر open_loop_eval.py چلائیں، اور ہارڈ ویئر کو چھونے سے پہلے MSE کے رجحان کا موازنہ کریں۔
  6. انسٹنس کو تباہ کرنے سے پہلے چیک پوائنٹ کو مشین سے ہٹا دیں، پھر بازو تک سرونگ پاتھ بنائیں۔
وہ قدم جو ہر کوئی بھول جاتا ہے

کرائے کے انسٹنس کو بند کرنے سے پہلے چیک پوائنٹ کو اس سے کاپی کر لیں۔ --save-total-limit 5 کا مطلب یہ بھی ہے کہ تربیت کے آگے بڑھنے کے ساتھ پرانے چیک پوائنٹس حذف ہو جاتے ہیں، لہذا وہ چیک پوائنٹ جو آپ کو 5000 قدم پر چاہیے تھا، 20000 قدم پر موجود نہ ہو۔

AY-Robots کی تربیتی میٹرکس جس میں پانچ پالیسی ماڈلز قطاروں کے طور پر اور چار روبوٹ بازو کالموں کے طور پر ہیں، ہر سیل ایک مخصوص تربیتی گائیڈ سے منسلک ہے۔
The /train matrix: پانچ ماڈلز چار بازوؤں کے خلاف۔ GR00T N1.7 کی قطار میں SO-101، Koch v1.1 اور LeKiwi بھی شامل ہیں۔

چیک پوائنٹ کو دوبارہ بازو پر لانا

Isaac-GR00T ZMQ پر ایک سرور-کلائنٹ تقسیم استعمال کرتا ہے۔ پالیسی GPU پر چلتی ہے، اور روبوٹ مشین پر ایک پتلا کلائنٹ مشاہدات بھیجتا ہے اور ایکشن چنکس وصول کرتا ہے۔ SO-100 مثال نقل کرنے کے لیے کافی مکمل ہے: run_gr00t_server.py کو اپنے چیک پوائنٹ اور --embodiment-tag NEW_EMBODIMENT کے ساتھ شروع کریں، پھر روبوٹ کی طرف سیریل پورٹ، روبوٹ آئی ڈی، کیمرہ انڈیکس اور زبان کی ہدایات کے ساتھ eval_so100.py چلائیں۔ اس کمانڈ میں کیمرہ کے نام آپ کے modality.json سے دوستانہ ناموں سے مماثل ہونے چاہئیں، نہ کہ OS ڈیوائس نمبرز سے۔

bash
# 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"
--execution-horizon کنٹرول کرتا ہے کہ دوبارہ منصوبہ بندی سے پہلے پیش گوئی شدہ کتنے اقدامات پر عمل کیا جاتا ہے۔ یہ پالیسی کے action_horizon سے زیادہ نہیں ہونا چاہیے، اور یہ تعداد آپ کی موڈیلٹی کنفگ میں ایکشن delta_indices کی لمبائی ہے، نہ کہ بیس ماڈل کی۔ بھیجی گئی SO-100 کنفگ 16 کی پیش گوئی کرتی ہے، لہذا 16 آپ کی حد ہے؛ بیس nvidia/GR00T-N1.7-3B چیک پوائنٹ 40 کے لیے کنفیگر کیا گیا ہے، اور policy.md واضح طور پر کہتا ہے کہ فائن ٹیونڈ چیک پوائنٹس مختلف ہو سکتے ہیں۔ اگر آپ اس سے تجاوز کرتے ہیں تو آپ کو دونوں نمبروں کا نام بتاتے ہوئے ValueError ملے گا۔ 8 وہ قدر ہے جو دستاویزات ریئل ٹائم تعیناتی کے لیے تجویز کرتی ہیں۔ پرانا فلیگ نام --action-horizon اب بھی کام کرتا ہے لیکن وارننگ دیتا ہے۔
7.4 V، 12 V نہیں

جب آپ بازو کو دوبارہ وائر کر رہے ہوں: 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 ٹریننگ گائیڈ کھولیں

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started