Faqja udhëzuese e AY-Robots për trajnimin e GR00T N1.7 në një krah SO-100, duke treguar nivelin e kërkuar të GPU-së, formatin e setit të të dhënave dhe parazgjedhjet e trajnerit
GR00T N1.7SO-100Rregullim i imëtLeRobotVLA

Si të Trajnoni GR00T N1.7 në Setin Tuaj të të Dhënave SO-100

AY-Robots ResearchAugust 23, 202628 min lexim

Një udhëzues i testuar për rregullimin e imët të NVIDIA GR00T N1.7 në një set të dhënash LeRobot SO-100: flag-et reale, modality.json, kërkesa v2.1, sa kushton një ekzekutim, dhe kurthet.

NVIDIA ofron një shembull fine-tuning pikërisht për krahun që ndoshta zotëroni. Brenda depoja Isaac-GR00T ekziston një dosje e quajtur demo_data/cube_to_bowl_5: pesë episode, 4,148 korniza në 30 fps, tashmë të shkruara si LeRobot v2.1, me një konfigurim modaliteti të përputhshëm nën examples/SO100/. I tij meta/info.json raporton robot_type: so101_follower, i cili në LeRobot është i njëjti klasë konfigurimi si so100_follower. Kjo është vërtet e dobishme, sepse do të thotë që shtegu i referencës për GR00T N1.7 në një gjashtë-gradë-lirie krah hobi mirëmbahet nga njerëzit që shkruan modelin. Nuk është një demo humanoide e zvogëluar, është i njëjti krah.

Lajmi i keq është distanca midis I recorded 60 episodes dhe the arm does the task. Ka rreth gjashtë vende ku ky pipeline dështon në heshtje dhe jo me zhurmë, dhe katër prej tyre ndodhen në skedarë që shumica e njerëzve nuk i hapin kurrë: meta/modality.json, konfigurimi i të dhënave Python, meta/relative_stats.json, dhe stringu i versionit të vetë datasetit. Ky udhëzues përshkruan rrugën manuale nga fillimi në fund me komandat reale, pastaj tregon të njëjtën punë si një formular në AY-Robots. Gjithçka më poshtë u kontrollua kundrejt degës kryesore të Isaac-GR00T që nga 20 gusht 2026 (linja e lëshimit n1.7) dhe lerobot 0.6.1, e publikuar në PyPI më 3 gusht 2026. Upstream lëviz shpejt, dhe aty ku një flag u riemërua, ky artikull e thekson.

Çfarë duhet të dini para se të filloni

  • Fine-tuning i GR00T N1.7 kërkon 40 GB ose më shumë VRAM. NVIDIA rekomandon nyje H100 ose L40. Një RTX 4090 me 24 GB nuk do ta bëjë këtë punë, megjithëse do të trajnojë SmolVLA dhe ACT.
  • Dataset-i duhet të jetë LeRobot v2 (v2.0 ose v2.1) plus një meta/modality.json specifik për GR00T. Një dataset LeRobot v3.0 nuk ngarkohet dhe duhet të konvertohet poshtë.
  • Pika e hyrjes është gr00t/experiment/launch_finetune.py, një CLI tyro. Nuk ka flag --seed, kështu që ekzekutimet nuk janë të riprodhueshme bit-për-bit.
  • Për një krah të personalizuar, tag-u i mishërimit është NEW_EMBODIMENT, dhe ky tag e bën --modality-config-path të detyrueshëm.
  • Receta e dërguar SO-100 parashikon nyjet e krahut si delta RELATIVE dhe kapësen si një objektiv ABSOLUTE. Marrja e këtij çiftimi mbrapsht është një dështim i heshtur, jo një gabim.
  • Në AY-Robots e njëjta punë është një formular: 20000 hapa, batch 32, learning rate 1e-4, afërsisht 4 deri në 12 USD në nivelin A100 80 GB ose H100.

Çfarë është në të vërtetë GR00T N1.7

GR00T N1.7 është një model vizion-gjuhë-veprim me paraqitjen me dy sisteme të përshkruar në punimin origjinal GR00T N1: një modul vizion-gjuhë që lexon kamerat dhe instruksionin, dhe një transformator difuzioni që e kthen këtë në një bllok komandash motorike të vazhdueshme. N1.7 zëvendësoi gjysmën e parë. Shtylla kurrizore Eagle nga N1.6 është hequr, zëvendësuar me nvidia/Cosmos-Reason2-2B në një arkitekturë Qwen3-VL, dhe modeli u paratrajnua në rreth 20,000 orë video njerëzore egocentrike mbi të dhënat e robotit. Shkrimi i vetë NVIDIA-s e vendos shifrën në 20,854 orë dhe raporton se kalimi nga 1 mijë në 20 mijë orë më shumë se dyfishon përfundimin mesatar të detyrave.

Gjysma e dytë ndryshoi gjithashtu, në mënyra që kanë rëndësi për ekzekutimin tuaj. Koka e veprimit ra nga 32 shtresa difuzioni në 16, copë veprimi u rrit nga 16 hapa në 40, dhe gjerësia maksimale e gjendjes dhe veprimit shkoi nga 29 në 132. Këto tre numra vijnë nga regjistri i ndryshimeve në README të depozitës; postimi i lançimit të vetë NVIDIA-s ende e përshkruan Sistemin 1 si një DiT me 32 shtresa, kështu që aty ku të dyja nuk pajtohen, besojini depozitës që jeni gati të klononi. Veprimet shprehen si parazgjedhje në një hapësirë relative fund-efektor, delta nga poza aktuale dhe jo objektiva absolute, gjë që lejon transferimin e parimeve të manipulimit të mësuara nga videoja njerëzore në kontrollin e robotit. Vetë koka është një transformator difuzioni përputhje-fluksi, e njëjta familje si Pi0.5 por me një shtyllë kurrizore tjetër përpara saj. Nëse jeni ende në gjeneratën e mëparshme, N1.7 kundrejt N1.5 mbulon nëse përmirësimi justifikon ripunimin e tubacionit tuaj.

