Stran z vodnikom AY-Robots za treniranje GR00T N1.7 na roki SO-100, ki prikazuje zahtevano raven GPU, format nabora podatkov in privzete nastavitve trenerja
GR00T N1.7SO-100Fino uglaševanjeLeRobotVLA

Kako trenirati GR00T N1.7 na lastnem naboru podatkov SO-100

AY-Robots ResearchAugust 23, 202628 min branja

Preizkušen vodnik za fino uglaševanje NVIDIA GR00T N1.7 na naboru podatkov SO-100 LeRobot: dejanske zastavice, modality.json, zahteva v2.1, koliko stane zagon in pasti.

NVIDIA ponuja primer fine-tuninga za točno tisto roko, ki jo verjetno imate. Znotraj repozitorij Isaac-GR00T obstaja mapa z imenom demo_data/cube_to_bowl_5: pet epizod, 4.148 sličic pri 30 fps, že zapisanih kot LeRobot v2.1, z ujemajočo se konfiguracijo modalnosti pod examples/SO100/. Njegov meta/info.json poroča robot_type: so101_follower, ki je v LeRobotu enak konfiguracijski razred kot so100_follower. To je resnično uporabno, saj pomeni, da referenčno pot za GR00T N1.7 na šest-stopinj svobode hobi roko vzdržujejo ljudje, ki so napisali model. To ni pomanjšana humanoidna demonstracija, ampak ista roka.

Slaba novica je razdalja med I recorded 60 episodes in the arm does the task. Obstaja približno šest mest, kjer ta cevovod tiho odpove, namesto glasno, in štiri od njih so v datotekah, ki jih večina ljudi nikoli ne odpre: meta/modality.json, konfiguracija podatkov Python, meta/relative_stats.json, in lastna različica niza podatkov. Ta vodnik prikazuje ročno pot od začetka do konca z resničnimi ukazi, nato pa isto nalogo kot obrazec na AY-Robots. Vse spodaj je bilo preverjeno glede na glavno vejo Isaac-GR00T z dne 20. avgusta 2026 (linija izdaje n1.7) in lerobot 0.6.1, objavljen na PyPI 3. avgusta 2026. Upstream se hitro premika, in kjer je bila zastavica preimenovana, ta članek to navaja.

Kaj morate vedeti, preden začnete

  • Fine-tuning GR00T N1.7 zahteva 40 GB ali več VRAM-a. NVIDIA priporoča vozlišča H100 ali L40. 24 GB RTX 4090 ne bo opravil tega dela, čeprav bo treniral SmolVLA in ACT.
  • Nabor podatkov mora biti LeRobot v2 (v2.0 ali v2.1) plus GR00T-specifična meta/modality.json. Nabor podatkov LeRobot v3.0 se ne naloži in ga je treba pretvoriti navzdol.
  • Vstopna točka je gr00t/experiment/launch_finetune.py, tyro CLI. Nima zastavice --seed, zato izvedbe niso bit-za-bit ponovljive.
  • Za prilagojeno roko je oznaka embodiment NEW_EMBODIMENT, in ta oznaka naredi --modality-config-path obvezno.
  • Priložen recept SO-100 napoveduje sklepe roke kot RELATIVNE delte in prijemalo kot ABSOLUTNO tarčo. Obratna postavitev te paritve je tiha napaka, ne pa napaka.
  • Na AY-Robots je isto delo obrazec: 20000 korakov, serija 32, učna stopnja 1e-4, približno 4 do 12 USD na ravni A100 80 GB ali H100.

Kaj GR00T N1.7 dejansko je

GR00T N1.7 je vizualno-jezikovni-akcijski model z dvosistemsko zasnovo, opisano v izvirnem članku GR00T N1: vizualno-jezikovni modul, ki bere kamere in navodila, ter difuzijski transformator, ki to pretvori v blok neprekinjenih motornih ukazov. N1.7 je nadomestil prvo polovico. Hrbtenica Eagle iz N1.6 je izginila, zamenjana je bila za nvidia/Cosmos-Reason2-2B na arhitekturi Qwen3-VL, model pa je bil predhodno usposobljen na približno 20.000 urah egocentričnega človeškega videa poleg robotskih podatkov. NVIDIA-in lastni zapis navaja številko 20.854 ur in poroča, da prehod iz 1k na 20k ur več kot podvoji povprečno dokončanje naloge.

Druga polovica se je prav tako spremenila, na načine, ki so pomembni za vaše izvajanje. Glava akcije se je zmanjšala z 32 difuzijskih plasti na 16, predvideni akcijski blok se je povečal s 16 korakov na 40, največja širina stanja in akcije pa se je povečala z 29 na 132. Te tri številke izhajajo iz dnevnika sprememb v README repozitorija; NVIDIA-ina lastna objava ob zagonu še vedno opisuje Sistem 1 kot 32-plastni DiT, zato, kjer se podatki razlikujejo, zaupajte repozitoriju, ki ga boste klonirali. Akcije so privzeto izražene v relativnem končnem efektorju prostoru, kot delte od trenutne poze namesto absolutnih tarč, kar omogoča prenos manipulacijskih predznanj, naučenih iz človeškega videa, v robotsko krmiljenje. Sama glava je ujemanje toka difuzijski transformator, iz iste družine kot Pi0.5, vendar z drugačno hrbtenico pred njim. Če ste še vedno na prejšnji generaciji, N1.7 proti N1.5 obravnava, ali nadgradnja upravičuje prenovo vaše cevovodne arhitekture.

