AY-Robotsin opassivu GR00T N1.7:n kouluttamiseen SO-100-käsivarrella, näyttäen vaaditun GPU-tason, aineiston muodon ja kouluttajan oletusarvot
GR00T N1.7SO-100HienosäätöLeRobotVLA

Miten kouluttaa GR00T N1.7 omalla SO-100-aineistollasi

AY-Robots ResearchAugust 23, 202628 min luku

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.

OminaisuusArvoLähde
Parametrit3,000,000,000Hugging Face model card
Visio-kieli-runkoverkkonvidia/Cosmos-Reason2-2B (Qwen3-VL), gated on Hugging Facerepo README
ToimintapääVirtaussovitus-diffuusiotransformer, 16 kerrosta (N1.6:ssa oli 32)repo README
Ennustettu toimintahorisontti40 steps for the base checkpoint (N1.6:ssa oli 16)getting_started/policy.md and repo README
Tilan ja toiminnan enimmäisleveys132 (N1.6:ssa oli 29)repo README
KoodilisenssiApache 2.0Isaac-GR00T repository
Painojen lisenssiNVIDIA Open Model License Agreementmodel card
Viive, H100 80 GB, PyTorch eager, 4 kohinanpoistoaskelta, 1 kamera85.8 ms end to end, 11.7 Hzmodel card timing table
Sama laitteisto, TensorRT täysi putkilinja27.9 ms end to end, 35.9 Hzmodel card timing table
Viive, jonka AY-Robots ilmoittaa palvelimellaan olevasta GR00T N1.7:stä152 ms per action stepAY-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.

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.

Mitä ajo tarvitsee ennen kuin kirjoitat mitään

VaatimusHienosäätöPäättely
VRAM, NVIDIA-ohjeistus40 Gt tai enemmän, H100 tai L40 suositellaan16 Gt tai enemmän, RTX 4090 toimii
Python ja CUDA dGPU:lla3.12 and CUDA 12.83.12 and CUDA 12.8
Videon taustaohjelmistotorchcodec 0.8.0, FFmpeg 4 to 7 onlysama
Tietoaineiston muotoLeRobot v2 plus meta/modality.jsonei sovellettavissa
Hugging Face -käyttöoikeusapproved for nvidia/Cosmos-Reason2-2Bsama
Muut työkalutgit-lfs and uvuv
AY-Robots GPU-taso groot1.7-kouluttajalleA100 80 GB or H100 80 GBpod varataan automaattisesti
Rajoitettu taustaosa pysäyttää sinut ensimmäisellä ajolla

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ä.

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-record nykyisellä LeRobotilla. Jakson pituus oletuksena 60 s ja nollausaika 60 s. so100_follower ja so101_follower on molemmat rekisteröity samaan LeRobot-konfiguraatioluokkaan, minkä vuoksi Isaac-GR00T SO100 -esimerkki käyttää so101-nimiä; kumpi tahansa toimii SO-100:lla. Tässä valitsemasi kameranimet (front, wrist) ovat ne nimet, joiden on esiinnyttävä uudelleen modality.json-tiedostossa.

LeRobotin 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.

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
Muunnin ottaa vastaan --repo-id:n, valinnaisen --root:n ja --force-conversion:n, joka poistaa kaikki olemassa olevat paikalliset tilannekuvat ja lataa ne uudelleen. Se kirjoittaa codebase_version: v2.1 tiedostoon meta/info.json.
Muunnos ylikirjoittaa paikan päällä

Jos 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./, ja yksi ylimääräinen tiedosto, jota tavallisessa LeRobotissa ei ole. Tämä ylimääräinen tiedosto on paikka, jossa suurin osa jäljellä olevista virheistä sijaitsee.

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.

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. Indeksit ovat nollapohjaisia ja noudattavat Pythonin viipalointia, joten single_arm on [0:5] ja gripper on [5:6].

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.

KerrosTiedostoSO-100-muoto, jota käytetään repossa
Parquet-sarakedata/chunk-*/episode_*.parquetannotation.human.task_description
modality.json-avainmeta/modality.json, under "annotation", without the annotation. prefixhuman.task_description
modality_keys datakonfiguraatiossayour so100_config.pyannotation.human.task_description
Miksi kieliavain aiheuttaa ongelmia

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.

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, karsittu olennaiseen. NON_EEF tarkoittaa nivelavaruutta; EEF odottaisi yhdeksänulotteista vektoria x, y, z sekä 6D-rotaatiota.

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.