VetiVlerëNga vjen
Parametra3,000,000,000Hugging Face model card
Shtyllë kurrizore vizion-gjuhënvidia/Cosmos-Reason2-2B (Qwen3-VL), gated on Hugging Facerepo README
Koka e veprimitFlow-matching diffusion transformer, 16 layers (N1.6 had 32)repo README
Horizonti i parashikuar i veprimit40 steps for the base checkpoint (N1.6 had 16)getting_started/policy.md and repo README
Gjerësia maksimale e gjendjes dhe veprimit132 (N1.6 had 29)repo README
Licenca e koditApache 2.0Isaac-GR00T repository
Licenca e peshaveNVIDIA Open Model License Agreementmodel card
Vonesa, H100 80 GB, PyTorch eager, 4 hapa denoisimi, 1 kamerë85.8 ms end to end, 11.7 Hzmodel card timing table
I njëjti harduer, tubacion i plotë TensorRT27.9 ms end to end, 35.9 Hzmodel card timing table
Vonesa që AY-Robots citon për GR00T N1.7 të shërbyer152 ms per action stepAY-Robots policy catalog

Këto tre rreshta të fundit shpjegojnë pjesën më të madhe të zhgënjimit që raportojnë njerëzit. Titulli 27.9 ms është një motor TensorRT në një H100 me një kamerë dhe katër hapa denoisimi. PyTorch i thjeshtë në të njëjtën kartë është 85.8 ms, dhe karta e modelit e vendos hendekun në 3.08x. Asnjëri numër nuk përfshin një shtresë shërbimi, një kamerë të dytë ose një kërcim rrjeti. 152 ms për hap veprimi që AY-Robots citon për GR00T N1.7 të shërbyer është shifra me shërbim në qark, dhe një udhëtim vajtje-ardhje në internet publik qëndron mbi këtë. Më shumë për këtë në fund. Për numrat pranë modeleve të tjera, GR00T N1.7 kundrejt Pi0.5 dhe GR00T N1.7 kundrejt SmolVLA i paraqesin ato krah për krah.

Faqja e modelit AY-Robots për GR00T N1.7 që tregon numrin e parametrave, nivelin e GPU-së, vonesën e inferencës dhe pikat e forta dhe kufizimet e deklaruara të modelit
Faqja /policies/groot-n1-7 përmban të njëjtën shirit specifikash që përndryshe do ta montonit me dorë nga karta e modelit dhe README i depozitës.

Çfarë i duhet ekzekutimit para se të shkruani diçka

KërkesaFine-tuningInferencë
VRAM, udhëzime nga NVIDIA40 GB ose më shumë, rekomandohet H100 ose L4016 GB ose më shumë, funksionon një RTX 4090
Python dhe CUDA në dGPU3.12 dhe CUDA 12.83.12 dhe CUDA 12.8
Backend videotorchcodec 0.8.0, vetëm FFmpeg 4 deri në 7e njëjta
Formati i grupit të të dhënaveLeRobot v2 plus meta/modality.jsonnuk aplikohet
Qasje në Hugging Faceaprovuar për nvidia/Cosmos-Reason2-2Be njëjta
Mjete të tjeragit-lfs dhe uvuv
Niveli i GPU-së AY-Robots për trajnerin groot1.7A100 80 GB ose H100 80 GBpod i ofruar automatikisht
Shtylla kurrizore e mbyllur do t'ju ndalojë në ekzekutimin e parë

Çdo pikë kontrolli GR00T, duke përfshirë bazën nvidia/GR00T-N1.7-3B, ngarkon nvidia/Cosmos-Reason2-2B në përdorimin e parë, dhe ajo depozitë është e mbyllur. README deklaron dështimin saktësisht: ngarkimi i modelit dështon me një GatedRepoError / 401 Client Error. Ajo që nuk përmendet është kur ndodh kjo, e cila është pasi keni marrë me qira kartën dhe ekzekutimi ka filluar. Kërkoni qasje në faqen e modelit, pastaj ekzekutoni uv run huggingface-cli login ose eksportoni HF_TOKEN para se të merrni me qira diçka.

Hapi 0: vetë episodet

Gjithçka më poshtë supozon se ju tashmë keni regjistruar episode. Nëse nuk keni, ky është hapi i parë i vërtetë dhe është ai që vendos se sa i mirë mund të jetë rezultati, sepse mësimi imitues nuk mund të rikuperojë informacionin që nuk është në të dhëna. Kalibroni të dy krahët së pari, pastaj drejtoni ndjekësin me një krah udhëheqës ndërsa lerobot-record shkruan skedarët parquet dhe transmetimet e kamerës. Nëse kalibrimi është i çaktivizuar, vlerat e nyjeve në grupin tuaj të të dhënave përshkruajnë një robot paksa të ndryshëm nga ai që do të ekzekutojë më vonë politikën, dhe asnjë sasi trajnimi nuk e rregullon këtë.

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 në një LeRobot aktual. Gjatësia e episodit parazgjedhur është 60 s dhe koha e rivendosjes 60 s. so100_follower dhe so101_follower janë të dy të regjistruar kundrejt të njëjtës klasë konfigurimi LeRobot, prandaj shembulli Isaac-GR00T SO100 përdor emrat so101; të dy funksionojnë në një SO-100. Emrat e kamerave që zgjidhni këtu (front, wrist) janë emrat që duhet të rishfaqen në modality.json.

Këshilla e LeRobot është të regjistroni të paktën 50 episode me rreth 10 për vendndodhje objekti, t'i mbani kamerat fikse dhe të mbani sjelljen e kapjes konsistente. Shtoni variacion më vonë, jo në fillim. Rregulli i përgjithshëm që vlen të mbahet mend: nëse nuk mund ta bënit vetë detyrën vetëm nga imazhet e kamerës, politika nuk mundet gjithashtu. Për konfigurimin specifik të krahut, fillimi me SO-100 dhe faqja e LeRobot për SO-100 mbulojnë portat, kalibrimin dhe indekset e kamerës. Në AY-Robots mund ta bëni këtë edhe përmes internetit nga shfletuesi duke përdorur teleoperacionin dhe të regjistroni direkt nga sesioni.

Hapi 1: grupi i të dhënave duhet të jetë LeRobot v2.1