LastnostVrednostVir
Parametri3,000,000,000Hugging Face model card
Vizualno-jezikovna hrbtenicanvidia/Cosmos-Reason2-2B (Qwen3-VL), gated on Hugging Facerepo README
Glava akcijeDifuzijski transformator z ujemanje toka, 16 plasti (N1.6 jih je imel 32)repo README
Predvideni akcijski horizont40 steps for the base checkpoint (N1.6 had 16)getting_started/policy.md and repo README
Največja širina stanja in akcije132 (N1.6 jih je imel 29)repo README
Licenca kodeApache 2.0Isaac-GR00T repository
Licenca utežiNVIDIA Open Model License Agreementmodel card
Latenca, H100 80 GB, PyTorch eager, 4 koraki razšumljavanja, 1 kamera85.8 ms end to end, 11.7 Hzmodel card timing table
Ista strojna oprema, celoten cevovod TensorRT27.9 ms end to end, 35.9 Hzmodel card timing table
Latenca, ki jo AY-Robots navaja za svoj streženi GR00T N1.7152 ms per action stepAY-Robots policy catalog

Te zadnje tri vrstice pojasnjujejo večino razočaranja, o katerem poročajo ljudje. Naslovnih 27.9 ms je motor TensorRT na H100 z eno kamero in štirimi koraki razšumljavanja. Čisti PyTorch na isti kartici je 85.8 ms, kartica modela pa navaja razliko pri 3.08x. Nobena številka ne vključuje strežnega sloja, druge kamere ali omrežnega skoka. 152 ms na akcijski korak, ki ga AY-Robots navaja za svoj streženi GR00T N1.7, je številka s strežbo v zanki, in javni internetni povratni poti se prištejejo k temu. Več o tem na koncu. Za številke poleg drugih modelov, GR00T N1.7 proti Pi0.5 in GR00T N1.7 proti SmolVLA jih postavlja drug ob drugega.

Stran modela AY-Robots za GR00T N1.7, ki prikazuje število parametrov, nivo GPU-ja, latenco sklepanja ter navedene prednosti in omejitve modela
Stran /policies/groot-n1-7 vsebuje enak povzetek specifikacij, kot bi ga sicer ročno sestavili iz kartice modela in datoteke README repozitorija.

Kaj potrebuje zagon, preden karkoli vtipkate

ZahtevaFino uglaševanjeSklepanje
VRAM, priporočila NVIDIA40 GB ali več, priporočena H100 ali L4016 GB ali več, deluje RTX 4090
Python in CUDA na dGPU3.12 and CUDA 12.83.12 and CUDA 12.8
Video zaledjetorchcodec 0.8.0, samo FFmpeg 4 do 7enako
Format podatkovnega naboraLeRobot v2 plus meta/modality.jsonni primerno
Dostop do Hugging Faceapproved for nvidia/Cosmos-Reason2-2Benako
Druga orodjagit-lfs and uvuv
Nivo GPU-ja AY-Robots za trenažer groot1.7A100 80 GB or H100 80 GBpod samodejno dodeljen
Zaprti hrbtenični model vas bo ustavil pri prvem zagonu

Vsak kontrolni zapis GR00T, vključno z osnovnim nvidia/GR00T-N1.7-3B, ob prvi uporabi naloži nvidia/Cosmos-Reason2-2B, in ta repozitorij je zaprt. Datoteka README natančno navaja napako: nalaganje modela ne uspe z GatedRepoError / 401 Client Error. Kar ne omenja, je, kdaj se to zgodi, kar je po tem, ko ste najeli kartico in se je zagon začel. Zahtevajte dostop na strani modela, nato zaženite uv run huggingface-cli login ali izvozite HF_TOKEN, preden karkoli najamete.

Korak 0: same epizode

Vse spodaj predpostavlja, da že imate posnete epizode. Če jih nimate, je to pravi prvi korak in je tisti, ki odloča, kako dober bo rezultat, saj učenje z imitacijo ne more pridobiti informacij, ki niso v podatkih. Najprej kalibrirajte obe roki, nato poganjajte sledilca z vodilno roko medtem ko lerobot-record zapisuje parquet datoteke in video tokove kamer. Če kalibracija ni pravilna, vrednosti sklepov v vašem naboru podatkov opisujejo nekoliko drugačnega robota od tistega, ki bo kasneje izvajal politiko, in nobeno usposabljanje tega ne popravi.

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 na trenutnem LeRobotu. Dolžina epizode je privzeto 60 s, čas ponastavitve pa 60 s. so100_follower in so101_follower sta oba registrirana proti istemu konfiguracijskemu razredu LeRobot, zato primer Isaac-GR00T SO100 uporablja imena so101; oboje deluje na SO-100. Imena kamer, ki jih izberete tukaj (front, wrist), so imena, ki se morajo ponovno pojaviti v modality.json.

LeRobotov lastni nasvet je, da posnamete vsaj 50 epizod, približno 10 za vsako lokacijo predmeta, kamere naj bodo fiksne, in prijemalno vedenje naj bo dosledno. Variacije dodajte kasneje, ne na začetku. Splošno pravilo, ki si ga je vredno zapomniti: če naloge ne bi mogli opraviti sami samo s slikami kamer, je ne more niti politika. Za nastavitev, specifično za roko, začetek dela z SO-100 in stran LeRobot za SO-100 pokrivata vrata, kalibracijo in indekse kamer. Na AY-Robots lahko to storite tudi preko interneta iz brskalnika z uporabo teleoperacije in snemate neposredno iz seje.

Korak 1: nabor podatkov mora biti LeRobot v2.1

