De AY-Robots gids pagina voor het trainen van GR00T N1.7 op een SO-100 arm, met de vereiste GPU-tier, datasetformaat en trainer-standaardinstellingen
GR00T N1.7SO-100FinetunenLeRobotVLA

Hoe GR00T N1.7 te trainen op uw eigen SO-100 Dataset

AY-Robots ResearchAugust 23, 202628 min leestijd

Een geteste handleiding voor het finetunen van NVIDIA GR00T N1.7 op een SO-100 LeRobot dataset: echte flags, modality.json, de v2.1 vereiste, wat een run kost, en de valkuilen.

NVIDIA levert een fine-tuning voorbeeld voor precies de arm die u waarschijnlijk bezit. Binnen de Isaac-GR00T repository bevindt zich een map genaamd demo_data/cube_to_bowl_5: vijf afleveringen, 4.148 frames met 30 fps, reeds geschreven als LeRobot v2.1, met een overeenkomstige modaliteitsconfiguratie onder examples/SO100/. Het meta/info.json rapporteert robot_type: so101_follower, wat in LeRobot dezelfde configuratieklasse is als so100_follower. Dat is oprecht nuttig, omdat het betekent dat het referentiepad voor GR00T N1.7 op een zes-vrijheidsgraden hobbyarm wordt onderhouden door de mensen die het model hebben geschreven. Het is geen verkleinde humanoïde demo, het is dezelfde arm.

Het slechte nieuws is de afstand tussen I recorded 60 episodes en the arm does the task. Er zijn ongeveer zes plaatsen waar deze pijplijn stilzwijgend faalt in plaats van luidruchtig, en vier daarvan bevinden zich in bestanden die de meeste mensen nooit openen: meta/modality.json, de Python-dataconfiguratie, meta/relative_stats.json, en de eigen versie string van de dataset. Deze gids doorloopt de handmatige route van begin tot eind met de echte commando's, en toont vervolgens dezelfde taak als een formulier op AY-Robots. Alles hieronder is gecontroleerd tegen de Isaac-GR00T main branch per 20 augustus 2026 (de n1.7-release lijn) en lerobot 0.6.1, gepubliceerd op PyPI op 3 augustus 2026. Upstream beweegt snel, en waar een flag is hernoemd, vermeldt dit artikel dat.

Wat u moet weten voordat u begint

  • GR00T N1.7 fine-tuning vereist 40 GB of meer VRAM. NVIDIA beveelt H100- of L40-nodes aan. Een 24 GB RTX 4090 zal deze taak niet uitvoeren, hoewel het wel SmolVLA en ACT zal trainen.
  • De dataset moet LeRobot v2 (v2.0 of v2.1) zijn, plus een GR00T-specifieke meta/modality.json. Een LeRobot v3.0 dataset laadt niet en moet worden geconverteerd.
  • Het entry point is gr00t/experiment/launch_finetune.py, een tyro CLI. Het heeft geen --seed flag, dus runs zijn niet bit-voor-bit reproduceerbaar.
  • Voor een aangepaste arm is de embodiment tag NEW_EMBODIMENT, en die tag maakt --modality-config-path verplicht.
  • Het meegeleverde SO-100 recept voorspelt armgewrichten als RELATIEVE delta's en de grijper als een ABSOLUTE target. Het omgekeerd toepassen van die koppeling is een stilzwijgende fout, geen error.
  • Op AY-Robots is dezelfde taak een formulier: 20000 stappen, batch 32, learning rate 1e-4, ruwweg 4 tot 12 USD op de A100 80 GB of H100 tier.

Wat GR00T N1.7 werkelijk is

GR00T N1.7 is een visie-taal-actiemodel met de duale-systeemindeling zoals beschreven in het originele GR00T N1-artikel: een visie-taalmodule die de camera's en de instructie leest, en een diffusietransformator die dat omzet in een reeks continue motorcommando's. N1.7 verving de eerste helft. De Eagle-backbone van N1.6 is verdwenen, ingeruild voor nvidia/Cosmos-Reason2-2B op een Qwen3-VL-architectuur, en het model werd voorgetraind op ongeveer 20.000 uur egocentrische menselijke video bovenop de robotdata. NVIDIA's eigen verslag vermeldt het cijfer op 20.854 uur en rapporteert dat het verhogen van 1k naar 20k uur de gemiddelde taakvoltooiing meer dan verdubbelt.

De tweede helft veranderde ook, op manieren die van belang zijn voor jouw uitvoering. De actie-head daalde van 32 diffusielagen naar 16, de voorspelde actiechunk groeide van 16 stappen naar 40, en de maximale toestand- en actiebreedte ging van 29 naar 132. Die drie getallen komen uit de changelog in de README van de repository; NVIDIA's eigen lanceringsbericht beschrijft Systeem 1 nog steeds als een 32-laags DiT, dus waar de twee verschillen, vertrouw dan op de repo die je gaat klonen. Acties worden standaard uitgedrukt in een relatieve eindeffector ruimte, delta's van de huidige pose in plaats van absolute doelen, wat het mogelijk maakt dat manipulatie-prioriteiten geleerd uit menselijke video überhaupt overgaan in robotbesturing. De head zelf is een flow-matching diffusietransformator, dezelfde familie als Pi0.5 maar met een andere backbone ervoor. Als je nog op de vorige generatie zit, N1.7 versus N1.5 behandelt of de upgrade het opnieuw doen van je pijplijn rechtvaardigt.