Ky është pengesa më e zakonshme. Versioni aktual i LeRobot CODEBASE_VERSION në degën kryesore është v3.0, kështu që çdo gjë që regjistroni sot me një zinxhir mjetesh aktual del si v3.0. Ngarkuesi i GR00T pret v2. Depoja është e qartë për arsyen: shumë grupe të dhënash upstream si DROID, LIBERO dhe Bridge janë publikuar në v2, dhe mbështetja vendase për të dyja është planifikuar por nuk është dërguar. Pra, konvertimi është në dorën tuaj, dhe ai ekzekutohet në virtualenv-in e tij për një arsye konkrete: scripts/lerobot_conversion mbart pyproject-in e tij që kërkon Python 3.10 ose 3.11 dhe fikson lerobot në një commit të caktuar git, ndërsa Isaac-GR00T vetë kërkon Python 3.12. Instaloni konvertuesin nga rrënja e depozitës dhe do të merrni paketën gr00t në vend të saj, gjë që është gabimi për të cilin paralajmëron README-ja e tij. Nëse jeni i ri me formatin, hyrja e fjalorit grupi i të dhënave LeRobot shpjegon se çfarë ndodhet në të vërtetë brenda njërit.

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
Konvertuesi merr --repo-id, një --root opsional, dhe --force-conversion, i cili fshin çdo snapshot lokal ekzistues dhe e shkarkon përsëri. Ai shkruan codebase_version: v2.1 në meta/info.json.
Konvertimi mbishkruan në vend

Nëse grupi i të dhënave v3.0 ekziston tashmë lokalisht, skripti ndërton strukturën v2.1 pranë tij dhe më pas i shkëmben: origjinali zhvendoset në një dosje motër me versionin e shtuar, <name>_v3.0, dhe kopja e konvertuar merr rrugën origjinale. (Docstring-u i vetë skriptit e quan atë dosje _v30; kodi shton stringun e versionit, kështu që ajo që merrni në të vërtetë është _v3.0.) Surpriza e dytë: rezultati gjithmonë vendoset nën <root>/<repo-id>, kështu që --root examples/SO100/my_dataset_lerobot ju jep examples/SO100/my_dataset_lerobot/<your-hf-user>/<your-dataset>, dhe ajo rrugë më e gjatë është ajo që --dataset-path kërkon më vonë. Kur një punë trajnimi refuzon grupin tuaj të të dhënave për arsye versioni, faqja e grupit të të dhënave të refuzuar si v3 liston simptomat e sakta.

Struktura që GR00T dëshiron pas konvertimit është paraqitja klasike v2: meta/info.json, meta/episodes.jsonl, meta/tasks.jsonl, skedarë parquet nën data/chunk-000/, skedarë MP4 nën videos/chunk-000/observation.images./, dhe një skedar shtesë që LeRobot standard nuk e ka. Ky skedar shtesë është vendi ku ndodhen shumica e dështimeve të mbetura.

Hapi 2: modality.json, gjashtë numrat që vendosin gjithçka

Në një grup të dhënash LeRobot, gjendja e robotit dhe veprimi ruhen si matrica të sheshta float32. Për një SO-100, të dyja kanë formën [6]: pesë nyje krahu dhe një kapëse. Grupi i të dhënave demo i emërton ato shoulder_pan.pos, shoulder_lift.pos, elbow_flex.pos, wrist_flex.pos, wrist_roll.pos, gripper.pos, por këta emra ndodhen në info.json dhe asgjë në skedarin parquet nuk tregon se cili indeks është cili. meta/modality.json ofron atë hartëzim, dhe GR00T nuk do të trajnohet pa të. Këtu është ai që depoja ofron për SO-100, fjalë për fjalë.

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. Indekset janë zero-based dhe ndjekin prerjen Python, kështu që single_arm është [0:5] dhe gripper është [5:6].

Kopjojeni në grupin tuaj të të dhënave të konvertuara në meta/modality.json dhe riemërtoni çelësat e videos sipas emrave aktualë të kamerave tuaja. Nëse keni regjistruar me një kamerë të vetme sipër kokës të quajtur top, atëherë original_key është observation.images.top dhe emri miqësor është ai që do të referojë konfigurimi juaj i të dhënave. Të dyja duhet të bien dakord, dhe asnjëra prej tyre nuk kontrollon tjetrën për ju. Shënimi i gjuhës është më i keq, sepse i njëjti çelës duhet të shfaqet në tre vende.

ShtresaSkedariForma SO-100 e përdorur në depo
Kolona Parquetdata/chunk-*/episode_*.parquetannotation.human.task_description
Çelësi modality.jsonmeta/modality.json, under "annotation", without the annotation. prefixhuman.task_description
modality_keys në konfigurimin e të dhënaveyour so100_config.pyannotation.human.task_description
Pse çelësi i gjuhës ngatërron njerëzit

Segmentet pas annotation. zgjidhen nga kushdo që ka krijuar grupin e të dhënave. Të dhënat demo SO-100 përdorin annotation.human.task_description; LIBERO dhe SimplerEnv përdorin annotation.human.action.task_description. Të dyja janë të vlefshme. Nëse keni kopjuar një konfigurim nga një shembull LIBERO dhe e keni drejtuar atë në regjistrimin tuaj SO-100, kanali i gjuhës nuk zgjidh asgjë dhe modeli trajnohet me një udhëzim bosh. Humbja ende bie. Politika ende bën diçka. Thjesht injoron atë që i keni thënë të bëjë.

Hapi 3: konfigurimi i të dhënave, krahu relativ dhe kapësi absolut

Konfigurimi i modalitetit është një skedar Python dhe jo JSON, sepse ai gjithashtu vendos se si përfaqësohet çdo grup veprimi. Kjo është pjesa e rrjedhës së punës N1.7 që nuk ekzistonte në të njëjtën formë në N1.5, dhe pjesa që ia vlen të lexohet dy herë. Konfigurimi i dërguar SO-100 parashikon pesë nyjet e krahut si RELATIVE delta nga gjendja aktuale dhe kapësen si një ABSOLUTE pozicion objektiv, sepse një sinjal binar i hapur-ose-mbyllur sillet më mirë si objektiv sesa si 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, shkurtuar në thelbësore. NON_EEF do të thotë hapësirë nyjesh; EEF do të priste një vektor nëntë-dimensional të x, y, z plus një rrotullim 6D.

Dy detaje këtu do t'ju kushtojnë një ditë nëse nuk i dini. Së pari, action_configs është pozicional: dokumentacioni kërkon të njëjtën gjatësi dhe të njëjtin rend si modality_keys, dhe ata janë të prerë për pasojën e gabimit, e cila është se përfaqësimi i gabuar aplikohet në heshtje. Kapësja juaj trajnohet si delta dhe krahu juaj si një objektiv absolut, dhe nuk ka asnjë mesazh gabimi. Së dyti, register_modality_config pohon se etiketa nuk është regjistruar tashmë, kështu që një konfigurim i dytë NEW_EMBODIMENT në të njëjtin proces Python vdes me Embodiment tag ... already registered. Nuk mund të importoni dy prej tyre në një skript. Një rregull i tretë zbatohet më vonë, në vendosje: veprimi delta_indices duhet të jetë diapazoni i vazhdueshëm që fillon nga zero. Një dritare e rrallë si [0, 4, 8] refuzohet, sepse çdo gjë në rrjedhën e poshtme indeksion bllokun e parashikuar linearisht dhe përndryshe do të ekzekutonte rreshtat e gabuar.