Muuta delta_indices ja sinun on luotava tilastot uudelleen

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.

  1. 1
    Asenna 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.

    bash
    sudo apt install git-lfs && git lfs install
    git clone --recurse-submodules https://github.com/NVIDIA/Isaac-GR00T
    cd Isaac-GR00T
  2. 2
    Asenna 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.

    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
    Todennus Hugging Facea vastaan

    Tee tämä ennen ensimmäistä koulutuksen käynnistystä, ei sen jälkeen, kun se epäonnistuu kahdeksan minuutin kuluttua.

    bash
    uv run huggingface-cli login   # or: export HF_TOKEN=<your_token>
  4. 4
    Toimivuustarkistus 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.

    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
Kaksi ympäristöansaa, jotka näyttävät mallivirheiltä

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ää.

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
Yksi GPU. Kahdeksalle kortille korvaa käynnistin komennolla uv run torchrun --nproc_per_node=8 --master_port=29500 ja aseta --num-gpus 8. Käytä uv run torchrun -komentoa, älä pelkkää torchrun-komentoa, tai saat väärän ympäristön.
LippuOletus FinetuneConfigissaMitä se tekee
--global-batch-size64Kokonaisbatch kaikkien GPU:iden yli ennen gradientin akkumulaatiota. Toimitetut esimerkit käyttävät 32:ta.
--learning-rate1e-4Sama arvo, jonka AY-Robots lähettää groot1.7-kouluttajalleen.
--max-steps10000Optimointiaskelten kokonaismäärä. examples/finetune.sh-kääre oletusarvoisesti myös 10000.
--gradient-accumulation-steps1Kertoo tehollisen batchin. Yli 1:n arvot antavat varoituksen kertoen akkumuloidun koon.
--save-steps and --save-total-limit1000 and 5Tarkistuspisteiden tiheys ja kuinka monta niitä säilytetään. Vanhemmat poistetaan.
--weight-decay and --warmup-ratio1e-5 and 0.05Asetettu eksplisiittisesti myös examples/finetune.sh-tiedostossa.
--state-dropout-prob0.2 in the CLI, 0.8 in the model configPudottaa satunnaisesti proprioseptiivisen tilan koulutuksen aikana. Laske sitä, jos tehtäväsi nojaa tilaan.
--tune-llm and --tune-visualFalse and FalseRunkoverkko pysyy oletusarvoisesti jäädytettynä.
--tune-projector and --tune-diffusion-modelTrue and TrueProjektori ja diffuusion toimintapää ovat ne, jotka todella koulutetaan.
--use-percentilesTrueNormalisoi q01:llä ja q99:llä raakojen min- ja max-arvojen sijaan.
--dataloader-num-workers2Lataaja on suunniteltu CPU-pohjaiseksi. Esimerkit nostavat tämän 4:ään.
--seeddoes not existTä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.

Validointi on oletuksena pois päältä, eikä dokumentoitu lippu ole tässä CLI:ssä

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ä.

MalliGPU-tasoTyypillinen ajoaikaTyypillinen hintaVähimmäismäärä episodeja
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-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.

AY-Robotsin koulutusopas GR00T N1.7:lle SO-100:lla, näyttäen teknisten tietojen kaistan, jossa on GPU-taso, vaadittu datasettimuoto ja kouluttajan oletusarvot
Opas /train/groot-n1-7-on-so-100 esittää tiedot, jotka muuten joutuisit selvittämään käsin: GPU-tason, datasettimuodon ja kouluttajan lähettämät tarkat oletusarvot.

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.

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
Kuvia tallennetaan hakemistoon /tmp/open_loop_eval/traj_<id>.jpeg, ellet anna --save-plot-path-argumenttia. Oletusarvot: --execution-horizon 16, --steps 200, --denoising-steps 4, --traj-ids 0.

Tietovarasto 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.

TarkistuspisteKeskimääräinen MSE trajektorilla 0Keskimääräinen MAE trajektorilla 0
50087.55.63
100025.43.30
150013.22.18
200010.01.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.