EigenschapWaardeBron
Parameters3,000,000,000Hugging Face model card
Visie-taal backbonenvidia/Cosmos-Reason2-2B (Qwen3-VL), gated on Hugging Facerepo README
Actie-headFlow-matching diffusietransformator, 16 lagen (N1.6 had 32)repo README
Voorspelde actiehorizon40 steps for the base checkpoint (N1.6 had 16)getting_started/policy.md and repo README
Maximale toestand- en actiebreedte132 (N1.6 had 29)repo README
Code licentieApache 2.0Isaac-GR00T repository
Gewichten licentieNVIDIA Open Model License Agreementmodel card
Latentie, H100 80 GB, PyTorch eager, 4 denoising stappen, 1 camera85.8 ms end to end, 11.7 Hzmodel card timing table
Zelfde hardware, TensorRT volledige pijplijn27.9 ms end to end, 35.9 Hzmodel card timing table
Latentie die AY-Robots opgeeft voor zijn geserveerde GR00T N1.7152 ms per action stepAY-Robots policy catalog

Die laatste drie rijen verklaren het grootste deel van de teleurstelling die mensen melden. De headline van 27.9 ms is een TensorRT-engine op een H100 met één camera en vier denoising-stappen. Puur PyTorch op dezelfde kaart is 85.8 ms, en de modelkaart geeft het verschil aan als 3.08x. Geen van beide cijfers omvat een serving-laag, een tweede camera of een netwerkhop. De 152 ms per actiestap die AY-Robots opgeeft voor zijn geserveerde GR00T N1.7 is het cijfer met serving in de loop, en een roundtrip via het openbare internet komt daar nog bovenop. Meer hierover aan het einde. Voor de cijfers naast andere modellen, GR00T N1.7 versus Pi0.5 en GR00T N1.7 versus SmolVLA zetten ze naast elkaar.

De AY-Robots modelpagina voor GR00T N1.7 toont het aantal parameters, de GPU-tier, de inferentielatentie en de vermelde sterke punten en beperkingen van het model.
De /policies/groot-n1-7 pagina bevat dezelfde specificatiestrip die je anders handmatig zou samenstellen uit de modelkaart en de README van de repository.

Wat de run nodig heeft voordat je iets typt

VereisteFinetuningInferentie
VRAM, NVIDIA-richtlijn40 GB of meer, H100 of L40 aanbevolen16 GB of meer, een RTX 4090 werkt
Python en CUDA op dGPU3.12 en CUDA 12.83.12 en CUDA 12.8
Video-backendtorchcodec 0.8.0, alleen FFmpeg 4 tot 7hetzelfde
DatasetformaatLeRobot v2 plus meta/modality.jsonniet van toepassing
Hugging Face toeganggoedgekeurd voor nvidia/Cosmos-Reason2-2Bhetzelfde
Overige toolsgit-lfs en uvuv
AY-Robots GPU-tier voor de groot1.7 trainerA100 80 GB of H100 80 GBpod automatisch geprovisioneerd
De afgeschermde backbone stopt je bij de eerste run

Elk GR00T checkpoint, inclusief de basis nvidia/GR00T-N1.7-3B, laadt nvidia/Cosmos-Reason2-2B bij het eerste gebruik, en die repository is afgeschermd. De README vermeldt de fout precies: het laden van het model mislukt met een GatedRepoError / 401 Client Error. Wat het niet vermeldt, is wanneer dat gebeurt, namelijk nadat je de kaart hebt gehuurd en de run is gestart. Vraag toegang aan op de modelpagina en voer vervolgens uv run huggingface-cli login uit of exporteer HF_TOKEN voordat je iets huurt.

Stap 0: de afleveringen zelf

Alles hieronder gaat ervan uit dat je al opgenomen afleveringen hebt. Als je dat niet hebt, is dat de echte eerste stap en het is degene die bepaalt hoe goed het resultaat kan zijn, want imitatieleer kan geen informatie herstellen die niet in de gegevens zit. Kalibreer eerst beide armen, rijd dan met de volger met een leiderarm terwijl lerobot-record de parquet-bestanden en de camerastreams schrijft. Als kalibratie niet klopt, beschrijven de gewrichtswaarden in je dataset een iets andere robot dan degene die later het beleid zal uitvoeren, en geen enkele hoeveelheid training lost dat op.

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 op een huidige LeRobot. De afleveringslengte is standaard 60 s en de reset-tijd 60 s. so100_follower en so101_follower zijn beide geregistreerd tegen dezelfde LeRobot-configuratieklasse, daarom gebruikt het Isaac-GR00T SO100-voorbeeld de so101-namen; beide werken op een SO-100. De cameranamen die je hier kiest (front, wrist) zijn de namen die moeten terugkomen in modality.json.

Het advies van LeRobot zelf is om minstens 50 afleveringen op te nemen, ongeveer 10 per objectlocatie, de camera's vast te houden en het grijpgedrag consistent te houden. Voeg variatie later toe, niet aan het begin. De vuistregel om te onthouden: als je de taak zelf niet kon uitvoeren met alleen de camerabeelden, kan het beleid ook niet. Voor de arms-specifieke setup, SO-100 aan de slag en de SO-100 LeRobot pagina behandelen poorten, kalibratie en camera-indices. Op AY-Robots kun je dit ook via internet vanuit de browser doen met behulp van teleoperatie en direct vanuit de sessie opnemen.

Stap 1: de dataset moet LeRobot v2.1 zijn