Ndryshoni delta_indices dhe duhet të rigjeneroni statistikat

Statistikat e normalizimit, në veçanti meta/relative_stats.json, llogariten për gjatësinë e horizontit që kishit kur i gjeneruat. Shkurtimi i horizontit të veprimit nga 16 në 8 pa rigjeneruar dhe trajnimi vdes me IndexError: boolean index did not match indexed array ... dimension is 8 but corresponding boolean dimension is 16. Zgjidhja është një komandë: python gr00t/data/stats.py --dataset-path <path> --embodiment-tag NEW_EMBODIMENT --modality-config-path examples/SO100/so100_config.py. Ekzekutojeni pas çdo ndryshimi në delta_indices.

Hapi 4: ambienti

N1.7 e zhvendosi depozitën në dhe Python 3.12. Rruga e vjetër conda plus pip install -e . rruga ekziston ende në një seksion të palosur të README, por paralajmëron se varësitë e GPU-së, duke përfshirë flash-attn dhe TensorRT, mund të kërkojnë instalim manual. Përdorni uv nëse nuk keni një arsye specifike për të mos e bërë këtë. Në lidhje me flash-attn, një detaj shmang konfuzionin: do të shihni Installing flash-attn të printuar në çdo uv run. Nuk po rindërtohet. uv po rivalidion një 'wheel' të fiksuar me URL që është tashmë i ruajtur në cache, dhe kjo merr dy ose tre sekonda.

  1. 1
    Instaloni git-lfs, pastaj klononi me submodule

    git-lfs është i nevojshëm, jo opsional. Pa të, skedarët parquet në demo_data/ shkarkohen si 'pointer stubs', dhe ekzekutimi i demonstrimit dështon në një grup të dhënash që duket i pranishëm në listën e skedarëve.

    bash
    sudo apt install git-lfs && git lfs install
    git clone --recurse-submodules https://github.com/NVIDIA/Isaac-GR00T
    cd Isaac-GR00T
  2. 2
    Instaloni uv dhe sinkronizoni ambientin

    Instalimi i paracaktuar tërheq varësitë e GPU-së, duke përfshirë flash-attn dhe TensorRT. Në një imazh të ri A100 ose H100, ky është hapi i vetëm më i gjatë, prandaj bëjeni këtë para se të filloni t'i kushtoni vëmendje ndonjë gjëje tjetër.

    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
    Autentifikohuni kundrejt Hugging Face

    Bëjeni këtë para lëshimit të parë të trajnimit, jo pasi të dështojë pas tetë minutash.

    bash
    uv run huggingface-cli login   # or: export HF_TOKEN=<your_token>
  4. 4
    Kontrolli i funksionalitetit në të dhënat demo të SO-100 të dërguara

    Para se të prekni regjistrimin tuaj, ekzekutoni 2000 hapa në demo_data/cube_to_bowl_5. Janë pesë episode, përfundon shpejt dhe vërteton ambientin më shumë sesa të dhënat tuaja. Nëse ky ekzekutim dështon, asgjë që bëni me grupin tuaj të të dhënave nuk do të ndihmojë.

    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
Dy kurthe ambienti që duken si gabime të modelit

FFmpeg 8. torchcodec 0.8.0 mbështet vetëm FFmpeg 4 deri në 7, dhe Ubuntu 25.10 e më vonë dërgojnë versionin 8. Gabimi është Could not load libtorchcodec, i cili lexohet si një instalim i prishur dhe jo si një konflikt versioni. Instaloni një runtime më të vjetër, për shembull conda install -c conda-forge 'ffmpeg<8', dhe vendosni libraritë e tij në LD_LIBRARY_PATH. CUDA_HOME nuk është vendosur. Fine-tuning dështon plotësisht. Ekzekutoni bash scripts/deployment/dgpu/install_deps.sh një herë, ose thjesht export CUDA_HOME=/usr/local/cuda.

Hapi 5: komanda fine-tune dhe cilat janë vlerat e saj të paracaktuara

Zëvendësoni setin e të dhënave demo me tuajin dhe shtoni parametrat që dëshironi. Më poshtë është forma e plotë që depoja përdor në tutorialin e saj të ri-embodiment, duke përfshirë flamujt e augmentimit dhe checkpointing që shembulli i shkurtër README lë jashtë. Ky është në kuptimin e ngushtë: shtylla kurrizore e gjuhës dhe enkoderi vizual mbeten të ngrirë, dhe ajo që trajnohet është projektori dhe koka e veprimit të difuzionit.

bash
export NUM_GPUS=1
CUDA_VISIBLE_DEVICES=0 uv run python \
    gr00t/experiment/launch_finetune.py \
    --base-model-path nvidia/GR00T-N1.7-3B \
    --dataset-path ./my_dataset_lerobot \
    --embodiment-tag NEW_EMBODIMENT \
    --modality-config-path examples/SO100/so100_config.py \
    --num-gpus $NUM_GPUS \
    --output-dir /tmp/so100 \
    --save-total-limit 5 \
    --save-steps 2000 \
    --max-steps 20000 \
    --use-wandb \
    --global-batch-size 32 \
    --color-jitter-params brightness 0.3 contrast 0.4 saturation 0.5 hue 0.08 \
    --dataloader-num-workers 4