To je najpogostejša ovira. Trenutna CODEBASE_VERSION na glavni veji je v3.0, zato se vse, kar danes posnamete s trenutnim naborom orodij, prikaže kot v3.0. GR00T-ov nalagalnik pričakuje v2. Repozitorij jasno pojasnjuje, zakaj: številni nadrejeni nabori podatkov, kot so DROID, LIBERO in Bridge, so objavljeni v v2, in izvorna podpora za oba je načrtovana, vendar še ni na voljo. Pretvorba je torej na vas in se izvaja v lastnem virtualnem okolju iz konkretnega razloga: scripts/lerobot_conversion vsebuje lasten pyproject, ki zahteva Python 3.10 ali 3.11 in pripne lerobot na en git commit, medtem ko Isaac-GR00T sam zahteva Python 3.12. Namestite pretvornik iz korena repozitorija in namesto tega dobite paket gr00t namesto tega, kar je napaka, na katero opozarja njegov README. Če ste novi v formatu, nabor podatkov LeRobot v glosarju pojasnjuje, kaj je dejansko v njem.

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
Pretvornik sprejme --repo-id, neobvezni --root in --force-conversion, ki izbriše morebitno obstoječo lokalno posnetek in ga ponovno prenese. Zapiše codebase_version: v2.1 v meta/info.json.
Pretvorba prepiše na mestu

Če nabor podatkov v3.0 že obstaja lokalno, skripta zgradi postavitev v2.1 poleg njega in nato zamenja: izvirnik se premakne v sosednjo mapo z dodano različico, <name>_v3.0, in pretvorjena kopija prevzame izvirno pot. (Docstring skripte to mapo imenuje _v30; koda doda niz različice, tako da dejansko dobite _v3.0.) Drugo presenečenje: izhod vedno pristane pod <root>/<repo-id>, tako da --root examples/SO100/my_dataset_lerobot vam da examples/SO100/my_dataset_lerobot/<your-hf-user>/<your-dataset>, in ta daljša pot je tista, ki jo kasneje želi --dataset-path. Ko naloga usposabljanja zavrne vaš nabor podatkov zaradi razlogov različice, stran o naboru podatkov, zavrnjenem kot v3 navaja natančne simptome.

Struktura, ki jo GR00T želi po pretvorbi, je klasična postavitev v2: meta/info.json, meta/episodes.jsonl, meta/tasks.jsonl, datoteke parquet pod data/chunk-000/, datoteke MP4 pod videos/chunk-000/observation.images./, in ena dodatna datoteka, ki je standardni LeRobot nima. Ta dodatna datoteka je tista, kjer se nahaja večina preostalih napak.

Korak 2: modality.json, šest številk, ki odločajo o vsem

V naboru podatkov LeRobot sta stanje robota in dejanje shranjena kot ploski nizi float32. Za SO-100 imata oba obliko [6]: pet sklepov roke in prijemalo. Demonstracijski nabor podatkov jih imenuje shoulder_pan.pos, shoulder_lift.pos, elbow_flex.pos, wrist_flex.pos, wrist_roll.pos, gripper.pos, vendar ta imena živijo v info.json in nič v datoteki parquet ne pove, kateri indeks je kateri. meta/modality.json zagotavlja to preslikavo, in GR00T se brez nje ne bo učil. Tukaj je tista, ki jo repozitorij dobavlja za SO-100, dobesedno.

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. Indeksi so osnovani na ničli in sledijo Python rezinjenju, tako da je single_arm [0:5] in gripper [5:6].

Kopirajte ga v svoj pretvorjeni nabor podatkov na meta/modality.json in preimenujte video ključe v imena, ki jih dejansko uporabljajo vaše kamere. Če ste snemali z eno samo nadglavno kamero z imenom top, potem je original_key observation.images.top in prijazno ime je tisto, na kar se bo sklicevala vaša konfiguracija podatkov. Oboje se mora ujemati in nobeno od njiju ne preverja drugega namesto vas. Jezikovna anotacija je slabša, ker se mora isti ključ pojaviti na treh mestih.

PlastDatotekaOblika SO-100, uporabljena v repozitoriju
Stolpec Parquetdata/chunk-*/episode_*.parquetannotation.human.task_description
Ključ modality.jsonmeta/modality.json, pod "annotation", brez predpone annotation.human.task_description
Ključi modality_keys v konfiguraciji podatkovyour so100_config.pyannotation.human.task_description
Zakaj jezikovni ključ povzroča težave

Segmenti za annotation. so izbrani s strani avtorja nabora podatkov. Demo podatki SO-100 uporabljajo annotation.human.task_description; LIBERO in SimplerEnv uporabljata annotation.human.action.task_description. Oboje je veljavno. Če ste kopirali konfiguracijo iz primera LIBERO in jo usmerili na lasten posnetek SO-100, se jezikovni kanal razreši v nič in model se uči na praznem navodilu. Izguba še vedno pada. Politika še vedno nekaj počne. Samo ignorira, kar ste ji naročili.

Korak 3: konfiguracija podatkov, relativna roka in absolutni prijemalnik

Konfiguracija modalnosti je datoteka Python in ne JSON, ker določa tudi, kako je predstavljena vsaka skupina dejanj. To je del delovnega toka N1.7, ki v enaki obliki ni obstajal v N1.5, in del, ki ga je vredno prebrati dvakrat. Priložena konfiguracija SO-100 napoveduje pet sklepov roke kot RELATIVE delte od trenutnega stanja in prijemalo kot ABSOLUTE ciljno pozicijo, ker se binarni signal odprto-ali-zaprto obnaša bolje kot cilj kot pa kot delta.

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, skrajšano na bistveno. NON_EEF pomeni sklepni prostor; EEF bi pričakoval devetdimenzionalni vektor x, y, z plus 6D rotacijo.

Dve podrobnosti vas bosta stali dan, če ju ne poznate. Prvič, action_configs je pozicijski: dokumentacija zahteva enako dolžino in enak vrstni red kot modality_keys, in jasno opozarja na posledice napačnega vnosa, kar pomeni, da se napačna predstavitev uporabi tiho. Vaše prijemalo se trenira kot delta in vaša roka kot absolutni cilj, in ni sporočila o napaki. Drugič, register_modality_config potrjuje, da oznaka še ni registrirana, zato druga konfiguracija NEW_EMBODIMENT v istem procesu Python umre z Embodiment tag ... already registered. V en sam skript ne morete uvoziti dveh takšnih konfiguracij. Tretje pravilo se uveljavlja kasneje, pri uvajanju: akcija delta_indices mora biti neprekinjen razpon, ki se začne pri nič. Redko okno, kot je [0, 4, 8], je zavrnjeno, ker vse nadaljnje komponente linearno indeksirajo napovedani del in bi sicer izvedle napačne vrstice.

