
Testattu läpikäynti NVIDIA GR00T N1.7:n hienosäätöön SO-100 LeRobot -aineistolla: todelliset liput, modality.json, v2.1-vaatimus, mitä ajo maksaa ja sudenkuopat.
NVIDIA toimittaa hienosäätöesimerkin juuri sille varrelle, joka sinulla todennäköisesti on. Sisällä Isaac-GR00T-repositoriossa on kansio nimeltä demo_data/cube_to_bowl_5: viisi jaksoa, 4 148 kuvaa 30 fps:llä, jo kirjoitettu LeRobot v2.1 -muodossa, vastaavan modaalisuuskonfiguraation kanssa osoitteessa examples/SO100/. Sen meta/info.json raportoi robot_type: so101_follower, joka LeRobotissa on sama konfiguraatioluokka kuin so100_follower. Tämä on aidosti hyödyllistä, koska se tarkoittaa, että viitepolku GR00T N1.7:lle kuuden vapausasteen harrastusvarrelle ylläpidetään mallin kirjoittaneiden ihmisten toimesta. Se ei ole pienennetty humanoididemo, vaan sama varsi.
Huono uutinen on etäisyys I recorded 60 episodes ja the arm does the task välillä. Tässä putkessa on noin kuusi kohtaa, joissa se epäonnistuu hiljaisesti eikä äänekkäästi, ja neljä niistä sijaitsee tiedostoissa, joita useimmat ihmiset eivät koskaan avaa: meta/modality.json, Python-datakonfiguraatio, meta/relative_stats.json, ja datasettien oma versio merkkijono. Tämä opas käy läpi manuaalisen reitin alusta loppuun todellisilla komennoilla ja näyttää sitten saman työn lomakkeena AY-Robotsissa. Kaikki alla oleva tarkistettiin Isaac-GR00T:n päähaaraa vasten 20. elokuuta 2026 (n1.7-julkaisulinja) ja lerobot 0.6.1:tä, joka julkaistiin PyPI:ssä 3. elokuuta 2026. Ylävirta liikkuu nopeasti, ja jos lippu nimettiin uudelleen, tämä artikkeli kertoo siitä.
Mitä sinun tulee tietää ennen aloittamista
- •GR00T N1.7 -hienosäätö vaatii vähintään 40 GB VRAM-muistia. NVIDIA suosittelee H100- tai L40-solmuja. 24 GB RTX 4090 ei suoriudu tästä työstä, vaikka se kouluttaa SmolVLA:ta ja ACT:tä.
- •Datasettien on oltava LeRobot v2 (v2.0 tai v2.1) sekä GR00T-spesifinen meta/modality.json. LeRobot v3.0 -datasettiä ei ladata, ja se on muunnettava alaspäin.
- •Aloituspiste on gr00t/experiment/launch_finetune.py, tyro CLI. Siinä ei ole --seed-lippua, joten ajot eivät ole bitti-tarkasti toistettavissa.
- •Mukautetulle varrelle embodiment-tagi on NEW_EMBODIMENT, ja tämä tagi tekee --modality-config-path -lipusta pakollisen.
- •Toimitettu SO-100-resepti ennustaa varren nivelet RELATIIVISINA deltoina ja tarttujan ABSOLUUTTISENA kohteena. Tämän parituksen kääntäminen on hiljainen epäonnistuminen, ei virhe.
- •AY-Robotsissa sama työ on lomake: 20000 askelta, erä 32, oppimisnopeus 1e-4, noin 4–12 USD A100 80 GB tai H100 -tasolla.
Mitä GR00T N1.7 todella on
GR00T N1.7 on visio-kieli-toimintamalli kaksoisjärjestelmärakenteella, joka on kuvattu alkuperäisessä GR00T N1 -julkaisussa: visio-kieli-moduuli, joka lukee kamerat ja ohjeen, sekä diffuusiotransformer, joka muuttaa sen jatkuvien moottorikomentojen palaksi. N1.7 korvasi ensimmäisen puoliskon. N1.6:n Eagle-runkoverkko on poissa, se on vaihdettu nvidia/Cosmos-Reason2-2B Qwen3-VL-arkkitehtuuriin, ja malli esikoulutettiin noin 20 000 tunnin egokeskeisellä ihmisvideolla robottidatan lisäksi. NVIDIAn oma raportti ilmoittaa luvuksi 20 854 tuntia ja kertoo, että siirtyminen 1k:sta 20k tuntiin yli kaksinkertaistaa keskimääräisen tehtävän suoritusasteen.
Toinen puolisko muuttui myös, tavoilla jotka ovat merkityksellisiä ajollesi. Toimintapää putosi 32 diffuusiokerroksesta 16:een, ennustettu toimintapala kasvoi 16 askeleesta 40:een, ja tilan ja toiminnan enimmäisleveys kasvoi 29:stä 132:een. Nämä kolme lukua ovat peräisin repositorion README-tiedoston muutoshistoriasta; NVIDIAn oma julkaisupostaus kuvaa edelleen järjestelmä 1:tä 32-kerroksisena DiT:nä, joten jos nämä kaksi ovat ristiriidassa, luota siihen repositorioon, jonka olet kloonaamassa. Toiminnot ilmaistaan oletusarvoisesti suhteellisessa tarttujan tilassa, eli nykyisestä asennosta laskettuina deltoina absoluuttisten kohteiden sijaan, mikä mahdollistaa ihmisvideosta opittujen manipulointipriorien siirtymisen robottiohjaukseen ylipäätään. Itse pää on virtaussovitus diffuusiotransformer, samaa perhettä kuin Pi0.5, mutta erilaisella runkoverkolla sen edessä. Jos käytät edelleen edellistä sukupolvea, N1.7 vs. N1.5 käsittelee, oikeuttaako päivitys putkilinjasi uudelleen tekemisen.
| Ominaisuus | Arvo | Lähde |
|---|---|---|
| Parametrit | 3,000,000,000 | Hugging Face model card |
| Visio-kieli-runkoverkko | nvidia/Cosmos-Reason2-2B (Qwen3-VL), gated on Hugging Face | repo README |
| Toimintapää | Virtaussovitus-diffuusiotransformer, 16 kerrosta (N1.6:ssa oli 32) | repo README |
| Ennustettu toimintahorisontti | 40 steps for the base checkpoint (N1.6:ssa oli 16) | getting_started/policy.md and repo README |
| Tilan ja toiminnan enimmäisleveys | 132 (N1.6:ssa oli 29) | repo README |
| Koodilisenssi | Apache 2.0 | Isaac-GR00T repository |
| Painojen lisenssi | NVIDIA Open Model License Agreement | model card |
| Viive, H100 80 GB, PyTorch eager, 4 kohinanpoistoaskelta, 1 kamera | 85.8 ms end to end, 11.7 Hz | model card timing table |
| Sama laitteisto, TensorRT täysi putkilinja | 27.9 ms end to end, 35.9 Hz | model card timing table |
| Viive, jonka AY-Robots ilmoittaa palvelimellaan olevasta GR00T N1.7:stä | 152 ms per action step | AY-Robots policy catalog |
Nuo kolme viimeistä riviä selittävät suurimman osan ihmisten ilmoittamasta pettymyksestä. Otsikon 27.9 ms on TensorRT-moottori H100:lla yhdellä kameralla ja neljällä kohinanpoistoaskeleella. Pelkkä PyTorch samalla kortilla on 85.8 ms, ja mallikortti ilmoittaa eroksi 3.08x. Kumpikaan luku ei sisällä palvelukerrosta, toista kameraa tai verkkohyppyä. AY-Robotsin ilmoittama 152 ms per toiminta-askel sen palvelimella olevasta GR00T N1.7:stä on luku, jossa palvelu on mukana, ja julkisen internetin edestakainen matka tulee sen päälle. Lisää tästä lopussa. Muiden mallien lukujen osalta, GR00T N1.7 vs. Pi0.5 ja GR00T N1.7 vs. SmolVLA asettavat ne vierekkäin.

