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: पाँच एपिसोड, 30 fps मा 4,148 फ्रेम, पहिले नै LeRobot v2.1 को रूपमा लेखिएको, मिल्दो मोडालिटी कन्फिगरेसन सहित examples/SO100/। यसको meta/info.json ले रिपोर्ट गर्छ robot_type: so101_follower, जुन LeRobot मा so100_follower जस्तै एउटै कन्फिग क्लास हो। त्यो साँच्चै उपयोगी छ, किनभने यसको अर्थ GR00T N1.7 को लागि सन्दर्भ मार्ग छ-डिग्री-अफ-फ्रीडम हबी पाखुरामा मोडेल लेख्ने मानिसहरूले मर्मत गर्छन्। यो सानो पारिएको ह्युमनोइड डेमो होइन, यो उही पाखुरा हो।

नराम्रो खबर भनेको I recorded 60 episodesthe arm does the task बीचको दूरी हो। यस पाइपलाइनमा करिब छ ठाउँहरू छन् जहाँ यो ठूलो आवाजमा भन्दा चुपचाप असफल हुन्छ, र तीमध्ये चार फाइलहरूमा छन् जुन धेरैजसो मानिसहरूले कहिल्यै खोल्दैनन्: meta/modality.json, पाइथन डेटा कन्फिग, meta/relative_stats.json, र डेटासेटको आफ्नै संस्करण स्ट्रिङ। यो गाइडले वास्तविक आदेशहरूसहित म्यानुअल मार्गलाई अन्तदेखि अन्तसम्म देखाउँछ, त्यसपछि AY-Robots मा एउटा फारमको रूपमा उही काम देखाउँछ। तलका सबै कुराहरू 20 अगस्त 2026 (n1.7-release लाइन) सम्मको Isaac-GR00T मुख्य शाखा र 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, A100 80 GB वा H100 टियरमा लगभग 4 देखि 12 USD।

GR00T N1.7 वास्तवमा के हो

GR00T N1.7 एउटा भिजन-भाषा-कार्य मोडेल हो, जुन मूल GR00T N1 पेपर मा वर्णन गरिएको दोहोरो-प्रणाली लेआउटमा आधारित छ: एउटा भिजन-भाषा मोड्युल जसले क्यामेरा र निर्देशन पढ्छ, र एउटा डिफ्युजन ट्रान्सफर्मर जसले त्यसलाई निरन्तर मोटर कमाण्डहरूको एक खण्डमा परिणत गर्छ। N1.7 ले पहिलो आधालाई प्रतिस्थापन गर्यो। N1.6 बाट Eagle ब्याकबोन हटाइएको छ, र यसको सट्टा nvidia/Cosmos-Reason2-2B लाई Qwen3-VL आर्किटेक्चरमा राखिएको छ, र यो मोडेल रोबोट डेटाको अतिरिक्त लगभग 20,000 घण्टाको इगोसेन्ट्रिक मानव भिडियोमा प्रिट्रेन गरिएको थियो। NVIDIA को आफ्नै रिपोर्टले यो संख्या 20,854 घण्टा रहेको बताउँछ र 1k बाट 20k घण्टामा जाँदा औसत कार्य सम्पन्नता दोब्बर भन्दा बढी हुने रिपोर्ट गर्छ।

दोस्रो आधा पनि परिवर्तन भयो, जुन तपाईंको सञ्चालनका लागि महत्त्वपूर्ण छ। एक्शन हेड 32 डिफ्युजन लेयरबाट 16 मा झर्यो, अनुमानित एक्शन चङ्क 16 स्टेपबाट 40 मा बढ्यो, र अधिकतम स्टेट र एक्शन चौडाइ 29 बाट 132 मा गयो। यी तीन संख्याहरू रिपोजिटरी README मा रहेको चेन्जलगबाट आएका हुन्; NVIDIA को आफ्नै लन्च पोस्टले अझै पनि System 1 लाई 32-लेयर DiT को रूपमा वर्णन गर्दछ, त्यसैले जहाँ दुई फरक पर्छन्, तपाईंले क्लोन गर्न लागेको रेपोलाई विश्वास गर्नुहोस्। कार्यहरू पूर्वनिर्धारित रूपमा सापेक्षिक एन्ड-इफेक्टर स्पेसमा व्यक्त गरिन्छ, जुन हालको पोजबाट डेल्टा हुन् न कि निरपेक्ष लक्ष्यहरू, जसले मानव भिडियोबाट सिकेका म्यानिपुलेसन प्रायरहरूलाई रोबोट नियन्त्रणमा स्थानान्तरण गर्न दिन्छ। हेड आफैं एउटा फ्लो-म्याचिङ डिफ्युजन ट्रान्सफर्मर हो, जुन Pi0.5 जस्तै परिवारको हो तर यसको अगाडि फरक ब्याकबोन छ। यदि तपाईं अझै अघिल्लो जेनेरेसनमा हुनुहुन्छ भने, N1.7 बनाम N1.5 ले अपग्रेडले तपाईंको पाइपलाइन पुन: निर्माण गर्न लायक छ कि छैन भनेर बताउँछ।