Spremenite delta_indices in morate ponovno generirati statistiko

Statistike normalizacije, zlasti meta/relative_stats.json, so izračunane za dolžino horizonta, ki ste jo imeli ob njihovi generaciji. Skrajšajte akcijski horizont iz 16 na 8 brez ponovne generacije in učenje se ustavi z IndexError: boolean index did not match indexed array ... dimension is 8 but corresponding boolean dimension is 16. Rešitev je en ukaz: python gr00t/data/stats.py --dataset-path <path> --embodiment-tag NEW_EMBODIMENT --modality-config-path examples/SO100/so100_config.py. Zaženite ga po vsaki spremembi delta_indices.

Korak 4: okolje

N1.7 je repozitorij premaknil na in Python 3.12. Stara pot conda plus pip install -e . pot še vedno obstaja v strnjenem delu datoteke README, vendar opozarja, da bodo odvisnosti GPU, vključno s flash-attn in TensorRT, morda potrebovale ročno namestitev. Uporabite uv, razen če imate poseben razlog, da ga ne. Kar zadeva flash-attn, ena podrobnost preprečuje zmedo: videli boste Installing flash-attn natisnjeno ob vsakem uv run. Ne gradi se ponovno. uv ponovno preverja URL-pripet wheel, ki je že predpomnjen, in to traja dve ali tri sekunde.

  1. 1
    Namestite git-lfs, nato klonirajte s podmoduli

    git-lfs je obvezen, ne izbiren. Brez njega se datoteke parquet v demo_data/ prenesejo kot kazalčni nastavki, in demo zagon ne uspe na naboru podatkov, ki je videti prisoten v seznamu datotek.

    bash
    sudo apt install git-lfs && git lfs install
    git clone --recurse-submodules https://github.com/NVIDIA/Isaac-GR00T
    cd Isaac-GR00T
  2. 2
    Namestite uv in sinhronizirajte okolje

    Privzeta namestitev potegne odvisnosti GPU, vključno s flash-attn in TensorRT. Na sveži sliki A100 ali H100 je to najdaljši posamezni korak, zato to storite, preden se posvetite čemur koli drugemu.

    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
    Avtentikacija proti Hugging Face

    To storite pred prvim zagonom usposabljanja, ne potem, ko ne uspe po osmih minutah.

    bash
    uv run huggingface-cli login   # or: export HF_TOKEN=<your_token>
  4. 4
    Preverjanje delovanja na priloženih demo podatkih SO-100

    Preden se dotaknete lastnega posnetka, zaženite 2000 korakov na demo_data/cube_to_bowl_5. To je pet epizod, konča se hitro in dokazuje okolje namesto vaših podatkov. Če ta zagon ne uspe, vam nič, kar storite z vašim naborom podatkov, ne bo pomagalo.

    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
Dve okoljski pasti, ki sta videti kot napake modela

FFmpeg 8. torchcodec 0.8.0 podpira samo FFmpeg 4 do 7, Ubuntu 25.10 in novejši pa dobavljajo različico 8. Napaka je Could not load libtorchcodec, kar zveni kot pokvarjena namestitev in ne kot konflikt različic. Namestite starejše izvajalno okolje, na primer conda install -c conda-forge 'ffmpeg<8', in njegove knjižnice dodajte v LD_LIBRARY_PATH. CUDA_HOME ni nastavljen. Fino uglaševanje popolnoma odpove. Zaženite bash scripts/deployment/dgpu/install_deps.sh enkrat, ali pa samo export CUDA_HOME=/usr/local/cuda.

Korak 5: ukaz za fino uglasitev in dejanske privzete vrednosti njegovih zastavic

Zamenjajte predstavitveni nabor podatkov s svojim in dodajte nastavitve, ki jih dejansko želite. Spodaj je celotna oblika, ki jo repozitorij uporablja v svoji vadnici za novo utelešenje, vključno z zastavicami za razširitev in shranjevanje kontrolnih točk, ki jih kratek primer v README izpušča. To je v ožjem smislu: jezikovna hrbtenica in vizualni kodirnik ostajata zamrznjena, trenirata pa se projektor in difuzijska glava za dejanja.

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
Enojni GPE. Za osem kartic zamenjajte zaganjalnik z uv run torchrun --nproc_per_node=8 --master_port=29500 in nastavite --num-gpus 8. Uporabite uv run torchrun, ne zgolj torchrun, sicer boste dobili napačno okolje.
ZastavicaPrivzeto v FinetuneConfigKaj počne
--global-batch-size64Skupna serija podatkov prek vseh GPE-jev pred akumulacijo gradientov. Priloženi primeri uporabljajo 32.
--learning-rate1e-4Ista vrednost, ki jo AY-Robots pošilja za svoj trener groot1.7.
--max-steps10000Skupno število korakov optimizatorja. Ovojnica examples/finetune.sh ima prav tako privzeto vrednost 10000.
--gradient-accumulation-steps1Pomnoži efektivno serijo podatkov. Vrednosti nad 1 sprožijo opozorilo o akumulirani velikosti.
--save-steps and --save-total-limit1000 and 5Pogostost shranjevanja kontrolnih točk in koliko jih je ohranjenih. Starejše so izbrisane.
--weight-decay and --warmup-ratio1e-5 and 0.05Eksplicitno nastavljeno tudi v examples/finetune.sh.
--state-dropout-prob0.2 in the CLI, 0.8 in the model configNaključno izpusti proprioceptivno stanje med treniranjem. Znižajte jo, če se vaša naloga opira na stanje.
--tune-llm and --tune-visualFalse and FalseHrbtenica privzeto ostane zamrznjena.
--tune-projector and --tune-diffusion-modelTrue and TrueProjektor in difuzijska glava za dejanja sta tista, ki se dejansko trenirata.
--use-percentilesTrueNormalizirajte s q01 in q99 namesto z neobdelanimi min in max vrednostmi.
--dataloader-num-workers2Nalaganje je zasnovano na CPE-ju. Primeri to vrednost povečajo na 4.
--seeddoes not existNa tem CLI-ju ni zastavice za seme.