Dit is het meest voorkomende struikelblok. De huidige CODEBASE_VERSION van LeRobot op main is v3.0, dus alles wat je vandaag opneemt met een huidige toolchain komt uit als v3.0. De loader van GR00T verwacht v2. De repository is expliciet over de reden: veel upstream datasets zoals DROID, LIBERO en Bridge zijn gepubliceerd in v2, en native ondersteuning voor beide is gepland maar nog niet geleverd. De conversie is dus aan jou, en deze draait in zijn eigen virtualenv om een concrete reden: scripts/lerobot_conversion heeft zijn eigen pyproject dat vraagt om Python 3.10 of 3.11 en lerobot vastpint op één git commit, terwijl Isaac-GR00T zelf Python 3.12 vereist. Installeer de converter vanuit de root van de repository en je krijgt het gr00t pakket in plaats daarvan, wat de fout is waar de README voor waarschuwt. Als je nieuw bent met het formaat, legt de LeRobot dataset woordenlijstvermelding uit wat er precies in zit.

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
De converter accepteert --repo-id, een optionele --root, en --force-conversion, die elke bestaande lokale snapshot verwijdert en opnieuw downloadt. Het schrijft codebase_version: v2.1 naar meta/info.json.
De conversie overschrijft ter plaatse

Als de v3.0 dataset al lokaal bestaat, bouwt het script de v2.1 lay-out ernaast en wisselt dan: het origineel wordt verplaatst naar een zusterfolder met de versie eraan toegevoegd, <name>_v3.0, en de geconverteerde kopie neemt het originele pad over. (De eigen docstring van het script noemt die folder _v30; de code voegt de versietekenreeks toe, dus wat je daadwerkelijk krijgt is _v3.0.) Tweede verrassing: de uitvoer komt altijd terecht onder <root>/<repo-id>, dus --root examples/SO100/my_dataset_lerobot geeft je examples/SO100/my_dataset_lerobot/<your-hf-user>/<your-dataset>, en dat langere pad is degene die --dataset-path later wil. Wanneer een trainingstaak je dataset om versie-redenen afwijst, vermeldt de pagina 'dataset afgewezen als v3' de exacte symptomen.

De structuur die GR00T wil na conversie is de klassieke v2-indeling: meta/info.json, meta/episodes.jsonl, meta/tasks.jsonl, parquet-bestanden onder data/chunk-000/, MP4-bestanden onder videos/chunk-000/observation.images./, en één extra bestand dat standaard LeRobot niet heeft. Dat extra bestand is waar de meeste resterende fouten zich bevinden.

Stap 2: modality.json, de zes getallen die alles bepalen

In een LeRobot dataset worden de robotstatus en de actie opgeslagen als platte float32-arrays. Voor een SO-100 hebben beide de vorm [6]: vijf armgewrichten en een grijper. De demodataset noemt ze shoulder_pan.pos, shoulder_lift.pos, elbow_flex.pos, wrist_flex.pos, wrist_roll.pos, gripper.pos, maar die namen staan in info.json en niets in het parquet-bestand zegt welke index welke is. meta/modality.json levert die mapping, en GR00T zal er niet zonder trainen. Hier is degene die de repository levert voor de SO-100, woordelijk.

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. Indices zijn nul-gebaseerd en volgen Python-slicing, dus single_arm is [0:5] en gripper is [5:6].

Kopieer het naar uw geconverteerde dataset op meta/modality.json en hernoem de videotoetsen naar hoe uw camera's daadwerkelijk heten. Als u heeft opgenomen met één overheadcamera genaamd top, dan is original_key observation.images.top en de 'friendly name' is waarnaar uw dataconfiguratie zal verwijzen. De twee moeten overeenkomen, en geen van beide controleert de ander voor u. De taalannotatie is erger, omdat dezelfde sleutel op drie plaatsen moet verschijnen.

LaagBestandSO-100-vorm gebruikt in de repo
Parquet-kolomdata/chunk-*/episode_*.parquetannotation.human.task_description
modality.json-sleutelmeta/modality.json, under "annotation", without the annotation. prefixhuman.task_description
modality_keys in de dataconfiguratieyour so100_config.pyannotation.human.task_description
Waarom de taalsleutel mensen in de war brengt

De segmenten na annotation. worden gekozen door degene die de dataset heeft gemaakt. De SO-100 demodata gebruikt annotation.human.task_description; LIBERO en SimplerEnv gebruiken annotation.human.action.task_description. Beide zijn geldig. Als u een configuratie van een LIBERO-voorbeeld heeft gekopieerd en deze heeft gericht op uw eigen SO-100 opname, lost het taalkanaal op naar niets en traint het model op een lege instructie. Het verlies daalt nog steeds. Het beleid doet nog steeds iets. Het negeert gewoon wat u het heeft opgedragen te doen.

Stap 3: de dataconfiguratie, relatieve arm en absolute grijper

De modaliteitsconfiguratie is een Python-bestand in plaats van JSON, omdat het ook bepaalt hoe elke actiegroep wordt weergegeven. Dit is het deel van de N1.7-workflow dat niet in dezelfde vorm bestond in N1.5, en het deel dat de moeite waard is om twee keer te lezen. De meegeleverde SO-100-configuratie voorspelt de vijf armgewrichten als RELATIEVE delta's vanuit de huidige toestand en de grijper als een ABSOLUTE doelpositie, omdat een binair open-of-gesloten signaal zich beter gedraagt als een doel dan als een 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, ingekort tot de essentie. NON_EEF betekent gewrichtsruimte; EEF zou een negen-dimensionale vector van x, y, z plus een 6D-rotatie verwachten.