गुणमानस्रोत
प्यारामिटरहरू3,000,000,000Hugging Face मोडेल कार्ड
भिजन-भाषा ब्याकबोनnvidia/Cosmos-Reason2-2B (Qwen3-VL), Hugging Face मा गेट गरिएकोrepo README
एक्शन हेडफ्लो-म्याचिङ डिफ्युजन ट्रान्सफर्मर, 16 लेयर (N1.6 मा 32 थियो)repo README
अनुमानित कार्य क्षितिजआधार चेकपोइन्टको लागि 40 स्टेप (N1.6 मा 16 थियो)getting_started/policy.md र repo README
अधिकतम स्टेट र एक्शन चौडाइ132 (N1.6 मा 29 थियो)repo README
कोड लाइसेन्सApache 2.0Isaac-GR00T रिपोजिटरी
वेट्स लाइसेन्सNVIDIA Open Model License Agreementमोडेल कार्ड
लेटेंसी, H100 80 GB, PyTorch eager, 4 डिनोइजिङ स्टेप, 1 क्यामेरा85.8 ms एन्ड-टु-एन्ड, 11.7 Hzमोडेल कार्ड टाइमिङ तालिका
उही हार्डवेयर, TensorRT पूर्ण पाइपलाइन27.9 ms एन्ड-टु-एन्ड, 35.9 Hzमोडेल कार्ड टाइमिङ तालिका
AY-Robots ले यसको सेवा गरिएको GR00T N1.7 को लागि उद्धृत गरेको लेटेंसी152 ms प्रति एक्शन स्टेपAY-Robots नीति सूची

ती अन्तिम तीन पङ्क्तिहरूले मानिसहरूले रिपोर्ट गर्ने अधिकांश निराशाको व्याख्या गर्छन्। हेडलाइन 27.9 ms एउटा H100 मा एक क्यामेरा र चार डिनोइजिङ स्टेप्स सहितको TensorRT इन्जिन हो। उही कार्डमा साधारण PyTorch 85.8 ms हो, र मोडेल कार्डले यो अन्तरलाई 3.08x मा राख्छ। कुनै पनि संख्यामा सर्भिङ लेयर, दोस्रो क्यामेरा वा नेटवर्क हप समावेश छैन। AY-Robots ले यसको सेवा गरिएको GR00T N1.7 को लागि उद्धृत गरेको 152 ms प्रति एक्शन स्टेप सर्भिङ लुपमा रहेको संख्या हो, र सार्वजनिक-इन्टरनेट राउन्ड ट्रिप त्यसको माथि बस्छ। यस बारे थप जानकारी अन्त्यमा। अन्य मोडेलहरूसँगको संख्याका लागि, GR00T N1.7 बनाम Pi0.5GR00T N1.7 बनाम SmolVLA ले तिनीहरूलाई सँगै राख्छ।

The AY-Robots model page for GR00T N1.7 showing parameter count, GPU tier, inference latency and the model's stated strengths and limits
The /policies/groot-n1-7 page carries the same spec strip you would otherwise assemble by hand from the model card and the repo README.

तपाईंले केही टाइप गर्नु अघि रनलाई के चाहिन्छ

