SenseNova-U1-8B-MoT contains roughly 8B understanding parameters and
8B generation parameters. To avoid confusion caused by the naming and to
present the architecture more accurately, we provide a small inspection
script that parses parameter names of the loaded checkpoint and reports a
detailed parameter breakdown.
python scripts/inspect_model_params.py \
--model_path sensenova/SenseNova-U1-8B-MoTUseful argments:
--dtype {float32,float16,bfloat16}(default:bfloat16) — load dtype. It does not affect parameter counts; it only affects the reportedmemorycolumn, since eachbf16/fp16element occupies 2 bytes versus 4 bytes forfp32.--show_groups <name1,name2>(default:shared) — list member parameters of the specified groups. Useallfor every group, or an empty string to disable.--custom_groups_json <path>— override the default grouping rules with a JSON file of the form{"group_name": ["prefix1", "prefix2"]}.
Model: sensenova/SenseNova-U1-8B-MoT
Load dtype: bfloat16
Total params: 17.552B
Total memory: 35.105GB (bfloat16)
---------------------------------------------------------------------
group params memory (bfloat16) ratio
---------------------------------------------------------------------
generation_transformer 8.186B 16.373GB 46.64%
understanding_transformer 8.121B 16.243GB 46.27%
shared 1.245B 2.489GB 7.09%
---------------------------------------------------------------------
Pathway breakdown (shared counted in both):
---------------------------------------------------------------------
pathway params memory (bfloat16) ratio
---------------------------------------------------------------------
understanding pathway 9.366B 18.732GB 53.36%
generation pathway 9.431B 18.862GB 53.73%
---------------------------------------------------------------------
Members of group 'shared' (2 params, 1.245B total, 2.489GB @ bfloat16)
---------------------------------------------------------------------
param name numel dtype
---------------------------------------------------------------------
language_model.model.embed_tokens.weight 622.330M bfloat16
language_model.lm_head.weight 622.330M bfloat16
Each parameter is counted exactly once and assigned to one of three groups based on its module path:
understanding_transformer≈ 8.12B (46%) — vision und. (vision_model.*) plus the LLM expert without_mot_gensuffix (language_model.*minus the generation expert and the shared text I/O).generation_transformer≈ 8.19B (47%) — generation-side modules (fm_modules.*: vision gen., flow-matching head, timestep / noise embedders) plus the LLM expert with_mot_gensuffix (language_model.*containing_mot_gen).shared≈ 1.25B (7%) — text-token I/O reused by both pathways:language_model.model.embed_tokensandlanguage_model.lm_head.
A pathway sums the parameters that are actually traversed during the forward pass of one task.
Because both tasks reuse the shared group, the ratios overlap and add up to more than 100%.
-
Understanding pathway ≈
understanding_transformer + shared≈ 9.37B (53%). Image goes throughvision_model→ tokens go throughembed_tokens→ the LLM runs on thenon-_mot_genexpert →lm_headproduces text logits. -
Generation pathway (single-turn thinking interleave) ≈
generation_transformer + shared≈ 9.43B (54%). The condition image goes throughfm_modules.vision_model_mot_gen, while the text prompt goes throughembed_tokens→ the LLM runs on the_mot_genexpert → text reasoning is produced vialm_headand the image is decoded viafm_modules.fm_head.
embed_tokens is needed by every text token and is therefore obviously
shared. lm_head is also exercised by the generation pathway in some scenarios,
e.g., t2i-reasoning runs a thinking phase that emits text tokens before any image token is produced,
so lm_head is on the critical path of both pathways — hence the "shared" label.