PID0930/groot-n1d7-openarm-bottle-sort-ckpt15000
GR00T N1.7 — OpenArm bimanual bottle sort (checkpoint 15,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 15,000 checkpoint (2.23 epochs) of a 20,000-step run. Sibling checkpoints from the same run are published separately:
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.
A matching modality config is required at inference time; see Usage below.
Training
--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-ckpt15000",
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-ckpt15000 \
--traj-ids 0 --execution-horizon 16 --steps 400 \
--modality-keys left_arm left_hand right_arm right_handContents
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.
