family afmoe
A sandwich block whose attention gates its heads with a sigmoid and applies rotary only on its sliding-window blocks, and whose MLP is dense on the first blocks and a mixture with a shared expert after them, its routed experts picked by sigmoid scores plus a selection bias.
One block of the stack. Hover any part for its nnterp name; click to pin the card. The slider picks a block, each tick's color gives its block's shape, and the diagram redraws for the block picked.
One block of the stack. Hover any part for its nnterp name; click to pin the card. The slider picks a block, each tick's color gives its block's shape, and the diagram redraws for the block picked.
One block of the stack. Hover any part for its nnterp name; click to pin the card. The slider picks a block, each tick's color gives its block's shape, and the diagram redraws for the block picked.
identity layers[i].input + self_attn.attention_output + mlp.mlp_output == layer_output
⚠︎ marks a value this checkpoint has only under some load: hover it for the condition.
⚠︎ marks a value this checkpoint has only under some load: hover it for the condition.
⚠︎ marks a value this checkpoint has only under some load: hover it for the condition.
What print(model) shows on arcee-ai/Trinity-Nano-Base: the native modules, standard names and every standard value with its layout.
AfmoeForCausalLM(
(lm_head): Linear(in_features=1024, out_features=200192, bias=False)
(generator): Generator(
(streamer): Streamer()
)
(embed_tokens): Embedding(200192, 1024)
(layers): ModuleList(
(0-1): 2 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=1024, out_features=1024, bias=False)
(k_proj): Linear(in_features=1024, out_features=256, bias=False)
(v_proj): Linear(in_features=1024, out_features=256, bias=False)
(o_proj): Linear(in_features=1024, out_features=1024, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=1024, out_features=1024, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(mlp): AfmoeMLP(
(gate_proj): Linear(in_features=1024, out_features=3072, bias=False)
(up_proj): Linear(in_features=1024, out_features=3072, bias=False)
(down_proj): Linear(in_features=3072, out_features=1024, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
(2-55): 54 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=1024, out_features=1024, bias=False)
(k_proj): Linear(in_features=1024, out_features=256, bias=False)
(v_proj): Linear(in_features=1024, out_features=256, bias=False)
(o_proj): Linear(in_features=1024, out_features=1024, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=1024, out_features=1024, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(mlp): AfmoeSparseMoeBlock(
(router): AfmoeTokenChoiceRouter(
(gate): Linear(in_features=1024, out_features=128, bias=False)
)
(shared_experts): AfmoeMLP(
(gate_proj): Linear(in_features=1024, out_features=256, bias=False)
(up_proj): Linear(in_features=1024, out_features=256, bias=False)
(down_proj): Linear(in_features=256, out_features=1024, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(experts): AfmoeExperts(
(act_fn): SiLUActivation()
)
(router_logits) -> RouterLogits [batch seq num_experts]: The router's logits, one per expert, before the scoring
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
(expert_weights) -> ExpertWeights [batch seq top_k]: The weight each selected expert's output is scaled by
(expert_indices) -> ExpertIndices [batch seq top_k]: The expert each routing slot sends the token to
(expert_outputs) -> ExpertOutputs [batch seq top_k hidden_size]: Each routing slot's weighted expert output
(routed_output) -> Residual [batch seq hidden_size]: The routed experts' combined output
(shared_expert_output) -> Residual [batch seq hidden_size]: The shared expert's output
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
)
(norm): AfmoeRMSNorm((1024,), eps=1e-05)
(logits) -> Logits [batch seq vocab_size]: The logits the model returns, after anything it does past lm_head (a softcap, a scale)
(token_embeddings) -> Residual [batch seq hidden_size]: The embedding module's output; layers[0].input is what enters the first block
(final_norm_output) -> Residual [batch seq hidden_size]: The residual stream after the final norm, what lm_head reads
(lm_head_output) -> Logits [batch seq vocab_size]: The head's logits before anything the model does past lm_head (a softcap, a scale)
(next_token_probs) -> NextTokenProbs [batch vocab_size]: The next-token distribution at the last position; derived, read-only
(input_ids) -> Tokens [batch seq]: The token ids the model was called with
(attention_mask) -> Tokens [batch seq]: The attention mask the model was called with; zeros are padding
(input_size): [batch, seq] of the current call; read-only
)What print(model) shows on arcee-ai/Trinity-Nano-Base-Pre-Anneal: the native modules, standard names and every standard value with its layout.
AfmoeForCausalLM(
(lm_head): Linear(in_features=1024, out_features=200192, bias=False)
(generator): Generator(
(streamer): Streamer()
)
(embed_tokens): Embedding(200192, 1024)
(layers): ModuleList(
(0-1): 2 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=1024, out_features=1024, bias=False)
(k_proj): Linear(in_features=1024, out_features=256, bias=False)
(v_proj): Linear(in_features=1024, out_features=256, bias=False)
(o_proj): Linear(in_features=1024, out_features=1024, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=1024, out_features=1024, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(mlp): AfmoeMLP(
(gate_proj): Linear(in_features=1024, out_features=3072, bias=False)
(up_proj): Linear(in_features=1024, out_features=3072, bias=False)
(down_proj): Linear(in_features=3072, out_features=1024, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
(2-55): 54 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=1024, out_features=1024, bias=False)
(k_proj): Linear(in_features=1024, out_features=256, bias=False)
(v_proj): Linear(in_features=1024, out_features=256, bias=False)
(o_proj): Linear(in_features=1024, out_features=1024, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=1024, out_features=1024, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(mlp): AfmoeSparseMoeBlock(
(router): AfmoeTokenChoiceRouter(
(gate): Linear(in_features=1024, out_features=128, bias=False)
)
(shared_experts): AfmoeMLP(
(gate_proj): Linear(in_features=1024, out_features=256, bias=False)
(up_proj): Linear(in_features=1024, out_features=256, bias=False)
(down_proj): Linear(in_features=256, out_features=1024, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(experts): AfmoeExperts(
(act_fn): SiLUActivation()
)
(router_logits) -> RouterLogits [batch seq num_experts]: The router's logits, one per expert, before the scoring
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
(expert_weights) -> ExpertWeights [batch seq top_k]: The weight each selected expert's output is scaled by
(expert_indices) -> ExpertIndices [batch seq top_k]: The expert each routing slot sends the token to
(expert_outputs) -> ExpertOutputs [batch seq top_k hidden_size]: Each routing slot's weighted expert output
(routed_output) -> Residual [batch seq hidden_size]: The routed experts' combined output
(shared_expert_output) -> Residual [batch seq hidden_size]: The shared expert's output
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
)
(norm): AfmoeRMSNorm((1024,), eps=1e-05)
(logits) -> Logits [batch seq vocab_size]: The logits the model returns, after anything it does past lm_head (a softcap, a scale)
(token_embeddings) -> Residual [batch seq hidden_size]: The embedding module's output; layers[0].input is what enters the first block
(final_norm_output) -> Residual [batch seq hidden_size]: The residual stream after the final norm, what lm_head reads
(lm_head_output) -> Logits [batch seq vocab_size]: The head's logits before anything the model does past lm_head (a softcap, a scale)
(next_token_probs) -> NextTokenProbs [batch vocab_size]: The next-token distribution at the last position; derived, read-only
(input_ids) -> Tokens [batch seq]: The token ids the model was called with
(attention_mask) -> Tokens [batch seq]: The attention mask the model was called with; zeros are padding
(input_size): [batch, seq] of the current call; read-only
)What print(model) shows on arcee-ai/Trinity-Nano-Preview: the native modules, standard names and every standard value with its layout.
AfmoeForCausalLM(
(lm_head): Linear(in_features=1024, out_features=200192, bias=False)
(generator): Generator(
(streamer): Streamer()
)
(embed_tokens): Embedding(200192, 1024)
(layers): ModuleList(
(0-1): 2 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=1024, out_features=1024, bias=False)
(k_proj): Linear(in_features=1024, out_features=256, bias=False)
(v_proj): Linear(in_features=1024, out_features=256, bias=False)
(o_proj): Linear(in_features=1024, out_features=1024, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=1024, out_features=1024, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(mlp): AfmoeMLP(
(gate_proj): Linear(in_features=1024, out_features=3072, bias=False)
(up_proj): Linear(in_features=1024, out_features=3072, bias=False)
(down_proj): Linear(in_features=3072, out_features=1024, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
(2-55): 54 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=1024, out_features=1024, bias=False)
(k_proj): Linear(in_features=1024, out_features=256, bias=False)
(v_proj): Linear(in_features=1024, out_features=256, bias=False)
(o_proj): Linear(in_features=1024, out_features=1024, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=1024, out_features=1024, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((1024,), eps=1e-05)
(mlp): AfmoeSparseMoeBlock(
(router): AfmoeTokenChoiceRouter(
(gate): Linear(in_features=1024, out_features=128, bias=False)
)
(shared_experts): AfmoeMLP(
(gate_proj): Linear(in_features=1024, out_features=256, bias=False)
(up_proj): Linear(in_features=1024, out_features=256, bias=False)
(down_proj): Linear(in_features=256, out_features=1024, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(experts): AfmoeExperts(
(act_fn): SiLUActivation()
)
(router_logits) -> RouterLogits [batch seq num_experts]: The router's logits, one per expert, before the scoring
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
(expert_weights) -> ExpertWeights [batch seq top_k]: The weight each selected expert's output is scaled by
(expert_indices) -> ExpertIndices [batch seq top_k]: The expert each routing slot sends the token to
(expert_outputs) -> ExpertOutputs [batch seq top_k hidden_size]: Each routing slot's weighted expert output
(routed_output) -> Residual [batch seq hidden_size]: The routed experts' combined output
(shared_expert_output) -> Residual [batch seq hidden_size]: The shared expert's output
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
)
(norm): AfmoeRMSNorm((1024,), eps=1e-05)
(logits) -> Logits [batch seq vocab_size]: The logits the model returns, after anything it does past lm_head (a softcap, a scale)
(token_embeddings) -> Residual [batch seq hidden_size]: The embedding module's output; layers[0].input is what enters the first block
(final_norm_output) -> Residual [batch seq hidden_size]: The residual stream after the final norm, what lm_head reads
(lm_head_output) -> Logits [batch seq vocab_size]: The head's logits before anything the model does past lm_head (a softcap, a scale)
(next_token_probs) -> NextTokenProbs [batch vocab_size]: The next-token distribution at the last position; derived, read-only
(input_ids) -> Tokens [batch seq]: The token ids the model was called with
(attention_mask) -> Tokens [batch seq]: The attention mask the model was called with; zeros are padding
(input_size): [batch, seq] of the current call; read-only
)What print(model) shows on arcee-ai/Trinity-Mini-Base: the native modules, standard names and every standard value with its layout.
AfmoeForCausalLM(
(lm_head): Linear(in_features=2048, out_features=200192, bias=False)
(generator): Generator(
(streamer): Streamer()
)
(embed_tokens): Embedding(200192, 2048)
(layers): ModuleList(
(0-1): 2 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=2048, out_features=4096, bias=False)
(k_proj): Linear(in_features=2048, out_features=512, bias=False)
(v_proj): Linear(in_features=2048, out_features=512, bias=False)
(o_proj): Linear(in_features=4096, out_features=2048, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=2048, out_features=4096, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(mlp): AfmoeMLP(
(gate_proj): Linear(in_features=2048, out_features=6144, bias=False)
(up_proj): Linear(in_features=2048, out_features=6144, bias=False)
(down_proj): Linear(in_features=6144, out_features=2048, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
(2-31): 30 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=2048, out_features=4096, bias=False)
(k_proj): Linear(in_features=2048, out_features=512, bias=False)
(v_proj): Linear(in_features=2048, out_features=512, bias=False)
(o_proj): Linear(in_features=4096, out_features=2048, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=2048, out_features=4096, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(mlp): AfmoeSparseMoeBlock(
(router): AfmoeTokenChoiceRouter(
(gate): Linear(in_features=2048, out_features=128, bias=False)
)
(shared_experts): AfmoeMLP(
(gate_proj): Linear(in_features=2048, out_features=1024, bias=False)
(up_proj): Linear(in_features=2048, out_features=1024, bias=False)
(down_proj): Linear(in_features=1024, out_features=2048, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(experts): AfmoeExperts(
(act_fn): SiLUActivation()
)
(router_logits) -> RouterLogits [batch seq num_experts]: The router's logits, one per expert, before the scoring
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
(expert_weights) -> ExpertWeights [batch seq top_k]: The weight each selected expert's output is scaled by
(expert_indices) -> ExpertIndices [batch seq top_k]: The expert each routing slot sends the token to
(expert_outputs) -> ExpertOutputs [batch seq top_k hidden_size]: Each routing slot's weighted expert output
(routed_output) -> Residual [batch seq hidden_size]: The routed experts' combined output
(shared_expert_output) -> Residual [batch seq hidden_size]: The shared expert's output
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
)
(norm): AfmoeRMSNorm((2048,), eps=1e-05)
(logits) -> Logits [batch seq vocab_size]: The logits the model returns, after anything it does past lm_head (a softcap, a scale)
(token_embeddings) -> Residual [batch seq hidden_size]: The embedding module's output; layers[0].input is what enters the first block
(final_norm_output) -> Residual [batch seq hidden_size]: The residual stream after the final norm, what lm_head reads
(lm_head_output) -> Logits [batch seq vocab_size]: The head's logits before anything the model does past lm_head (a softcap, a scale)
(next_token_probs) -> NextTokenProbs [batch vocab_size]: The next-token distribution at the last position; derived, read-only
(input_ids) -> Tokens [batch seq]: The token ids the model was called with
(attention_mask) -> Tokens [batch seq]: The attention mask the model was called with; zeros are padding
(input_size): [batch, seq] of the current call; read-only
)What print(model) shows on arcee-ai/Trinity-Mini-Base-Pre-Anneal: the native modules, standard names and every standard value with its layout.
AfmoeForCausalLM(
(lm_head): Linear(in_features=2048, out_features=200192, bias=False)
(generator): Generator(
(streamer): Streamer()
)
(embed_tokens): Embedding(200192, 2048)
(layers): ModuleList(
(0-1): 2 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=2048, out_features=4096, bias=False)
(k_proj): Linear(in_features=2048, out_features=512, bias=False)
(v_proj): Linear(in_features=2048, out_features=512, bias=False)
(o_proj): Linear(in_features=4096, out_features=2048, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=2048, out_features=4096, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(mlp): AfmoeMLP(
(gate_proj): Linear(in_features=2048, out_features=6144, bias=False)
(up_proj): Linear(in_features=2048, out_features=6144, bias=False)
(down_proj): Linear(in_features=6144, out_features=2048, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
(2-31): 30 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=2048, out_features=4096, bias=False)
(k_proj): Linear(in_features=2048, out_features=512, bias=False)
(v_proj): Linear(in_features=2048, out_features=512, bias=False)
(o_proj): Linear(in_features=4096, out_features=2048, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=2048, out_features=4096, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(mlp): AfmoeSparseMoeBlock(
(router): AfmoeTokenChoiceRouter(
(gate): Linear(in_features=2048, out_features=128, bias=False)
)
(shared_experts): AfmoeMLP(
(gate_proj): Linear(in_features=2048, out_features=1024, bias=False)
(up_proj): Linear(in_features=2048, out_features=1024, bias=False)
(down_proj): Linear(in_features=1024, out_features=2048, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(experts): AfmoeExperts(
(act_fn): SiLUActivation()
)
(router_logits) -> RouterLogits [batch seq num_experts]: The router's logits, one per expert, before the scoring
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
(expert_weights) -> ExpertWeights [batch seq top_k]: The weight each selected expert's output is scaled by
(expert_indices) -> ExpertIndices [batch seq top_k]: The expert each routing slot sends the token to
(expert_outputs) -> ExpertOutputs [batch seq top_k hidden_size]: Each routing slot's weighted expert output
(routed_output) -> Residual [batch seq hidden_size]: The routed experts' combined output
(shared_expert_output) -> Residual [batch seq hidden_size]: The shared expert's output
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
)
(norm): AfmoeRMSNorm((2048,), eps=1e-05)
(logits) -> Logits [batch seq vocab_size]: The logits the model returns, after anything it does past lm_head (a softcap, a scale)
(token_embeddings) -> Residual [batch seq hidden_size]: The embedding module's output; layers[0].input is what enters the first block
(final_norm_output) -> Residual [batch seq hidden_size]: The residual stream after the final norm, what lm_head reads
(lm_head_output) -> Logits [batch seq vocab_size]: The head's logits before anything the model does past lm_head (a softcap, a scale)
(next_token_probs) -> NextTokenProbs [batch vocab_size]: The next-token distribution at the last position; derived, read-only
(input_ids) -> Tokens [batch seq]: The token ids the model was called with
(attention_mask) -> Tokens [batch seq]: The attention mask the model was called with; zeros are padding
(input_size): [batch, seq] of the current call; read-only
)What print(model) shows on arcee-ai/Trinity-Mini: the native modules, standard names and every standard value with its layout.
AfmoeForCausalLM(
(lm_head): Linear(in_features=2048, out_features=200192, bias=False)
(generator): Generator(
(streamer): Streamer()
)
(embed_tokens): Embedding(200192, 2048)
(layers): ModuleList(
(0-1): 2 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=2048, out_features=4096, bias=False)
(k_proj): Linear(in_features=2048, out_features=512, bias=False)
(v_proj): Linear(in_features=2048, out_features=512, bias=False)
(o_proj): Linear(in_features=4096, out_features=2048, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=2048, out_features=4096, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(mlp): AfmoeMLP(
(gate_proj): Linear(in_features=2048, out_features=6144, bias=False)
(up_proj): Linear(in_features=2048, out_features=6144, bias=False)
(down_proj): Linear(in_features=6144, out_features=2048, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
(2-31): 30 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=2048, out_features=4096, bias=False)
(k_proj): Linear(in_features=2048, out_features=512, bias=False)
(v_proj): Linear(in_features=2048, out_features=512, bias=False)
(o_proj): Linear(in_features=4096, out_features=2048, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=2048, out_features=4096, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((2048,), eps=1e-05)
(mlp): AfmoeSparseMoeBlock(
(router): AfmoeTokenChoiceRouter(
(gate): Linear(in_features=2048, out_features=128, bias=False)
)
(shared_experts): AfmoeMLP(
(gate_proj): Linear(in_features=2048, out_features=1024, bias=False)
(up_proj): Linear(in_features=2048, out_features=1024, bias=False)
(down_proj): Linear(in_features=1024, out_features=2048, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(experts): AfmoeExperts(
(act_fn): SiLUActivation()
)
(router_logits) -> RouterLogits [batch seq num_experts]: The router's logits, one per expert, before the scoring
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
(expert_weights) -> ExpertWeights [batch seq top_k]: The weight each selected expert's output is scaled by
(expert_indices) -> ExpertIndices [batch seq top_k]: The expert each routing slot sends the token to
(expert_outputs) -> ExpertOutputs [batch seq top_k hidden_size]: Each routing slot's weighted expert output
(routed_output) -> Residual [batch seq hidden_size]: The routed experts' combined output
(shared_expert_output) -> Residual [batch seq hidden_size]: The shared expert's output
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
)
(norm): AfmoeRMSNorm((2048,), eps=1e-05)
(logits) -> Logits [batch seq vocab_size]: The logits the model returns, after anything it does past lm_head (a softcap, a scale)
(token_embeddings) -> Residual [batch seq hidden_size]: The embedding module's output; layers[0].input is what enters the first block
(final_norm_output) -> Residual [batch seq hidden_size]: The residual stream after the final norm, what lm_head reads
(lm_head_output) -> Logits [batch seq vocab_size]: The head's logits before anything the model does past lm_head (a softcap, a scale)
(next_token_probs) -> NextTokenProbs [batch vocab_size]: The next-token distribution at the last position; derived, read-only
(input_ids) -> Tokens [batch seq]: The token ids the model was called with
(attention_mask) -> Tokens [batch seq]: The attention mask the model was called with; zeros are padding
(input_size): [batch, seq] of the current call; read-only
)What print(model) shows on arcee-ai/Trinity-Large-TrueBase: the native modules, standard names and every standard value with its layout.
AfmoeForCausalLM(
(lm_head): Linear(in_features=3072, out_features=200192, bias=False)
(generator): Generator(
(streamer): Streamer()
)
(embed_tokens): Embedding(200192, 3072)
(layers): ModuleList(
(0-5): 6 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=3072, out_features=6144, bias=False)
(k_proj): Linear(in_features=3072, out_features=1024, bias=False)
(v_proj): Linear(in_features=3072, out_features=1024, bias=False)
(o_proj): Linear(in_features=6144, out_features=3072, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=3072, out_features=6144, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(mlp): AfmoeMLP(
(gate_proj): Linear(in_features=3072, out_features=12288, bias=False)
(up_proj): Linear(in_features=3072, out_features=12288, bias=False)
(down_proj): Linear(in_features=12288, out_features=3072, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
(6-59): 54 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=3072, out_features=6144, bias=False)
(k_proj): Linear(in_features=3072, out_features=1024, bias=False)
(v_proj): Linear(in_features=3072, out_features=1024, bias=False)
(o_proj): Linear(in_features=6144, out_features=3072, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=3072, out_features=6144, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(mlp): AfmoeSparseMoeBlock(
(router): AfmoeTokenChoiceRouter(
(gate): Linear(in_features=3072, out_features=256, bias=False)
)
(shared_experts): AfmoeMLP(
(gate_proj): Linear(in_features=3072, out_features=3072, bias=False)
(up_proj): Linear(in_features=3072, out_features=3072, bias=False)
(down_proj): Linear(in_features=3072, out_features=3072, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(experts): AfmoeExperts(
(act_fn): SiLUActivation()
)
(router_logits) -> RouterLogits [batch seq num_experts]: The router's logits, one per expert, before the scoring
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
(expert_weights) -> ExpertWeights [batch seq top_k]: The weight each selected expert's output is scaled by
(expert_indices) -> ExpertIndices [batch seq top_k]: The expert each routing slot sends the token to
(expert_outputs) -> ExpertOutputs [batch seq top_k hidden_size]: Each routing slot's weighted expert output
(routed_output) -> Residual [batch seq hidden_size]: The routed experts' combined output
(shared_expert_output) -> Residual [batch seq hidden_size]: The shared expert's output
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
)
(norm): AfmoeRMSNorm((3072,), eps=1e-05)
(logits) -> Logits [batch seq vocab_size]: The logits the model returns, after anything it does past lm_head (a softcap, a scale)
(token_embeddings) -> Residual [batch seq hidden_size]: The embedding module's output; layers[0].input is what enters the first block
(final_norm_output) -> Residual [batch seq hidden_size]: The residual stream after the final norm, what lm_head reads
(lm_head_output) -> Logits [batch seq vocab_size]: The head's logits before anything the model does past lm_head (a softcap, a scale)
(next_token_probs) -> NextTokenProbs [batch vocab_size]: The next-token distribution at the last position; derived, read-only
(input_ids) -> Tokens [batch seq]: The token ids the model was called with
(attention_mask) -> Tokens [batch seq]: The attention mask the model was called with; zeros are padding
(input_size): [batch, seq] of the current call; read-only
)What print(model) shows on arcee-ai/Trinity-Large-Base: the native modules, standard names and every standard value with its layout.
AfmoeForCausalLM(
(lm_head): Linear(in_features=3072, out_features=200192, bias=False)
(generator): Generator(
(streamer): Streamer()
)
(embed_tokens): Embedding(200192, 3072)
(layers): ModuleList(
(0-5): 6 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=3072, out_features=6144, bias=False)
(k_proj): Linear(in_features=3072, out_features=1024, bias=False)
(v_proj): Linear(in_features=3072, out_features=1024, bias=False)
(o_proj): Linear(in_features=6144, out_features=3072, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=3072, out_features=6144, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(mlp): AfmoeMLP(
(gate_proj): Linear(in_features=3072, out_features=12288, bias=False)
(up_proj): Linear(in_features=3072, out_features=12288, bias=False)
(down_proj): Linear(in_features=12288, out_features=3072, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
(6-59): 54 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=3072, out_features=6144, bias=False)
(k_proj): Linear(in_features=3072, out_features=1024, bias=False)
(v_proj): Linear(in_features=3072, out_features=1024, bias=False)
(o_proj): Linear(in_features=6144, out_features=3072, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=3072, out_features=6144, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(mlp): AfmoeSparseMoeBlock(
(router): AfmoeTokenChoiceRouter(
(gate): Linear(in_features=3072, out_features=256, bias=False)
)
(shared_experts): AfmoeMLP(
(gate_proj): Linear(in_features=3072, out_features=3072, bias=False)
(up_proj): Linear(in_features=3072, out_features=3072, bias=False)
(down_proj): Linear(in_features=3072, out_features=3072, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(experts): AfmoeExperts(
(act_fn): SiLUActivation()
)
(router_logits) -> RouterLogits [batch seq num_experts]: The router's logits, one per expert, before the scoring
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
(expert_weights) -> ExpertWeights [batch seq top_k]: The weight each selected expert's output is scaled by
(expert_indices) -> ExpertIndices [batch seq top_k]: The expert each routing slot sends the token to
(expert_outputs) -> ExpertOutputs [batch seq top_k hidden_size]: Each routing slot's weighted expert output
(routed_output) -> Residual [batch seq hidden_size]: The routed experts' combined output
(shared_expert_output) -> Residual [batch seq hidden_size]: The shared expert's output
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
)
(norm): AfmoeRMSNorm((3072,), eps=1e-05)
(logits) -> Logits [batch seq vocab_size]: The logits the model returns, after anything it does past lm_head (a softcap, a scale)
(token_embeddings) -> Residual [batch seq hidden_size]: The embedding module's output; layers[0].input is what enters the first block
(final_norm_output) -> Residual [batch seq hidden_size]: The residual stream after the final norm, what lm_head reads
(lm_head_output) -> Logits [batch seq vocab_size]: The head's logits before anything the model does past lm_head (a softcap, a scale)
(next_token_probs) -> NextTokenProbs [batch vocab_size]: The next-token distribution at the last position; derived, read-only
(input_ids) -> Tokens [batch seq]: The token ids the model was called with
(attention_mask) -> Tokens [batch seq]: The attention mask the model was called with; zeros are padding
(input_size): [batch, seq] of the current call; read-only
)What print(model) shows on arcee-ai/Trinity-Large-Preview: the native modules, standard names and every standard value with its layout.
AfmoeForCausalLM(
(lm_head): Linear(in_features=3072, out_features=200192, bias=False)
(generator): Generator(
(streamer): Streamer()
)
(embed_tokens): Embedding(200192, 3072)
(layers): ModuleList(
(0-5): 6 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=3072, out_features=6144, bias=False)
(k_proj): Linear(in_features=3072, out_features=1024, bias=False)
(v_proj): Linear(in_features=3072, out_features=1024, bias=False)
(o_proj): Linear(in_features=6144, out_features=3072, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=3072, out_features=6144, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(mlp): AfmoeMLP(
(gate_proj): Linear(in_features=3072, out_features=12288, bias=False)
(up_proj): Linear(in_features=3072, out_features=12288, bias=False)
(down_proj): Linear(in_features=12288, out_features=3072, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
(6-59): 54 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=3072, out_features=6144, bias=False)
(k_proj): Linear(in_features=3072, out_features=1024, bias=False)
(v_proj): Linear(in_features=3072, out_features=1024, bias=False)
(o_proj): Linear(in_features=6144, out_features=3072, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=3072, out_features=6144, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(mlp): AfmoeSparseMoeBlock(
(router): AfmoeTokenChoiceRouter(
(gate): Linear(in_features=3072, out_features=256, bias=False)
)
(shared_experts): AfmoeMLP(
(gate_proj): Linear(in_features=3072, out_features=3072, bias=False)
(up_proj): Linear(in_features=3072, out_features=3072, bias=False)
(down_proj): Linear(in_features=3072, out_features=3072, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(experts): AfmoeExperts(
(act_fn): SiLUActivation()
)
(router_logits) -> RouterLogits [batch seq num_experts]: The router's logits, one per expert, before the scoring
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
(expert_weights) -> ExpertWeights [batch seq top_k]: The weight each selected expert's output is scaled by
(expert_indices) -> ExpertIndices [batch seq top_k]: The expert each routing slot sends the token to
(expert_outputs) -> ExpertOutputs [batch seq top_k hidden_size]: Each routing slot's weighted expert output
(routed_output) -> Residual [batch seq hidden_size]: The routed experts' combined output
(shared_expert_output) -> Residual [batch seq hidden_size]: The shared expert's output
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
)
(norm): AfmoeRMSNorm((3072,), eps=1e-05)
(logits) -> Logits [batch seq vocab_size]: The logits the model returns, after anything it does past lm_head (a softcap, a scale)
(token_embeddings) -> Residual [batch seq hidden_size]: The embedding module's output; layers[0].input is what enters the first block
(final_norm_output) -> Residual [batch seq hidden_size]: The residual stream after the final norm, what lm_head reads
(lm_head_output) -> Logits [batch seq vocab_size]: The head's logits before anything the model does past lm_head (a softcap, a scale)
(next_token_probs) -> NextTokenProbs [batch vocab_size]: The next-token distribution at the last position; derived, read-only
(input_ids) -> Tokens [batch seq]: The token ids the model was called with
(attention_mask) -> Tokens [batch seq]: The attention mask the model was called with; zeros are padding
(input_size): [batch, seq] of the current call; read-only
)What print(model) shows on arcee-ai/Trinity-Large-Thinking: the native modules, standard names and every standard value with its layout.
AfmoeForCausalLM(
(lm_head): Linear(in_features=3072, out_features=200192, bias=False)
(generator): Generator(
(streamer): Streamer()
)
(embed_tokens): Embedding(200192, 3072)
(layers): ModuleList(
(0-5): 6 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=3072, out_features=6144, bias=False)
(k_proj): Linear(in_features=3072, out_features=1024, bias=False)
(v_proj): Linear(in_features=3072, out_features=1024, bias=False)
(o_proj): Linear(in_features=6144, out_features=3072, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=3072, out_features=6144, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(mlp): AfmoeMLP(
(gate_proj): Linear(in_features=3072, out_features=12288, bias=False)
(up_proj): Linear(in_features=3072, out_features=12288, bias=False)
(down_proj): Linear(in_features=12288, out_features=3072, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
(6-59): 54 x AfmoeDecoderLayer(
(self_attn): AfmoeAttention(
(q_proj): Linear(in_features=3072, out_features=6144, bias=False)
(k_proj): Linear(in_features=3072, out_features=1024, bias=False)
(v_proj): Linear(in_features=3072, out_features=1024, bias=False)
(o_proj): Linear(in_features=6144, out_features=3072, bias=False)
(q_norm): AfmoeRMSNorm((128,), eps=1e-05)
(k_norm): AfmoeRMSNorm((128,), eps=1e-05)
(gate_proj): Linear(in_features=3072, out_features=6144, bias=False)
(attention_output) -> Residual [batch seq hidden_size]: What the attention adds to the residual stream: the post-attention norm's output
(attention_queries) -> Queries [batch num_heads seq qk_head_dim]: The queries entering attention
(attention_keys) -> Keys [batch num_kv_heads seq qk_head_dim]: The keys entering attention
(attention_values) -> Values [batch num_kv_heads seq head_dim]: The values entering attention
(attention_scores) -> Pattern [batch num_heads query key]: The attention scores entering the softmax, masked
(attention_premix) -> HeadOutputs [batch seq num_heads head_dim]: Every head's output side by side, as the output projection takes it
(attention_probabilities) -> Pattern [batch num_heads query key]: The attention pattern the values are mixed with
(attention_head_outputs) -> HeadOutputs [batch seq num_heads head_dim]: The per-head outputs before the output projection
)
(input_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(post_attention_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(pre_mlp_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(post_mlp_layernorm): AfmoeRMSNorm((3072,), eps=1e-05)
(mlp): AfmoeSparseMoeBlock(
(router): AfmoeTokenChoiceRouter(
(gate): Linear(in_features=3072, out_features=256, bias=False)
)
(shared_experts): AfmoeMLP(
(gate_proj): Linear(in_features=3072, out_features=3072, bias=False)
(up_proj): Linear(in_features=3072, out_features=3072, bias=False)
(down_proj): Linear(in_features=3072, out_features=3072, bias=False)
(act_fn): SiLUActivation()
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
)
(experts): AfmoeExperts(
(act_fn): SiLUActivation()
)
(router_logits) -> RouterLogits [batch seq num_experts]: The router's logits, one per expert, before the scoring
(mlp_activation) -> Neurons [batch seq intermediate_size]: The activation function's output
(mlp_neurons) -> Neurons [batch seq intermediate_size]: What the down projection receives: act(gate)·up on a gated MLP, the activation itself otherwise
(expert_weights) -> ExpertWeights [batch seq top_k]: The weight each selected expert's output is scaled by
(expert_indices) -> ExpertIndices [batch seq top_k]: The expert each routing slot sends the token to
(expert_outputs) -> ExpertOutputs [batch seq top_k hidden_size]: Each routing slot's weighted expert output
(routed_output) -> Residual [batch seq hidden_size]: The routed experts' combined output
(shared_expert_output) -> Residual [batch seq hidden_size]: The shared expert's output
(mlp_output) -> Residual [batch seq hidden_size]: What the MLP adds to the residual stream: the post-MLP norm's output
)
(layer_mid) -> Residual [batch seq hidden_size]: The residual stream after the attention add
(mlp_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the MLP
(layer_input) -> Residual [batch seq hidden_size]: The residual stream entering the block
(attention_norm_output) -> Residual [batch seq hidden_size]: The normed stream entering the attention
(mlp_input) -> Residual [batch seq hidden_size]: What the MLP is called with
(layer_output) -> Residual [batch seq hidden_size]: The residual stream leaving the block, a tensor even when the block returns a tuple
)
)
(norm): AfmoeRMSNorm((3072,), eps=1e-05)
(logits) -> Logits [batch seq vocab_size]: The logits the model returns, after anything it does past lm_head (a softcap, a scale)
(token_embeddings) -> Residual [batch seq hidden_size]: The embedding module's output; layers[0].input is what enters the first block
(final_norm_output) -> Residual [batch seq hidden_size]: The residual stream after the final norm, what lm_head reads
(lm_head_output) -> Logits [batch seq vocab_size]: The head's logits before anything the model does past lm_head (a softcap, a scale)
(next_token_probs) -> NextTokenProbs [batch vocab_size]: The next-token distribution at the last position; derived, read-only
(input_ids) -> Tokens [batch seq]: The token ids the model was called with
(attention_mask) -> Tokens [batch seq]: The attention mask the model was called with; zeros are padding
(input_size): [batch, seq] of the current call; read-only
)h = x + post_attention_layernorm(self_attn(input_layernorm(x)))
out = h + post_mlp_layernorm(mlp(pre_mlp_layernorm(h))) # dense, then a mixture
Four RMSNorms per block, two per sublayer. post_attention_layernorm follows
the attention, where Llama's same name is the norm before the MLP; the MLP's input norm is
pre_mlp_layernorm. num_dense_layers blocks come first with a dense MLP (2 on Nano and Mini,
6 on Large), and every block after them has a mixture. The identity is the plain sum on both kinds:
with model.trace(prompt):
x = model.layers[1].input.save()
attn = model.layers[1].self_attn.attention_output.save()
mlp = model.layers[1].mlp.mlp_output.save()
out = model.layers[1].layer_output.save()
torch.testing.assert_close(x + attn + mlp, out)
attention_output is post_attention_layernorm's output and mlp_output is
post_mlp_layernorm's; self_attn.output[0] and mlp.output are the tensors entering them.
RMSNorm is scale-invariant up to eps, so scaling mlp.output leaves the stream as it was.
Scale or steer the contribution itself.
with model.trace(prompt):
model.layers[1].mlp.mlp_output[:] *= 0.5 # halves what the block adds
Inside the mixture, routed_output + shared_expert_output is mlp.output, the tensor entering
post_mlp_layernorm, so an edit to one expert reaches the stream only after the norm has rescaled
the token's whole MLP term.
q_norm and k_norm are RMSNorms over each head's 128 dimensions, applied before the rotary.
attention_queries and attention_keys are read after the norms and, on a sliding-window block,
after the rotary. The attention also projects a gate from its input (gate_proj, one value per
channel of every head) and multiplies the heads' outputs by the gate's sigmoid before o_proj.
attention_head_outputs are the heads' outputs before the gate:
attn = model.layers[1].self_attn
with model.trace(prompt):
gate = attn.gate_proj.output.save()
with model.trace(prompt):
heads = attn.attention_head_outputs.save() # [batch, seq, num_heads, head_dim], ungated
o_in = attn.o_proj.input.save()
torch.testing.assert_close(o_in, heads.flatten(-2) * gate.sigmoid())
The heads are grouped: 8 query heads over 2 key/value heads on Nano, 32 over 4 on Mini and 48
over 8 on Large. The attention interior needs attn_implementation="eager"; the default load is
sdpa.
Every fourth block attends over the whole prefix (global_attn_every_n_layers 4: blocks 3, 7,
11, ...); the others attend over the last sliding_window tokens (2048 on Nano and Mini, 4096 on
Large). Only the sliding blocks apply the rotary to queries and keys. On a full block only the causal mask
orders the tokens, and attention_queries is q_norm's output unchanged:
attn = model.layers[1].self_attn # a full block on the pinned tiny
with model.trace(prompt):
qn = attn.q_norm.output.save() # [batch, seq, num_heads, head_dim]
with model.trace(prompt):
q = attn.attention_queries.save() # [batch, num_heads, seq, head_dim]
torch.testing.assert_close(q, qn.transpose(1, 2))
128 routed experts, 8 per token, on Nano and Mini; 256, 4 per token, on Large. router_logits
are router.gate's output, in the model's dtype: the router casts them to float32 after this
point, then takes the sigmoid and adds the bias. The bias, mlp.expert_bias, is a frozen
parameter of the mixture; it is added to the sigmoids only to choose the experts, and there are no
expert groups. expert_weights are the chosen experts' sigmoids without the bias, renormalized to
sum to one and multiplied by route_scale, so they sum to 2.826 at every token on Nano and Mini
and 2.448 on Large:
moe = model.layers[1].mlp
with model.trace(prompt):
logits = moe.router_logits.save()
w = moe.expert_weights.save()
idx = moe.expert_indices.save()
chosen = logits.float().sigmoid().gather(-1, idx)
scale = model.config.route_scale
torch.testing.assert_close(w, chosen / chosen.sum(-1, keepdim=True) * scale)
A written router_logits moves the choice and the weights; a written expert_bias moves only the
choice.
One shared expert (mlp.shared_experts, an AfmoeMLP of width moe_intermediate_size ×
num_shared_experts) runs on every token after the router and before the routed experts, and the
mixture returns their sum. In one trace read router_logits, then shared_expert_output, then
expert_weights and expert_indices (they are the routed experts' arguments), then
expert_outputs and routed_output:
with model.trace(prompt):
logits = moe.router_logits.save()
shared = moe.shared_expert_output.save()
w = moe.expert_weights.save()
routed = moe.routed_output.save()
total = moe.output.save()
torch.testing.assert_close(routed + shared, total)
nnterp serves the shared expert as an MLP too, but its mlp_output is unavailable: what the block
adds is the mixture's post-normed sum, read at layers[i].mlp.mlp_output.
Zero the weight of every routing slot that chose the expert. The token's other weights keep their values, so its
weights then sum to less than route_scale:
with model.trace(prompt):
moe.expert_weights = moe.expert_weights.masked_fill(moe.expert_indices == 3, 0)
ablated = model.logits.save()
routed_output changes on exactly the tokens that chose the expert. The dense first blocks have
no router: model.support() reports every mixture value unavailable on them.
AFMoE (AfmoeForCausalLM, Arcee's Trinity).
Llama's tree with a sandwich block, every sublayer normed before and after::
h = x + post_attention_layernorm(self_attn(input_layernorm(x)))
out = h + post_mlp_layernorm(mlp(pre_mlp_layernorm(h)))
What the block adds is each post-norm's output, so attention_output points at
post_attention_layernorm (which follows the attention, as on Gemma-2) and
mlp_output at post_mlp_layernorm; pre_mlp_layernorm keeps its native
name and mlp.input is its output. The attention runs the shared eager forward
with q/k norms, the rotary only on its sliding-window (local) blocks, and a
sigmoid gate (gate_proj) on the interface's output before o_proj, so
attention_head_outputs are ungated. The first num_dense_layers blocks have
a dense AfmoeMLP, the rest a mixture (AfmoeSparseMoeBlock) returning its
shared expert's output plus the routed experts' sum as one tensor. The shared
expert (mlp.shared_experts) is an AfmoeMLP too, so it is an Mlp; its
mlp_output is unavailable, since the block adds the mixture's post-normed sum.