Twee details hier zullen je een dag kosten als je ze niet kent. Ten eerste, action_configs is positioneel: de documentatie vereist dezelfde lengte en dezelfde volgorde als modality_keys, en ze zijn duidelijk over de consequentie van een fout, namelijk dat de verkeerde representatie stilzwijgend wordt toegepast. Je grijper wordt getraind als een delta en je arm als een absolute doelpositie, en er is geen foutmelding. Ten tweede, register_modality_config beweert dat de tag nog niet is geregistreerd, dus een tweede NEW_EMBODIMENT-configuratie in hetzelfde Python-proces sterft met Embodiment tag ... already registered. Je kunt niet twee hiervan in één script importeren. Een derde regel wordt later afgedwongen, bij de implementatie: de actie delta_indices moet het aaneengesloten bereik zijn dat begint bij nul. Een dun venster zoals [0, 4, 8] wordt afgewezen, omdat alles stroomafwaarts de voorspelde chunk lineair indexeert en anders de verkeerde rijen zou uitvoeren.

Wijzig delta_indices en je moet de statistieken opnieuw genereren

Normalisatiestatistieken, met name meta/relative_stats.json, worden berekend voor de horizonlengte die je had toen je ze genereerde. Verkort de actiehorizon van 16 naar 8 zonder opnieuw te genereren en de training stopt met IndexError: boolean index did not match indexed array ... dimension is 8 but corresponding boolean dimension is 16. De oplossing is één commando: python gr00t/data/stats.py --dataset-path <path> --embodiment-tag NEW_EMBODIMENT --modality-config-path examples/SO100/so100_config.py. Voer het uit na elke wijziging aan delta_indices.

Stap 4: de omgeving

N1.7 heeft de repository verplaatst naar en Python 3.12. Het oude conda plus pip install -e . pad bestaat nog steeds in een ingeklapte sectie van de README, maar het waarschuwt dat GPU-afhankelijkheden, waaronder flash-attn en TensorRT, mogelijk handmatige installatie vereisen. Gebruik uv tenzij u een specifieke reden heeft om dit niet te doen. Wat flash-attn betreft, één detail voorkomt verwarring: u zult Installing flash-attn zien verschijnen bij elke uv run. Het wordt niet opnieuw opgebouwd. uv valideert opnieuw een URL-gepinde wheel die al in de cache staat, en dit duurt twee of drie seconden.

  1. 1
    Installeer git-lfs en kloon vervolgens met submodules

    git-lfs is vereist, niet optioneel. Zonder dit komen de parquet-bestanden in demo_data/ binnen als pointer-stubs, en de demo-uitvoering mislukt op een dataset die wel aanwezig lijkt in de bestandslijst.

    bash
    sudo apt install git-lfs && git lfs install
    git clone --recurse-submodules https://github.com/NVIDIA/Isaac-GR00T
    cd Isaac-GR00T
  2. 2
    Installeer uv en synchroniseer de omgeving

    De standaardinstallatie haalt de GPU-afhankelijkheden op, waaronder flash-attn en TensorRT. Op een nieuwe A100- of H100-image is dit de langste afzonderlijke stap, dus doe dit voordat u aandacht besteedt aan iets anders.

    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
    Authenticeer tegen Hugging Face

    Doe dit vóór de eerste trainingslancering, niet nadat deze na acht minuten mislukt.

    bash
    uv run huggingface-cli login   # or: export HF_TOKEN=<your_token>
  4. 4
    Sanity-check op de meegeleverde SO-100 demogegevens

    Voordat u uw eigen opname aanraakt, voert u 2000 stappen uit op demo_data/cube_to_bowl_5. Het zijn vijf afleveringen, het is snel klaar en het bewijst de omgeving in plaats van uw gegevens. Als deze uitvoering mislukt, zal niets wat u met uw dataset doet helpen.

    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
Twee omgevingsvalkuilen die lijken op modelbugs

FFmpeg 8. torchcodec 0.8.0 ondersteunt alleen FFmpeg 4 tot 7, en Ubuntu 25.10 en later leveren versie 8. De foutmelding is Could not load libtorchcodec, wat meer klinkt als een kapotte installatie dan een versieconflict. Installeer een oudere runtime, bijvoorbeeld conda install -c conda-forge 'ffmpeg<8', en plaats de bibliotheken ervan op LD_LIBRARY_PATH. CUDA_HOME is niet ingesteld. Fine-tuning mislukt volledig. Voer bash scripts/deployment/dgpu/install_deps.sh één keer uit, of gewoon export CUDA_HOME=/usr/local/cuda.

Stap 5: het fine-tune commando en de werkelijke standaardwaarden van de flags

Vervang de demo dataset door de jouwe en voeg de gewenste instellingen toe. Hieronder staat de volledige vorm die de repository gebruikt in zijn eigen new-embodiment tutorial, inclusief de augmentatie- en checkpointing flags die het korte README-voorbeeld weglaat. Dit is in de strikte zin: de taal-backbone en de visuele encoder blijven bevroren, en wat getraind wordt, zijn de projector en de diffusie-actie-head.

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
Eén GPU. Voor acht kaarten, vervang de launcher door uv run torchrun --nproc_per_node=8 --master_port=29500 en stel --num-gpus 8 in. Gebruik uv run torchrun, niet alleen torchrun, anders krijg je de verkeerde omgeving.
FlagStandaard in FinetuneConfigWat het doet
--global-batch-size64Totale batch over alle GPU's vóór gradiëntaccumulatie. De meegeleverde voorbeelden gebruiken 32.
--learning-rate1e-4Dezelfde waarde die AY-Robots verstuurt voor zijn groot1.7 trainer.
--max-steps10000Totaal aantal optimizer stappen. De examples/finetune.sh wrapper heeft ook 10000 als standaardwaarde.
--gradient-accumulation-steps1Vermenigvuldigt de effectieve batch. Waarden boven 1 geven een waarschuwing over de geaccumuleerde grootte.
--save-steps and --save-total-limit1000 and 5Checkpoint frequentie, en hoeveel er bewaard blijven. Oudere worden verwijderd.
--weight-decay and --warmup-ratio1e-5 and 0.05Ook expliciet ingesteld door examples/finetune.sh.
--state-dropout-prob0.2 in de CLI, 0.8 in de modelconfigLaat willekeurig proprioceptieve toestand vallen tijdens training. Verlaag het als je taak afhankelijk is van toestand.
--tune-llm and --tune-visualFalse and FalseDe backbone blijft standaard bevroren.
--tune-projector and --tune-diffusion-modelTrue and TrueDe projector en de diffusie-actie-head zijn wat daadwerkelijk getraind wordt.
--use-percentilesTrueNormaliseren met q01 en q99 in plaats van ruwe min en max.
--dataloader-num-workers2De loader is van nature CPU-gebaseerd. De voorbeelden verhogen dit naar 4.
--seedbestaat nietEr is geen seed flag op deze CLI.