Mitä ajo tarvitsee ennen kuin kirjoitat mitään
| Vaatimus | Hienosäätö | Päättely |
|---|---|---|
| VRAM, NVIDIA-ohjeistus | 40 Gt tai enemmän, H100 tai L40 suositellaan | 16 Gt tai enemmän, RTX 4090 toimii |
| Python ja CUDA dGPU:lla | 3.12 and CUDA 12.8 | 3.12 and CUDA 12.8 |
| Videon taustaohjelmisto | torchcodec 0.8.0, FFmpeg 4 to 7 only | sama |
| Tietoaineiston muoto | LeRobot v2 plus meta/modality.json | ei sovellettavissa |
| Hugging Face -käyttöoikeus | approved for nvidia/Cosmos-Reason2-2B | sama |
| Muut työkalut | git-lfs and uv | uv |
| AY-Robots GPU-taso groot1.7-kouluttajalle | A100 80 GB or H100 80 GB | pod varataan automaattisesti |
Jokainen GR00T-tarkistuspiste, mukaan lukien perusversio nvidia/GR00T-N1.7-3B, lataa nvidia/Cosmos-Reason2-2B:n ensimmäisellä käyttökerralla, ja tämä arkisto on rajoitettu. README-tiedosto ilmoittaa virheen tarkasti: mallin lataus epäonnistuu GatedRepoError / 401 Client Error -virheellä. Mitä se ei mainitse, on se, milloin tämä tapahtuu, eli sen jälkeen kun olet vuokrannut kortin ja ajo on alkanut. Pyydä käyttöoikeutta mallisivulta ja suorita sitten uv run huggingface-cli login tai vie HF_TOKEN ennen kuin vuokraat mitään.
Vaihe 0: jaksot itse
Kaikki alla oleva olettaa, että olet jo tallentanut jaksoja. Jos et ole, se on todellinen ensimmäinen askel ja se ratkaisee, kuinka hyvä tulos voi olla, koska jäljittelyoppiminen ei voi palauttaa tietoja, jotka eivät ole datassa. Kalibroi molemmat varret ensin, sitten ohjaa seuraajaa johtajavarrella samalla kun lerobot-record kirjoittaa parquet-tiedostot ja kameravirrat. Jos kalibrointi on pois päältä, tietokantasi nivelarvot kuvaavat hieman erilaista robottia kuin se, joka myöhemmin suorittaa toimintaperiaatteen, eikä mikään määrä koulutusta korjaa sitä.
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=trueLeRobotin oma neuvo on tallentaa vähintään 50 jaksoa, noin 10 jaksoa per objektin sijainti, pitää kamerat kiinteinä ja tarttumiskäyttäytyminen johdonmukaisena. Lisää vaihtelua myöhemmin, ei alussa. Muistamisen arvoinen nyrkkisääntö: jos et pystyisi suorittamaan tehtävää itse pelkkien kamerakuvien perusteella, toimintaperiaate ei pysty siihen myöskään. Käsivarsikohtaista asennusta varten SO-100:n aloitusopas ja SO-100 LeRobot -sivu kattavat portit, kalibroinnin ja kameraindeksit. AY-Robotsilla voit tehdä tämän myös internetin kautta selaimella käyttäen etäohjausta ja tallentaa suoraan istunnosta.
Vaihe 1: aineiston on oltava LeRobot v2.1
Tämä on yleisin este. LeRobotin nykyinen CODEBASE_VERSION main-haarassa on v3.0, joten kaikki, mitä tallennat tänään nykyisellä työkaluketjulla, tulee ulos v3.0-versiona. GR00Tin lataaja odottaa v2-versiota. Arkisto selittää syyn selkeästi: monet ylävirran aineistot, kuten DROID, LIBERO ja Bridge, on julkaistu v2-versiona, ja natiivi tuki molemmille on suunnitteilla, mutta sitä ei ole vielä toimitettu. Muunnos on siis sinun vastuullasi, ja se ajetaan omassa virtuaaliympäristössään konkreettisesta syystä: scripts/lerobot_conversion sisältää oman pyproject-tiedostonsa, joka vaatii Python 3.10:n tai 3.11:n ja kiinnittää lerobotin yhteen git-kommitiin, kun taas Isaac-GR00T itse vaatii Python 3.12:n. Asenna muunnin arkiston juuresta, niin saat gr00t-paketin sen sijaan, mikä on virhe, josta sen README varoittaa. Jos olet uusi formaatin kanssa, LeRobot-aineisto-sanastomerkintä selittää, mitä sen sisällä todella on.
# 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_lerobotJos v3.0-aineisto on jo olemassa paikallisesti, skripti rakentaa v2.1-asettelun sen viereen ja sitten vaihtaa: alkuperäinen siirretään sisarkansioon, johon on liitetty versio, <name>_v3.0, ja muunnettu kopio ottaa alkuperäisen polun. (Skriptin oma docstring kutsuu tätä kansiota _v30; koodi liittää version merkkijonon, joten saat todellisuudessa _v3.0.) Toinen yllätys: tuloste päätyy aina kohtaan <root>/<repo-id>, joten --root examples/SO100/my_dataset_lerobot antaa sinulle examples/SO100/my_dataset_lerobot/<your-hf-user>/<your-dataset>, ja tämä pidempi polku on se, jonka --dataset-path haluaa myöhemmin. Kun koulutustyö hylkää aineistosi versiosyistä, v3-versiona hylätty aineisto -sivu luettelee tarkat oireet.
Rakenne, jonka GR00T haluaa muunnoksen jälkeen, on klassinen v2-asettelu: meta/info.json, meta/episodes.jsonl, meta/tasks.jsonl, parquet-tiedostot hakemistossa data/chunk-000/, MP4-tiedostot hakemistossa videos/chunk-000/observation.images.
Vaihe 2: modality.json, kuusi numeroa, jotka päättävät kaiken
LeRobot-aineistossa robotin tila ja toiminto tallennetaan litteinä float32-taulukoina. SO-100:lle molemmilla on muoto [6]: viisi käsivarsiniveltä ja tarttuja. Demoaineisto nimeää ne shoulder_pan.pos, shoulder_lift.pos, elbow_flex.pos, wrist_flex.pos, wrist_roll.pos, gripper.pos, mutta nämä nimet sijaitsevat tiedostossa info.json eikä mikään parquet-tiedostossa kerro, mikä indeksi on mikä. meta/modality.json tarjoaa tämän kuvauksen, eikä GR00T harjoittele ilman sitä. Tässä on se, jonka arkisto toimittaa SO-100:lle, sanasta sanaan.
{
"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"
}
}
}Kopioi se muunnettuun datasettiisi osoitteessa meta/modality.json ja nimeä videon avaimet uudelleen vastaamaan kameroidesi todellisia nimiä. Jos tallensit yhdellä yläpuolisella kameralla nimeltä top, silloin original_key on observation.images.top ja käyttäjäystävällinen nimi on se, mihin datakonfiguraatiosi viittaa. Näiden kahden on oltava yhtäpitäviä, eikä kumpikaan tarkista toista puolestasi. Kielimerkintä on pahempi, koska saman avaimen on esiinnyttävä kolmessa paikassa.
| Kerros | Tiedosto | SO-100-muoto, jota käytetään repossa |
|---|---|---|
| Parquet-sarake | data/chunk-*/episode_*.parquet | annotation.human.task_description |
| modality.json-avain | meta/modality.json, under "annotation", without the annotation. prefix | human.task_description |
| modality_keys datakonfiguraatiossa | your so100_config.py | annotation.human.task_description |
Segmentit annotation.-kohdan jälkeen valitsee kuka tahansa, joka on luonut datasetin. SO-100-demodata käyttää annotation.human.task_description; LIBERO ja SimplerEnv käyttävät annotation.human.action.task_description. Molemmat ovat kelvollisia. Jos kopioit konfiguraation LIBERO-esimerkistä ja osoitit sen omaan SO-100-tallenteeseesi, kielikanava ei ratkea mihinkään ja malli harjoittelee tyhjällä ohjeella. Häviö laskee silti. Politiikka tekee silti jotain. Se vain jättää huomiotta sen, mitä käskit sen tehdä.
Vaihe 3: datakonfiguraatio, suhteellinen varsi ja absoluuttinen tarttuja
Modality-konfiguraatio on Python-tiedosto JSONin sijaan, koska se päättää myös, miten kukin toimintaryhmä esitetään. Tämä on se osa N1.7-työnkulkua, jota ei ollut samassa muodossa N1.5:ssä, ja se osa, joka kannattaa lukea kahdesti. Toimitettu SO-100-konfiguraatio ennustaa viisi käsivarren niveltä SUHTEELLISINA deltoina nykyisestä tilasta ja tarttujan ABSOLUUTTISENA kohdepositiona, koska binäärinen avoin-tai-suljettu-signaali toimii paremmin kohteena kuin deltana.
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)Kaksi yksityiskohtaa tässä maksavat sinulle päivän, jos et tiedä niitä. Ensinnäkin, action_configs on positionaalinen: dokumentaatio vaatii saman pituuden ja saman järjestyksen kuin modality_keys, ja ne ovat suoria seurauksista, jos teet virheen, eli väärä esitystapa sovelletaan hiljaisesti. Tarttujasi koulutetaan deltana ja käsivartesi absoluuttisena kohteena, eikä virheilmoitusta tule. Toiseksi, register_modality_config varmistaa, ettei tunniste ole jo rekisteröity, joten toinen NEW_EMBODIMENT-konfiguraatio samassa Python-prosessissa kaatuu virheeseen Embodiment tag ... already registered. Et voi tuoda kahta näistä yhteen skriptiin. Kolmas sääntö pannaan täytäntöön myöhemmin, käyttöönotossa: toiminnon delta_indices on oltava yhtenäinen alue alkaen nollasta. Harva ikkuna, kuten [0, 4, 8], hylätään, koska kaikki alavirran toiminnot indeksoivat ennustetun osan lineaarisesti ja suorittaisivat muuten väärät rivit.
Normalisointitilastot, erityisesti meta/relative_stats.json, lasketaan sillä horisonttipituudella, joka sinulla oli niitä luodessasi. Lyhennä toimintahorisonttia 16:sta 8:aan ilman uudelleenluomista, ja koulutus kaatuu virheeseen IndexError: boolean index did not match indexed array ... dimension is 8 but corresponding boolean dimension is 16. Korjaus on yksi komento: python gr00t/data/stats.py --dataset-path <path> --embodiment-tag NEW_EMBODIMENT --modality-config-path examples/SO100/so100_config.py. Suorita se minkä tahansa delta_indices-muutoksen jälkeen.
Vaihe 4: ympäristö
N1.7 siirsi repositorion osoitteeseen ja Python 3.12:een. Vanha conda plus pip install -e . polku on edelleen olemassa README-tiedoston piilotetussa osiossa, mutta se varoittaa, että GPU-riippuvuudet, mukaan lukien flash-attn ja TensorRT, saattavat vaatia manuaalisen asennuksen. Käytä uv:tä, ellet sinulla ole erityistä syytä olla käyttämättä. flash-attn-rintamalla yksi yksityiskohta säästää sekaannukselta: näet Installing flash-attn tulostettuna jokaisen uv run. Se ei rakennu uudelleen. uv tarkistaa uudelleen URL-osoitteeseen kiinnitetyn pyörän, joka on jo välimuistissa, ja se kestää kaksi tai kolme sekuntia.
- 1Asenna git-lfs ja kloonaa sitten alimoduuleilla
git-lfs on pakollinen, ei valinnainen. Ilman sitä demo_data/-kansion parquet-tiedostot latautuvat osoitintynkinä, ja demoajo epäonnistuu tiedostoluettelossa näkyvältä vaikuttavalla tietojoukolla.
bashsudo apt install git-lfs && git lfs install git clone --recurse-submodules https://github.com/NVIDIA/Isaac-GR00T cd Isaac-GR00T - 2Asenna uv ja synkronoi ympäristö
Oletusasennus hakee GPU-riippuvuudet, mukaan lukien flash-attn ja TensorRT. Tuoreella A100- tai H100-kuvalla tämä on pisin yksittäinen vaihe, joten tee se ennen kuin kiinnität huomiota mihinkään muuhun.
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')" - 3Todennus Hugging Facea vastaan
Tee tämä ennen ensimmäistä koulutuksen käynnistystä, ei sen jälkeen, kun se epäonnistuu kahdeksan minuutin kuluttua.
bashuv run huggingface-cli login # or: export HF_TOKEN=<your_token> - 4Toimivuustarkistus toimitetulla SO-100-demodatalla
Ennen kuin kosket omaan tallenteeseesi, aja 2000 askelta demo_data/cube_to_bowl_5-tiedostolla. Se on viisi jaksoa, se valmistuu nopeasti ja se todistaa ympäristön toimivuuden, ei tietojesi. Jos tämä ajo epäonnistuu, mikään, mitä teet tietojoukollesi, ei auta.
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 tukee vain FFmpeg 4–7 -versioita, ja Ubuntu 25.10 ja uudemmat toimittavat version 8. Virhe on Could not load libtorchcodec, joka kuulostaa rikkoutuneelta asennukselta version ristiriidan sijaan. Asenna vanhempi ajonaikainen ympäristö, esimerkiksi conda install -c conda-forge 'ffmpeg<8', ja aseta sen kirjastot LD_LIBRARY_PATH-muuttujaan. CUDA_HOME on asettamaton. Hienosäätö epäonnistuu kokonaan. Suorita bash scripts/deployment/dgpu/install_deps.sh kerran, tai vain export CUDA_HOME=/usr/local/cuda.
Vaihe 5: hienosäätökomento ja sen lippujen todelliset oletusarvot
Vaihda demoaineisto omaasi ja lisää haluamasi säädöt. Alla on täydellinen muoto, jota arkisto käyttää omassa uuden kehon tutoriaalissaan, mukaan lukien augmentaatio- ja tarkistuspistelippuja, jotka lyhyt README-esimerkki jättää pois. Tämä on suppeassa merkityksessä: kielimalli ja visuaalinen enkooderi pysyvät jäädytettyinä, ja koulutettavat osat ovat projektori ja diffuusion toimintapää.
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| Lippu | Oletus FinetuneConfigissa | Mitä se tekee |
|---|---|---|
| --global-batch-size | 64 | Kokonaisbatch kaikkien GPU:iden yli ennen gradientin akkumulaatiota. Toimitetut esimerkit käyttävät 32:ta. |
| --learning-rate | 1e-4 | Sama arvo, jonka AY-Robots lähettää groot1.7-kouluttajalleen. |
| --max-steps | 10000 | Optimointiaskelten kokonaismäärä. examples/finetune.sh-kääre oletusarvoisesti myös 10000. |
| --gradient-accumulation-steps | 1 | Kertoo tehollisen batchin. Yli 1:n arvot antavat varoituksen kertoen akkumuloidun koon. |
| --save-steps and --save-total-limit | 1000 and 5 | Tarkistuspisteiden tiheys ja kuinka monta niitä säilytetään. Vanhemmat poistetaan. |
| --weight-decay and --warmup-ratio | 1e-5 and 0.05 | Asetettu eksplisiittisesti myös examples/finetune.sh-tiedostossa. |
| --state-dropout-prob | 0.2 in the CLI, 0.8 in the model config | Pudottaa satunnaisesti proprioseptiivisen tilan koulutuksen aikana. Laske sitä, jos tehtäväsi nojaa tilaan. |
| --tune-llm and --tune-visual | False and False | Runkoverkko pysyy oletusarvoisesti jäädytettynä. |
| --tune-projector and --tune-diffusion-model | True and True | Projektori ja diffuusion toimintapää ovat ne, jotka todella koulutetaan. |
| --use-percentiles | True | Normalisoi q01:llä ja q99:llä raakojen min- ja max-arvojen sijaan. |
| --dataloader-num-workers | 2 | Lataaja on suunniteltu CPU-pohjaiseksi. Esimerkit nostavat tämän 4:ään. |
| --seed | does not exist | Tässä CLI:ssä ei ole seed-lippua. |
Viimeinen rivi ei ole kirjoitusvirhe. launch_finetune.py on tyro CLI, joka on luotu dataluokasta, eikä kyseisessä dataluokassa ole seed-kenttää. README mainitsee erikseen 5–6 prosentin vaihtelun ajojen välillä, mikä johtuu ei-deterministisestä kuvankäsittelystä. Kaksi ajoa identtisillä lipuilla eivät tuota identtisiä tarkistuspisteitä, mikä on erittäin tärkeää, kun yrität päättää, auttoiko hyperparametrin muutos vai olitko vain onnekas. Vertailun vuoksi, lerobotin oma kouluttaja käyttää oletuksena seed 1000:a, ja LeRobot GR00T -resepti välittää --seed=42 eksplisiittisesti.
Hienosäätö suoritetaan eval_strategy="no" -asetuksella, joten validointihäviökäyrää ei ole lainkaan. Saat vain koulutushäviön etkä mitään muuta. Uuden toteutuksen opas kehottaa kytkemään sen päälle komennolla --eval-strategy steps --eval-steps 500, mutta tätä lippua ei ole launch_finetune.py:ssä: CLI luodaan tyrolla FinetuneConfig-dataluokasta, ja eval_strategy, eval_steps ja eval_batch_size ovat sen sijaan TrainingConfig-luokan kenttiä. Niiden oletusarvot ovat "no", 500 ja 2. Päästäksesi niihin, käytä täydellisempää aloituspistettä gr00t/experiment/launch_train.py, jossa sisäkkäinen lippu on --training.eval-strategy. Joka tapauksessa pelkkä laskeva koulutushäviö kertoo hyvin vähän yleistymisestä, mikä on juuri se tilanne, joka kuvataan osoitteessa häviö laskee, mutta toimintatapa ei tee mitään.
Mitä 20000 askeleen ajo maksaa
GR00T N1.7 tarvitsee 80 GB:n kortin, joten kustannuskysymykseen on suppea vastaus. AY-Robotsissa groot1.7-kouluttaja toimii A100 80 GB tai H100 80 GB -tasolla, jossa ajo kestää 3–6 tuntia hintaan 1.20–2.00 USD tunnissa spot-markkinoilla. Tämä on noin 4–12 USD oletusarvoiselle 20000 askeleen työlle. Sama tehtävä SmolVLA tai ACT toimii 24 GB:n kortilla hintaan 0.30–0.60 USD tunnissa ja 1–3 USD per ajo. Tämä on todellinen kompromissi: GR00T maksaa noin neljä kertaa enemmän yritystä kohden, etkä voi ajaa sitä työpöytäsi alla olevalla 4090:llä.
| Malli | GPU-taso | Tyypillinen ajoaika | Tyypillinen hinta | Vähimmäismäärä episodeja |
|---|---|---|---|---|
| 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-episodi minimi on alaraja, ei tavoite. NVIDIAn oma UKK on vaativampi: noin 100 trajektoria yksinkertaiseen kiinteän sijainnin poimintaan ja sijoitteluun, 500 tai enemmän monimutkaisiin tai monivaiheisiin kohtauksiin, ja 100–500 hienovaraiseen manipulointiin. Jos sinulla on 20 episodia, käytä iltapäivä tallentamiseen illan virittämisen sijaan. tiedonkeruuopas käsittelee, mikä erottaa hyödyllisen episodin hukkaan menneestä, tallenna ensimmäinen datasettisi on lyhyt versio, ja SO-100 tiedonkeruu on käsivarsikohtainen.

