{ "schema_version": "5.1", "name": "gr00t-n1.6-3b-p150", "tt_metal_version": "0.65.2.dev10011", "arch": "blackhole", "device_count": 1, "producer": { "tt_kernel_version": "0.1.0", "created_at": "2026-09-17T20:45:45.250616+00:00", "hostname": "deepgadget" }, "weights": { "repo_id": "nvidia/GR00T-N1.6-3B", "revision": "d0814e7ecb19202e7c8468b46098b0b7ef3a6d61", "allow_patterns": [ "model-*.safetensors", "model.safetensors.index.json", "config.json", "processor_config.json", "statistics.json", "embodiment_id.json", "LICENSE" ], "ignore_patterns": null, "repo_type": "model" }, "mesh": null, "entrypoint": null, "resources": null, "capabilities": null, "env": {}, "bundled": null, "deps": null, "container": { "image": { "registry": "hf", "repository": "gr00t-n1.6-3b-p150", "tag": "tt-model/gr00t-n1.6-3b-p150:0be2c39e4a01", "digest": "sha256:0be2c39e4a01f307b061822a3a6d0b098e495a20c8ca0870953f0a73a05e4e60" }, "kind": "tt-dit-server", "runtime": { "app": "gr00t_p150.server.app:app", "mesh_shape_env": "TT_MESH_SHAPE", "packages": [ "numpy>=1.24.4,<2", "safetensors", "huggingface_hub", "transformers==5.12.1", "opencv-python-headless==4.8.1.78", "loguru" ], "lock": "requirements.lock" }, "serve": { "hardware": "p150", "mesh_device": "P150", "port": 20000, "max_model_len": null, "max_num_seqs": null, "block_size": null, "server_timeout": null, "capabilities": null, "additional_config": {}, "args": [], "env": { "TT_WEIGHTS_REVISION": "d0814e7ecb19202e7c8468b46098b0b7ef3a6d61", "TT_METAL_VISIBLE_DEVICES": "0", "TT_DEVICE_ID": "0", "GR00T_VERSION": "n16", "GR00T_EMBODIMENT": "gr1", "GR00T_LAYOUT": "gr1", "GR00T_POLICY": "mixed_dit", "GR00T_TRACE_LAYOUT": "per_stage", "GR00T_DIT_BACKEND": "megakernel", "GR00T_MK_ARENA_DTYPE": "auto", "GR00T_NUM_CQS": "2", "GR00T_TOKENIZER_DIR": "/opt/tt-metal/gr00t_p150/assets/tokenizer/n16", "GR00T_PROJECT_ROOT": "/nonexistent", "GR00T_GOLDEN_ROOT": "/nonexistent", "GR00T_TT_CACHE": "/weight-cache/gr00t-tt", "GR00T_WARMUP_RUNS": "3", "GR00T_WARMUP_PCC_MIN": "0.999" } }, "serve_profiles": [ { "hardware": null, "mesh_device": null, "port": null, "max_model_len": null, "max_num_seqs": null, "block_size": null, "server_timeout": null, "capabilities": null, "additional_config": {}, "args": [], "env": {}, "name": "default", "description": null } ], "default_profile": null, "code_dir": "code", "verify": [ "import gr00t_p150.server.app as a; assert a.app", "import sys, gr00t_p150.server.app; assert 'ttnn' not in sys.modules and not any(m.startswith('models.experimental.gr00t') for m in sys.modules), 'the server module must import without side effects'", "import models.experimental.gr00t.tt.model as m; assert m.Gr00tTT", "from models.experimental.gr00t.tt.policy import TTPolicy, DEFAULT_DIT_BACKEND; p = TTPolicy(); assert p.dit_backend == 'megakernel' == DEFAULT_DIT_BACKEND and p.mk_arena_dtype == 'auto' and p.mk_arena_dtype_for('n16') == 'bfp8_b', (p.dit_backend, p.mk_arena_dtype)", "import models.experimental.gr00t.tt.megakernel.dit_program as d; from models.experimental.gr00t.tt.megakernel import arena, core_map, descriptors; assert d.DiTMegakernel and descriptors.KERNEL_SOURCE.endswith('tt/megakernel/kernels/dit_kernel.cpp')", "import os; from pathlib import Path; from models.experimental.gr00t.tt.megakernel.descriptors import KERNEL_SOURCE; k = Path(os.environ.get('TT_METAL_HOME', '/opt/tt-metal')) / KERNEL_SOURCE; assert k.is_file() and len(list((k.parent / 'ops').glob('*.hpp'))) == 7, str(k)", "import os, re; from pathlib import Path; from models.experimental.gr00t.tt.megakernel.descriptors import KERNEL_SOURCE; home = Path(os.environ.get('TT_METAL_HOME', '/opt/tt-metal')); k = home / KERNEL_SOURCE; incs = {m for f in [k, *(k.parent / 'ops').glob('*.hpp')] for m in re.findall(r'#include \"([^\"]*unified_kernels/[^\"]+)\"', f.read_text())}; assert incs, 'no unified_kernels includes found'; missing = [i for i in incs if not (k.parent / i).resolve().is_file() and not (home / i).is_file()]; assert not missing, missing", "from models.experimental.gr00t.tt.model import open_model_device, device_worker_l1_size, worker_l1_size_for, MK_L1_CUT_BYTES_DEFAULT; from models.experimental.gr00t.tt.policy import TTPolicy; assert MK_L1_CUT_BYTES_DEFAULT == 65536 and worker_l1_size_for(TTPolicy()) is not None and worker_l1_size_for(TTPolicy(dit_backend='ttnn')) is None", "from gr00t_p150.server.app import STAGE_SERVED, DEFAULT_NUM_CQS, DIT_BACKENDS, MK_ARENA_DTYPES; assert STAGE_SERVED['megakernel'] == 'stage2-megakernel' and STAGE_SERVED['ttnn'] == 'stage1-ttnn-traces' and DEFAULT_NUM_CQS == 2 and set(DIT_BACKENDS) == {'ttnn', 'megakernel'} and 'bfp8_b' in MK_ARENA_DTYPES", "from models.experimental.gr00t.common import configs, preprocessing, normalization, prompts, checkpoint, weights; assert configs.HF_SNAPSHOT_SHAS['n16'] == 'd0814e7ecb19202e7c8468b46098b0b7ef3a6d61' and configs.HF_REPOS['n16'] == 'nvidia/GR00T-N1.6-3B'", "import models.tt_dit.utils.matmul as mm; assert mm.get_matmul_config", "import models.demos.deepseek_v3_b1.unified_kernel_descriptor as u; assert u.UnifiedKernelDescriptor", "import safetensors, huggingface_hub, cv2, numpy, PIL, loguru; assert int(numpy.__version__.split('.')[0]) < 2, numpy.__version__; assert cv2.__version__ == '4.8.1', cv2.__version__", "import transformers; assert transformers.__version__ == '5.12.1', transformers.__version__", "from pathlib import Path; d = Path('/opt/tt-metal/gr00t_p150/assets/tokenizer/n16'); assert all((d / f).is_file() for f in ('vocab.json', 'merges.txt', 'tokenizer_config.json', 'special_tokens_map.json', 'added_tokens.json')), sorted(p.name for p in d.iterdir())", "import os; os.environ['GR00T_TOKENIZER_DIR_N16'] = '/opt/tt-metal/gr00t_p150/assets/tokenizer/n16'; from models.experimental.gr00t.common.prompts import get_tokenizer; t = get_tokenizer('n16'); assert t.convert_tokens_to_ids('') == 151669 and t.convert_tokens_to_ids('') == 151670 and t.convert_tokens_to_ids('') == 151671", "from pathlib import Path; d = Path('/opt/tt-metal/gr00t_p150/demo/n16'); assert all((d / f).is_file() for f in ('observation.json', 'noise.json', 'expected.json', 'frames/ego_view_bg_crop_pad_res256_freq20_t0.png')), sorted(str(p) for p in d.rglob('*'))", "from gr00t_p150.server.app import load_demo_request; import numpy as np; r = load_demo_request('n16'); assert set(r['images']) == {'ego_view_bg_crop_pad_res256_freq20'} and np.asarray(r['noise']).squeeze().shape == (50, 128)", "from pathlib import Path; assert Path('/opt/tt-metal/models/experimental/gr00t/common/golden_tap_map.json').is_file() and Path('/opt/tt-metal/models/experimental/gr00t/tests/tt/gates/gates_multi.json').is_file()", "from pathlib import Path; assert Path('/opt/tt-metal/gr00t_p150/server/smoke_test.py').is_file() and Path('/opt/tt-metal/scripts/bench_http.py').is_file() and Path('/opt/tt-metal/scripts/download_weights.sh').is_file()", "import ttnn; assert all(hasattr(ttnn, a) for a in ('begin_trace_capture', 'end_trace_capture', 'execute_trace', 'release_trace', 'copy_host_to_device_tensor', 'MinimalMatmulConfig', 'generic_op', 'ProgramDescriptor'))", "from gr00t_p150.server.app import parse_mesh_shape as p; assert p('1x1') == p('(1, 1)') == p('1,1') == (1, 1)" ], "built": { "image": "tt-model/gr00t-n1.6-3b-p150:0be2c39e4a01", "repo": "changh95/GR00T-N1.6-3B-p150", "tt_model_version": "0.1.0", "created_at": "2026-09-17T20:40:28+00:00", "tt_metal": { "sha": "668c290757550588d0ce46b180c344a462a2aaf5", "describe": "v0.79.0-dev20260914-1-g668c290757", "dirty": false, "scm_version": "0.65.2.dev10011", "mode": "local", "remote": "https://github.com/tenstorrent/tt-metal.git", "branch": "HEAD", "pushed": true }, "code_sha256": "8e6bd13a23654f91a229745d001c12b7972f9215a95c75fe05258181f7c324b8", "image_digest": "sha256:0be2c39e4a01f307b061822a3a6d0b098e495a20c8ca0870953f0a73a05e4e60" } } }