Zadnja vrstica ni tipkarska napaka. launch_finetune.py je CLI orodje tyro, generirano iz podatkovnega razreda, in ta podatkovni razred nima polja za seme (seed). Datoteka README ločeno navaja 5 do 6 odstotkov variance med izvajanjem, ki jo povzroča nedeterministična augmentacija slik. Dva zagona z enakimi zastavicami ne bosta ustvarila enakih kontrolnih točk, kar je zelo pomembno, ko poskušate ugotoviti, ali je sprememba hiperparametra pomagala ali ste imeli srečo. Za primerjavo, lerobot-ov lastni trener privzeto uporablja seme 1000, in recept LeRobot GR00T eksplicitno posreduje --seed=42 eksplicitno.

Validacija je privzeto izklopljena, dokumentirana zastavica pa ni na voljo v tem CLI-ju

Fino uglaševanje se izvaja z eval_strategy="no", zato sploh ni krivulje validacijske izgube. Dobite samo izgubo pri usposabljanju in nič drugega. Vodnik za novo utelešenje vam naroča, da jo vklopite z --eval-strategy steps --eval-steps 500, vendar ta zastavica ne obstaja na launch_finetune.py: CLI je generiran s tyro iz podatkovnega razreda FinetuneConfig, in eval_strategy, eval_steps ter eval_batch_size so namesto tega polja razreda TrainingConfig. Njihove privzete vrednosti so "no", 500 in 2. Za dostop do njih uporabite popolnejšo vstopno točko gr00t/experiment/launch_train.py, kjer je ugnezdena zastavica --training.eval-strategy. Kakorkoli že, padajoča izguba pri usposabljanju sama po sebi pove zelo malo o posploševanju, kar je natanko situacija, opisana na izguba pada, vendar politika ne dela nič.

Koliko stane zagon z 20000 koraki

GR00T N1.7 potrebuje 80 GB kartico, zato je vprašanje stroškov omejeno. Na AY-Robots se trener groot1.7 izvaja na nivoju A100 80 GB ali H100 80 GB, kjer zagon traja 3 do 6 ur po ceni 1.20 do 2.00 USD na uro na promptnem trgu. To je približno 4 do 12 USD za privzeto nalogo z 20000 koraki. Ista naloga na SmolVLA ali ACT se izvaja na 24 GB kartici po ceni 0.30 do 0.60 USD na uro in 1 do 3 USD na zagon. To je prava kompromisna odločitev: GR00T stane približno štirikrat več na poskus, in ne morete ga zagnati na kartici 4090 pod svojo mizo.

ModelRazred GPUTipičen zagonTipični stroškiMinimalno število epizod
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

Minimalno število epizod 50-epizod je spodnja meja, ne cilj. NVIDIA-ina lastna pogosta vprašanja so zahtevnejša: približno 100 trajektorij za preprosto pobiranje in odlaganje na fiksni lokaciji, 500 ali več za kompleksne ali večstopenjske scene ter 100 do 500 za fino manipulacijo. Če imate 20 epizod, raje preživite popoldne s snemanjem kot večer z uglaševanjem. vodnik za zbiranje podatkov zajema, kaj loči uporabno epizodo od zapravljene, posnemite svoj prvi nabor podatkov je kratka različica, in SO-100 zbiranje podatkov je tista, specifična za roko.

Vodnik za usposabljanje AY-Robots za GR00T N1.7 na SO-100, ki prikazuje specifikacijski trak z razredom GPU, zahtevanim formatom nabora podatkov in privzetimi nastavitvami trenerja
Vodnik /train/groot-n1-7-on-so-100 predstavlja dejstva, ki bi jih sicer ročno rekonstruirali: razred GPU, format nabora podatkov in natančne privzete nastavitve, ki jih pošlje trener.

Korak 6: evalvacija odprte zanke, preden se dotaknete roke

Ne postavljajte svežega kontrolne točke na fizično roko, da bi ugotovili, ali je usposabljanje delovalo. Najprej zaženite odprtozančno evalvacijo. Ponovi posneto epizodo, model vpraša za dejanja na vsakem koraku in izriše napoved v primerjavi z resničnimi podatki z MSE in MAE. Ne stane nič in ujame napake pri preslikavi iz korakov 2 in 3.

bash
uv run python gr00t/eval/open_loop_eval.py \
    --dataset-path ./my_dataset_lerobot \
    --embodiment-tag NEW_EMBODIMENT \
    --model-path /tmp/so100/checkpoint-20000 \
    --traj-ids 0 \
    --execution-horizon 16 \
    --steps 400 \
    --modality-keys single_arm gripper
Grafi se shranijo v /tmp/open_loop_eval/traj_<id>.jpeg, razen če podate --save-plot-path. Privzete vrednosti: --execution-horizon 16, --steps 200, --denoising-steps 4, --traj-ids 0.

Repozitorij namerno zavrača objavo ciljnega MSE za podatke po meri, in to je pravilna odločitev: številka je odvisna od vaših akcijskih enot, vaše naloge in velikosti vašega nabora podatkov, zato prag, kopiran z roke nekoga drugega, ne pomeni nič. Pomemben je trend. Tukaj je referenčni zagon, ki ga repozitorij dokumentira na enem H100 s petepizodnim demo naborom podatkov in 2000 koraki.