आवश्यकताफाइन-ट्यूनिङअनुमान
VRAM, NVIDIA मार्गदर्शन40 GB वा सोभन्दा बढी, H100 वा L40 सिफारिस गरिएको16 GB वा सोभन्दा बढी, RTX 4090 ले काम गर्छ
dGPU मा Python र CUDA3.12 and CUDA 12.83.12 and CUDA 12.8
भिडियो ब्याकेन्डtorchcodec 0.8.0, FFmpeg 4 to 7 onlyउही
डेटासेट ढाँचाLeRobot v2 plus meta/modality.jsonलागू हुँदैन
Hugging Face पहुँचapproved for nvidia/Cosmos-Reason2-2Bउही
अन्य उपकरणहरूgit-lfs and uvuv
groot1.7 ट्रेनरको लागि AY-Robots GPU टियरA100 80 GB or 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 निर्यात गर्नुहोस्।

चरण ०: एपिसोडहरू आफैं

तलका सबै कुराले तपाईंले पहिले नै एपिसोडहरू रेकर्ड गरिसक्नुभएको छ भनी मान्दछ। यदि तपाईंले गर्नुभएको छैन भने, त्यो नै वास्तविक पहिलो चरण हो र यसले परिणाम कति राम्रो हुन सक्छ भन्ने निर्धारण गर्दछ, किनभने अनुकरण सिकाइ डेटामा नभएको जानकारी पुन: प्राप्त गर्न सक्दैन। पहिले दुवै हात क्यालिब्रेट गर्नुहोस्, त्यसपछि अनुयायीलाई नेता हात प्रयोग गरेर चलाउनुहोस् जब 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 कन्फिग क्लासमा दर्ता गरिएका छन्, त्यसैले 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 ले आफ्नै pyproject बोक्छ जसले Python 3.10 वा 3.11 माग्छ र lerobot लाई एउटा git कमिटमा पिन गर्छ, जबकि 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, parquet फाइलहरू अन्तर्गत data/chunk-000/, MP4 फाइलहरू अन्तर्गत videos/chunk-000/observation.images./, र एउटा अतिरिक्त फाइल जुन मानक LeRobot मा छैन। त्यो अतिरिक्त फाइलमा बाँकी अधिकांश त्रुटिहरू छन्।

चरण २: 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 मा छन् र parquet फाइलमा कुन इन्डेक्स कुन हो भनी केही भनिएको छैन। 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 कन्फिगले पाँचवटा आर्म जोइन्टहरूलाई RELATIVE हालको अवस्थाबाट डेल्टाको रूपमा र ग्रिपरलाई ABSOLUTE लक्ष्य स्थितिको रूपमा भविष्यवाणी गर्छ, किनभने बाइनरी खुला-वा-बन्द संकेत डेल्टाको सट्टा लक्ष्यको रूपमा राम्रो व्यवहार गर्छ।

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.pydelta_indices मा कुनै पनि परिवर्तन पछि यसलाई चलाउनुहोस्।

चरण 4: वातावरण

N1.7 ले भण्डारलाई युभी र Python 3.12 मा सार्यो। पुरानो कोन्डा प्लस pip install -e . मार्ग अझै README को एक संकुचित खण्डमा अवस्थित छ, तर यसले GPU निर्भरताहरू जस्तै flash-attn र TensorRT लाई म्यानुअल स्थापना आवश्यक हुन सक्छ भनेर चेतावनी दिन्छ। यदि तपाईंसँग नगर्नुको कुनै विशेष कारण छैन भने uv प्रयोग गर्नुहोस्। flash-attn को सन्दर्भमा, एउटा विवरणले भ्रम बचाउँछ: तपाईंले Installing flash-attn प्रत्येक uv run मा छापिएको देख्नुहुनेछ। यो पुनर्निर्माण भइरहेको छैन। uv ले पहिले नै क्यास गरिएको URL-पिन गरिएको व्हीललाई पुन: प्रमाणीकरण गरिरहेको छ, र यसले दुई वा तीन सेकेन्ड लिन्छ।

  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 स्थापना गर्नुहोस् र वातावरण सिंक गर्नुहोस्

    पूर्वनिर्धारित स्थापनाले flash-attn र TensorRT सहित GPU निर्भरताहरू तान्छ। नयाँ 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 उदाहरणले छोडेका वृद्धि (augmentation) र चेकपोइन्टिङ फ्ल्यागहरू पनि समावेश छन्। यो संकीर्ण अर्थमा हो: भाषा ब्याकबोन र भिजुअल एन्कोडर स्थिर रहन्छन्, र जुन तालिम हुन्छ त्यो प्रोजेक्टर र डिफ्युजन एक्शन हेड हो।

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 होइन, अन्यथा तपाईंले गलत वातावरण पाउनुहुनेछ।
FlagFinetuneConfig मा पूर्वनिर्धारितयसले के गर्छ
--global-batch-size64ग्रेडियन्ट सञ्चय (gradient accumulation) अघि सबै GPU हरूमा कुल ब्याच। पठाइएका उदाहरणहरूले 32 प्रयोग गर्छन्।
--learning-rate1e-4AY-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 एउटा डेटाक्लासबाट उत्पन्न भएको टायरो CLI हो, र त्यो डेटाक्लासमा कुनै सीड फिल्ड छैन। README ले गैर-निर्धारित छवि वृद्धि (non-deterministic image augmentation) को कारणले गर्दा रनहरू बीच ५ देखि ६ प्रतिशत भिन्नता रहेको छुट्टै उल्लेख गर्दछ। समान फ्ल्यागहरू भएका दुई रनहरूले समान चेकपोइन्टहरू उत्पादन गर्दैनन्, जुन हाइपरप्यारामिटर परिवर्तनले मद्दत गर्यो वा तपाईं भाग्यमानी हुनुभयो भनेर निर्णय गर्ने प्रयास गर्दा धेरै महत्त्वपूर्ण हुन्छ। तुलनाका लागि, lerobot को आफ्नै ट्रेनरले सीड 1000 मा पूर्वनिर्धारित गर्दछ, र LeRobot GR00T रेसिपीले --seed=42 स्पष्ट रूपमा पास गर्दछ।