Die laatste rij is geen typefout. launch_finetune.py is een tyro CLI gegenereerd uit een dataclass, en die dataclass heeft geen seed-veld. De README vermeldt afzonderlijk een variantie van 5 tot 6 procent tussen runs, veroorzaakt door niet-deterministische beeldaugmentatie. Twee runs met identieke flags zullen geen identieke checkpoints produceren, wat veel uitmaakt wanneer je probeert te beslissen of een hyperparameterwijziging heeft geholpen of dat je geluk hebt gehad. Ter vergelijking, lerobot's eigen trainer gebruikt standaard seed 1000, en het LeRobot GR00T recept geeft --seed=42 expliciet mee.

Validatie is standaard uitgeschakeld, en de gedocumenteerde flag is niet beschikbaar op deze CLI

Fine-tuning draait met eval_strategy="no", dus er is helemaal geen validatieverliescurve. Je krijgt alleen trainingsverlies en niets anders. De nieuwe-embodiment gids vertelt je om het in te schakelen met --eval-strategy steps --eval-steps 500, maar die flag bestaat niet op launch_finetune.py: de CLI wordt gegenereerd door tyro uit de FinetuneConfig dataclass, en eval_strategy, eval_steps en eval_batch_size zijn in plaats daarvan velden van TrainingConfig. Hun standaardwaarden daar zijn "no", 500 en 2. Om ze te bereiken, gebruik je het uitgebreidere toegangspunt gr00t/experiment/launch_train.py, waar de geneste flag --training.eval-strategy is. Hoe dan ook, een dalend trainingsverlies op zichzelf zegt heel weinig over generalisatie, wat precies de situatie is die wordt beschreven op verlies daalt maar het beleid doet niets.

Wat een run van 20000 stappen kost

GR00T N1.7 heeft een 80 GB kaart nodig, dus de kostenkwestie heeft een beperkt antwoord. Op AY-Robots draait de groot1.7 trainer op de A100 80 GB of H100 80 GB tier, waar een run 3 tot 6 uur duurt tegen 1.20 tot 2.00 USD per uur op de spotmarkt. Dat is ruwweg 4 tot 12 USD voor de standaardtaak van 20000 stappen. Dezelfde taak op SmolVLA of ACT draait op een 24 GB kaart tegen 0.30 tot 0.60 USD per uur en 1 tot 3 USD per run. Dat is de echte afweging: GR00T kost ongeveer vier keer zoveel per poging, en je kunt het niet draaien op de 4090 onder je bureau.

ModelGPU-klasseTypische looptijdTypische kostenMinimum aantal afleveringen
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

Het minimum van 50 aflevering is een ondergrens, geen doel. NVIDIA's eigen FAQ is veeleisender: ongeveer 100 trajecten voor een eenvoudige pick-and-place op een vaste locatie, 500 of meer voor complexe of meerstaps scènes, en 100 tot 500 voor fijne manipulatie. Als je op 20 afleveringen zit, besteed dan de middag aan opnemen in plaats van de avond aan afstemmen. De handleiding voor gegevensverzameling behandelt wat een nuttige aflevering onderscheidt van een verspilde, neem je eerste dataset op is de korte versie, en SO-100 gegevensverzameling is de arm-specifieke.

Stap 6: open-lus evaluatie voordat je de arm aanraakt

Plaats geen nieuw controlepunt op een fysieke arm om te achterhalen of de training heeft gewerkt. Voer eerst de open-lus evaluatie uit. Deze speelt een opgenomen episode opnieuw af, vraagt het model om acties bij elke stap, en plot de voorspelling tegen de grondwaarheid met MSE en MAE. Het kost niets en vangt de mappingfouten van stap 2 en 3 op.

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
Plots komen terecht in /tmp/open_loop_eval/traj_<id>.jpeg tenzij u --save-plot-path doorgeeft. Standaardwaarden: --execution-horizon 16, --steps 200, --denoising-steps 4, --traj-ids 0.

De repository weigert bewust een doel-MSE voor aangepaste data te publiceren, en dat is terecht: het getal hangt af van uw actie-eenheden, uw taak en de grootte van uw dataset, dus een drempelwaarde gekopieerd van de arm van iemand anders betekent niets. Wat wel betekenisvol is, is de trend. Hier is de referentierun die de repository documenteert op een enkele H100 met de demo-dataset van vijf episodes en 2000 stappen.

ControlepuntGemiddelde MSE op traj 0Gemiddelde MAE op traj 0
50087.55.63
100025.43.30
150013.22.18
200010.01.76