Vaihe 6: Avoimen silmukan arviointi ennen kuin kosket käsivarteen
Älä asenna uutta tarkistuspiste fyysiseen robottikäteen selvittääksesi, toimiko harjoittelu. Suorita ensin avoimen silmukan arviointi. Se toistaa tallennetun jakson, pyytää mallilta toimintoja jokaisessa vaiheessa ja piirtää ennusteen vertailukohtaa vasten MSE:n ja MAE:n avulla. Se ei maksa mitään ja se havaitsee vaiheiden 2 ja 3 kartoitusvirheet.
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 gripperTietovarasto kieltäytyy tarkoituksella julkaisemasta kohde-MSE:tä mukautetulle datalle, ja se on oikea päätös: luku riippuu toimintayksiköistäsi, tehtävästäsi ja datasettisi koosta, joten toisen robotin kädestä kopioitu kynnysarvo ei tarkoita mitään. Merkityksellistä on trendi. Tässä on viiteajo, jonka tietovarasto dokumentoi yhdellä H100:lla viiden jakson demo-datasettillä ja 2000 askeleella.
| Tarkistuspiste | Keskimääräinen MSE trajektorilla 0 | Keskimääräinen MAE trajektorilla 0 |
|---|---|---|
| 500 | 87.5 | 5.63 |
| 1000 | 25.4 | 3.30 |
| 1500 | 13.2 | 2.18 |
| 2000 | 10.0 | 1.76 |
Muoto on signaali, ei absoluuttiset arvot. Virheen tulisi laskea tasaisesti, kun harjoitusaskeleet kertyvät. Keskiarvoistettuna kaikkien viiden harjoitusepisodin yli pelkän trajektorin 0 sijaan, repositorion lopullinen tarkistuspiste sai noin 7.5 MSE ja 1.5 MAE, joten jopa vertailuajo näyttää erilaiselta riippuen siitä, mitkä episodit keskiarvoistat. Tallenna oma vertailuarvosi muokkaamattomalla demo-komennolla ennen kuin muutat mitään omasta datastasi: jos et pysty toistamaan tunnetusti toimivaa ajoa, et voi erottaa asennusvirhettä dataongelmasta. Repositorio myös yhdistää yleiset oireet syihin, ja jokainen niistä on operatiivinen eikä mallivirhe.
| Oire | Todennäköinen syy |
|---|---|
| MSE tasaista tai nousevaa tarkistuspisteiden välillä | Oppimisnopeus liian alhainen, tai data ei lataudu lainkaan. Tarkista --dataset-path ja datalataajan työntekijät. |
| Ennustekäyrä on tasainen tai vakio | modality.json-avaimet tai --modality-config-path eivät täsmää. Toimintoavaimia ei ole yhdistetty. |
| MSE valtava, tai NaN-häviö harjoituksen aikana | Toiminnon ja tilan normalisointi. Varmista meta/stats ja että toimintoalueet ovat fyysisesti uskottavia. |
| Hyvä trajektorilla 0, huono pidätetyillä episodeilla | Datan niukkuus, ei virhe. Viisi demoepisodia ei voi yleistää. |
Toinen reitti: lerobot-train Isaac-GR00T:n sijaan
Nykyinen LeRobot-julkaisu, 0.6.1 PyPI:ssä 3. elokuuta 2026 lähtien, tarjoaa toisen ja varsin erilaisen tavan hienosäätää samoja peruspainoja. LeRobot paljastaa GR00T N1.7:n käytäntötyyppinä ja kouluttaa sen oman lerobot-train -sisääntulopisteensä kautta. Kaksi asiaa on tässä tärkeää. LeRobot CLI on joukko konsolikomentosarjoja, joten kaikki, mitä luet ja jossa sanotaan python lerobot/scripts/train.py, on vanhentunutta eikä toimi. Ja LeRobot poisti GR00T N1.5 -tuen kokonaan, hyläten N1.5-tarkistuspisteet ja -konfiguraatiot siirtymähuomautuksella, joten jos tarvitset N1.5:tä LeRobotin kautta, sinun on kiinnitettävä lerobot==0.5.1, viimeinen sitä tukeva julkaisu, joka julkaistiin 7. huhtikuuta 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| Aspekti | Isaac-GR00T launch_finetune.py | lerobot-train --policy.type=groot |
|---|---|---|
| Tietoaineiston versio | Vain LeRobot v2, muunnos vaaditaan | Natiivi LeRobot-tietoaineisto, ei alaspäinmuunnosta |
| Modaalisuuskartoitus | meta/modality.json sekä Python-datakonfiguraatio | ei modality.json; toiminta asetetaan komentorivin --policy.*-lipuilla |
| Siementunnus | ei siementunnuslippua lainkaan | --seed, LeRobotin oletus 1000 |
| Suhteelliset toiminnot | avaimittainen ActionConfig datakonfiguraatiossa | --policy.use_relative_actions sekä --policy.relative_exclude_joints |
| Julkaistut vertailutulokset | SO-100 avoimen silmukan MSE-trendi demodatalla | LIBERO-sviitit, 96,5 prosentin keskiarvo neljän sviitin yli |
| Käyttöönoton polku | run_gr00t_server.py plus eval_so100.py over ZMQ | lerobot-rollout, reaaliaikaisella palastelulla (queue_thresholdin tulisi pysyä 5:ssä tai sen alapuolella) |
- Jokainen lippu on näkyvissä ja muutettavissa. Voit vapauttaa visuaalisen enkooderin, siirtää state_dropout_probia tai lyhentää toimintahorisonttia.
- Avoimen silmukan kuvaajat ovat paikallisia tiedostoja. Tarkistuspisteen 5000 vertaaminen tarkistuspisteeseen 20000 on komentorivikomento.
- Et ole riippuvainen minkään alustan pysymisestä verkossa, ja tarkistuspiste on levylläsi vakiomuodossa.
- Repositorion vertailuesimerkit LIBEROlle, SimplerEnville ja DROIDille antavat sinulle tunnetusti hyviä ajoja toistettavaksi ennen kuin luotat omiin tietoihisi.
- Ympäristö on suurin osa työstä. FFmpeg-versio, CUDA_HOME, git-lfs, portitettu runko, torchcodec: mikään näistä ei ole malliongelma, ja jokainen niistä pysäyttää ajon.
- v3.0:n muuntaminen v2.1:ksi vaatii erillisen virtuaaliympäristön omine asennusvaiheineen, ja se kirjoittaa tietoaineistohakemistosi uudelleen paikan päällä.
- GPU-vuokraus alkaa laskuttaa, kun aloitat virheenkorjauksen, ei kun koulutus alkaa, eikä mikään pysäytä instanssia ajon päätyttyä.
- Ei siementunnusta tarkoittaa, ettei bitti-bitiltä toistettavuutta ole, minkä lisäksi pelkästä augmentaatiosta johtuu 5–6 prosentin vaihtelu ajosta toiseen.
Kaksi tapaa saada sama tarkistuspiste
Vuokraat GPU:n ja hallitset jokaista vaihetta. Ensimmäisellä kerralla tähän menee realistisesti iltapäivä, ja sen jälkeen aina noin kaksikymmentä minuuttia.
- Tallenna episodeja lerobot-recordilla SO-100:lla. Saat LeRobot v3.0 -aineiston.
- Muunna se v2.1:ksi käyttämällä scripts/lerobot_conversion/convert_v3_to_v2.py -skriptiä omassa virtuaaliympäristössään.
- Kirjoita meta/modality.json ja Python-modaalisuuskonfiguraatio, joka on rekisteröity EmbodimentTag.NEW_EMBODIMENT -tunnisteen alle.
- Vuokraa 80 GB:n kortti, kloonaa alimoduuleilla, synkronoi uv:llä, todenna Hugging Facea vastaan.
- Aja launch_finetune.py, sitten open_loop_eval.py useilla tarkistuspisteillä, ja vertaa MSE-trendiä ennen laitteiston koskemista.
- Hae tarkistuspiste koneelta ennen kuin tuhoat instanssin, ja rakenna sitten palvelupolku varteen.
Kopioi tarkistuspiste vuokratusta instanssista ennen sen sammuttamista. --save-total-limit 5 tarkoittaa myös, että vanhemmat tarkistuspisteet poistetaan koulutuksen edetessä, joten haluamasi tarkistuspiste vaiheessa 5000 ei välttämättä ole enää olemassa vaiheessa 20000.
Sama työ lomakkeena. Valitset mallin ja aineiston, taustaohjelma vuokraa GPU:n spot-markkinoilta tarvittavan VRAM:n perusteella, ajaa kouluttajan ja kirjoittaa tarkistuspisteet objektitallennustilaan. GR00T N1.7 SO-100:lla -opas on juuri tämä yhdistelmä; koulutusmatriisi sisältää kaikki muut malli- ja varsiparit, mukaan lukien GR00T N1.7 SO-101:llä.
| Mitä groot1.7-kouluttaja lähettää | Arvo |
|---|---|
| Eräkoko | 32 |
| Oppimisnopeus | 1e-4 |
| Maksimivaiheet | 20000 |
| Gradientin akkumulaatio | 1, ja se vaikuttaa tähän kouluttajaan |
| Lomakkeessa näkyvä lisäsäätö | saveSteps |
| Perustarkistuspiste | nvidia/GR00T-N1.7-3B |
| Hyväksytty aineistomuoto | LeRobot v2.0 or v2.1 |
Aineisto voi tulla Hugging Face -repo-tunnuksesta, omalta koneeltasi tai istunnosta, jonka tallensit työpöytäasiakasohjelmalla. Päättely on erillinen vaihe: alusta varaa podin, joka palvelee käytäntöä, ja paikallinen robottiasiakasohjelmasi keskustelee kyseisen päätepisteen kanssa. Podit sisältävät joutokäynnin valvontatoiminnon ja tuhoavat itsensä joutokäyntijakson jälkeen, joten unohdettu selainvälilehti ei laskuta yön yli. Jos et halua klikata, samat toiminnot ovat käytettävissä komentorivillä ja MCP-palvelimella.
GR00T N1.7 ja Pi0.5 ovat täällä vain pilvipohjaisia; vain SmolVLA ja ACT toimivat myös paikallisesti. V2.1-vaatimus ei myöskään poistu, koska v3.0-aineisto on edelleen muunnettava alaspäin ennen kuin GR00T-lataaja hyväksyy sen. Ja mikään ei kirjoita modality.json-semantiikkaasi puolestasi: jos kameran avaimet tai kieliavain ovat väärin, ne ovat väärin molemmilla reiteillä. Katso koulutusdokumentaatiosta, mitä taustaohjelma tekee ja ei tee puolestasi.