प्रमाणीकरण पूर्वनिर्धारित रूपमा बन्द छ, र दस्तावेज गरिएको फ्ल्याग यो CLI मा छैन

फाइन-ट्यूनिङ eval_strategy="no" सँग चल्छ, त्यसैले त्यहाँ कुनै प्रमाणीकरण हानि वक्र (validation loss curve) छैन। तपाईंले प्रशिक्षण हानि (training loss) मात्र पाउनुहुन्छ र अरू केही होइन। नयाँ-इम्बोडिमेन्ट गाइडले तपाईंलाई --eval-strategy steps --eval-steps 500 सँग यसलाई अन गर्न भन्छ, तर त्यो फ्ल्याग launch_finetune.py मा अवस्थित छैन: CLI टायरोद्वारा FinetuneConfig डेटाक्लासबाट उत्पन्न हुन्छ, र eval_strategy, eval_stepseval_batch_size TrainingConfig का फिल्डहरू हुन्। तिनीहरूका पूर्वनिर्धारित मानहरू "no", 5002 हुन्। तिनीहरूलाई पहुँच गर्न, पूर्ण प्रवेश बिन्दु gr00t/experiment/launch_train.py प्रयोग गर्नुहोस्, जहाँ नेस्टेड फ्ल्याग --training.eval-strategy हो। जे भए पनि, आफैंमा घट्दो प्रशिक्षण हानि (training loss) ले सामान्यीकरण (generalization) बारे धेरै कम बताउँछ, जुन हानि घट्छ तर नीतिले केही गर्दैन मा वर्णन गरिएको अवस्था हो।

२००००-चरणको रनको लागत कति हुन्छ

GR00T N1.7 लाई ८० GB कार्ड चाहिन्छ, त्यसैले लागतको प्रश्नको सीमित उत्तर छ। AY-Robots मा groot1.7 ट्रेनर A100 80 GB वा H100 80 GB टियरमा चल्छ, जहाँ एक रनलाई स्पट बजारमा प्रति घण्टा 1.20 देखि 2.00 USD मा ३ देखि ६ घण्टा लाग्छ। पूर्वनिर्धारित २००००-चरणको कामको लागि त्यो लगभग 4 देखि 12 USD हो। मा समान कार्य SmolVLA वा ACT प्रति घण्टा 0.30 देखि 0.60 USD र प्रति रन 1 देखि 3 USD मा २४ GB कार्डमा हुन्छ। त्यो वास्तविक ट्रेड-अफ हो: 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

