GR00T N1.6 — Ours-RACER RoboCasa365 mid-training 80k (50:50 full-task/subtask)
This is an independently trained mid-training (MT) checkpoint of NVIDIA GR00T N1.6, trained from the public foundation model on 300 RoboCasa365 human-teleoperation LeRobot datasets whose subtask annotations come from the Ours segment-film labeller, with full-task and subtask language mixed 1:1 (50:50) at the sample level. It is not an official NVIDIA release.
This repository is released anonymously for ICLR 2027 review.
This is the Ours-arm counterpart of
happyhappy-jun/gr00t-n1.6-uvd-racer-mt80k-mix50
and of
happyhappy-jun/gr00t-n1.6-rdd-racer-mt80k-mix50:
same recipe, same base model, same 300 task/date dataset slots, same language-mixing
adapter — only the subtask segmentation differs.
Checkpoint identity
- Training run: experiment
mtin20260913_mix50_80k - Checkpoint:
checkpoint-80000(80,000 optimizer updates) - Source job:
47on a private 8×H100 node (AWS ap-northeast-1, single node); the run wrote itsCOMPLETE.jsonmarker (global_step 80000,microbatch 16,accumulation 1,num_gpus 8,effective_batch 128,source_job 47, last losses0.036 / 0.0352 / 0.0369) on 2026-09-13 - Base / initialization: the public GR00T-N1.6-3B snapshot
d0814e7, loaded fresh (--base-model-path .../public_base/GR00T-N1.6-3B-d0814e7). No previously trained lab checkpoint was used to initialize this run. - Role: the Ours mid-training arm; downstream target fine-tunes of this lineage initialize from this checkpoint with a fresh optimizer state
- Source promotion-manifest SHA-256:
644515cdd35453070f90c6bcd49d6545093f47147169d4c04b6abc94bda2dde6
The model files are copied byte-for-byte from that checkpoint. No weights,
normalization statistics, modality settings, or configuration values were changed
for this upload. See publication_manifest.json for sizes and SHA-256 checksums
of the published source files.
Training setup
| Item | Value |
|---|---|
| Data | 300 RoboCasa365 human-teleoperation task/date LeRobot datasets (65 atomic + 235 composite), equal mix ratios (1 each); 32,043 episodes / 29,106,226 frames / 156,695 subtask spans. Dataset root rc365_ours_mt_20260913, staged from the Ours subtask overlay ours_overlay_20260913 (300 per-task archives, overlay_manifest.json SHA-256 efcb37d3…) over the checksum-verified human300 video staging (human300_manifest.json SHA-256 2361e672…) |
| Language conditioning | 50:50 full-task / subtask mixture, drawn per sample: annotation.human.task_description with probability 0.5, otherwise the Ours annotation.human.subtask. Implemented by the verbatim UVD mixing adapter (language_mix.py, SHA-256 68202a66…), which the modality config (SHA-256 8a91ddc6…) selects through the single key annotation.human.uvd_racer_mix50 — see the note below |
| Segmentation source | Ours segment-film (method=ours_segment_film, source_method=ours_pt_subtask_revised, label_policy=labels) |
| Embodiment tag | NEW_EMBODIMENT |
| Steps | 80,000 (trainer_state.json: global_step 80000, max_steps 80000, epoch 1.0) |
| Effective batch | 128 (global batch 128 × gradient accumulation 1; microbatch 16 per GPU × 8 GPUs) |
| Learning rate | 3e-5, cosine schedule, warmup ratio 0.05 (5%) |
| Weight decay | 1e-5 |
| Seed | 42 |
| Trainable | diffusion/action head, projector and the vision-language LayerNorm, plus the top 4 layers of the language backbone — see the note below. Launch flags: --no-tune-llm --no-tune-visual --tune-projector --tune-diffusion-model |
| Augmentation | color jitter (brightness 0.3, contrast 0.4, saturation 0.5, hue 0.08) |
| Dataloader | 8 workers |
| Save cadence | every 5,000 steps, save_total_limit 2 (so checkpoint-75000 and checkpoint-80000 survived; this repo is checkpoint-80000) |
| Runtime | DeepSpeed 0.17.5, ZeRO stage 2, PyTorch 2.7.1+cu128, Transformers 4.51.3, Accelerate 1.13.0 |
All of the above is read back from the run's own launch_contract.json, which records
the exact launch argument vector (--num-gpus 8 --global-batch-size 128 --gradient-accumulation-steps 1 --max-steps 80000 --learning-rate 3e-5 --weight-decay 1e-5 --warmup-ratio 0.05 --seed 42 --dataloader-num-workers 8 --save-steps 5000 --save-total-limit 2 --no-tune-llm --no-tune-visual --tune-projector --tune-diffusion-model --color-jitter-params brightness 0.3 contrast 0.4 saturation 0.5 hue 0.08) together with effective_batch 128, num_gpus 8, method ours_segment_film,
arm ours and the 300 resolved dataset paths (65 atomic, 235 composite). The training
log records [deepspeed] version=0.17.5 stage=2 grad_accum=1 num_gpus=8 effective_batch=128. DeepSpeed 0.17.5 is the pinned version for this lineage; it does
not have the 0.17.6 ZeRO-2 gradient-accumulation defect, so the reported effective batch
of 128 is the batch the optimizer actually saw. The cosine schedule ran to its end
(step 80,000 learning rate 1.282e-14, loss 0.0369, grad-norm 0.122), and
best_model_checkpoint is None (no load-best-at-end), so checkpoint-80000 is the
final model by construction.
What "frozen backbone" does and does not mean here
--no-tune-llm --no-tune-visual resolve to tune_llm: false and tune_visual: false
in the run's own model config, and the runtime's startup log accordingly prints
Tune backbone llm: False / Tune backbone visual: False. But that same config also
carries tune_top_llm_layers: 4, and the runtime acts on it: besides the
diffusion/action head, the projector and the vision-language LayerNorm
(tune_vlln: true), it marks the top 4 layers of the language backbone trainable —
layers 12-15, the four immediately below select_layer: 16, where the projector reads
the backbone — and casts them to fp32 because backbone_trainable_params_fp32: true.
On a sibling run of this campaign with the same training runtime and the same launch
flags, that is 160 trainable parameter tensors, every one of them under
model.language_model.model.layers.{12,13,14,15}, and the runtime reports
Trainable parameters: 1,619,968,000 (49.29%). No vision-tower parameter appears in
that list, so the vision tower is genuinely frozen.
So the accurate statement is: the vision tower is frozen and the language backbone is frozen except for its top 4 layers, which are fine-tuned along with the projector, the vision-language LayerNorm and the diffusion/action head. This is the stock behavior of this runtime at these flags and is identical across the sibling checkpoints of this campaign.
None of this has to be taken on trust: it is readable from this repository's own
config.json, which ships tune_llm: false, tune_visual: false,
tune_top_llm_layers: 4, select_layer: 16, tune_vlln: true,
tune_projector: true, tune_diffusion_model: true and
backbone_trainable_params_fp32: true.
About the annotation.human.uvd_racer_mix50 modality key
The modality config replaces config["language"].modality_keys with the single literal
key annotation.human.uvd_racer_mix50, and the adapter prints
[uvd_racer_mix50] full_task=0.5 subtask=0.5 action_offsets=0..15; per-sample draw; subtask boundaries may be crossed at startup. That string is the name of the mixing
adapter, not a statement about which labels were used. The adapter file, its internal
UVD-era names and its RNG salt are retained byte-for-byte across every mid-training arm
of this campaign precisely so that the 50:50 sampling operation is provably identical
between arms; only the parquet inputs differ. The subtask sentences this checkpoint saw
are the Ours segment-film labels described above — no UVD label is read anywhere in
this run.
Concretely, the adapter reads both annotation.human.task_description and
annotation.human.subtask from the episode parquet, then for each materialized
sample draws the full-task text with probability 0.5 and the subtask text otherwise.
Action chunks are the unchanged 16-step offsets 0..15, so a sampled chunk may cross a
subtask boundary.
Episode population
Every raw human300 episode is retained: 32,043 episodes, the same population as the
UVD-RACER mid-training arm, and the overlay build reports 0 fallback episodes for
this label file. Episodes without a usable subtask span would keep their full-task text
in annotation.human.subtask (and so be excluded from the subtask half rather than
receive invented spans); no such episode occurs here.
Note for cross-arm comparison: the RDD-RACER mid-training sibling trains on 31,402 episodes (it excludes 641 episodes present in this snapshot), so a comparison of this checkpoint against the RDD-RACER arm is not matched in episode population, while a comparison against the UVD-RACER arm is.
Sibling repositories
| Repo | Role |
|---|---|
gr00t-n1.6-uvd-racer-mt80k-mix50 | the UVD-RACER mid-training counterpart: identical recipe, UVD segmentation |
gr00t-n1.6-uvd-racer-pt120k-mix50 | longer-schedule UVD pretraining/mid-training sibling |
qwen3-vl-4b-uvd-racer-hl6k | high-level subtask planner VLM, provisional target labels (superseded) |
gr00t-n1.6-uvd-racer-ft-cs60k-fulltask | full-task target FT on the 16 composite-seen tasks, from the UVD MT80K |
gr00t-n1.6-uvd-racer-ft-at60k-fulltask | full-task target FT on the 18 atomic-seen tasks, from the UVD MT80K |
gr00t-n1.6-rdd-racer-mt80k-mix50 | the RDD-RACER mid-training counterpart: identical recipe, RDD segmentation |
qwen3-vl-4b-uvd-racer-hl6k-cs16-final | high-level subtask planner VLM, final labels, composite-seen target |
qwen3-vl-4b-uvd-racer-hl6k-cu16-final | high-level subtask planner VLM, final labels, composite-unseen target |
gr00t-n1.6-mt60k-ds0175 | earlier mid-training checkpoint of the same lineage |
Contents
- Two sharded Safetensors weight files and their index
config.jsonprocessor_config.jsonstatistics.json(normalization statistics)embodiment_id.json
Optimizer, scheduler, RNG state, training logs, internal experiment configs and training datasets are not included. This is a model export for inference or for starting a new fine-tuning run, not a complete optimizer-state resume bundle.
Download and compatibility
from huggingface_hub import snapshot_download
checkpoint_dir = snapshot_download(
"happyhappy-jun/gr00t-n1.6-ours-racer-mt80k",
# revision=<commit sha of the single publication commit>
)
The whole payload is submitted in one atomic commit on a freshly created
repository, so that commit's sha is the only model revision here. It cannot be
written inside this file (the text would change the commit it names); the pinned
snapshot_download(..., revision=...) snippet is recorded in the publishing
lab's publication log alongside the per-file SHA-256 values.
Use this directory with compatible Isaac-GR00T N1.6 model/processor code.
The model type is Gr00tN1d6; ordinary Transformers AutoModel loading has not
been validated. The processor references nvidia/Eagle-Block2A-2B-v2, which may
require separate model access/download. The preserved processor includes a
RoboCasa new_embodiment modality configuration; use the matching embodiment,
camera/state/action conventions and normalization statistics. Because this arm was
mid-trained with a 50:50 full-task/subtask language mixture, it accepts either a
full task instruction or a single Ours subtask instruction; the downstream target
fine-tunes of this lineage use full-task language only.
Upload verification covers source checksum identity, Safetensors/index structure and Hub file integrity. It is not a new GPU inference or robot rollout evaluation. No task-success or safety-performance claim is made by this model card.
License and safety
The underlying model is subject to the NVIDIA noncommercial license linked
by the upstream model card. A complete, unmodified copy is included as
LICENSE.pdf. The license restricts use to noncommercial research
or evaluation.
Attribution: NVIDIA Isaac GR00T N1.6 and its underlying components. This repository is an independent derivative checkpoint and is not endorsed by NVIDIA.
Validate in simulation and use appropriate robot safety controls before any physical deployment. Outputs are not guaranteed to be safe or correct.