De vorm is het signaal, niet de absolute waarden. De fout zou gestaag moeten dalen naarmate zich opstapelen. Gemiddeld over alle vijf trainingsepisodes in plaats van alleen traject 0, scoorde het uiteindelijke checkpoint van de repository ruwweg 7.5 MSE en 1.5 MAE, dus zelfs de referentierun leest anders afhankelijk van welke episodes je middelt. Leg je eigen baseline vast met de ongewijzigde democommando voordat je iets aan je eigen gegevens verandert: als je een bekende-goede run niet kunt reproduceren, kun je een configuratiefout niet onderscheiden van een gegevensprobleem. De repository brengt ook de veelvoorkomende symptomen in kaart met hun oorzaken, en elk daarvan is operationeel in plaats van een modelfout.

SymptoomWaarschijnlijke oorzaak
MSE vlak of stijgend over checkpoints heenLeersnelheid te laag, of de gegevens worden helemaal niet geladen. Controleer --dataset-path en de dataloader workers.
Voorspellingscurve is vlak of constantmodality.json sleutels of --modality-config-path komen niet overeen. De actiesleutels zijn niet toegewezen.
MSE enorm, of NaN verlies tijdens trainingActie- en statusnormalisatie. Controleer meta/stats en of de actiebereiken fysiek plausibel zijn.
Goed op traj 0, slecht op niet-getrainde episodesGegevensschaarste, geen bug. Vijf demo-episodes kunnen niet generaliseren.

De andere route: lerobot-train in plaats van Isaac-GR00T

De huidige LeRobot release, 0.6.1 op PyPI sinds 3 augustus 2026, biedt een tweede en heel andere manier om dezelfde basisgewichten te fine-tunen. LeRobot exposeert GR00T N1.7 als een beleidstype en traint het via zijn eigen lerobot-train entry point. Twee dingen zijn hier van belang. De LeRobot CLI is een set van console scripts, dus alles wat je leest dat zegt python lerobot/scripts/train.py is verouderd en zal niet werken. En LeRobot heeft de ondersteuning voor GR00T N1.5 volledig verwijderd, waarbij N1.5 checkpoints en configuraties worden afgewezen met een migratienotitie, dus als je N1.5 via LeRobot nodig hebt, moet je lerobot==0.5.1, de laatste release die het ondersteunt, gepubliceerd op 7 april 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
Het LeRobot-native GR00T N1.7 recept. Let op relative_exclude_joints: de grijper is uitgesloten van relatieve acties, wat dezelfde beslissing is die so100_config.py neemt met ActionRepresentation.ABSOLUTE.
AspectIsaac-GR00T launch_finetune.pylerobot-train --policy.type=groot
DatasetversieAlleen LeRobot v2, conversie vereistNative LeRobot dataset, geen downgrade
Modaliteitsmappingmeta/modality.json plus een Python dataconfiguratiegeen modality.json; gedrag ingesteld door --policy.* flags op de commandoregel
Seedhelemaal geen seed flag--seed, LeRobot standaard 1000
Relatieve actiesper-sleutel ActionConfig in de dataconfiguratie--policy.use_relative_actions plus --policy.relative_exclude_joints
Gepubliceerde referentieresultatenSO-100 open-loop MSE trend op demogegevensLIBERO suites, 96,5 procent gemiddeld over vier suites
Implementatiepadrun_gr00t_server.py plus eval_so100.py over ZMQlerobot-rollout, met real-time chunking (queue_threshold moet op of onder 5 blijven)
Zelf de fine-tune uitvoeren
Voordelen
  • Elke flag is zichtbaar en aanpasbaar. Je kunt de visuele encoder 'unfreezen', state_dropout_prob verplaatsen of de actiehorizon verkorten.
  • De open-loop plots zijn lokale bestanden. Het diffen van checkpoint-5000 tegen checkpoint-20000 is een shell-commando.
  • Je bent niet afhankelijk van een platform dat online blijft, en het checkpoint staat op je schijf in een standaardformaat.
  • De benchmarkvoorbeelden van de repo voor LIBERO, SimplerEnv en DROID geven je bekende, goede runs om te reproduceren voordat je je eigen gegevens vertrouwt.
Afwegingen
  • De omgeving is het meeste werk. FFmpeg-versie, CUDA_HOME, git-lfs, de gated backbone, torchcodec: geen van deze zijn modelproblemen en elk ervan stopt de uitvoering.
  • De v3.0 naar v2.1 conversie vereist een aparte virtualenv met een eigen installatiestap, en het herschrijft je datasetmap ter plaatse.
  • GPU-huur begint te factureren wanneer je begint met debuggen, niet wanneer de training start, en niets stopt de instantie wanneer de uitvoering eindigt.
  • Geen seed betekent geen bit-voor-bit reproduceerbaarheid, bovenop 5 tot 6 procent run-to-run variantie door alleen augmentatie.

Twee manieren om hetzelfde checkpoint te verkrijgen

Je huurt de GPU en je beheert elke stap zelf. Realistisch gezien kost dit de eerste keer een middag en daarna elke keer twintig minuten.

  1. Neem episodes op met lerobot-record op de SO-100. Je krijgt een LeRobot v3.0 dataset.
  2. Converteer het naar v2.1 met scripts/lerobot_conversion/convert_v3_to_v2.py in een eigen virtualenv.
  3. Schrijf meta/modality.json en een Python modaliteitsconfiguratie, geregistreerd onder EmbodimentTag.NEW_EMBODIMENT.
  4. Huur een 80 GB kaart, kloon met submodules, uv sync, authenticeer tegen Hugging Face.
  5. Voer launch_finetune.py uit, daarna open_loop_eval.py op verschillende checkpoints, en vergelijk de MSE-trend voordat je de hardware aanraakt.
  6. Haal het checkpoint van de machine voordat je de instantie vernietigt, en bouw vervolgens het serving-pad naar de arm.
