pub struct NemotronMoeWeights {
pub gate: DenseWeight,
pub e_score_correction_bias: DenseWeight,
pub experts: Vec<NemotronExpertWeight>,
pub shared_up: QuantizedWeight,
pub shared_up_fp8: Option<Fp8Weight>,
pub shared_down: QuantizedWeight,
pub shared_down_fp8: Option<Fp8Weight>,
pub fc1_latent_proj: Option<DenseWeight>,
pub fc2_latent_proj: Option<DenseWeight>,
}Expand description
Nemotron-H MoE layer weights.
Fields§
§gate: DenseWeightRouter gate: [num_experts, hidden_size] F32→BF16.
e_score_correction_bias: DenseWeightExpert score correction bias: [num_experts] F32.
experts: Vec<NemotronExpertWeight>Per-expert weights (routed): NVFP4.
Shared expert up_proj: [shared_inter, hidden_size] NVFP4.
Shared expert up_proj kept as NATIVE FP8 when the checkpoint ships it that
way (ModelOpt MIXED_PRECISION), instead of the FP8→BF16→NVFP4 requant.
Some only under ATLAS_NEMOTRON_NATIVE_FP8_SSM; decode prefers it via
w8a16_gemv. Measured on Puzzle-75B: with the SSM projections already
native, a 977-token story went from calling the dog “Rover”/“Rex” to
using the given name “Rufus” 8 times with no substitutions — proper-noun
retrieval is what the requant was destroying.
Shared expert down_proj: [hidden_size, shared_inter] NVFP4.
Shared expert down_proj kept as NATIVE FP8, same rationale as
shared_up_fp8. Consumed by relu_squared_inplace + w8a16_gemv instead
of the fused moe_expert_relu2_down_shared kernel, which only speaks
NVFP4 — the fused launch simply drops its shared slot (grid.y = top_k)
when this is present.
fc1_latent_proj: Option<DenseWeight>LatentMoE: fc1 [moe_latent_size, hidden_size] BF16 (dequant from FP8 at load). Present only for Super 120B (moe_latent_size > 0).
fc2_latent_proj: Option<DenseWeight>LatentMoE: fc2 [hidden_size, moe_latent_size] BF16. Present only for Super 120B (moe_latent_size > 0).