GR00T N1.7 โ OpenArm bimanual bottle sort (checkpoint 20,000)
Post-trained nvidia/GR00T-N1.7-3B on an
OpenArm bimanual manipulation dataset.
Task: "Put the two bottles on the left into the left bowl and the two bottles on the right into the right bowl."
This repo is the step 20,000 checkpoint (2.97 epochs) of a 20,000-step run. Sibling checkpoints from the same run are published separately:
| checkpoint | repo | training loss |
|---|---|---|
| 5,000 | PID0930/groot-n1d7-openarm-bottle-sort-ckpt5000 |
0.0636 |
| 10,000 | PID0930/groot-n1d7-openarm-bottle-sort-ckpt10000 |
0.0440 |
| 15,000 | PID0930/groot-n1d7-openarm-bottle-sort-ckpt15000 |
0.0282 |
| 20,000 | PID0930/groot-n1d7-openarm-bottle-sort-ckpt20000 |
0.0229 |
These checkpoints have not been ranked by any validation metric. GR00T's fine-tuning path cannot compute a validation loss (
launch_finetune.pyexposes no--eval-strategyflag andgr00t/data/dataset/factory.pyassertseval_strategy == "no"), so the table above is training loss only. A lower training loss does not establish better generalization. Rank them with open-loop evaluation before choosing one.
Embodiment
OpenArm bimanual, 16-D joint space, 3 cameras.
| embodiment tag | NEW_EMBODIMENT |
| state / action | left_arm(7) left_hand(1) right_arm(7) right_hand(1) |
| cameras | chest_view, left_wrist_view, right_wrist_view โ 480x640 |
| action representation | arms RELATIVE, hands ABSOLUTE, both NON_EEF |
| action horizon | 16 steps @ 30 fps (~0.53 s) |
| language key | annotation.human.action.task_description |
A matching modality config is required at inference time; see Usage below.
Training
| base model | nvidia/GR00T-N1.7-3B (VLM backbone nvidia/Cosmos-Reason2-2B) |
| data | 600 episodes / 224,608 frames @ 30 fps, single task |
| trainable | projector + flow-matching DiT action head โ the 2B backbone stays frozen |
| batch size | 32 (global, 1x A100 80GB) |
| optimizer | AdamW, lr 1e-4, cosine decay, warmup ratio 0.05, weight decay 1e-5 |
| precision | bf16 |
| steps | 20,000 of 20,000 |
| hardware | 1x A100 80GB PCIe, ~5 h for the full 20,000 steps |
--tune-llm and --tune-visual were left off, so this checkpoint adapts the action head
and projector only.
Usage
Requires Isaac-GR00T (N1.7 / gr00t_n1d7) and
access to the gated backbone nvidia/Cosmos-Reason2-2B.
from gr00t.model.gr00t_n1d7.setup import Gr00tPolicy
from gr00t.data.embodiment_tags import EmbodimentTag
# register the modality config for NEW_EMBODIMENT first โ see the repo's
# openarm_config.py (arms RELATIVE, hands ABSOLUTE, action horizon 16)
import openarm_config # noqa: F401
policy = Gr00tPolicy(
model_path="PID0930/groot-n1d7-openarm-bottle-sort-ckpt20000",
embodiment_tag=EmbodimentTag.NEW_EMBODIMENT,
device="cuda",
)
Open-loop evaluation against a held-out episode:
uv run python gr00t/eval/open_loop_eval.py \
--dataset-path <your lerobot dataset> \
--embodiment-tag NEW_EMBODIMENT \
--model-path PID0930/groot-n1d7-openarm-bottle-sort-ckpt20000 \
--traj-ids 0 --execution-horizon 16 --steps 400 \
--modality-keys left_arm left_hand right_arm right_hand
Contents
Full training-state checkpoint, including optimizer.pt so training can be resumed.
Inference needs only the safetensors shards plus config.json, processor_config.json,
statistics.json and embodiment_id.json.
Limitations
- Trained on a single task with a fixed scene layout. Episodes are unusually uniform (357-386 frames, 11.9-12.9 s), so robustness to layout, lighting or object changes is untested.
- No validation or real-robot success rate has been measured. Treat as a research artifact.
- The frozen backbone means visual features were not adapted to this robot's cameras.
License
Apache 2.0, inherited from nvidia/GR00T-N1.7-3B.
- Downloads last month
- 39
Model tree for PID0930/groot-n1d7-openarm-bottle-sort-ckpt20000
Base model
nvidia/GR00T-N1.7-3B