५०-एपिसोड न्यूनतम एउटा आधार हो, लक्ष्य होइन। NVIDIA को आफ्नै FAQ अझ बढी माग गर्दछ: साधारण निश्चित-स्थान पिक र प्लेसका लागि लगभग १०० ट्र्याजेक्टोरीहरू, जटिल वा बहु-चरण दृश्यहरूका लागि ५०० वा सोभन्दा बढी, र सूक्ष्म हेरफेरका लागि १०० देखि ५००। यदि तपाईंसँग २० एपिसोडहरू छन् भने, साँझ ट्युन गर्नुको सट्टा दिउँसो रेकर्डिङमा खर्च गर्नुहोस्। डाटा सङ्कलन गाइडले उपयोगी एपिसोडलाई खेर गएको एपिसोडबाट के कुराले अलग गर्छ भन्ने कुरा समेट्छ, आफ्नो पहिलो डेटासेट रेकर्ड गर्नुहोस्छोटो संस्करण हो, र SO-100 डाटा सङ्कलनहात-विशेष संस्करण हो।

AY-Robots को GR00T N1.7 लाई SO-100 मा तालिम दिने गाइड, GPU टियर, आवश्यक डेटासेट ढाँचा र ट्रेनरका पूर्वनिर्धारितहरू सहितको स्पेसिफिकेशन स्ट्रिप देखाउँदै।
The /train/groot-n1-7-on-so-100 गाइडले तपाईंले अन्यथा हातले पुन: निर्माण गर्ने तथ्यहरू प्रस्तुत गर्दछ: GPU टियर, डेटासेट ढाँचा, र ट्रेनरले पठाउने सटीक पूर्वनिर्धारितहरू।

चरण 6: तपाईंले पाखुरा छुनु अघि ओपन-लूप मूल्याङ्कन

ताजा चेकपोइन्टलाई तालिमले काम गर्यो कि गरेन भनेर पत्ता लगाउन भौतिक हातमा नराख्नुहोस्। पहिले ओपन-लूप मूल्याङ्कन चलाउनुहोस्। यसले रेकर्ड गरिएको एपिसोडलाई पुन: प्ले गर्छ, प्रत्येक चरणमा कार्यहरूको लागि मोडेललाई सोध्छ, र MSE र MAE सँग ग्राउन्ड ट्रुथ विरुद्ध भविष्यवाणी प्लट गर्छ। यसको कुनै लागत लाग्दैन र यसले चरण २ र ३ बाट म्यापिङ त्रुटिहरू पत्ता लगाउँछ।

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
यदि तपाईंले --save-plot-path पास गर्नुभएन भने प्लटहरू /tmp/open_loop_eval/traj_<id>.jpeg मा जान्छन्। पूर्वनिर्धारितहरू: --execution-horizon 16, --steps 200, --denoising-steps 4, --traj-ids 0।

रिपोजिटरीले जानाजानी अनुकूलन डेटाको लागि लक्षित MSE प्रकाशित गर्न अस्वीकार गर्दछ, र त्यो सही निर्णय हो: संख्या तपाईंको कार्य एकाइहरू, तपाईंको कार्य र तपाईंको डेटासेट आकारमा निर्भर गर्दछ, त्यसैले अरू कसैको हातबाट प्रतिलिपि गरिएको थ्रेसहोल्डको कुनै अर्थ छैन। के अर्थपूर्ण छ त्यो प्रवृत्ति हो। यहाँ एकल H100 मा पाँच-एपिसोड डेमो डेटासेट र 2000 चरणहरूको साथ रिपो कागजातहरूमा सन्दर्भ रन छ।

चेकपोइन्टtraj 0 मा औसत MSEtraj 0 मा औसत MAE
50087.55.63
100025.43.30
150013.22.18
200010.01.76

आकार नै संकेत हो, निरपेक्ष मानहरू होइनन्। त्रुटि निरन्तर घट्नुपर्छ जब प्रशिक्षण चरणहरू जम्मा हुन्छन्। ट्र्याजेक्टरी ० मात्र नभई सबै पाँच प्रशिक्षण एपिसोडहरूमा औसत गर्दा, रेपोको अन्तिम चेकपोइन्टले लगभग 7.5 MSE र 1.5 MAE स्कोर गर्यो, त्यसैले सन्दर्भ रन पनि तपाईंले कुन एपिसोडहरूलाई औसत गर्नुहुन्छ भन्ने आधारमा फरक देखिन्छ। तपाईंले आफ्नो डेटामा कुनै पनि परिवर्तन गर्नु अघि अपरिवर्तित डेमो कमाण्डमा आफ्नै बेसलाइन रेकर्ड गर्नुहोस्: यदि तपाईंले ज्ञात-राम्रो रन पुन: उत्पादन गर्न सक्नुहुन्न भने, तपाईंले सेटअप गल्तीलाई डेटा समस्याबाट छुट्याउन सक्नुहुन्न। भण्डारले सामान्य लक्षणहरूलाई कारणहरूसँग पनि नक्सा गर्दछ, र ती सबै मोडेल बगको सट्टा परिचालन हुन्।