GPU i vetëm. Për tetë karta, zëvendësoni lëshuesin me uv run torchrun --nproc_per_node=8 --master_port=29500 dhe vendosni --num-gpus 8. Përdorni uv run torchrun, jo vetëm torchrun, ose do të merrni mjedisin e gabuar.
FlamuriParazgjedhja në FinetuneConfigÇfarë bën
--global-batch-size64Batch total në të gjitha GPU-të para akumulimit të gradientit. Shembujt e ofruar përdorin 32.
--learning-rate1e-4E njëjta vlerë që AY-Robots dërgon për trajnerin e saj groot1.7.
--max-steps10000Hapat totalë të optimizuesit. Wrapper-i examples/finetune.sh gjithashtu parazgjedh 10000.
--gradient-accumulation-steps1Shumëzon batch-in efektiv. Vlerat mbi 1 lëshojnë një paralajmërim që tregon madhësinë e akumuluar.
--save-steps and --save-total-limit1000 and 5Frekuenca e pikave të kontrollit, dhe sa prej tyre ruhen. Më të vjetrat fshihen.
--weight-decay and --warmup-ratio1e-5 and 0.05Vendosur në mënyrë eksplicite nga examples/finetune.sh gjithashtu.
--state-dropout-prob0.2 in the CLI, 0.8 in the model configLëshon rastësisht gjendjen proprioceptive gjatë trajnimit. Uleni nëse detyra juaj mbështetet te gjendja.
--tune-llm and --tune-visualFalse and FalseShtylla kurrizore mbetet e ngrirë si parazgjedhje.
--tune-projector and --tune-diffusion-modelTrue and TrueProjektori dhe koka e veprimit të difuzionit janë ato që trajnohen në të vërtetë.
--use-percentilesTrueNormalizoni me q01 dhe q99 në vend të min dhe max të papërpunuar.
--dataloader-num-workers2Ngarkuesi është i bazuar në CPU sipas dizajnit. Shembujt e rrisin këtë në 4.
--seednuk ekzistonNuk ka flamur seed në këtë CLI.

Rreshti i fundit nuk është një gabim shtypi. launch_finetune.py është një CLI tyro i gjeneruar nga një dataclass, dhe ai dataclass nuk ka fushë seed. README veçmas thekson 5 deri në 6 për qind variacion midis ekzekutimeve të shkaktuara nga augmentimi jo-deterministik i imazhit. Dy ekzekutime me flamuj identikë nuk do të prodhojnë pika kontrolli identike, gjë që ka shumë rëndësi kur po përpiqeni të vendosni nëse një ndryshim i hiperparametrit ndihmoi apo nëse keni pasur fat. Për krahasim, trajneri i lerobot-it parazgjedhur ka seed 1000, dhe receta LeRobot GR00T kalon --seed=42 në mënyrë eksplicite.

Validimi është i fikur si parazgjedhje, dhe flamuri i dokumentuar nuk është në këtë CLI

Fine-tuning ekzekutohet me eval_strategy="no", kështu që nuk ka fare kurbë humbjeje validimi. Merrni humbjen e trajnimit dhe asgjë tjetër. Udhëzuesi i ri i implementimit ju thotë ta ndizni me --eval-strategy steps --eval-steps 500, por ky flamur nuk ekziston në launch_finetune.py: CLI gjenerohet nga tyro nga dataclass-i FinetuneConfig, dhe eval_strategy, eval_steps dhe eval_batch_size janë fusha të TrainingConfig në vend të kësaj. Parazgjedhjet e tyre aty janë "no", 500 dhe 2. Për t'i arritur ato, përdorni pikën më të plotë të hyrjes gr00t/experiment/launch_train.py, ku flamuri i folezuar është --training.eval-strategy. Në çdo rast, një humbje trajnimi në rënie më vete ju tregon shumë pak për përgjithësimin, gjë që është pikërisht situata e përshkruar në humbja bie por politika nuk bën asgjë.

Sa kushton një ekzekutim me 20000 hapa

GR00T N1.7 ka nevojë për një kartë 80 GB, kështu që pyetja e kostos ka një përgjigje të ngushtë. Në AY-Robots, trajneri groot1.7 ekzekutohet në nivelin A100 80 GB ose H100 80 GB, ku një ekzekutim zgjat 3 deri në 6 orë me 1.20 deri në 2.00 USD për orë në tregun spot. Kjo është afërsisht 4 deri në 12 USD për punën parazgjedhur me 20000 hapa. E njëjta detyrë në SmolVLA ose ACT bie në një kartë 24 GB me 0.30 deri në 0.60 USD për orë dhe 1 deri në 3 USD për ekzekutim. Ky është kompromisi i vërtetë: GR00T kushton rreth katër herë më shumë për përpjekje, dhe nuk mund ta ekzekutoni në 4090-ën nën tavolinën tuaj.

ModeliNiveli i GPU-sëKohëzgjatja tipikeKostoja tipikeEpizodat minimale
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

Minimumi prej 50-epizodash është një kufi i poshtëm, jo një objektiv. FAQ-ja e vetë NVIDIA-s është më kërkuese: rreth 100 trajektore për një marrje dhe vendosje të thjeshtë në një vendndodhje fikse, 500 ose më shumë për skena komplekse ose me shumë hapa, dhe 100 deri në 500 për manipulim të imët. Nëse jeni në 20 epizoda, kaloni pasditen duke regjistruar në vend që të kaloni mbrëmjen duke rregulluar. Udhëzuesi i mbledhjes së të dhënave mbulon atë që ndan një epizod të dobishëm nga një i humbur, regjistroni grupin tuaj të parë të të dhënave është versioni i shkurtër, dhe mbledhja e të dhënave SO-100 është ajo specifike për krahun.

Udhëzuesi i trajnimit AY-Robots për GR00T N1.7 në SO-100, duke treguar shiritin e specifikimeve me nivelin e GPU-së, formatin e kërkuar të grupit të të dhënave dhe parazgjedhjet e trajnerit
Udhëzuesi /train/groot-n1-7-on-so-100 paraqet faktet që përndryshe do t'i rindërtonit me dorë: niveli i GPU-së, formati i grupit të të dhënave dhe parazgjedhjet e sakta që dërgon trajneri.

Hapi 6: vlerësimi me qark të hapur para se të prekni krahun

Mos vendosni një pikë kontrolli të re në një krah fizik për të zbuluar nëse trajnimi funksionoi. Ekzekutoni së pari vlerësimin me qark të hapur. Ai riprodhon një episod të regjistruar, i kërkon modelit veprime në çdo hap dhe vizaton parashikimin kundrejt të dhënave reale me MSE dhe MAE. Nuk kushton asgjë dhe kap gabimet e hartëzimit nga hapat 2 dhe 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
Grafikët shfaqen në /tmp/open_loop_eval/traj_<id>.jpeg nëse nuk kaloni --save-plot-path. Parazgjedhjet: --execution-horizon 16, --steps 200, --denoising-steps 4, --traj-ids 0.

Depoja refuzon qëllimisht të publikojë një MSE të synuar për të dhënat e personalizuara, dhe ky është vendimi i duhur: numri varet nga njësitë tuaja të veprimit, detyra juaj dhe madhësia e grupit tuaj të të dhënave, kështu që një prag i kopjuar nga krahu i dikujt tjetër nuk do të thotë asgjë. Ajo që ka kuptim është tendenca. Këtu është ekzekutimi referencë që depoja dokumenton në një H100 të vetëm me grupin e të dhënave demo me pesë episode dhe 2000 hapa.