De stap die iedereen vergeet

Kopieer het checkpoint van de gehuurde instantie voordat je deze afsluit. --save-total-limit 5 betekent ook dat oudere checkpoints worden verwijderd naarmate de training vordert, dus het checkpoint dat je wilde op stap 5000 bestaat mogelijk niet meer op stap 20000.

De AY-Robots trainingsmatrix met vijf beleidsmodellen als rijen en vier robotarmen als kolommen, waarbij elke cel linkt naar een specifieke trainingshandleiding
De /train matrix: vijf modellen tegen vier armen. De GR00T N1.7 rij omvat ook de SO-101, Koch v1.1 en LeKiwi.

Het checkpoint terug op de arm krijgen

Isaac-GR00T gebruikt een server-client splitsing over ZMQ. Het beleid draait op de GPU, en een dunne client op de robotmachine stuurt observaties en ontvangt actiechunks. Het SO-100 voorbeeld is compleet genoeg om te kopiëren: start run_gr00t_server.py met je checkpoint en --embodiment-tag NEW_EMBODIMENT, voer dan eval_so100.py uit aan de robotzijde met de seriële poort, de robot-ID, de camera-indices en de taalinstructie. De cameranamen in dat commando moeten overeenkomen met de vriendelijke namen uit je modality.json, niet met de OS-apparaatnummers.

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 bepaalt hoeveel van de voorspelde stappen worden uitgevoerd voordat er opnieuw wordt gepland. Het mag maximaal de action_horizon van het beleid zijn, en dat aantal is de lengte van de actie delta_indices in uw modaliteitsconfiguratie, niet die van het basismodel. De meegeleverde SO-100 configuratie voorspelt 16, dus 16 is uw maximum; het basis nvidia/GR00T-N1.7-3B checkpoint is geconfigureerd voor 40, en policy.md stelt duidelijk dat gefinetunede checkpoints kunnen verschillen. Overschrijd het en u krijgt een ValueError die beide getallen noemt. 8 is de waarde die de documentatie suggereert voor real-time implementatie. De oude vlagnaam --action-horizon werkt nog steeds, maar geeft een waarschuwing.
7.4 V, geen 12 V

Terwijl u de arm weer aansluit: de SO-100 gebruikt Feetech STS3215 bus servo's op een 7.4 V rail. Ze 12 V geven vernietigt ze, en het is een gemakkelijke fout als u ook een LeKiwi bezit, waarvan de basis op 12 V werkt terwijl de arm dat niet doet. Controleer de voeding vóór de eerste inschakeling, niet na de rook. Zie de SO-100 hardwarepagina en SO-100 versus LeKiwi. Als de arm opstart maar niets beweegt, is servo reageert niet de plek om te beginnen.

Nu het eerlijke deel over waar het beleid draait, want training en serving hebben verschillende hardwareverhalen. Fine-tuning vereist 40 GB of meer. Inferentie niet: de README vermeldt 16 GB of meer en noemt de RTX 4090 expliciet, dus een kaart die u al bezit, kan een checkpoint serveren dat het nooit had kunnen produceren. Wat bepaalt of het beleid responsief aanvoelt, is niet VRAM, maar waar de server zich bevindt. Op AY-Robots is GR00T N1.7 alleen in de cloud beschikbaar, dus de controlelus betaalt een round trip via het openbare internet bovenop de 152 ms per actiestap, en alleen SmolVLA en ACT draaien ook lokaal. Voor langzame pick-and-place is een externe pod te overleven. Voor alles wat reactief is, is dat niet het geval: het beleid wordt aarzelend op een manier die precies lijkt op een trainingsfout en dat niet is. ACT met 20 ms per actiestap is het model dat de strakste lus tolereert, SmolVLA zit op 245 ms, en geen enkele hoeveelheid latentie-afstemming koopt een round trip terug die al is verbruikt. Voer uw eerste beleid uit doorloopt de serving-kant van begin tot eind.

Wat er daadwerkelijk misgaat

  • GatedRepoError bij de eerste uitvoering. U heeft geen toegang gekregen tot nvidia/Cosmos-Reason2-2B, of u heeft zich niet geauthenticeerd. Dit gebeurt nadat de GPU-klok al is gestart.
  • Dataset geweigerd bij laden. Bijna altijd een v3.0 dataset. Converteer het naar een oudere versie. Zie dataset geweigerd als v3.
  • IndexError over niet-overeenkomende booleaanse dimensies. U heeft delta_indices gewijzigd en de statistieken niet opnieuw gegenereerd.
  • Onvoldoende geheugen bij batch 32. Verlaag --global-batch-size en verhoog --gradient-accumulation-steps, of verlaag --num-shards-per-epoch, wat de configuratie expliciet suggereert wanneer VRAM beperkt is. Zie onvoldoende geheugen tijdens training.
  • Verlies daalt, beleid doet niets. Er is standaard geen validatiesplit, dus een schone trainingscurve bewijst weinig. Deze pagina behandelt de diagnose.
  • Werkt in uw opstelling en nergens anders. Verwacht bij een kleine dataset gefilmd onder één lichtconditie. NVIDIA raadt kleurjitter-augmentatie plus 20 tot 50 afleveringen onder verschillende lichtomstandigheden aan. Meer hier.
  • Grijper sluit nooit goed. Controleer of de grijperactie ABSOLUUT is en de armgewrichten RELATIEF, in die volgorde in action_configs. Grijper sluit niet vermeldt de andere oorzaken.
  • Een camera valt stil uit tijdens de opname. De aflevering wordt nog steeds opgeslagen en de videosleutel bestaat nog steeds, daarom is dit zo vervelend. Camera niet gedetecteerd behandelt dit.