लक्षणसम्भावित कारण
चेकपोइन्टहरूमा MSE समतल वा बढ्दैलर्निङ रेट धेरै कम छ, वा डेटा लोड भइरहेको छैन। --dataset-path र dataloader workers जाँच गर्नुहोस्।
भविष्यवाणी वक्र समतल वा स्थिर छmodality.json कुञ्जीहरू वा --modality-config-path मिल्दैनन्। कार्य कुञ्जीहरू म्याप गरिएका छैनन्।
MSE अत्यधिक, वा प्रशिक्षणको समयमा NaN हानिकार्य र अवस्था सामान्यीकरण। meta/stats र कार्य दायराहरू भौतिक रूपमा सम्भाव्य छन् भनी प्रमाणित गर्नुहोस्।
traj 0 मा राम्रो, राखिएका एपिसोडहरूमा कमजोरडेटाको कमी, बग होइन। पाँच डेमो एपिसोडहरू सामान्यीकरण गर्न सक्दैनन्।

अर्को मार्ग: Isaac-GR00T को सट्टा lerobot-train

LeRobot को हालको संस्करण, 0.6.1 PyPI मा 3 अगस्त 2026 देखि उपलब्ध छ, यसले समान आधारभूत वजनहरूलाई फाइन-ट्यून गर्ने दोस्रो र एकदम फरक तरिका प्रदान गर्दछ। 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-नेटिभ 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 रूपान्तरणका लागि आफ्नै इन्स्टल चरणसहितको छुट्टै virtualenv चाहिन्छ, र यसले तपाईंको डेटासेट डाइरेक्टरीलाई यथास्थानमा पुनःलेखन गर्छ।
  • GPU भाडा डिबगिङ सुरु गर्दा बिलिङ सुरु हुन्छ, तालिम सुरु गर्दा होइन, र रन सकिएपछि कुनै पनि कुराले इन्स्ट्यान्स रोक्दैन।
  • कुनै सीड नहुनुको अर्थ बिट-फर-बिट पुनरुत्पादनशीलता छैन, साथै एक्लै वृद्धिबाट 5 देखि 6 प्रतिशत रन-टु-रन भिन्नता हुन्छ।

एउटै चेकपोइन्ट प्राप्त गर्ने दुई तरिकाहरू

तपाईंले GPU भाडामा लिनुहुन्छ र हरेक चरणको स्वामित्व लिनुहुन्छ। यथार्थमा, यो पहिलो पटक दिउँसोको काम हो र त्यसपछि हरेक पटक बीस मिनेट लाग्छ।

  1. SO-100 मा lerobot-record प्रयोग गरेर एपिसोडहरू रेकर्ड गर्नुहोस्। तपाईंले LeRobot v3.0 डेटासेट प्राप्त गर्नुहुन्छ।
  2. यसलाई यसको आफ्नै virtualenv मा scripts/lerobot_conversion/convert_v3_to_v2.py प्रयोग गरेर v2.1 मा रूपान्तरण गर्नुहोस्।
  3. meta/modality.json र एउटा Python modality कन्फिग लेख्नुहोस्, जुन 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 चरणमा अब नहुन सक्छ।

The AY-Robots training matrix with five policy models as rows and four robot arms as columns, each cell linking to a specific training guide
The /train matrix: five models against four arms. The GR00T N1.7 row also covers the SO-101, Koch v1.1 and 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 भन्दा बढी हुनु हुँदैन, र त्यो संख्या तपाईंको मोडालिटी कन्फिगमा action 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 ले 7.4 V रेलमा Feetech STS3215 बस सर्भोहरू चलाउँछ। तिनीहरूलाई 12 V खुवाउँदा तिनीहरू नष्ट हुन्छन्, र यदि तपाईंसँग LeKiwi पनि छ भने यो सजिलो गल्ती हो, जसको आधार 12 V मा चल्छ जबकि यसको पाखुरा चल्दैन। पहिलो पावर-अप गर्नु अघि आपूर्ति जाँच गर्नुहोस्, धुवाँ पछि होइन। SO-100 हार्डवेयर पृष्ठLeKiwi विरुद्ध SO-100 हेर्नुहोस्। यदि पाखुरा पावर-अप हुन्छ तर केही चल्दैन भने, सर्भो प्रतिक्रिया दिइरहेको छैन बाट सुरु गर्नुपर्छ।