Pikë kontrolliMSE mesatare në traj 0MAE mesatare në traj 0
50087.55.63
100025.43.30
150013.22.18
200010.01.76

Forma është sinjali, jo vlerat absolute. Gabimi duhet të bjerë vazhdimisht ndërsa hapat e trajnimit grumbullohen. Mesatarisht në të gjitha pesë episodet e trajnimit, në vend të vetëm trajektores 0, pika e kontrollit përfundimtare e depozitës shënoi afërsisht 7.5 MSE dhe 1.5 MAE, kështu që edhe ekzekutimi i referencës lexohet ndryshe në varësi të episodeve që mesataroni. Regjistroni bazën tuaj në komandën demo të pamodifikuar përpara se të ndryshoni diçka në lidhje me të dhënat tuaja: nëse nuk mund të riprodhoni një ekzekutim të njohur si të mirë, nuk mund të dalloni një gabim konfigurimi nga një problem me të dhënat. Depozita gjithashtu harton simptomat e zakonshme me shkaqet, dhe secila prej tyre është operacionale dhe jo një gabim i modelit.

SimptomaShkaku i mundshëm
MSE i sheshtë ose në rritje nëpër pika kontrolliShkalla e të mësuarit shumë e ulët, ose të dhënat nuk po ngarkohen fare. Kontrolloni --dataset-path dhe punëtorët e ngarkuesit të të dhënave.
Kurba e parashikimit është e sheshtë ose konstanteÇelësat modality.json ose --modality-config-path nuk përputhen. Çelësat e veprimit nuk janë hartuar.
MSE i madh, ose humbje NaN gjatë trajnimitNormalizimi i veprimit dhe gjendjes. Verifikoni meta/stats dhe që diapazonët e veprimit janë fizikisht të besueshëm.
Mirë në traj 0, dobët në episodet e mbajtura jashtëMungesa e të dhënave, jo një gabim. Pesë episode demo nuk mund të përgjithësohen.

Rruga tjetër: lerobot-train në vend të Isaac-GR00T

Versioni aktual i LeRobot, 0.6.1 në PyPI që nga 3 gusht 2026, ofron një mënyrë të dytë dhe mjaft të ndryshme për të rregulluar të njëjtat pesha bazë. LeRobot ekspozon GR00T N1.7 si një lloj politike dhe e trajnon atë përmes pikës së hyrjes së vet lerobot-train. Dy gjëra kanë rëndësi këtu. CLI i LeRobot është një grup skriptesh konsolë, kështu që çdo gjë që lexoni që thotë python lerobot/scripts/train.py është e vjetëruar dhe nuk do të ekzekutohet. Dhe LeRobot hoqi plotësisht mbështetjen për GR00T N1.5, duke refuzuar pikat e kontrollit dhe konfigurimet e N1.5 me një shënim migrimi, kështu që nëse keni nevojë për N1.5 përmes LeRobot duhet të fiksoni lerobot==0.5.1, versioni i fundit që e mbështet atë, i publikuar më 7 prill 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
Receta GR00T N1.7 vendase e LeRobot. Vini re relative_exclude_joints: kapësi përjashtohet nga veprimet relative, i cili është i njëjti vendim që merr so100_config.py me ActionRepresentation.ABSOLUTE.
AspektiIsaac-GR00T launch_finetune.pylerobot-train --policy.type=groot
Versioni i grupit të të dhënaveVetëm LeRobot v2, kërkohet konvertimGrup të dhënash vendas LeRobot, pa ulje versioni
Hartimi i modalitetitmeta/modality.json plus një konfigurim të dhënash Pythonpa modality.json; sjellja vendoset nga flamujt --policy.* në rreshtin e komandës
Farapa flamur fare--seed, LeRobot parazgjedhur 1000
Veprimet relativeActionConfig për çdo çelës në konfigurimin e të dhënave--policy.use_relative_actions plus --policy.relative_exclude_joints
Rezultatet referencë të publikuaraTrendi MSE me qark të hapur SO-100 në të dhënat demoSuita LIBERO, mesatarisht 96.5 për qind në katër suita
Shtegu i vendosjesrun_gr00t_server.py plus eval_so100.py mbi ZMQlerobot-rollout, me ndarje në kohë reale (queue_threshold duhet të qëndrojë në ose nën 5)
Ekzekutimi i rregullimit të imët vetë
Avantazhe
  • Çdo flamur është i dukshëm dhe i ndryshueshëm. Mund të zhbllokoni koduesin vizual, të zhvendosni state_dropout_prob, ose të shkurtoni horizontin e veprimit.
  • Grafikët me qark të hapur janë skedarë lokalë. Krahasimi i checkpoint-5000 me checkpoint-20000 është një komandë shell.
  • Ju nuk varet nga asnjë platformë që të qëndrojë online, dhe pika e kontrollit qëndron në diskun tuaj në një format standard.
  • Shembujt e referencës së depozitës për LIBERO, SimplerEnv dhe DROID ju japin ekzekutime të njohura dhe të mira për t'u riprodhuar përpara se t'i besoni të dhënave tuaja.
Kompromise
  • Mjedisi është pjesa më e madhe e punës. Versioni FFmpeg, CUDA_HOME, git-lfs, shtylla kurrizore e mbyllur, torchcodec: asnjë prej këtyre nuk janë probleme të modelit dhe secila prej tyre ndalon ekzekutimin.
  • Konvertimi nga v3.0 në v2.1 kërkon një virtualenv të veçantë me hapin e vet të instalimit, dhe rishkruan drejtorinë e grupit tuaj të të dhënave në vend.
  • Qiraja e GPU-së fillon faturimin kur filloni debugimin, jo kur fillon trajnimi, dhe asgjë nuk e ndalon instancën kur përfundon ekzekutimi.
  • Mungesa e farës do të thotë mungesë riprodhueshmërie bit-për-bit, përveç variancës 5 deri në 6 për qind nga ekzekutimi në ekzekutim vetëm nga augmentimi.

Dy mënyra për të marrë të njëjtën pikë kontrolli