De volledige index van storingsmodi vindt u op de fix-pagina's. Als u kiest tussen modellen in plaats van er een te debuggen, de beleidsvergelijking en de arena-vermelding voor GR00T N1.7 hebben benchmarkcijfers met bronnen, en ACT versus GR00T N1.7 is de vergelijking die de meeste mensen daadwerkelijk nodig hebben, omdat het de keuze is tussen een model dat u kunt trainen op de kaart onder uw bureau en een model waarvoor u een 80 GB node moet huren om te fine-tunen. Voor achtergrondinformatie over waarom deze modellen zich gedragen zoals ze doen, zijn de VLA-overzicht en de SO-100 complete gids het eerst waard om te lezen. En als u nog geen arm bezit, de live arm streamt een fysieke SO-100 zonder aanmelding.

Hoeveel afleveringen heb ik nodig voordat fine-tuning van GR00T N1.7 de moeite waard is?

AY-Robots stelt een minimum van 50 afleveringen in voor de groot1.7 trainer. NVIDIA's eigen FAQ is veeleisender: ongeveer 100 trajecten voor een eenvoudige pick-and-place op een vaste locatie, 500 of meer voor complexe of meerstaps scènes, en 100 tot 500 voor fijne manipulatie. Onder de 50 kunt u bijna altijd beter meer data opnemen dan hyperparameters afstemmen. Als het succes daarna stagneert, raadt NVIDIA HG-DAgger aan: voer het beleid uit, grijp in wanneer het faalt, en voeg die correcties toe aan de dataset.

Waarom laadt mijn dataset niet, en hoe weet ik welke versie het is?

Open meta/info.json en lees codebase_version. De huidige CODEBASE_VERSION van LeRobot op main is v3.0, dus alles wat met een recente toolchain is opgenomen, is v3.0, en de GR00T-lader verwacht v2. Converteer met scripts/lerobot_conversion/convert_v3_to_v2.py uit de Isaac-GR00T repo, die codebase_version: v2.1 in de geconverteerde dataset schrijft. Het script draait in zijn eigen virtualenv omdat het een andere lerobot-versie nodig heeft dan GR00T vastlegt.

Kan ik GR00T N1.7 fine-tunen op een RTX 4090?

Nee. NVIDIA raadt 40 GB of meer VRAM aan voor fine-tuning en noemt H100- of L40-nodes; andere kaarten werken, maar duren veel langer. Een 4090 heeft 24 GB. AY-Robots biedt GR00T N1.7 om dezelfde reden alleen aan op de A100 80 GB en H100 80 GB tier. Inferentie is een ander verhaal: 16 GB is voldoende om het model te draaien, dus een 4090 kan een beleid uitvoeren dat het niet kan trainen. Als u een VLA wilt die u op 24 GB kunt trainen, dan is dat SmolVLA met ongeveer 450 M parameters of ACT met ongeveer 80 M.

Waarom geven twee runs met identieke flags verschillende checkpoints?

Omdat launch_finetune.py geen seed heeft. Het is een tyro CLI gegenereerd uit een dataclass die geen seed-veld bevat, dus niets fixeert de RNG. De repo vermeldt afzonderlijk een variantie van 5 tot 6 procent tussen runs, veroorzaakt door niet-deterministische beeldaugmentatie. Als reproduceerbaarheid belangrijk is, gebruik dan de LeRobot-route: lerobot-train accepteert --seed en het gepubliceerde GR00T-recept geeft --seed=42 door.

Moet ik Isaac-GR00T of lerobot-train gebruiken?

Gebruik Isaac-GR00T als u de referentie-implementatie, per-sleutel controle over actierepresentatie, TensorRT-export, of de benchmarkvoorbeelden wilt reproduceren voordat u uw eigen gegevens vertrouwt. Gebruik lerobot-train als uw dataset al LeRobot v3.0 is en u deze liever niet converteert, als u een seed wilt, of als de rest van uw stack al LeRobot is. Beide fine-tunen dezelfde nvidia/GR00T-N1.7-3B gewichten. Merk op dat LeRobot de ondersteuning voor GR00T N1.5 volledig heeft laten vallen: N1.5 checkpoints worden geweigerd met een migratienotitie, en u moet lerobot==0.5.1 vastzetten om ze te blijven gebruiken.

Heb ik echt een polscamera nodig naast een frontcamera?

De meegeleverde SO-100 configuratie gebruikt beide, en modality.json koppelt front en pols als afzonderlijke videosleutels. U kunt trainen met één camera, en de latentietabel van de modelkaart is gemeten met één camera, maar het polsaanzicht is wat het beleid bruikbare informatie geeft over de grijper op het moment van contact. Als de grijper op het verkeerde moment sluit in uw rollouts, is een ontbrekende of slecht gerichte polscamera een van de eerste dingen om te controleren.

Fine-tune GR00T N1.7 op uw SO-100 zonder eerst de omgeving op te bouwen

Kies model, dataset en hyperparameters in een formulier. De backend huurt een A100 80 GB of H100 op de spotmarkt, draait de trainer met batch 32, leersnelheid 1e-4 en 20000 stappen, en schrijft checkpoints naar objectopslag. Ongeveer 4 tot 12 USD per run.

Open de GR00T N1.7 trainingsgids

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started