| Fact | GR00T N1.7Vision-Language-Action foundation model, diffusion action head | GR00T N1.5Vision-Language-Action foundation model, predecessor of N1.7 |
|---|---|---|
| Vendor | NVIDIA | NVIDIA |
| Trainer key | groot1.7 | groot1.5 |
| GPU tier | A100 80 GB or H100 80 GB | A100 80 GB or H100 80 GB |
| Inference | about 152 ms per action step | about 165 ms per action step |
| Batch size | 32 | 1 |
| Gradient accumulation | 1 | 16 |
| Learning rate | 1e-4 | 1e-5 |
| Default steps | 20,000 | 2,000 |
| Dataset format | LeRobot v2.1 | LeRobot v2.1 |
| Episodes from | 50 | 50 |
| Extra fields in the form | saveSteps | saveSteps |
| Where it runs | Rented cloud GPU only | Rented cloud GPU only |
| Typical run | 3 to 6 hours, about 4 to 12 USD | 3 to 6 hours, about 4 to 12 USD |
Select GR00T N1.7 for every new project; the only reason to pick N1.5 is to continue or reproduce the configuration of an experiment that was started before N1.7 existed.
The short version
N1.5 is kept available so a project started on it can be finished on it. Same family, same dataset format, same 80 GB tier, same workflow, and behind its successor on the things you would actually choose a model for. If you are here to decide what to train tomorrow, the answer is N1.7. The rest of this page is for two situations: you inherited an N1.5 run and have to decide whether to port it, or you tried both and got a result that made N1.7 look implausibly far ahead. The second case is almost always the defaults trap below.
Side by side
| Fact | GR00T N1.7 | GR00T N1.5 |
|---|---|---|
| Parameters | About 3 billion, roughly 40 million trained during fine-tuning | About 3 billion |
| GPU tier | A100 80 GB or H100 80 GB | A100 80 GB or H100 80 GB |
| Estimated run | 3 to 6 hours at 1.20 to 2.00 USD per hour | 3 to 6 hours at 1.20 to 2.00 USD per hour |
| Inference per action step | About 152 ms | About 165 ms |
| Default batch and accumulation | 32, no accumulation | 1 with 16 accumulation steps |
| Effective batch | 32 | 16 |
| Default learning rate | 1e-4 | 1e-5 |
| Default steps | 20 000 | 2000 |
| Exposed knobs | saveSteps | saveSteps |
| Seed support | None | None |
| Minimum useful episodes | About 50 | About 50 |
| Language conditioning | Yes | Yes |
| Dataset format | LeRobot v2.1 only, v3.0 is rejected | LeRobot v2.1 only, v3.0 is rejected |
The defaults are the real difference on this page
Multiply the two recipes out before comparing anything. N1.7 defaults to batch 32 with no accumulation over 20 000 steps, about 640 000 sample views. N1.5 defaults to batch 1 with 16 accumulation steps over 2000 steps, about 32 000. That is a factor of twenty in how much data the optimizer ever sees.
N1.7 batch 32 x accum 1 = effective 32 x 20 000 steps = ~640 000 sample views
N1.5 batch 1 x accum 16 = effective 16 x 2 000 steps = ~ 32 000 sample views
Ratio: about 20 to 1, before either architecture has been considered.
For a comparison that means something, raise the N1.5 step count until the
sample budgets are in the same range, and keep everything else identical.So if you run both at their defaults and conclude N1.7 is dramatically stronger, you have mostly measured schedule length. The architectures may differ too, but that experiment cannot tell you by how much.
A default of 2000 steps at effective batch 16 is a conservative starting point that exists for compatibility, not a claim that 2000 steps is enough for your dataset. If you select N1.5 for a real run, set the step count deliberately rather than accepting the number the form offers.
When N1.5 is the right selection
- You are extending an experiment series that began on N1.5 and the comparison across runs has to hold. Changing the model mid-series invalidates every earlier data point.
- A report or thesis chapter already states N1.5 results and you need another checkpoint under the same configuration rather than a better one under a different model.
- You are bisecting a regression. Running the older model on the same dataset is a legitimate way to work out whether the model or the data changed underneath you.
All three are about consistency with the past. There is no forward-looking reason to start something new on N1.5: it is superseded on every axis that matters, and it carries none of the improvements that came with the newer version.
What N1.5 still does better
One thing, and it is narrower than it sounds: its default recipe is the memory-lightest shape in the GR00T family. Batch 1 with 16 accumulation steps holds far less in VRAM at any moment than batch 32, at the cost of sixteen sequential passes per optimizer step. Both versions request the same 80 GB tier, so this is not a way to escape the tier, but it is the shape to copy if you ever need to shrink an N1.7 run: lower the batch, raise the accumulation by the same factor, and the optimizer still sees the same effective batch. Beyond that, N1.5 matches its own history and nothing else.
Neither version gives you a seed
This bounds what reproducing an older run can mean. The GR00T fine-tuning entry point has no seed field on either version, so two runs launched with identical settings on identical data are not guaranteed to produce identical weights. What you can reproduce is a configuration and an evaluation, which is usually what a report needs. Write down at least:
- The dataset id and its version, so the second run reads exactly the same episodes
- The model version, N1.7 or N1.5, exactly as selected in the form
- Batch size, gradient accumulation, learning rate and the step count you actually used
- The saveSteps value and the checkpoint step you evaluated, not just the last one
- The evaluation protocol: how many attempts, which placements, what lighting
If you need genuine seeded determinism, the GR00T family cannot provide it. Pi0.5 sits on the same 80 GB tier and exposes seed and logFreq, which is the practical alternative when reproducibility is a hard requirement.
Migrating an N1.5 project to N1.7
- 1Keep the dataset exactly as it is
Both versions read LeRobot v2.1 and reject v3.0, so nothing needs re-recording or converting. The dataset id stays the same across the migration.
- 2Do not port the old hyperparameters
Start N1.7 at its own defaults. Copying batch 1, 16 accumulation steps and 2000 steps across gives it a twentieth of the exposure it expects, and the run will look like a failure of the new version.
- 3Set saveSteps so the checkpoints line up
Choose a value that produces checkpoints at points comparable to the ones you evaluated on N1.5. Comparing a final checkpoint against a mid-training one is a common way to draw the wrong conclusion.
- 4Re-run the old evaluation protocol unchanged
Same placements, same count, same lighting, same person doing the reset. A migration is informative only if the measurement stays still while the model moves.
- 5Keep the N1.5 checkpoint until the new one wins on hardware
Loss curves do not settle this. Retire the old policy when the new one beats it on the arm, and not before.
curl -s https://www.ay-robots.com/api/mcp \
-H "Authorization: Bearer $AY_ROBOTS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{
"name":"start_training",
"arguments":{
"dataset_id":"ds_7f31c0a4",
"policy_name":"cube pick, n1.5 series continuation",
"model_id":"groot1.5",
"max_steps":20000,
"confirm_spend":true}}}'
# max_steps is set explicitly rather than accepting the N1.5 default of
# 2000, so the exposure is comparable to an N1.7 run.
# For anything new, use "model_id":"groot1.7".Switching versions changes nothing on disk
Of all the choices on this site, this is the cheapest one to get wrong. The two versions share a dataset format, a GPU tier, a workflow and a set of exposed knobs, so moving between them is a field in the training form and one more rented run. Your episodes, camera positions and task strings are untouched by any of it. Train N1.7, keep the old checkpoint while you compare, and delete it once the comparison is settled.
New work goes on N1.7. Existing experiment series stay on the version they started on until the series is finished. Write the model version into the policy name so nobody has to open a job to find out which one produced a checkpoint.
Where to go next
- /policies/groot-n1-7: the version to select for new work
- /policies/groot-n1-5: what the older entry is kept for
- /train/groot-n1-7-on-so-100: the current guide on the reference arm
- /train/groot-n1-5-on-so-100: the same steps against the older version
- /policies for every supported model in one list
Frequently asked questions
Is GR00T N1.5 deprecated?▾
It is superseded, not removed. The trainer still supports it and it stays selectable in the form specifically so older projects can be reproduced. New projects have no reason to select it.
Can I resume an N1.5 run under N1.7?▾
Treat it as a new run. They are different models, so a checkpoint does not carry across. The dataset does carry across unchanged, which is the part that would have cost you time.
Is 165 ms against 152 ms noticeable on the arm?▾
No. Thirteen milliseconds is inside the noise of everything else in the loop, and both give you roughly six action steps a second. Latency is not the reason to prefer N1.7; the training recipe and the newer model are.
Why is the N1.5 default only 2000 steps?▾
It is a conservative default paired with batch 1 and 16 accumulation steps, which together make a short, cautious schedule. It is a compatibility starting point, not a recommendation for your dataset, so set the step count yourself.
Do I need a different dataset for the two versions?▾
No. Both accept LeRobot v2.1 and both reject v3.0, so a single upload feeds either version. If a GR00T job of any version refuses your dataset, check the format version before anything else.
Once the choice is made, the matrix under /train has the guide for your model and your arm.