| Fact | ACTAction Chunking Transformer, trained from scratch | GR00T N1.7Vision-Language-Action foundation model, diffusion action head |
|---|---|---|
| Vendor | Stanford (ALOHA) | NVIDIA |
| Trainer key | act | groot1.7 |
| GPU tier | RTX 4090 or any card with 24 GB | A100 80 GB or H100 80 GB |
| Inference | about 20 ms per action step | about 152 ms per action step |
| Batch size | 8 | 32 |
| Gradient accumulation | 1 | 1 |
| Learning rate | 1e-5 | 1e-4 |
| Default steps | 100,000 | 20,000 |
| Dataset format | LeRobot v2.1 | LeRobot v2.1 |
| Episodes from | 50 | 50 |
| Extra fields in the form | chunkSize, nActionSteps, seed, logFreq | saveSteps |
| Where it runs | Cloud GPU, or a local 24 GB card | Rented cloud GPU only |
| Typical run | 2 to 5 hours, about 1 to 3 USD | 3 to 6 hours, about 4 to 12 USD |
If your camera is bolted down and every attempt starts from a situation you demonstrated, train ACT and take the 20 ms loop; the moment the policy has to handle placements your demonstrations never contained, GR00T N1.7 is the only one of the two with anything to fall back on.
The one question that decides it
Will the policy ever face a situation your demonstrations did not contain? If the honest answer is no, because the part arrives in a jig and the camera is bolted to a frame, ACT wins on latency, price, reproducibility and how easy it is to reason about. If the answer is yes, ACT has nothing to fall back on: everything it knows came from your episodes, and outside them it is guessing without priors. Everything below is detail underneath that question, and the two models are far enough apart that there is no middle case where they are interchangeable.
Side by side
| Fact | ACT | GR00T N1.7 |
|---|---|---|
| Vendor | Stanford, from the ALOHA line of work | NVIDIA |
| Parameters | About 80 million, all trained | About 3 billion, roughly 40 million trained during fine-tuning |
| Pretraining | None, from scratch on your data | Large multi-robot corpus |
| GPU tier | RTX 4090 or any card with 24 GB | A100 80 GB or H100 80 GB |
| Estimated run | 2 to 5 hours at 0.30 to 0.60 USD per hour | 3 to 6 hours at 1.20 to 2.00 USD per hour |
| Inference per action step | About 20 ms | About 152 ms |
| Default batch and accumulation | 8, no accumulation | 32, no accumulation |
| Default learning rate and steps | 1e-5 over 100 000 steps | 1e-4 over 20 000 steps |
| Exposed knobs | chunkSize, nActionSteps, seed, logFreq | saveSteps |
| Seed support | Yes | None |
| Minimum useful episodes | About 50 | About 50 |
| Language conditioning | None | Yes |
| Runs outside the cloud pool | Yes, on a 24 GB card you own | No |
| Dataset format | LeRobot v2.1 | LeRobot v2.1 only, v3.0 is rejected |
The parameter counts mislead in both directions
Three billion against eighty million sounds decisive until you look at what fine-tuning touches. Roughly forty million of GR00T’s parameters are trained, the same order of magnitude as the whole of ACT, so in terms of what your dataset has to teach the two jobs are closer than the headline suggests. The difference is what the training starts from. ACT constructs every visual feature and motor pattern out of your fifty episodes; GR00T starts from a representation built on a multi-robot corpus and spends your episodes pointing it at your task.
Two schedules that describe two different jobs
ACT batch 8 accum 1 lr 1e-5 100 000 steps ~800 000 sample views 24 GB
GR00T N1.7 batch 32 accum 1 lr 1e-4 20 000 steps ~640 000 sample views 80 GB
Similar sample budget. Five times the optimizer steps on ACT at a tenth
of the learning rate: building a representation rather than nudging one.ACT runs the longest schedule in the catalog, one hundred thousand steps, and still fits the two to five hour estimate because each step is small. GR00T reaches a comparable number of sample views in twenty thousand steps because it processes thirty-two at a time. Those two lines tell you more about the models than any adjective would.
Latency, and where it stops mattering
Twenty milliseconds is about fifty action steps a second, so the policy stops being the slowest part of the loop. One hundred and fifty-two milliseconds is six to seven a second, fast enough that a pick and place looks purposeful. ACT also has chunking exposed, chunkSize and nActionSteps at 100 by default, so it predicts and executes a block between inferences. GR00T exposes no chunk controls. If cycle time is a specification rather than a preference, ACT is the model with the knobs.
Reproducibility is an ACT advantage people forget
ACT exposes seed and logFreq alongside its chunk parameters. GR00T exposes only saveSteps and has no seed field, so two GR00T runs with the same settings on the same data are not guaranteed to be the same run. For a production policy that rarely matters. For a lab notebook or a report somebody will try to reproduce in three months, it matters a great deal, and no amount of discipline works around it.
Record the job id, the dataset id and version, the exact step count and the checkpoint step you evaluated, and lower saveSteps so you have enough checkpoints to point at. You can reproduce a configuration and a citable result, just not a bit-for-bit identical run.
Pick ACT if
- You are building a repeated cell: same jig, same part, same camera, cycle time in the specification. Fifty action steps a second with a tunable horizon is something GR00T cannot offer at any price.
- You want the answer for 1 to 3 USD instead of 4 to 12, and the trained policy on a 24 GB card you own rather than in a rented pool.
- You are writing the work up. A seeded run with documented chunk parameters is defensible in a way an unseeded foundation-model fine-tune is not.
Pick GR00T N1.7 if
- The object can appear anywhere in the workspace and you cannot demonstrate every placement. This is the case pretraining exists for.
- The task string has to matter. GR00T is language conditioned; ACT has no text input, so a second task means a second dataset, run and checkpoint.
- You already have a hundred or more episodes and an ACT policy that plateaued in a way more episodes of the same kind did not move.
What each one still does better
ACT, if you chose GR00T
Faster, cheaper, seedable, tunable, and it runs on hardware you can own. It is also honest in a way large models are not: with no pretraining, every behavior came from an episode you recorded, so a strange motion is always traceable to demonstrations you can go and watch.
GR00T N1.7, if you chose ACT
It generalizes, it reads the task string, and it gets through its schedule in a fifth of the optimizer steps. On a dataset large and varied enough, those priors separate a policy that works in your test setup from one that survives somebody rearranging the table.
Train ACT first even if you intend to use GR00T
ACT is the cheapest truth-teller you have about a dataset. If it cannot learn your task from the placements it was shown, the problem is the data, and GR00T reaches the same conclusion for four times the money. That holds even when you are certain the foundation model is where you will end up.
- 1Train ACT at its defaults on your first fifty episodes
Pick the dataset in Training, choose ACT, leave 100 000 steps, batch 8 and 1e-5 alone. Set a seed and write it down with the job id.
- 2Evaluate ten nominal and ten off-nominal attempts
Half from the region your episodes cover, half from outside it. That split is the measurement the whole decision rests on.
- 3Read the split, not the total
Weak on both halves means a data problem and the next step is a recording session. Strong on nominal and weak off-nominal is the GR00T case.
- 4Confirm the dataset is LeRobot v2.1 before you spend
ACT will happily train on a dataset GR00T then refuses. Check the version before renting the 80 GB card, not after the job fails.
- 5Start GR00T N1.7 against the same dataset id
Defaults again: batch 32, 20 000 steps, 1e-4. Lower saveSteps for more checkpoints, then re-run the identical attempts and compare the off-nominal half.
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, act baseline",
"model_id":"act",
"max_steps":100000,
"confirm_spend":true}}}'
# Then the comparison run: "model_id":"groot1.7", "max_steps":20000.
# chunkSize and nActionSteps are ACT-only and live in the web form, not here.GR00T accepts LeRobot v2.1 only and rejects v3.0. ACT does not care, so a dataset recorded with the wrong setting can train happily for months before the first GR00T job refuses it. The client records v2.1 by default; if somebody changed that, change it back.
Nothing here is a one-way door
The dataset is the durable part of this project. Cameras, resets, task strings and discarded failures are hours you spent once; a checkpoint is a few hours of a card somebody else owns. Both models read LeRobot v2.1, so moving from the 24 GB tier to the 80 GB one is a new job against the same dataset id with a different value in one field.
Where to go next
- /policies/act: the specialist, its knobs and its ceiling
- /policies/groot-n1-7: the generalist and what it costs to rent
- /train/act-on-so-100: the 24 GB route, start to finish
- /train/groot-n1-7-on-so-100: the 80 GB route on the same arm
- /learn/train-your-first-policy for why the small model goes first
Frequently asked questions
Is GR00T N1.7 always better than ACT on the same dataset?▾
No. On fifty episodes of one repeated task from consistent placements, ACT is competitive and is far cheaper per hour, seven times faster per action step and reproducible under a seed. GR00T pulls ahead where the policy meets situations your episodes did not contain.
Why does ACT need 100 000 steps and GR00T only 20 000?▾
ACT trains from scratch at 1e-5 with a batch of 8, so it needs many small updates. GR00T fine-tunes an existing representation at 1e-4 with a batch of 32, reaching a comparable number of sample views in a fifth of the steps.
Can I get language conditioning on the cheap tier?▾
Yes, but not from ACT. SmolVLA is the language conditioned model on the 24 GB tier at about 245 ms per action step; ACT has no text input at all.
Does ACT run without a rented GPU?▾
ACT is not cloud-only, so it fits hardware you own. GR00T is cloud-only on this platform. Training itself always happens on a rented card selected by VRAM rather than by GPU name.
My ACT policy is fast but jerky. Will GR00T smooth it out?▾
Probably not. Jerky output usually reflects jerky demonstrations, and both models reproduce what you showed them. Re-record more deliberately first, then look at whether nActionSteps is set too low.
Once the choice is made, the matrix under /train has the guide for your model and your arm.