Ju merrni me qira GPU-në dhe zotëroni çdo hap. Realisht, kjo është një pasdite herën e parë dhe njëzet minuta çdo herë pas saj.

  1. Regjistroni episode me lerobot-record në SO-100. Merrni një set të dhënash LeRobot v3.0.
  2. Konvertojeni në v2.1 me scripts/lerobot_conversion/convert_v3_to_v2.py në virtualenv-in e vet.
  3. Shkruani meta/modality.json dhe një konfigurim modaliteti Python, të regjistruar nën EmbodimentTag.NEW_EMBODIMENT.
  4. Merrni me qira një kartë 80 GB, klononi me submodules, uv sync, autentifikohuni kundrejt Hugging Face.
  5. Ekzekutoni launch_finetune.py, pastaj open_loop_eval.py në disa pika kontrolli, dhe krahasoni trendin MSE para se të prekni harduerin.
  6. Merrni pikën e kontrollit nga makina para se të shkatërroni instancën, pastaj ndërtoni rrugën e shërbimit drejt krahut.
Hapi që të gjithë harrojnë

Kopjoni pikën e kontrollit nga instanca e marrë me qira para se ta mbyllni. --save-total-limit 5 gjithashtu do të thotë që pikat e kontrollit më të vjetra fshihen ndërsa trajnimi vazhdon, kështu që pika e kontrollit që dëshironit në hapin 5000 mund të mos ekzistojë më në hapin 20000.

The AY-Robots training matrix with five policy models as rows and four robot arms as columns, each cell linking to a specific training guide
Matrica /train: pesë modele kundrejt katër krahëve. Rreshti GR00T N1.7 mbulon gjithashtu SO-101, Koch v1.1 dhe LeKiwi.

Kthimi i pikës së kontrollit në krah

Isaac-GR00T përdor një ndarje server-klient mbi ZMQ. Politika ekzekutohet në GPU, dhe një klient i hollë në makinën e robotit dërgon vëzhgime dhe merr pjesë veprimesh. Shembulli SO-100 është mjaft i plotë për t'u kopjuar: filloni run_gr00t_server.py me pikën tuaj të kontrollit dhe --embodiment-tag NEW_EMBODIMENT, pastaj ekzekutoni eval_so100.py në anën e robotit me portin serial, ID-në e robotit, indekset e kamerës dhe udhëzimin gjuhësor. Emrat e kamerave në atë komandë duhet të përputhen me emrat miqësorë nga modality.json juaj, jo me numrat e pajisjeve të OS-së.

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 kontrollon sa nga hapat e parashikuar ekzekutohen para ri-planifikimit. Ai duhet të jetë maksimumi action_horizon i politikës, dhe ai numër është gjatësia e delta_indices të veprimit në konfigurimin tuaj të modalitetit, jo ai i modelit bazë. Konfigurimi i SO-100 i dërguar parashikon 16, kështu që 16 është tavani juaj; pika e kontrollit bazë nvidia/GR00T-N1.7-3B është konfiguruar për 40, dhe policy.md thotë qartë se pikat e kontrollit të finetunuara mund të ndryshojnë. Kalojeni dhe do të merrni një ValueError që emërton të dy numrat. 8 është vlera që dokumentet sugjerojnë për vendosje në kohë reale. Emri i vjetër i flamurit --action-horizon ende funksionon por paralajmëron.
7.4 V, jo 12 V

Ndërsa po lidhni krahun përsëri: SO-100 përdor servo autobusi Feetech STS3215 në një shirit 7.4 V. Furnizimi i tyre me 12 V i shkatërron ato, dhe është një gabim i lehtë nëse zotëroni gjithashtu një LeKiwi, baza e të cilit funksionon me 12 V ndërsa krahu i tij jo. Kontrolloni furnizimin para ndezjes së parë, jo pas tymit. Shihni faqen e harduerit SO-100 dhe SO-100 kundrejt LeKiwi. Nëse krahu ndizet por asgjë nuk lëviz, servo nuk përgjigjet është vendi për të filluar.

Tani pjesa e sinqertë rreth vendit ku ekzekutohet politika, sepse trajnimi dhe shërbimi kanë histori të ndryshme harduerike. Fine-tuning kërkon 40 GB ose më shumë. Inferenca jo: README e vendos atë në 16 GB ose më shumë dhe emërton shprehimisht RTX 4090, kështu që një kartë që tashmë zotëroni mund të shërbejë një pikë kontrolli që nuk mund ta kishte prodhuar kurrë. Ajo që vendos nëse politika ndihet e përgjegjshme nuk është VRAM, është vendi ku ndodhet serveri. Në AY-Robots GR00T N1.7 është vetëm në cloud, kështu që cikli i kontrollit paguan një udhëtim vajtje-ardhje në internet publik mbi 152 ms për hap veprimi, dhe vetëm SmolVLA dhe ACT ekzekutohen gjithashtu lokalisht. Për marrje dhe vendosje të ngadaltë, një pod i largët është i mbijetueshëm. Për çdo gjë reaktive nuk është: politika bëhet hezituese në një mënyrë që duket saktësisht si një dështim trajnimi dhe nuk është i tillë. ACT me 20 ms për hap veprimi është modeli që toleron ciklin më të ngushtë, SmolVLA qëndron në 245 ms, dhe asnjë sasi e akordim i latencës nuk e kthen një udhëtim vajtje-ardhje që tashmë është shpenzuar. Ekzekutoni politikën tuaj të parë shpjegon anën e shërbimit nga fillimi në fund.

Çfarë shkon vërtet keq

  • GatedRepoError në ekzekutimin e parë. Nuk ju është dhënë qasje në nvidia/Cosmos-Reason2-2B, ose nuk jeni autentifikuar. Kjo ndodh pasi ora e GPU-së ka filluar tashmë.
  • Seti i të dhënave i refuzuar gjatë ngarkimit. Pothuajse gjithmonë një set të dhënash v3.0. Konvertojeni atë. Shih seti i të dhënave i refuzuar si v3.
  • IndexError rreth dimensioneve boolean të papërputhura. Keni ndryshuar delta_indices dhe nuk keni rigjeneruar statistikat.
  • Mungesë memorie në batch 32. Zvogëloni --global-batch-size dhe rrisni --gradient-accumulation-steps, ose zvogëloni --num-shards-per-epoch, të cilën konfigurimi e sugjeron shprehimisht kur VRAM është e kufizuar. Shih mungesë memorie gjatë trajnimit.
  • Humbja bie, politika nuk bën asgjë. Nuk ka ndarje validimi si parazgjedhje, kështu që një kurbë trajnimi e pastër provon shumë pak. Kjo faqe mbulon diagnozën.
  • Funksionon në konfigurimin tuaj dhe askund tjetër. E pritshme me një set të dhënash të vogël të filmuar në një kusht ndriçimi. NVIDIA rekomandon shtimin e dridhjes së ngjyrave plus 20 deri në 50 episode në ndriçime të ndryshme. Më shumë këtu.
  • Kapësi nuk mbyllet kurrë siç duhet. Kontrolloni që veprimi i kapësit të jetë ABSOLUTE dhe nyjet e krahut RELATIVE, në atë rend në action_configs. Kapësi nuk mbyllet liston shkaqet e tjera.
  • Një kamera ndalon së funksionuari në mes të regjistrimit. Episodi ende ruhet dhe çelësi i videos ende ekziston, prandaj kjo është e keqe. Kamera nuk detektohet e mbulon këtë.