अब नीति कहाँ चल्छ भन्ने बारे इमानदार कुरा, किनभने प्रशिक्षण र सेवाका फरक हार्डवेयर कथाहरू छन्। फाइन-ट्यूनिङलाई 40 GB वा सोभन्दा बढी चाहिन्छ। अनुमानलाई चाहिँदैन: README ले यसलाई 16 GB वा सोभन्दा बढीमा राख्छ र RTX 4090 लाई स्पष्ट रूपमा नाम दिन्छ, त्यसैले तपाईंसँग पहिले नै भएको कार्डले चेकपोइन्ट सेवा गर्न सक्छ जुन यसले कहिल्यै उत्पादन गर्न सक्दैनथ्यो। नीति प्रतिक्रियाशील छ कि छैन भन्ने कुरा VRAM ले निर्णय गर्दैन, यो सर्भर कहाँ बस्छ भन्ने कुरा हो। AY-Robots मा GR00T N1.7 क्लाउड-मात्र हो, त्यसैले नियन्त्रण लूपले प्रति कार्य चरण 152 ms को अतिरिक्त सार्वजनिक-इन्टरनेट राउन्ड ट्रिप तिर्छ, र केवल SmolVLAACT पनि स्थानीय रूपमा चल्छन्। ढिलो पिक एण्ड प्लेसको लागि रिमोट पोड टिकाउ हुन्छ। प्रतिक्रियाशील कुनै पनि कुराको लागि यो होइन: नीति हिचकिचाउँछ जुन ठ्याक्कै प्रशिक्षण विफलता जस्तो देखिन्छ तर त्यो होइन। 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 लेख्छ। स्क्रिप्ट आफ्नै virtualenv मा चल्छ किनभने यसलाई 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 ले तालिम दिन नसक्ने नीति चलाउन सक्छ। यदि तपाईं 24 GB मा तालिम दिन सक्ने VLA चाहनुहुन्छ भने, त्यो लगभग 450 M प्यारामिटरमा SmolVLA वा लगभग 80 M मा ACT हो।

किन समान फ्ल्यागहरू भएका दुई रनले फरक चेकपोइन्टहरू दिन्छन्?

किनभने launch_finetune.py मा कुनै seed छैन। यो dataclass बाट उत्पन्न गरिएको tyro CLI हो जसमा कुनै seed फिल्ड छैन, त्यसैले कुनै पनि कुराले RNG लाई पिन गर्दैन। रेपोले गैर-निर्धारित छवि वृद्धिको कारणले रनहरू बीच 5 देखि 6 प्रतिशत भिन्नता नोट गर्दछ। यदि पुनरुत्पादनशीलता महत्त्वपूर्ण छ भने, यसको सट्टा LeRobot मार्ग प्रयोग गर्नुहोस्: lerobot-train ले --seed लिन्छ र प्रकाशित GR00T रेसिपीले --seed=42 पास गर्छ।

के मैले Isaac-GR00T वा lerobot-train प्रयोग गर्नुपर्छ?

यदि तपाईं सन्दर्भ कार्यान्वयन, कार्य प्रतिनिधित्वमा प्रति-कुञ्जी नियन्त्रण, TensorRT निर्यात, वा तपाईंको आफ्नै डेटामा विश्वास गर्नु अघि पुनरुत्पादन गर्न बेन्चमार्क उदाहरणहरू चाहनुहुन्छ भने Isaac-GR00T प्रयोग गर्नुहोस्। यदि तपाईंको डेटासेट पहिले नै LeRobot v3.0 हो र तपाईं यसलाई रूपान्तरण गर्न चाहनुहुन्न भने, यदि तपाईंलाई seed चाहिन्छ भने, वा यदि तपाईंको बाँकी स्ट्याक पहिले नै LeRobot हो भने lerobot-train प्रयोग गर्नुहोस्। दुवैले समान 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