Kontrolna točkaPovprečni MSE na poti 0Povprečni MAE na poti 0
50087.55.63
100025.43.30
150013.22.18
200010.01.76

Oblika je signal, ne absolutne vrednosti. Napaka bi morala enakomerno padati, ko se koraki usposabljanja kopičijo. Povprečeno čez vseh pet epizod usposabljanja namesto samo trajektorije 0, je končna kontrolna točka repozitorija dosegla približno 7.5 MSE in 1.5 MAE, tako da se celo referenčni zagon bere drugače, odvisno od tega, katere epizode povprečite. Zabeležite svojo izhodiščno vrednost z nespremenjenim demo ukazom, preden spremenite karkoli v svojih podatkih: če ne morete reproducirati znanega dobrega zagona, ne morete ločiti napake v nastavitvi od težave s podatki. Repozitorij prav tako preslikuje pogoste simptome v vzroke, in vsak od njih je operativen in ne napaka modela.

SimptomVerjeten vzrok
MSE je raven ali narašča skozi kontrolne točkeStopnja učenja je prenizka, ali pa se podatki sploh ne nalagajo. Preverite --dataset-path in delavce nalagalnika podatkov.
Krivulja napovedi je ravna ali konstantnaKljuči modality.json ali --modality-config-path se ne ujemajo. Ključi dejanj niso preslikani.
MSE je ogromen, ali NaN izguba med usposabljanjemNormalizacija akcij in stanj. Preverite meta/stats in da so razponi akcij fizično verjetni.
Dobro na trajektoriji 0, slabo na zadržanih epizodahPomanjkanje podatkov, ne napaka. Pet demo epizod se ne more posplošiti.

Druga pot: lerobot-train namesto Isaac-GR00T

Trenutna izdaja LeRobot, 0.6.1 na PyPI od 3. avgusta 2026, ponuja drugi in precej drugačen način za fino nastavitev istih osnovnih uteži. LeRobot izpostavlja GR00T N1.7 kot tip politike in ga usposablja preko lastne vstopne točke lerobot-train. Tukaj sta pomembni dve stvari. LeRobot CLI je nabor konzolnih skript, zato je vse, kar preberete, da pravi python lerobot/scripts/train.py, zastarelo in se ne bo izvedlo. In LeRobot je v celoti odstranil podporo za GR00T N1.5, zavračajoč kontrolne točke in konfiguracije N1.5 z opombo o migraciji, tako da če potrebujete N1.5 preko LeRobot, morate pripeti lerobot==0.5.1, zadnjo izdajo, ki jo podpira, objavljeno 7. aprila 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
Recept GR00T N1.7, izviren za LeRobot. Opomba relative_exclude_joints: prijemalo je izključeno iz relativnih dejanj, kar je enaka odločitev, kot jo sprejme so100_config.py z ActionRepresentation.ABSOLUTE.
VidikIsaac-GR00T launch_finetune.pylerobot-train --policy.type=groot
Različica nabora podatkovSamo LeRobot v2, potrebna je pretvorbaIzvorni nabor podatkov LeRobot, brez znižanja različice
Preslikava modalnostimeta/modality.json plus konfiguracija podatkov Pythonbrez modality.json; obnašanje določeno z zastavicami --policy.* v ukazni vrstici
Semesploh ni zastavice za seme--seed, privzeto za LeRobot 1000
Relativna dejanjaActionConfig za vsak ključ v konfiguraciji podatkov--policy.use_relative_actions plus --policy.relative_exclude_joints
Objavljeni referenčni rezultatiTrend MSE odprte zanke SO-100 na demo podatkihZbirke LIBERO, 96.5 odstotka povprečja v štirih zbirkah
Pot uvajanjarun_gr00t_server.py plus eval_so100.py preko ZMQlerobot-rollout, z razdeljevanjem v realnem času (queue_threshold naj ostane pri ali pod 5)
Samostojno izvajanje fine-tune
Prednosti
  • Vsaka zastavica je vidna in spremenljiva. Lahko odmrznete vizualni kodirnik, premaknete state_dropout_prob ali skrajšate akcijski horizont.
  • Grafi odprte zanke so lokalne datoteke. Primerjava checkpoint-5000 proti checkpoint-20000 je ukaz lupine.
  • Ne odvisite od nobene platforme, ki ostaja na spletu, in kontrolna točka je na vašem disku v standardni obliki.
  • Primeri meril uspešnosti repozitorija za LIBERO, SimplerEnv in DROID vam dajo znane dobre izvedbe za reprodukcijo, preden zaupate svojim podatkom.
Kompromisi
  • Okolje je večina dela. Različica FFmpeg, CUDA_HOME, git-lfs, zaprta hrbtenica, torchcodec: nič od tega niso težave modela in vsaka od njih ustavi izvajanje.
  • Pretvorba iz v3.0 v v2.1 zahteva ločeno virtualno okolje z lastnim korakom namestitve in prepiše vaš imenik nabora podatkov na mestu.
  • Najem GPU se začne zaračunavati, ko začnete z odpravljanjem napak, ne ko se začne usposabljanje, in nič ne ustavi instance, ko se izvajanje konča.
  • Brez semena pomeni brez bitne ponovljivosti, poleg 5 do 6 odstotkov variabilnosti med izvajanjem samo zaradi augmentacije.

Dva načina za pridobitev iste kontrolne točke