Indeksi i plotë i mënyrave të dështimit gjendet në . Nëse jeni duke zgjedhur midis modeleve në vend që të rregulloni një, dhe kanë numra referencë me burime të bashkangjitura, dhe është krahasimi që shumica e njerëzve kanë nevojë, sepse është zgjedhja midis një modeli që mund ta trajnoni në kartën nën tavolinën tuaj dhe një modeli për të cilin duhet të merrni me qira një nyje 80 GB për ta rregulluar. Për sfondin se pse këto modele sillen në mënyrën si sillen, dhe vlejnë të lexohen së pari. Dhe nëse nuk keni ende një krah, transmeton një SO-100 fizik pa regjistrim.

Sa episode më duhen para se të vlejë rregullimi i GR00T N1.7?

AY-Robots vendos një minimum prej 50 episodesh për trajnerin groot1.7. FAQ-ja e NVIDIA-s është më kërkuese: rreth 100 trajektore për një marrje dhe vendosje të thjeshtë në një vendndodhje fikse, 500 ose më shumë për skena komplekse ose me shumë hapa, dhe 100 deri në 500 për manipulim të imët. Nën 50, pothuajse gjithmonë është më mirë të regjistroni më shumë të dhëna sesa të rregulloni hiperparametrat. Nëse suksesi stabilizohet pas kësaj, NVIDIA rekomandon HG-DAgger: ekzekutoni politikën, ndërhyni kur dështon dhe shtoni ato korrigjime në setin e të dhënave.

Pse seti im i të dhënave nuk ngarkohet, dhe si ta kuptoj se çfarë versioni është?

Hapni meta/info.json dhe lexoni codebase_version. CODEBASE_VERSION aktuale e LeRobot në main është v3.0, kështu që çdo gjë e regjistruar me një zinxhir mjetesh të fundit është v3.0, dhe ngarkuesi GR00T pret v2. Konvertoni me scripts/lerobot_conversion/convert_v3_to_v2.py nga depoja Isaac-GR00T, e cila shkruan codebase_version: v2.1 në setin e të dhënave të konvertuar. Skripti ekzekutohet në virtualenv-in e vet sepse ka nevojë për një version tjetër të lerobot nga ai që përdor GR00T.

A mund ta rregulloj GR00T N1.7 në një RTX 4090?

Jo. NVIDIA rekomandon 40 GB ose më shumë VRAM për rregullim dhe përmend nyjet H100 ose L40; karta të tjera funksionojnë por zgjasin shumë më gjatë. Një 4090 ka 24 GB. AY-Robots ofron GR00T N1.7 vetëm në nivelin A100 80 GB dhe H100 80 GB për të njëjtën arsye. Inferenca është një histori tjetër: 16 GB është e mjaftueshme për të shërbyer modelin, kështu që një 4090 mund të ekzekutojë një politikë që nuk mund ta trajnojë. Nëse dëshironi një VLA që mund ta trajnoni në 24 GB, ai është SmolVLA me rreth 450 M parametra ose ACT me rreth 80 M.

Pse dy ekzekutime me flamuj identikë japin pika kontrolli të ndryshme?

Sepse launch_finetune.py nuk ka një seed. Është një CLI tyro e gjeneruar nga një dataclass që nuk përmban fushën seed, kështu që asgjë nuk fikson RNG-në. Depoja veçmas vëren 5 deri në 6 për qind variancë midis ekzekutimeve të shkaktuara nga augmentimi jo-deterministik i imazhit. Nëse riprodhueshmëria ka rëndësi, përdorni rrugën LeRobot në vend të kësaj: lerobot-train merr --seed dhe receta e publikuar GR00T kalon --seed=42.

A duhet të përdor Isaac-GR00T apo lerobot-train?

Përdorni Isaac-GR00T nëse dëshironi implementimin referencë, kontrollin për çelës mbi përfaqësimin e veprimit, eksportin TensorRT, ose shembujt e referencës për t'i riprodhuar para se t'i besoni të dhënave tuaja. Përdorni lerobot-train nëse seti juaj i të dhënave është tashmë LeRobot v3.0 dhe preferoni të mos e konvertoni, nëse dëshironi një seed, ose nëse pjesa tjetër e stack-ut tuaj është tashmë LeRobot. Të dy rregullojnë të njëjtat pesha nvidia/GR00T-N1.7-3B. Vini re se LeRobot hoqi plotësisht mbështetjen për GR00T N1.5: pikat e kontrollit N1.5 refuzohen me një shënim migrimi, dhe duhet të fiksoni lerobot==0.5.1 për t'i përdorur ato.

A kam vërtet nevojë për një kamerë dore si dhe një kamerë frontale?

Konfigurimi i dërguar i SO-100 përdor të dyja, dhe modality.json harton kamerën frontale dhe atë të dorës si çelësa video të veçantë. Mund të trajnoni me një kamerë, dhe tabela e latencës së kartës së modelit matet me një kamerë, por pamja e dorës është ajo që i jep politikës informacion të përdorshëm rreth kapësit në momentin e kontaktit. Nëse kapësi mbyllet në kohën e gabuar në ekzekutimet tuaja, një kamerë dore që mungon ose është e drejtuar keq është një nga gjërat e para për t'u kontrolluar.

Rregulloni GR00T N1.7 në SO-100 tuaj pa ndërtuar mjedisin më parë

Zgjidhni modelin, setin e të dhënave dhe hiperparametrat në një formular. Backend-i merr me qira një A100 80 GB ose H100 në tregun spot, ekzekuton trajnerin me batch 32, normë mësimi 1e-4 dhe 20000 hapa, dhe shkruan pikat e kontrollit në ruajtjen e objekteve. Afërsisht 4 deri në 12 USD për ekzekutim.

Hapni udhëzuesin e trajnimit të GR00T N1.7

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started