Tarkistuspisteen palauttaminen varteen
Isaac-GR00T käyttää palvelin-asiakas-jakoa ZMQ:n yli. Politiikka pyörii GPU:lla, ja ohut asiakasohjelma robottikoneella lähettää havaintoja ja vastaanottaa toimintalohkoja. SO-100-esimerkki on riittävän kattava kopioitavaksi: käynnistä run_gr00t_server.py tarkistuspisteelläsi ja --embodiment-tag NEW_EMBODIMENT, sitten suorita eval_so100.py robotin puolella sarjaportin, robotin tunnuksen, kameraindeksien ja kieliohjeen kanssa. Kameranimien kyseisessä komennossa on vastattava modality.json-tiedostosi käyttäjäystävällisiä nimiä, eikä käyttöjärjestelmän laitenumeroita.
# 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"Kun kytket vartta takaisin: SO-100 käyttää Feetech STS3215 -väyläservoja 7.4 V:n jännitteellä. Niiden syöttäminen 12 V:lla tuhoaa ne, ja se on helppo virhe, jos omistat myös LeKiwin, jonka pohja toimii 12 V:lla, mutta sen varsi ei. Tarkista virransyöttö ennen ensimmäistä käynnistystä, ei savun jälkeen. Katso SO-100-laitteistosivu ja SO-100 vs. LeKiwi. Jos varsi käynnistyy, mutta mikään ei liiku, servo ei vastaa on hyvä paikka aloittaa.
Nyt rehellinen osuus siitä, missä toimintaperiaate toimii, koska koulutuksella ja palvelulla on erilaiset laitteistovaatimukset. Hienosäätö vaatii 40 Gt tai enemmän. Päättely ei: README mainitsee sen vaativan 16 Gt tai enemmän ja nimeää RTX 4090:n nimenomaisesti, joten jo omistamasi kortti voi palvella tarkistuspistettä, jota se ei olisi koskaan voinut tuottaa. Se, mikä ratkaisee, tuntuuko toimintaperiaate reagoivalta, ei ole VRAM, vaan se, missä palvelin sijaitsee. AY-Robotsin GR00T N1.7 on vain pilvipohjainen, joten ohjaussilmukka maksaa julkisen internetin edestakaisen matkan 152 ms:n lisäksi per toimintoaskel, ja vain SmolVLA ja ACT toimivat myös paikallisesti. Hitaaseen poimintaan ja sijoitteluun etäpalvelin on siedettävä. Kaikkeen reaktiiviseen se ei ole: toimintaperiaate muuttuu epäröiväksi tavalla, joka näyttää täsmälleen koulutusvirheeltä, mutta ei ole sitä. ACT 20 ms per toimintoaskel on malli, joka sietää tiukimman silmukan, SmolVLA on 245 ms, eikä mikään määrä viiveen hienosäätö osta takaisin jo käytettyä edestakaista matkaa. Suorita ensimmäinen toimintaperiaatteesi käy läpi palvelupuolen alusta loppuun.
Mikä oikeasti menee pieleen
- GatedRepoError ensimmäisellä ajolla. Sinulle ei ole myönnetty pääsyä nvidia/Cosmos-Reason2-2B:hen, tai et ole todentanut itseäsi. Tämä tapahtuu sen jälkeen, kun GPU:n kello on jo käynnistynyt.
- Tietojoukko hylättiin latauksen yhteydessä. Melkein aina v3.0-tietojoukko. Muunna se vanhempaan versioon. Katso tietojoukon hylkääminen v3-muodossa.
- IndexError epäyhteensopivista boolean-dimensioista. Muutit delta_indices-arvoja etkä luonut tilastoja uudelleen.
- Muisti loppui erässä 32. Pienennä --global-batch-size-arvoa ja nosta --gradient-accumulation-steps-arvoa, tai pienennä --num-shards-per-epoch-arvoa, mitä konfiguraatio nimenomaisesti ehdottaa VRAMin ollessa rajallinen. Katso muisti loppui koulutuksen aikana.
- Häviö laskee, toimintamalli ei tee mitään. Oletuksena ei ole validointijakoa, joten puhdas koulutuskäyrä todistaa hyvin vähän. Tämä sivu käsittelee diagnoosia.
- Toimii omassa kokoonpanossasi eikä missään muualla. Odotettavissa pienen tietojoukon kanssa, joka on kuvattu yhdessä valaistusolosuhteessa. NVIDIA suosittelee värisävyjen satunnaistamista (colour jitter augmentation) sekä 20–50 jaksoa eri valaistusolosuhteissa. Lisää täältä.
- Tarttuja ei koskaan sulkeudu kunnolla. Tarkista, että tarttujan toiminto on ABSOLUTE ja varren nivelet RELATIVE, tässä järjestyksessä action_configs-tiedostossa. Tarttuja ei sulkeudu luettelee muut syyt.
- Kamera putoaa hiljaisesti pois tallennuksen aikana. Jakso tallentuu silti ja videon avain on edelleen olemassa, minkä vuoksi tämä on ikävä. Kameraa ei tunnistettu käsittelee tätä.
Koko vikatilojen hakemisto löytyy osoitteesta korjaussivut. Jos valitset mallien välillä sen sijaan, että debuggaisit yhtä, toimintamallien vertailu ja GR00T N1.7:n areena-merkintä sisältävät vertailulukuja lähteineen, ja ACT vs. GR00T N1.7 on vertailu, jota useimmat ihmiset todella tarvitsevat, koska se on valinta mallin välillä, jonka voit kouluttaa työpöytäsi alla olevalla kortilla, ja mallin välillä, jonka hienosäätöön sinun on vuokrattava 80 GB:n solmu. Taustatietoa siitä, miksi nämä mallit käyttäytyvät niin kuin ne käyttäytyvät, löytyy VLA-yleiskatsauksesta ja SO-100:n täydellisestä oppaasta, jotka kannattaa lukea ensin. Ja jos sinulla ei vielä ole robottikättä, live-robottikäsi striimaa fyysistä SO-100:aa ilman rekisteröitymistä.
Kuinka monta jaksoa tarvitsen, ennen kuin GR00T N1.7:n hienosäätö on kannattavaa?▾
AY-Robots asettaa groot1.7-kouluttajalle vähintään 50 jakson rajan. NVIDIAn oma UKK on vaativampi: noin 100 trajektoria yksinkertaiseen poiminta- ja sijoitustehtävään kiinteässä paikassa, 500 tai enemmän monimutkaisiin tai monivaiheisiin kohtauksiin, ja 100–500 hienovaraiseen manipulointiin. Alle 50 jakson tapauksessa on melkein aina parempi tallentaa lisää dataa kuin virittää hyperparametreja. Jos menestys tasaantuu sen jälkeen, NVIDIA suosittelee HG-DAggeria: suorita toimintamalli, puutu asiaan sen epäonnistuessa ja lisää nämä korjaukset tietojoukkoon.
Miksi tietojoukkoni ei lataudu, ja miten saan selville sen version?▾
Avaa meta/info.json ja lue codebase_version. LeRobotin nykyinen CODEBASE_VERSION main-haarassa on v3.0, joten kaikki viimeisimmällä työkaluketjulla tallennettu on v3.0, ja GR00T-lataaja odottaa v2:ta. Muunna Isaac-GR00T-repositorion scripts/lerobot_conversion/convert_v3_to_v2.py-skriptillä, joka kirjoittaa codebase_version: v2.1 muunnettuun tietojoukkoon. Skripti ajetaan omassa virtuaaliympäristössään, koska se tarvitsee eri lerobot-version kuin GR00T vaatii.
Voinko hienosäätää GR00T N1.7:ää RTX 4090:llä?▾
Ei. NVIDIA suosittelee vähintään 40 GB VRAMia hienosäätöön ja nimeää H100- tai L40-solmut; muut kortit toimivat, mutta vievät paljon kauemmin. RTX 4090:ssä on 24 GB. AY-Robots tarjoaa GR00T N1.7:ää vain A100 80 GB- ja H100 80 GB -tasoilla samasta syystä. Päätteleminen on eri asia: 16 GB riittää mallin palvelemiseen, joten 4090 voi ajaa toimintamallia, jota se ei voi kouluttaa. Jos haluat VLA:n, jonka voit kouluttaa 24 GB:lla, se on SmolVLA noin 450 miljoonalla parametrilla tai ACT noin 80 miljoonalla parametrilla.
Miksi kaksi ajoa identtisillä lipuilla antavat erilaisia tarkistuspisteitä?▾
Koska launch_finetune.py:ssä ei ole siementä. Se on tyro CLI, joka on luotu dataclassista, joka ei sisällä siemenkenttää, joten mikään ei kiinnitä RNG:tä. Repositorio huomauttaa erikseen 5–6 prosentin vaihtelusta ajojen välillä, mikä johtuu ei-deterministisestä kuvien augmentoinnista. Jos toistettavuus on tärkeää, käytä sen sijaan LeRobot-reittiä: lerobot-train ottaa --seed-argumentin ja julkaistu GR00T-resepti välittää --seed=42.
Pitäisikö minun käyttää Isaac-GR00T:tä vai lerobot-trainia?▾
Käytä Isaac-GR00T:tä, jos haluat referenssitoteutuksen, avainkohtaisen hallinnan toimintojen esitykseen, TensorRT-viennin tai vertailuesimerkit toistettavaksi ennen omien tietojesi luottamista. Käytä lerobot-trainia, jos tietojoukkosi on jo LeRobot v3.0 ja et halua muuntaa sitä, jos haluat siemenen, tai jos muu pinosi on jo LeRobot. Molemmat hienosäätävät samoja nvidia/GR00T-N1.7-3B-painoja. Huomaa, että LeRobot luopui GR00T N1.5 -tuesta kokonaan: N1.5-tarkistuspisteet hylätään siirtymähuomautuksella, ja sinun on kiinnitettävä lerobot==0.5.1 jatkaaksesi niiden käyttöä.
Tarvitsenko todella rannekameran etukameran lisäksi?▾
Toimitettu SO-100-konfiguraatio käyttää molempia, ja modality.json kartoittaa etu- ja rannekamerat erillisiksi videonäppäimiksi. Voit kouluttaa yhdellä kameralla, ja mallikortin latenssitaulukko on mitattu yhdellä kameralla, mutta rannekuva antaa toimintamallille käyttökelpoista tietoa tarttujasta kontaktin hetkellä. Jos tarttuja sulkeutuu väärään aikaan ajojen aikana, puuttuva tai huonosti suunnattu rannekamera on yksi ensimmäisistä asioista, jotka kannattaa tarkistaa.
Hienosäädä GR00T N1.7 SO-100-robotillasi rakentamatta ympäristöä ensin
Valitse malli, tietojoukko ja hyperparametrit lomakkeella. Taustaohjelma vuokraa A100 80 GB:n tai H100:n spot-markkinoilta, ajaa kouluttajan erällä 32, oppimisnopeudella 1e-4 ja 20000 askeleella, ja kirjoittaa tarkistuspisteet objektitallennustilaan. Noin 4–12 USD per ajo.
Avaa GR00T N1.7 -koulutusopasSources
- 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