OireTodennä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 vakiomodality.json-avaimet tai --modality-config-path eivät täsmää. Toimintoavaimia ei ole yhdistetty.
MSE valtava, tai NaN-häviö harjoituksen aikanaToiminnon ja tilan normalisointi. Varmista meta/stats ja että toimintoalueet ovat fyysisesti uskottavia.
Hyvä trajektorilla 0, huono pidätetyillä episodeillaDatan 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.

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-natiivi GR00T N1.7 -resepti. Huomaa relative_exclude_joints: tarttuja on suljettu pois suhteellisista toiminnoista, mikä on sama päätös, jonka so100_config.py tekee ActionRepresentation.ABSOLUTE:n kanssa.
AspektiIsaac-GR00T launch_finetune.pylerobot-train --policy.type=groot
Tietoaineiston versioVain LeRobot v2, muunnos vaaditaanNatiivi LeRobot-tietoaineisto, ei alaspäinmuunnosta
Modaalisuuskartoitusmeta/modality.json sekä Python-datakonfiguraatioei modality.json; toiminta asetetaan komentorivin --policy.*-lipuilla
Siementunnusei siementunnuslippua lainkaan--seed, LeRobotin oletus 1000
Suhteelliset toiminnotavaimittainen ActionConfig datakonfiguraatiossa--policy.use_relative_actions sekä --policy.relative_exclude_joints
Julkaistut vertailutuloksetSO-100 avoimen silmukan MSE-trendi demodatallaLIBERO-sviitit, 96,5 prosentin keskiarvo neljän sviitin yli
Käyttöönoton polkurun_gr00t_server.py plus eval_so100.py over ZMQlerobot-rollout, reaaliaikaisella palastelulla (queue_thresholdin tulisi pysyä 5:ssä tai sen alapuolella)
Hienosäädön suorittaminen itse
Edut
  • 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.
Kompromissit
  • 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.

  1. Tallenna episodeja lerobot-recordilla SO-100:lla. Saat LeRobot v3.0 -aineiston.
  2. Muunna se v2.1:ksi käyttämällä scripts/lerobot_conversion/convert_v3_to_v2.py -skriptiä omassa virtuaaliympäristössään.
  3. Kirjoita meta/modality.json ja Python-modaalisuuskonfiguraatio, joka on rekisteröity EmbodimentTag.NEW_EMBODIMENT -tunnisteen alle.
  4. Vuokraa 80 GB:n kortti, kloonaa alimoduuleilla, synkronoi uv:llä, todenna Hugging Facea vastaan.
  5. Aja launch_finetune.py, sitten open_loop_eval.py useilla tarkistuspisteillä, ja vertaa MSE-trendiä ennen laitteiston koskemista.
  6. Hae tarkistuspiste koneelta ennen kuin tuhoat instanssin, ja rakenna sitten palvelupolku varteen.
Vaihe, jonka kaikki unohtavat

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.

AY-Robots-koulutusmatriisi, jossa viisi toimintamallia on riveinä ja neljä robottivartta sarakkeina, ja jokainen solu linkittää tiettyyn koulutusoppaaseen
The /train matrix: viisi mallia neljää vartta vastaan. GR00T N1.7 -rivi kattaa myös SO-101:n, Koch v1.1:n ja LeKiwin.

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.

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 määrittää, kuinka monta ennustettua askelta suoritetaan ennen uudelleen suunnittelua. Sen on oltava enintään toimintaperiaatteen action_horizon, ja tämä luku on toiminnon delta_indices-kentän pituus modaalisuuskonfiguraatiossasi, ei perusmallin. Toimitettu SO-100-konfiguraatio ennustaa 16, joten 16 on ylärajasi; perus nvidia/GR00T-N1.7-3B -tarkistuspiste on konfiguroitu 40:lle, ja policy.md sanoo selvästi, että hienosäädetyt tarkistuspisteet voivat poiketa. Jos ylität sen, saat ValueError-virheen, joka ilmoittaa molemmat luvut. 8 on arvo, jota dokumentaatio ehdottaa reaaliaikaiseen käyttöönottoon. Vanha lippunimi --action-horizon toimii edelleen, mutta antaa varoituksen.
7.4 V, ei 12 V

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 -koulutusopas

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started