Najamete GPU in ste odgovorni za vsak korak. Realno gledano, prvič to traja popoldne, vsakič kasneje pa dvajset minut.

  1. Posnemite epizode z lerobot-record na SO-100. Dobite nabor podatkov LeRobot v3.0.
  2. Pretvorite ga v v2.1 s scripts/lerobot_conversion/convert_v3_to_v2.py v lastnem virtualnem okolju.
  3. Napišite meta/modality.json in konfiguracijo modalnosti v Pythonu, registrirano pod EmbodimentTag.NEW_EMBODIMENT.
  4. Najamite 80 GB kartico, klonirajte s podmoduli, uv sync, avtenticirajte se proti Hugging Face.
  5. Zaženite launch_finetune.py, nato open_loop_eval.py na več kontrolnih točkah in primerjajte trend MSE, preden se dotaknete strojne opreme.
  6. Prenesite kontrolno točko z naprave, preden uničite instanco, nato zgradite pot za serviranje do roke.
Korak, ki ga vsi pozabijo

Kopirajte kontrolno točko z najete instance, preden jo izklopite. `--save-total-limit 5` tudi pomeni, da se starejše kontrolne točke izbrišejo med potekom usposabljanja, zato kontrolna točka, ki ste jo želeli pri koraku 5000, morda ne bo več obstajala pri koraku 20000.

Matrika usposabljanja AY-Robots s petimi modeli politik kot vrsticami in štirimi robotskimi rokami kot stolpci, pri čemer vsaka celica povezuje na specifičen vodnik za usposabljanje
Matrika /train: pet modelov proti štirim rokam. Vrstica GR00T N1.7 zajema tudi SO-101, Koch v1.1 in LeKiwi.

Prenos kontrolne točke nazaj na roko

Isaac-GR00T uporablja delitev strežnik-odjemalec preko ZMQ. Politika se izvaja na GPU-ju, tanek odjemalec na robotskem stroju pa pošilja opazovanja in prejema dele dejanj. Primer SO-100 je dovolj popoln za kopiranje: zaženite run_gr00t_server.py z vašo kontrolno točko in --embodiment-tag NEW_EMBODIMENT, nato zaženite eval_so100.py na robotski strani s serijskim priključkom, ID-jem robota, indeksi kamere in jezikovnim navodilom. Imena kamer v tem ukazu se morajo ujemati s prijaznimi imeni iz vašega modality.json, ne pa s številkami naprav 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 nadzoruje, koliko predvidenih korakov se izvede, preden se načrtovanje ponovi. Mora biti največji action_horizon politike, in to število je dolžina action delta_indices v vaši konfiguraciji modalnosti, ne pa osnovnega modela. Priložena konfiguracija SO-100 predvideva 16, torej je 16 vaša zgornja meja; osnovna kontrolna točka nvidia/GR00T-N1.7-3B je konfigurirana za 40, in policy.md jasno navaja, da se lahko fino nastavljene kontrolne točke razlikujejo. Če jo presežete, dobite ValueError, ki navaja obe števili. 8 je vrednost, ki jo dokumentacija predlaga za uvajanje v realnem času. Staro ime zastavice --action-horizon še vedno deluje, vendar opozarja.
7.4 V, ne 12 V

Medtem ko ponovno ožičite roko: SO-100 poganja Feetech STS3215 bus servo motorje na 7.4 V napajalni liniji. Napajanje z 12 V jih uniči, in to je pogosta napaka, če imate tudi LeKiwi, katerega osnova deluje na 12 V, medtem ko njegova roka ne. Preverite napajanje pred prvim vklopom, ne po dimu. Glejte stran strojne opreme SO-100 in SO-100 proti LeKiwi. Če se roka vklopi, vendar se nič ne premika, je servo se ne odziva izhodišče.

Sedaj pa iskreni del o tem, kje se politika izvaja, saj imata usposabljanje in strežba različne zgodbe o strojni opremi. Fino nastavljanje zahteva 40 GB ali več. Inferenca ne: README navaja 16 GB ali več in izrecno omenja RTX 4090, tako da lahko kartica, ki jo že imate, streže kontrolno točko, ki je nikoli ne bi mogla ustvariti. Kar odloča, ali se politika zdi odzivna, ni VRAM, temveč kje se nahaja strežnik. Na AY-Robots je GR00T N1.7 samo v oblaku, zato kontrolna zanka plača povratno potovanje prek javnega interneta poleg 152 ms na korak dejanja, in samo SmolVLA in ACT se izvajata tudi lokalno. Za počasno pobiranje in odlaganje je oddaljeni pod preživetven. Za karkoli reaktivnega pa ne: politika postane neodločna na način, ki je videti natanko kot napaka pri usposabljanju, pa ni. ACT pri 20 ms na korak dejanja je model, ki tolerira najtesnejšo zanko, SmolVLA je pri 245 ms, in nobena količina nastavitev zakasnitve ne povrne povratnega potovanja, ki je že bilo porabljeno. Zaženite svojo prvo politiko podrobno opisuje strežniško stran.

Kaj gre dejansko narobe

  • GatedRepoError ob prvem zagonu. Nimate dostopa do nvidia/Cosmos-Reason2-2B ali se niste avtenticirali. To se zgodi, ko se je ura GPU-ja že zagnala.
  • Zbirka podatkov zavrnjena ob nalaganju. Skoraj vedno gre za zbirko podatkov v3.0. Pretvorite jo v nižjo različico. Glejte zbirka podatkov zavrnjena kot v3.
  • IndexError glede neujemajočih se booleovih dimenzij. Spremenili ste delta_indices in niste ponovno generirali statistik.
  • Zmanjka pomnilnika pri paketu 32. Zmanjšajte --global-batch-size in povečajte --gradient-accumulation-steps, ali zmanjšajte --num-shards-per-epoch, kar konfiguracija izrecno predlaga, ko je VRAM omejen. Glejte zmanjka pomnilnika med usposabljanjem.
  • Izguba pada, politika ne dela nič. Privzeto ni validacijske razdelitve, zato čista krivulja usposabljanja dokazuje zelo malo. Ta stran pokriva diagnozo.
  • Deluje v vaši nastavitvi in nikjer drugje. Pričakuje se pri majhni zbirki podatkov, posneti pod eno svetlobno pogoji. NVIDIA priporoča razširitev z barvnim nihanjem (colour jitter augmentation) plus 20 do 50 epizod pod različnimi svetlobnimi pogoji. Več tukaj.
  • Prijemalo se nikoli ne zapre pravilno. Preverite, ali je akcija prijemala ABSOLUTNA in sklepi roke RELATIVNI, v tem vrstnem redu v action_configs. Prijemalo se ne zapre navaja druge vzroke.
  • Kamera se tiho izklopi med snemanjem. Epizoda se še vedno shrani in video ključ še vedno obstaja, zato je to še posebej neprijetno. Kamera ni zaznana to pokriva.

Celoten indeks načinov odpovedi se nahaja na . Če izbirate med modeli namesto da bi odpravljali napake pri enem, in imata priložene referenčne številke z viri, in je primerjava, ki jo večina ljudi dejansko potrebuje, saj gre za izbiro med modelom, ki ga lahko trenirate na kartici pod svojo mizo, in tistim, za katerega morate najeti 80 GB vozlišče za fino uglaševanje. Za ozadje, zakaj se ti modeli obnašajo tako, kot se, sta in vredna branja. In če še nimate roke, pretaka fizični SO-100 brez prijave.

Koliko epizod potrebujem, preden se splača fino uglaševanje GR00T N1.7?

AY-Robots določa spodnjo mejo 50 epizod za trenerja groot1.7. NVIDIA-in lastni FAQ je bolj zahteven: približno 100 trajektorij za preprosto pobiranje in odlaganje na fiksni lokaciji, 500 ali več za kompleksne ali večstopenjske scene, in 100 do 500 za fino manipulacijo. Pod 50 je skoraj vedno bolje posneti več podatkov kot uglaševati hiperparametre. Če se uspeh po tem ustali, NVIDIA priporoča HG-DAgger: zaženite politiko, posredujte, ko ne uspe, in dodajte te popravke v zbirko podatkov.

Zakaj se moja zbirka podatkov ne naloži in kako ugotovim, katera različica je?

Odprite meta/info.json in preberite codebase_version. Trenutna CODEBASE_VERSION LeRobota na main je v3.0, zato je vse, kar je posneto z nedavnim orodjem, v3.0, in nalagalnik GR00T pričakuje v2. Pretvorite s scripts/lerobot_conversion/convert_v3_to_v2.py iz repozitorija Isaac-GR00T, ki zapiše codebase_version: v2.1 v pretvorjeno zbirko podatkov. Skripta se izvaja v lastnem virtualnem okolju, ker potrebuje drugačno različico lerobot kot jo določa GR00T.

Ali lahko fino uglašujem GR00T N1.7 na RTX 4090?

Ne. NVIDIA priporoča 40 GB ali več VRAM-a za fino uglaševanje in navaja vozlišča H100 ali L40; druge kartice delujejo, vendar trajajo veliko dlje. 4090 ima 24 GB. AY-Robots iz istega razloga ponuja GR00T N1.7 samo na ravni A100 80 GB in H100 80 GB. Zaključevanje (inference) je druga zgodba: 16 GB je dovolj za strežbo modela, tako da 4090 lahko poganja politiko, ki je ne more trenirati. Če želite VLA, ki ga lahko trenirate na 24 GB, je to SmolVLA z približno 450 M parametri ali ACT z približno 80 M.

Zakaj dva zagona z enakimi zastavicami dajeta različne kontrolne točke?

Ker launch_finetune.py nima semena (--seed). Gre za tyro CLI, generiran iz podatkovnega razreda, ki ne vsebuje polja za seme, zato nič ne določa RNG. Repozitorij ločeno navaja 5 do 6 odstotkov variance med zagoni, ki jo povzroča nedeterministična razširitev slik. Če je ponovljivost pomembna, uporabite pot LeRobot: lerobot-train sprejme --seed in objavljeni recept GR00T posreduje --seed=42.

Ali naj uporabim Isaac-GR00T ali lerobot-train?

Uporabite Isaac-GR00T, če želite referenčno implementacijo, nadzor nad predstavitvijo akcij po ključu, izvoz TensorRT ali referenčne primere za reprodukcijo, preden zaupate svojim podatkom. Uporabite lerobot-train, če je vaša zbirka podatkov že LeRobot v3.0 in je ne želite pretvarjati, če želite seme (--seed), ali če je preostali del vašega sklada že LeRobot. Oba fino uglašujeta iste uteži nvidia/GR00T-N1.7-3B. Upoštevajte, da je LeRobot popolnoma opustil podporo za GR00T N1.5: kontrolne točke N1.5 so zavrnjene z opombo o migraciji, in morate določiti lerobot==0.5.1, da jih še naprej uporabljate.

Ali res potrebujem zapestno kamero poleg sprednje kamere?

Priložena konfiguracija SO-100 uporablja obe, in modality.json preslikuje sprednjo in zapestno kamero kot ločena video ključa. Lahko trenirate z eno kamero, in tabela latence modelne kartice je izmerjena z eno kamero, vendar je pogled zapestja tisti, ki politiki daje uporabne informacije o prijemalu v trenutku stika. Če se prijemalo zapre ob napačnem času v vaših izvedbah, je manjkajoča ali slabo usmerjena zapestna kamera ena prvih stvari, ki jih je treba preveriti.

Fino uglašujte GR00T N1.7 na vašem SO-100, ne da bi prej zgradili okolje

Izberite model, zbirko podatkov in hiperparametre v obrazcu. Zaledje najame A100 80 GB ali H100 na spot trgu, zažene trenerja s paketom 32, učno hitrostjo 1e-4 in 20000 koraki ter zapiše kontrolne točke v shrambo objektov. Približno 4 do 12 USD na zagon.

Odprite vodnik za usposabljanje GR00T N1.7

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started