Models / qwen3.8-27b

Qwen3.8 27B

A 27B-parameter hybrid decoder: three Gated DeltaNet (linear attention) layers for every gated full-attention layer, zero-centered RMS norms, SwiGLU, and an untied output head; the text model of Qwen3.8-27B, without its vision tower.

26.9B parametersqwen3_5Apache-2.0text-generationdecoder-onlylinear-attentiongated-deltanethybrid
models/qwen3.8-27b27 files · 118.9 kB in the registry · GitHub
README.md1.6 kB
md
# Qwen3.8 27B

The text model of Qwen3.8-27B, a 27B-parameter hybrid decoder of the
Qwen3.5 architecture (`qwen3_5`), without its vision tower or its
multi-token-prediction layer. Its 64 layers come in fours: three of
linear attention (Gated DeltaNet) and one of gated full attention, each
followed by a SwiGLU MLP of width 17408.

- **Gated DeltaNet** (`src/deltanet.linnet`): one projection gives the
  queries, keys and values (16 query/key heads, 48 value heads, width 128
  each); a depthwise causal convolution of width 4 and `silu` run over them;
  queries and keys are L2-normalized. Each value head keeps a `[128, 128]`
  state that the gated delta rule (`std.nn.recurrent`) decays by
  `exp(-exp(A_log) * softplus(a + dt_bias))` and writes at rate
  `sigmoid(b)`. The heads' outputs are RMS-normalized and gated by
  `silu(z)`.
- **Gated attention** (`src/attention.linnet`): 24 query heads, 4 key/value
  heads, head dimension 256, a per-head RMS norm on queries and keys, rotary
  positions on the first quarter of each head (base 10,000,000), and the
  output scaled by `sigmoid` of a gate `q_proj` gives each head.
- **Norms** (`src/norm.linnet`): RMS norms scale by `1 + w` (zero-centered),
  in f32.

The full-attention layers keep key/value caches; the linear-attention
layers keep each row's convolution history and its recurrent state in f32.
`prefill`/`decode` serve one batch at one position, `prefill_slots`/
`decode_rows` a server's rows each at its own length (fixed rows; the
card has no paged entries yet).

`bindings.json` maps `groups.<g>.linear.<i>` to checkpoint layer `4g + i`
and `groups.<g>.full` to layer `4g + 3`.

Open on GitHub

bindings.json86.8 kB
json
{
  "embed_tokens.weight": "model.language_model.embed_tokens.weight",
  "norm.weight": "model.language_model.norm.weight",
  "lm_head.weight": "lm_head.weight",
  "groups.0.linear.0.input_layernorm.weight": "model.language_model.layers.0.input_layernorm.weight",
  "groups.0.linear.0.post_attention_layernorm.weight": "model.language_model.layers.0.post_attention_layernorm.weight",
  "groups.0.linear.0.mlp.gate.weight": "model.language_model.layers.0.mlp.gate_proj.weight",
  "groups.0.linear.0.mlp.up.weight": "model.language_model.layers.0.mlp.up_proj.weight",
  "groups.0.linear.0.mlp.down.weight": "model.language_model.layers.0.mlp.down_proj.weight",
  "groups.0.linear.0.linear_attn.in_proj_qkv.weight": "model.language_model.layers.0.linear_attn.in_proj_qkv.weight",
  "groups.0.linear.0.linear_attn.in_proj_z.weight": "model.language_model.layers.0.linear_attn.in_proj_z.weight",
  "groups.0.linear.0.linear_attn.in_proj_b.weight": "model.language_model.layers.0.linear_attn.in_proj_b.weight",
  "groups.0.linear.0.linear_attn.in_proj_a.weight": "model.language_model.layers.0.linear_attn.in_proj_a.weight",
  "groups.0.linear.0.linear_attn.out_proj.weight": "model.language_model.layers.0.linear_attn.out_proj.weight",
  "groups.0.linear.0.linear_attn.norm.weight": "model.language_model.layers.0.linear_attn.norm.weight",
  "groups.0.linear.0.linear_attn.conv_weight": "model.language_model.layers.0.linear_attn.conv1d.weight",
  "groups.0.linear.0.linear_attn.A_log": "model.language_model.layers.0.linear_attn.A_log",
  "groups.0.linear.0.linear_attn.dt_bias": "model.language_model.layers.0.linear_attn.dt_bias",
  "groups.0.linear.1.input_layernorm.weight": "model.language_model.layers.1.input_layernorm.weight",
  "groups.0.linear.1.post_attention_layernorm.weight": "model.language_model.layers.1.post_attention_layernorm.weight",
  "groups.0.linear.1.mlp.gate.weight": "model.language_model.layers.1.mlp.gate_proj.weight",
  "groups.0.linear.1.mlp.up.weight": "model.language_model.layers.1.mlp.up_proj.weight",
  "groups.0.linear.1.mlp.down.weight": "model.language_model.layers.1.mlp.down_proj.weight",
  "groups.0.linear.1.linear_attn.in_proj_qkv.weight": "model.language_model.layers.1.linear_attn.in_proj_qkv.weight",
  "groups.0.linear.1.linear_attn.in_proj_z.weight": "model.language_model.layers.1.linear_attn.in_proj_z.weight",
  "groups.0.linear.1.linear_attn.in_proj_b.weight": "model.language_model.layers.1.linear_attn.in_proj_b.weight",
  "groups.0.linear.1.linear_attn.in_proj_a.weight": "model.language_model.layers.1.linear_attn.in_proj_a.weight",
  "groups.0.linear.1.linear_attn.out_proj.weight": "model.language_model.layers.1.linear_attn.out_proj.weight",
  "groups.0.linear.1.linear_attn.norm.weight": "model.language_model.layers.1.linear_attn.norm.weight",
  "groups.0.linear.1.linear_attn.conv_weight": "model.language_model.layers.1.linear_attn.conv1d.weight",
  "groups.0.linear.1.linear_attn.A_log": "model.language_model.layers.1.linear_attn.A_log",
  "groups.0.linear.1.linear_attn.dt_bias": "model.language_model.layers.1.linear_attn.dt_bias",
  "groups.0.linear.2.input_layernorm.weight": "model.language_model.layers.2.input_layernorm.weight",
  "groups.0.linear.2.post_attention_layernorm.weight": "model.language_model.layers.2.post_attention_layernorm.weight",
  "groups.0.linear.2.mlp.gate.weight": "model.language_model.layers.2.mlp.gate_proj.weight",
  "groups.0.linear.2.mlp.up.weight": "model.language_model.layers.2.mlp.up_proj.weight",
  "groups.0.linear.2.mlp.down.weight": "model.language_model.layers.2.mlp.down_proj.weight",
  "groups.0.linear.2.linear_attn.in_proj_qkv.weight": "model.language_model.layers.2.linear_attn.in_proj_qkv.weight",
  "groups.0.linear.2.linear_attn.in_proj_z.weight": "model.language_model.layers.2.linear_attn.in_proj_z.weight",
  "groups.0.linear.2.linear_attn.in_proj_b.weight": "model.language_model.layers.2.linear_attn.in_proj_b.weight",
  "groups.0.linear.2.linear_attn.in_proj_a.weight": "model.language_model.layers.2.linear_attn.in_proj_a.weight",
  "groups.0.linear.2.linear_attn.out_proj.weight": "model.language_model.layers.2.linear_attn.out_proj.weight",
  "groups.0.linear.2.linear_attn.norm.weight": "model.language_model.layers.2.linear_attn.norm.weight",
  "groups.0.linear.2.linear_attn.conv_weight": "model.language_model.layers.2.linear_attn.conv1d.weight",
  "groups.0.linear.2.linear_attn.A_log": "model.language_model.layers.2.linear_attn.A_log",
  "groups.0.linear.2.linear_attn.dt_bias": "model.language_model.layers.2.linear_attn.dt_bias",
  "groups.0.full.input_layernorm.weight": "model.language_model.layers.3.input_layernorm.weight",
  "groups.0.full.post_attention_layernorm.weight": "model.language_model.layers.3.post_attention_layernorm.weight",
  "groups.0.full.mlp.gate.weight": "model.language_model.layers.3.mlp.gate_proj.weight",
  "groups.0.full.mlp.up.weight": "model.language_model.layers.3.mlp.up_proj.weight",
  "groups.0.full.mlp.down.weight": "model.language_model.layers.3.mlp.down_proj.weight",
  "groups.0.full.self_attn.q_proj.weight": "model.language_model.layers.3.self_attn.q_proj.weight",
  "groups.0.full.self_attn.k_proj.weight": "model.language_model.layers.3.self_attn.k_proj.weight",
  "groups.0.full.self_attn.v_proj.weight": "model.language_model.layers.3.self_attn.v_proj.weight",
  "groups.0.full.self_attn.o_proj.weight": "model.language_model.layers.3.self_attn.o_proj.weight",
  "groups.0.full.self_attn.q_norm.weight": "model.language_model.layers.3.self_attn.q_norm.weight",
  "groups.0.full.self_attn.k_norm.weight": "model.language_model.layers.3.self_attn.k_norm.weight",
  "groups.1.linear.0.input_layernorm.weight": "model.language_model.layers.4.input_layernorm.weight",
  "groups.1.linear.0.post_attention_layernorm.weight": "model.language_model.layers.4.post_attention_layernorm.weight",
  "groups.1.linear.0.mlp.gate.weight": "model.language_model.layers.4.mlp.gate_proj.weight",
  "groups.1.linear.0.mlp.up.weight": "model.language_model.layers.4.mlp.up_proj.weight",
  "groups.1.linear.0.mlp.down.weight": "model.language_model.layers.4.mlp.down_proj.weight",
  "groups.1.linear.0.linear_attn.in_proj_qkv.weight": "model.language_model.layers.4.linear_attn.in_proj_qkv.weight",
  "groups.1.linear.0.linear_attn.in_proj_z.weight": "model.language_model.layers.4.linear_attn.in_proj_z.weight",
  "groups.1.linear.0.linear_attn.in_proj_b.weight": "model.language_model.layers.4.linear_attn.in_proj_b.weight",
  "groups.1.linear.0.linear_attn.in_proj_a.weight": "model.language_model.layers.4.linear_attn.in_proj_a.weight",
  "groups.1.linear.0.linear_attn.out_proj.weight": "model.language_model.layers.4.linear_attn.out_proj.weight",
  "groups.1.linear.0.linear_attn.norm.weight": "model.language_model.layers.4.linear_attn.norm.weight",
  "groups.1.linear.0.linear_attn.conv_weight": "model.language_model.layers.4.linear_attn.conv1d.weight",
  "groups.1.linear.0.linear_attn.A_log": "model.language_model.layers.4.linear_attn.A_log",
  "groups.1.linear.0.linear_attn.dt_bias": "model.language_model.layers.4.linear_attn.dt_bias",
  "groups.1.linear.1.input_layernorm.weight": "model.language_model.layers.5.input_layernorm.weight",
  "groups.1.linear.1.post_attention_layernorm.weight": "model.language_model.layers.5.post_attention_layernorm.weight",
  "groups.1.linear.1.mlp.gate.weight": "model.language_model.layers.5.mlp.gate_proj.weight",
  "groups.1.linear.1.mlp.up.weight": "model.language_model.layers.5.mlp.up_proj.weight",
  "groups.1.linear.1.mlp.down.weight": "model.language_model.layers.5.mlp.down_proj.weight",
  "groups.1.linear.1.linear_attn.in_proj_qkv.weight": "model.language_model.layers.5.linear_attn.in_proj_qkv.weight",
  "groups.1.linear.1.linear_attn.in_proj_z.weight": "model.language_model.layers.5.linear_attn.in_proj_z.weight",
  "groups.1.linear.1.linear_attn.in_proj_b.weight": "model.language_model.layers.5.linear_attn.in_proj_b.weight",
  "groups.1.linear.1.linear_attn.in_proj_a.weight": "model.language_model.layers.5.linear_attn.in_proj_a.weight",
  "groups.1.linear.1.linear_attn.out_proj.weight": "model.language_model.layers.5.linear_attn.out_proj.weight",
  "groups.1.linear.1.linear_attn.norm.weight": "model.language_model.layers.5.linear_attn.norm.weight",
  "groups.1.linear.1.linear_attn.conv_weight": "model.language_model.layers.5.linear_attn.conv1d.weight",
  "groups.1.linear.1.linear_attn.A_log": "model.language_model.layers.5.linear_attn.A_log",
  "groups.1.linear.1.linear_attn.dt_bias": "model.language_model.layers.5.linear_attn.dt_bias",
  "groups.1.linear.2.input_layernorm.weight": "model.language_model.layers.6.input_layernorm.weight",
  "groups.1.linear.2.post_attention_layernorm.weight": "model.language_model.layers.6.post_attention_layernorm.weight",
  "groups.1.linear.2.mlp.gate.weight": "model.language_model.layers.6.mlp.gate_proj.weight",
  "groups.1.linear.2.mlp.up.weight": "model.language_model.layers.6.mlp.up_proj.weight",
  "groups.1.linear.2.mlp.down.weight": "model.language_model.layers.6.mlp.down_proj.weight",
  "groups.1.linear.2.linear_attn.in_proj_qkv.weight": "model.language_model.layers.6.linear_attn.in_proj_qkv.weight",
  "groups.1.linear.2.linear_attn.in_proj_z.weight": "model.language_model.layers.6.linear_attn.in_proj_z.weight",
  "groups.1.linear.2.linear_attn.in_proj_b.weight": "model.language_model.layers.6.linear_attn.in_proj_b.weight",
  "groups.1.linear.2.linear_attn.in_proj_a.weight": "model.language_model.layers.6.linear_attn.in_proj_a.weight",
  "groups.1.linear.2.linear_attn.out_proj.weight": "model.language_model.layers.6.linear_attn.out_proj.weight",
  "groups.1.linear.2.linear_attn.norm.weight": "model.language_model.layers.6.linear_attn.norm.weight",
  "groups.1.linear.2.linear_attn.conv_weight": "model.language_model.layers.6.linear_attn.conv1d.weight",
  "groups.1.linear.2.linear_attn.A_log": "model.language_model.layers.6.linear_attn.A_log",
  "groups.1.linear.2.linear_attn.dt_bias": "model.language_model.layers.6.linear_attn.dt_bias",
  "groups.1.full.input_layernorm.weight": "model.language_model.layers.7.input_layernorm.weight",
  "groups.1.full.post_attention_layernorm.weight": "model.language_model.layers.7.post_attention_layernorm.weight",
  "groups.1.full.mlp.gate.weight": "model.language_model.layers.7.mlp.gate_proj.weight",
  "groups.1.full.mlp.up.weight": "model.language_model.layers.7.mlp.up_proj.weight",
  "groups.1.full.mlp.down.weight": "model.language_model.layers.7.mlp.down_proj.weight",
  "groups.1.full.self_attn.q_proj.weight": "model.language_model.layers.7.self_attn.q_proj.weight",
  "groups.1.full.self_attn.k_proj.weight": "model.language_model.layers.7.self_attn.k_proj.weight",
  "groups.1.full.self_attn.v_proj.weight": "model.language_model.layers.7.self_attn.v_proj.weight",
  "groups.1.full.self_attn.o_proj.weight": "model.language_model.layers.7.self_attn.o_proj.weight",
  "groups.1.full.self_attn.q_norm.weight": "model.language_model.layers.7.self_attn.q_norm.weight",
  "groups.1.full.self_attn.k_norm.weight": "model.language_model.layers.7.self_attn.k_norm.weight",
  "groups.2.linear.0.input_layernorm.weight": "model.language_model.layers.8.input_layernorm.weight",
  "groups.2.linear.0.post_attention_layernorm.weight": "model.language_model.layers.8.post_attention_layernorm.weight",
  "groups.2.linear.0.mlp.gate.weight": "model.language_model.layers.8.mlp.gate_proj.weight",
  "groups.2.linear.0.mlp.up.weight": "model.language_model.layers.8.mlp.up_proj.weight",
  "groups.2.linear.0.mlp.down.weight": "model.language_model.layers.8.mlp.down_proj.weight",
  "groups.2.linear.0.linear_attn.in_proj_qkv.weight": "model.language_model.layers.8.linear_attn.in_proj_qkv.weight",
  "groups.2.linear.0.linear_attn.in_proj_z.weight": "model.language_model.layers.8.linear_attn.in_proj_z.weight",
  "groups.2.linear.0.linear_attn.in_proj_b.weight": "model.language_model.layers.8.linear_attn.in_proj_b.weight",
  "groups.2.linear.0.linear_attn.in_proj_a.weight": "model.language_model.layers.8.linear_attn.in_proj_a.weight",
  "groups.2.linear.0.linear_attn.out_proj.weight": "model.language_model.layers.8.linear_attn.out_proj.weight",
  "groups.2.linear.0.linear_attn.norm.weight": "model.language_model.layers.8.linear_attn.norm.weight",
  "groups.2.linear.0.linear_attn.conv_weight": "model.language_model.layers.8.linear_attn.conv1d.weight",
  "groups.2.linear.0.linear_attn.A_log": "model.language_model.layers.8.linear_attn.A_log",
  "groups.2.linear.0.linear_attn.dt_bias": "model.language_model.layers.8.linear_attn.dt_bias",
  "groups.2.linear.1.input_layernorm.weight": "model.language_model.layers.9.input_layernorm.weight",
  "groups.2.linear.1.post_attention_layernorm.weight": "model.language_model.layers.9.post_attention_layernorm.weight",
  "groups.2.linear.1.mlp.gate.weight": "model.language_model.layers.9.mlp.gate_proj.weight",
  "groups.2.linear.1.mlp.up.weight": "model.language_model.layers.9.mlp.up_proj.weight",
  "groups.2.linear.1.mlp.down.weight": "model.language_model.layers.9.mlp.down_proj.weight",
  "groups.2.linear.1.linear_attn.in_proj_qkv.weight": "model.language_model.layers.9.linear_attn.in_proj_qkv.weight",
  "groups.2.linear.1.linear_attn.in_proj_z.weight": "model.language_model.layers.9.linear_attn.in_proj_z.weight",
  "groups.2.linear.1.linear_attn.in_proj_b.weight": "model.language_model.layers.9.linear_attn.in_proj_b.weight",
  "groups.2.linear.1.linear_attn.in_proj_a.weight": "model.language_model.layers.9.linear_attn.in_proj_a.weight",
  "groups.2.linear.1.linear_attn.out_proj.weight": "model.language_model.layers.9.linear_attn.out_proj.weight",
  "groups.2.linear.1.linear_attn.norm.weight": "model.language_model.layers.9.linear_attn.norm.weight",
  "groups.2.linear.1.linear_attn.conv_weight": "model.language_model.layers.9.linear_attn.conv1d.weight",
  "groups.2.linear.1.linear_attn.A_log": "model.language_model.layers.9.linear_attn.A_log",
  "groups.2.linear.1.linear_attn.dt_bias": "model.language_model.layers.9.linear_attn.dt_bias",
  "groups.2.linear.2.input_layernorm.weight": "model.language_model.layers.10.input_layernorm.weight",
  "groups.2.linear.2.post_attention_layernorm.weight": "model.language_model.layers.10.post_attention_layernorm.weight",
  "groups.2.linear.2.mlp.gate.weight": "model.language_model.layers.10.mlp.gate_proj.weight",
  "groups.2.linear.2.mlp.up.weight": "model.language_model.layers.10.mlp.up_proj.weight",
  "groups.2.linear.2.mlp.down.weight": "model.language_model.layers.10.mlp.down_proj.weight",
  "groups.2.linear.2.linear_attn.in_proj_qkv.weight": "model.language_model.layers.10.linear_attn.in_proj_qkv.weight",
  "groups.2.linear.2.linear_attn.in_proj_z.weight": "model.language_model.layers.10.linear_attn.in_proj_z.weight",
  "groups.2.linear.2.linear_attn.in_proj_b.weight": "model.language_model.layers.10.linear_attn.in_proj_b.weight",
  "groups.2.linear.2.linear_attn.in_proj_a.weight": "model.language_model.layers.10.linear_attn.in_proj_a.weight",
  "groups.2.linear.2.linear_attn.out_proj.weight": "model.language_model.layers.10.linear_attn.out_proj.weight",
  "groups.2.linear.2.linear_attn.norm.weight": "model.language_model.layers.10.linear_attn.norm.weight",
  "groups.2.linear.2.linear_attn.conv_weight": "model.language_model.layers.10.linear_attn.conv1d.weight",
  "groups.2.linear.2.linear_attn.A_log": "model.language_model.layers.10.linear_attn.A_log",
  "groups.2.linear.2.linear_attn.dt_bias": "model.language_model.layers.10.linear_attn.dt_bias",
  "groups.2.full.input_layernorm.weight": "model.language_model.layers.11.input_layernorm.weight",
  "groups.2.full.post_attention_layernorm.weight": "model.language_model.layers.11.post_attention_layernorm.weight",
  "groups.2.full.mlp.gate.weight": "model.language_model.layers.11.mlp.gate_proj.weight",
  "groups.2.full.mlp.up.weight": "model.language_model.layers.11.mlp.up_proj.weight",
  "groups.2.full.mlp.down.weight": "model.language_model.layers.11.mlp.down_proj.weight",
  "groups.2.full.self_attn.q_proj.weight": "model.language_model.layers.11.self_attn.q_proj.weight",
  "groups.2.full.self_attn.k_proj.weight": "model.language_model.layers.11.self_attn.k_proj.weight",
  "groups.2.full.self_attn.v_proj.weight": "model.language_model.layers.11.self_attn.v_proj.weight",
  "groups.2.full.self_attn.o_proj.weight": "model.language_model.layers.11.self_attn.o_proj.weight",
  "groups.2.full.self_attn.q_norm.weight": "model.language_model.layers.11.self_attn.q_norm.weight",
  "groups.2.full.self_attn.k_norm.weight": "model.language_model.layers.11.self_attn.k_norm.weight",
  "groups.3.linear.0.input_layernorm.weight": "model.language_model.layers.12.input_layernorm.weight",
  "groups.3.linear.0.post_attention_layernorm.weight": "model.language_model.layers.12.post_attention_layernorm.weight",
  "groups.3.linear.0.mlp.gate.weight": "model.language_model.layers.12.mlp.gate_proj.weight",
  "groups.3.linear.0.mlp.up.weight": "model.language_model.layers.12.mlp.up_proj.weight",
  "groups.3.linear.0.mlp.down.weight": "model.language_model.layers.12.mlp.down_proj.weight",
  "groups.3.linear.0.linear_attn.in_proj_qkv.weight": "model.language_model.layers.12.linear_attn.in_proj_qkv.weight",
  "groups.3.linear.0.linear_attn.in_proj_z.weight": "model.language_model.layers.12.linear_attn.in_proj_z.weight",
  "groups.3.linear.0.linear_attn.in_proj_b.weight": "model.language_model.layers.12.linear_attn.in_proj_b.weight",
  "groups.3.linear.0.linear_attn.in_proj_a.weight": "model.language_model.layers.12.linear_attn.in_proj_a.weight",
  "groups.3.linear.0.linear_attn.out_proj.weight": "model.language_model.layers.12.linear_attn.out_proj.weight",
  "groups.3.linear.0.linear_attn.norm.weight": "model.language_model.layers.12.linear_attn.norm.weight",
  "groups.3.linear.0.linear_attn.conv_weight": "model.language_model.layers.12.linear_attn.conv1d.weight",
  "groups.3.linear.0.linear_attn.A_log": "model.language_model.layers.12.linear_attn.A_log",
  "groups.3.linear.0.linear_attn.dt_bias": "model.language_model.layers.12.linear_attn.dt_bias",
  "groups.3.linear.1.input_layernorm.weight": "model.language_model.layers.13.input_layernorm.weight",
  "groups.3.linear.1.post_attention_layernorm.weight": "model.language_model.layers.13.post_attention_layernorm.weight",
  "groups.3.linear.1.mlp.gate.weight": "model.language_model.layers.13.mlp.gate_proj.weight",
  "groups.3.linear.1.mlp.up.weight": "model.language_model.layers.13.mlp.up_proj.weight",
  "groups.3.linear.1.mlp.down.weight": "model.language_model.layers.13.mlp.down_proj.weight",
  "groups.3.linear.1.linear_attn.in_proj_qkv.weight": "model.language_model.layers.13.linear_attn.in_proj_qkv.weight",
  "groups.3.linear.1.linear_attn.in_proj_z.weight": "model.language_model.layers.13.linear_attn.in_proj_z.weight",
  "groups.3.linear.1.linear_attn.in_proj_b.weight": "model.language_model.layers.13.linear_attn.in_proj_b.weight",
  "groups.3.linear.1.linear_attn.in_proj_a.weight": "model.language_model.layers.13.linear_attn.in_proj_a.weight",
  "groups.3.linear.1.linear_attn.out_proj.weight": "model.language_model.layers.13.linear_attn.out_proj.weight",
  "groups.3.linear.1.linear_attn.norm.weight": "model.language_model.layers.13.linear_attn.norm.weight",
  "groups.3.linear.1.linear_attn.conv_weight": "model.language_model.layers.13.linear_attn.conv1d.weight",
  "groups.3.linear.1.linear_attn.A_log": "model.language_model.layers.13.linear_attn.A_log",
  "groups.3.linear.1.linear_attn.dt_bias": "model.language_model.layers.13.linear_attn.dt_bias",
  "groups.3.linear.2.input_layernorm.weight": "model.language_model.layers.14.input_layernorm.weight",
  "groups.3.linear.2.post_attention_layernorm.weight": "model.language_model.layers.14.post_attention_layernorm.weight",
  "groups.3.linear.2.mlp.gate.weight": "model.language_model.layers.14.mlp.gate_proj.weight",
  "groups.3.linear.2.mlp.up.weight": "model.language_model.layers.14.mlp.up_proj.weight",
  "groups.3.linear.2.mlp.down.weight": "model.language_model.layers.14.mlp.down_proj.weight",
  "groups.3.linear.2.linear_attn.in_proj_qkv.weight": "model.language_model.layers.14.linear_attn.in_proj_qkv.weight",
  "groups.3.linear.2.linear_attn.in_proj_z.weight": "model.language_model.layers.14.linear_attn.in_proj_z.weight",
  "groups.3.linear.2.linear_attn.in_proj_b.weight": "model.language_model.layers.14.linear_attn.in_proj_b.weight",
  "groups.3.linear.2.linear_attn.in_proj_a.weight": "model.language_model.layers.14.linear_attn.in_proj_a.weight",
  "groups.3.linear.2.linear_attn.out_proj.weight": "model.language_model.layers.14.linear_attn.out_proj.weight",
  "groups.3.linear.2.linear_attn.norm.weight": "model.language_model.layers.14.linear_attn.norm.weight",
  "groups.3.linear.2.linear_attn.conv_weight": "model.language_model.layers.14.linear_attn.conv1d.weight",
  "groups.3.linear.2.linear_attn.A_log": "model.language_model.layers.14.linear_attn.A_log",
  "groups.3.linear.2.linear_attn.dt_bias": "model.language_model.layers.14.linear_attn.dt_bias",
  "groups.3.full.input_layernorm.weight": "model.language_model.layers.15.input_layernorm.weight",
  "groups.3.full.post_attention_layernorm.weight": "model.language_model.layers.15.post_attention_layernorm.weight",
  "groups.3.full.mlp.gate.weight": "model.language_model.layers.15.mlp.gate_proj.weight",
  "groups.3.full.mlp.up.weight": "model.language_model.layers.15.mlp.up_proj.weight",
  "groups.3.full.mlp.down.weight": "model.language_model.layers.15.mlp.down_proj.weight",
  "groups.3.full.self_attn.q_proj.weight": "model.language_model.layers.15.self_attn.q_proj.weight",
  "groups.3.full.self_attn.k_proj.weight": "model.language_model.layers.15.self_attn.k_proj.weight",
  "groups.3.full.self_attn.v_proj.weight": "model.language_model.layers.15.self_attn.v_proj.weight",
  "groups.3.full.self_attn.o_proj.weight": "model.language_model.layers.15.self_attn.o_proj.weight",
  "groups.3.full.self_attn.q_norm.weight": "model.language_model.layers.15.self_attn.q_norm.weight",
  "groups.3.full.self_attn.k_norm.weight": "model.language_model.layers.15.self_attn.k_norm.weight",
  "groups.4.linear.0.input_layernorm.weight": "model.language_model.layers.16.input_layernorm.weight",
  "groups.4.linear.0.post_attention_layernorm.weight": "model.language_model.layers.16.post_attention_layernorm.weight",
  "groups.4.linear.0.mlp.gate.weight": "model.language_model.layers.16.mlp.gate_proj.weight",
  "groups.4.linear.0.mlp.up.weight": "model.language_model.layers.16.mlp.up_proj.weight",
  "groups.4.linear.0.mlp.down.weight": "model.language_model.layers.16.mlp.down_proj.weight",
  "groups.4.linear.0.linear_attn.in_proj_qkv.weight": "model.language_model.layers.16.linear_attn.in_proj_qkv.weight",
  "groups.4.linear.0.linear_attn.in_proj_z.weight": "model.language_model.layers.16.linear_attn.in_proj_z.weight",
  "groups.4.linear.0.linear_attn.in_proj_b.weight": "model.language_model.layers.16.linear_attn.in_proj_b.weight",
  "groups.4.linear.0.linear_attn.in_proj_a.weight": "model.language_model.layers.16.linear_attn.in_proj_a.weight",
  "groups.4.linear.0.linear_attn.out_proj.weight": "model.language_model.layers.16.linear_attn.out_proj.weight",
  "groups.4.linear.0.linear_attn.norm.weight": "model.language_model.layers.16.linear_attn.norm.weight",
  "groups.4.linear.0.linear_attn.conv_weight": "model.language_model.layers.16.linear_attn.conv1d.weight",
  "groups.4.linear.0.linear_attn.A_log": "model.language_model.layers.16.linear_attn.A_log",
  "groups.4.linear.0.linear_attn.dt_bias": "model.language_model.layers.16.linear_attn.dt_bias",
  "groups.4.linear.1.input_layernorm.weight": "model.language_model.layers.17.input_layernorm.weight",
  "groups.4.linear.1.post_attention_layernorm.weight": "model.language_model.layers.17.post_attention_layernorm.weight",
  "groups.4.linear.1.mlp.gate.weight": "model.language_model.layers.17.mlp.gate_proj.weight",
  "groups.4.linear.1.mlp.up.weight": "model.language_model.layers.17.mlp.up_proj.weight",
  "groups.4.linear.1.mlp.down.weight": "model.language_model.layers.17.mlp.down_proj.weight",
  "groups.4.linear.1.linear_attn.in_proj_qkv.weight": "model.language_model.layers.17.linear_attn.in_proj_qkv.weight",
  "groups.4.linear.1.linear_attn.in_proj_z.weight": "model.language_model.layers.17.linear_attn.in_proj_z.weight",
  "groups.4.linear.1.linear_attn.in_proj_b.weight": "model.language_model.layers.17.linear_attn.in_proj_b.weight",
  "groups.4.linear.1.linear_attn.in_proj_a.weight": "model.language_model.layers.17.linear_attn.in_proj_a.weight",
  "groups.4.linear.1.linear_attn.out_proj.weight": "model.language_model.layers.17.linear_attn.out_proj.weight",
  "groups.4.linear.1.linear_attn.norm.weight": "model.language_model.layers.17.linear_attn.norm.weight",
  "groups.4.linear.1.linear_attn.conv_weight": "model.language_model.layers.17.linear_attn.conv1d.weight",
  "groups.4.linear.1.linear_attn.A_log": "model.language_model.layers.17.linear_attn.A_log",
  "groups.4.linear.1.linear_attn.dt_bias": "model.language_model.layers.17.linear_attn.dt_bias",
  "groups.4.linear.2.input_layernorm.weight": "model.language_model.layers.18.input_layernorm.weight",
  "groups.4.linear.2.post_attention_layernorm.weight": "model.language_model.layers.18.post_attention_layernorm.weight",
  "groups.4.linear.2.mlp.gate.weight": "model.language_model.layers.18.mlp.gate_proj.weight",
  "groups.4.linear.2.mlp.up.weight": "model.language_model.layers.18.mlp.up_proj.weight",
  "groups.4.linear.2.mlp.down.weight": "model.language_model.layers.18.mlp.down_proj.weight",
  "groups.4.linear.2.linear_attn.in_proj_qkv.weight": "model.language_model.layers.18.linear_attn.in_proj_qkv.weight",
  "groups.4.linear.2.linear_attn.in_proj_z.weight": "model.language_model.layers.18.linear_attn.in_proj_z.weight",
  "groups.4.linear.2.linear_attn.in_proj_b.weight": "model.language_model.layers.18.linear_attn.in_proj_b.weight",
  "groups.4.linear.2.linear_attn.in_proj_a.weight": "model.language_model.layers.18.linear_attn.in_proj_a.weight",
  "groups.4.linear.2.linear_attn.out_proj.weight": "model.language_model.layers.18.linear_attn.out_proj.weight",
  "groups.4.linear.2.linear_attn.norm.weight": "model.language_model.layers.18.linear_attn.norm.weight",
  "groups.4.linear.2.linear_attn.conv_weight": "model.language_model.layers.18.linear_attn.conv1d.weight",
  "groups.4.linear.2.linear_attn.A_log": "model.language_model.layers.18.linear_attn.A_log",
  "groups.4.linear.2.linear_attn.dt_bias": "model.language_model.layers.18.linear_attn.dt_bias",
  "groups.4.full.input_layernorm.weight": "model.language_model.layers.19.input_layernorm.weight",
  "groups.4.full.post_attention_layernorm.weight": "model.language_model.layers.19.post_attention_layernorm.weight",
  "groups.4.full.mlp.gate.weight": "model.language_model.layers.19.mlp.gate_proj.weight",
  "groups.4.full.mlp.up.weight": "model.language_model.layers.19.mlp.up_proj.weight",
  "groups.4.full.mlp.down.weight": "model.language_model.layers.19.mlp.down_proj.weight",
  "groups.4.full.self_attn.q_proj.weight": "model.language_model.layers.19.self_attn.q_proj.weight",
  "groups.4.full.self_attn.k_proj.weight": "model.language_model.layers.19.self_attn.k_proj.weight",
  "groups.4.full.self_attn.v_proj.weight": "model.language_model.layers.19.self_attn.v_proj.weight",
  "groups.4.full.self_attn.o_proj.weight": "model.language_model.layers.19.self_attn.o_proj.weight",
  "groups.4.full.self_attn.q_norm.weight": "model.language_model.layers.19.self_attn.q_norm.weight",
  "groups.4.full.self_attn.k_norm.weight": "model.language_model.layers.19.self_attn.k_norm.weight",
  "groups.5.linear.0.input_layernorm.weight": "model.language_model.layers.20.input_layernorm.weight",
  "groups.5.linear.0.post_attention_layernorm.weight": "model.language_model.layers.20.post_attention_layernorm.weight",
  "groups.5.linear.0.mlp.gate.weight": "model.language_model.layers.20.mlp.gate_proj.weight",
  "groups.5.linear.0.mlp.up.weight": "model.language_model.layers.20.mlp.up_proj.weight",
  "groups.5.linear.0.mlp.down.weight": "model.language_model.layers.20.mlp.down_proj.weight",
  "groups.5.linear.0.linear_attn.in_proj_qkv.weight": "model.language_model.layers.20.linear_attn.in_proj_qkv.weight",
  "groups.5.linear.0.linear_attn.in_proj_z.weight": "model.language_model.layers.20.linear_attn.in_proj_z.weight",
  "groups.5.linear.0.linear_attn.in_proj_b.weight": "model.language_model.layers.20.linear_attn.in_proj_b.weight",
  "groups.5.linear.0.linear_attn.in_proj_a.weight": "model.language_model.layers.20.linear_attn.in_proj_a.weight",
  "groups.5.linear.0.linear_attn.out_proj.weight": "model.language_model.layers.20.linear_attn.out_proj.weight",
  "groups.5.linear.0.linear_attn.norm.weight": "model.language_model.layers.20.linear_attn.norm.weight",
  "groups.5.linear.0.linear_attn.conv_weight": "model.language_model.layers.20.linear_attn.conv1d.weight",
  "groups.5.linear.0.linear_attn.A_log": "model.language_model.layers.20.linear_attn.A_log",
  "groups.5.linear.0.linear_attn.dt_bias": "model.language_model.layers.20.linear_attn.dt_bias",
  "groups.5.linear.1.input_layernorm.weight": "model.language_model.layers.21.input_layernorm.weight",
  "groups.5.linear.1.post_attention_layernorm.weight": "model.language_model.layers.21.post_attention_layernorm.weight",
  "groups.5.linear.1.mlp.gate.weight": "model.language_model.layers.21.mlp.gate_proj.weight",
  "groups.5.linear.1.mlp.up.weight": "model.language_model.layers.21.mlp.up_proj.weight",
  "groups.5.linear.1.mlp.down.weight": "model.language_model.layers.21.mlp.down_proj.weight",
  "groups.5.linear.1.linear_attn.in_proj_qkv.weight": "model.language_model.layers.21.linear_attn.in_proj_qkv.weight",
  "groups.5.linear.1.linear_attn.in_proj_z.weight": "model.language_model.layers.21.linear_attn.in_proj_z.weight",
  "groups.5.linear.1.linear_attn.in_proj_b.weight": "model.language_model.layers.21.linear_attn.in_proj_b.weight",
  "groups.5.linear.1.linear_attn.in_proj_a.weight": "model.language_model.layers.21.linear_attn.in_proj_a.weight",
  "groups.5.linear.1.linear_attn.out_proj.weight": "model.language_model.layers.21.linear_attn.out_proj.weight",
  "groups.5.linear.1.linear_attn.norm.weight": "model.language_model.layers.21.linear_attn.norm.weight",
  "groups.5.linear.1.linear_attn.conv_weight": "model.language_model.layers.21.linear_attn.conv1d.weight",
  "groups.5.linear.1.linear_attn.A_log": "model.language_model.layers.21.linear_attn.A_log",
  "groups.5.linear.1.linear_attn.dt_bias": "model.language_model.layers.21.linear_attn.dt_bias",
  "groups.5.linear.2.input_layernorm.weight": "model.language_model.layers.22.input_layernorm.weight",
  "groups.5.linear.2.post_attention_layernorm.weight": "model.language_model.layers.22.post_attention_layernorm.weight",
  "groups.5.linear.2.mlp.gate.weight": "model.language_model.layers.22.mlp.gate_proj.weight",
  "groups.5.linear.2.mlp.up.weight": "model.language_model.layers.22.mlp.up_proj.weight",
  "groups.5.linear.2.mlp.down.weight": "model.language_model.layers.22.mlp.down_proj.weight",
  "groups.5.linear.2.linear_attn.in_proj_qkv.weight": "model.language_model.layers.22.linear_attn.in_proj_qkv.weight",
  "groups.5.linear.2.linear_attn.in_proj_z.weight": "model.language_model.layers.22.linear_attn.in_proj_z.weight",
  "groups.5.linear.2.linear_attn.in_proj_b.weight": "model.language_model.layers.22.linear_attn.in_proj_b.weight",
  "groups.5.linear.2.linear_attn.in_proj_a.weight": "model.language_model.layers.22.linear_attn.in_proj_a.weight",
  "groups.5.linear.2.linear_attn.out_proj.weight": "model.language_model.layers.22.linear_attn.out_proj.weight",
  "groups.5.linear.2.linear_attn.norm.weight": "model.language_model.layers.22.linear_attn.norm.weight",
  "groups.5.linear.2.linear_attn.conv_weight": "model.language_model.layers.22.linear_attn.conv1d.weight",
  "groups.5.linear.2.linear_attn.A_log": "model.language_model.layers.22.linear_attn.A_log",
  "groups.5.linear.2.linear_attn.dt_bias": "model.language_model.layers.22.linear_attn.dt_bias",
  "groups.5.full.input_layernorm.weight": "model.language_model.layers.23.input_layernorm.weight",
  "groups.5.full.post_attention_layernorm.weight": "model.language_model.layers.23.post_attention_layernorm.weight",
  "groups.5.full.mlp.gate.weight": "model.language_model.layers.23.mlp.gate_proj.weight",
  "groups.5.full.mlp.up.weight": "model.language_model.layers.23.mlp.up_proj.weight",
  "groups.5.full.mlp.down.weight": "model.language_model.layers.23.mlp.down_proj.weight",
  "groups.5.full.self_attn.q_proj.weight": "model.language_model.layers.23.self_attn.q_proj.weight",
  "groups.5.full.self_attn.k_proj.weight": "model.language_model.layers.23.self_attn.k_proj.weight",
  "groups.5.full.self_attn.v_proj.weight": "model.language_model.layers.23.self_attn.v_proj.weight",
  "groups.5.full.self_attn.o_proj.weight": "model.language_model.layers.23.self_attn.o_proj.weight",
  "groups.5.full.self_attn.q_norm.weight": "model.language_model.layers.23.self_attn.q_norm.weight",
  "groups.5.full.self_attn.k_norm.weight": "model.language_model.layers.23.self_attn.k_norm.weight",
  "groups.6.linear.0.input_layernorm.weight": "model.language_model.layers.24.input_layernorm.weight",
  "groups.6.linear.0.post_attention_layernorm.weight": "model.language_model.layers.24.post_attention_layernorm.weight",
  "groups.6.linear.0.mlp.gate.weight": "model.language_model.layers.24.mlp.gate_proj.weight",
  "groups.6.linear.0.mlp.up.weight": "model.language_model.layers.24.mlp.up_proj.weight",
  "groups.6.linear.0.mlp.down.weight": "model.language_model.layers.24.mlp.down_proj.weight",
  "groups.6.linear.0.linear_attn.in_proj_qkv.weight": "model.language_model.layers.24.linear_attn.in_proj_qkv.weight",
  "groups.6.linear.0.linear_attn.in_proj_z.weight": "model.language_model.layers.24.linear_attn.in_proj_z.weight",
  "groups.6.linear.0.linear_attn.in_proj_b.weight": "model.language_model.layers.24.linear_attn.in_proj_b.weight",
  "groups.6.linear.0.linear_attn.in_proj_a.weight": "model.language_model.layers.24.linear_attn.in_proj_a.weight",
  "groups.6.linear.0.linear_attn.out_proj.weight": "model.language_model.layers.24.linear_attn.out_proj.weight",
  "groups.6.linear.0.linear_attn.norm.weight": "model.language_model.layers.24.linear_attn.norm.weight",
  "groups.6.linear.0.linear_attn.conv_weight": "model.language_model.layers.24.linear_attn.conv1d.weight",
  "groups.6.linear.0.linear_attn.A_log": "model.language_model.layers.24.linear_attn.A_log",
  "groups.6.linear.0.linear_attn.dt_bias": "model.language_model.layers.24.linear_attn.dt_bias",
  "groups.6.linear.1.input_layernorm.weight": "model.language_model.layers.25.input_layernorm.weight",
  "groups.6.linear.1.post_attention_layernorm.weight": "model.language_model.layers.25.post_attention_layernorm.weight",
  "groups.6.linear.1.mlp.gate.weight": "model.language_model.layers.25.mlp.gate_proj.weight",
  "groups.6.linear.1.mlp.up.weight": "model.language_model.layers.25.mlp.up_proj.weight",
  "groups.6.linear.1.mlp.down.weight": "model.language_model.layers.25.mlp.down_proj.weight",
  "groups.6.linear.1.linear_attn.in_proj_qkv.weight": "model.language_model.layers.25.linear_attn.in_proj_qkv.weight",
  "groups.6.linear.1.linear_attn.in_proj_z.weight": "model.language_model.layers.25.linear_attn.in_proj_z.weight",
  "groups.6.linear.1.linear_attn.in_proj_b.weight": "model.language_model.layers.25.linear_attn.in_proj_b.weight",
  "groups.6.linear.1.linear_attn.in_proj_a.weight": "model.language_model.layers.25.linear_attn.in_proj_a.weight",
  "groups.6.linear.1.linear_attn.out_proj.weight": "model.language_model.layers.25.linear_attn.out_proj.weight",
  "groups.6.linear.1.linear_attn.norm.weight": "model.language_model.layers.25.linear_attn.norm.weight",
  "groups.6.linear.1.linear_attn.conv_weight": "model.language_model.layers.25.linear_attn.conv1d.weight",
  "groups.6.linear.1.linear_attn.A_log": "model.language_model.layers.25.linear_attn.A_log",
  "groups.6.linear.1.linear_attn.dt_bias": "model.language_model.layers.25.linear_attn.dt_bias",
  "groups.6.linear.2.input_layernorm.weight": "model.language_model.layers.26.input_layernorm.weight",
  "groups.6.linear.2.post_attention_layernorm.weight": "model.language_model.layers.26.post_attention_layernorm.weight",
  "groups.6.linear.2.mlp.gate.weight": "model.language_model.layers.26.mlp.gate_proj.weight",
  "groups.6.linear.2.mlp.up.weight": "model.language_model.layers.26.mlp.up_proj.weight",
  "groups.6.linear.2.mlp.down.weight": "model.language_model.layers.26.mlp.down_proj.weight",
  "groups.6.linear.2.linear_attn.in_proj_qkv.weight": "model.language_model.layers.26.linear_attn.in_proj_qkv.weight",
  "groups.6.linear.2.linear_attn.in_proj_z.weight": "model.language_model.layers.26.linear_attn.in_proj_z.weight",
  "groups.6.linear.2.linear_attn.in_proj_b.weight": "model.language_model.layers.26.linear_attn.in_proj_b.weight",
  "groups.6.linear.2.linear_attn.in_proj_a.weight": "model.language_model.layers.26.linear_attn.in_proj_a.weight",
  "groups.6.linear.2.linear_attn.out_proj.weight": "model.language_model.layers.26.linear_attn.out_proj.weight",
  "groups.6.linear.2.linear_attn.norm.weight": "model.language_model.layers.26.linear_attn.norm.weight",
  "groups.6.linear.2.linear_attn.conv_weight": "model.language_model.layers.26.linear_attn.conv1d.weight",
  "groups.6.linear.2.linear_attn.A_log": "model.language_model.layers.26.linear_attn.A_log",
  "groups.6.linear.2.linear_attn.dt_bias": "model.language_model.layers.26.linear_attn.dt_bias",
  "groups.6.full.input_layernorm.weight": "model.language_model.layers.27.input_layernorm.weight",
  "groups.6.full.post_attention_layernorm.weight": "model.language_model.layers.27.post_attention_layernorm.weight",
  "groups.6.full.mlp.gate.weight": "model.language_model.layers.27.mlp.gate_proj.weight",
  "groups.6.full.mlp.up.weight": "model.language_model.layers.27.mlp.up_proj.weight",
  "groups.6.full.mlp.down.weight": "model.language_model.layers.27.mlp.down_proj.weight",
  "groups.6.full.self_attn.q_proj.weight": "model.language_model.layers.27.self_attn.q_proj.weight",
  "groups.6.full.self_attn.k_proj.weight": "model.language_model.layers.27.self_attn.k_proj.weight",
  "groups.6.full.self_attn.v_proj.weight": "model.language_model.layers.27.self_attn.v_proj.weight",
  "groups.6.full.self_attn.o_proj.weight": "model.language_model.layers.27.self_attn.o_proj.weight",
  "groups.6.full.self_attn.q_norm.weight": "model.language_model.layers.27.self_attn.q_norm.weight",
  "groups.6.full.self_attn.k_norm.weight": "model.language_model.layers.27.self_attn.k_norm.weight",
  "groups.7.linear.0.input_layernorm.weight": "model.language_model.layers.28.input_layernorm.weight",
  "groups.7.linear.0.post_attention_layernorm.weight": "model.language_model.layers.28.post_attention_layernorm.weight",
  "groups.7.linear.0.mlp.gate.weight": "model.language_model.layers.28.mlp.gate_proj.weight",
  "groups.7.linear.0.mlp.up.weight": "model.language_model.layers.28.mlp.up_proj.weight",
  "groups.7.linear.0.mlp.down.weight": "model.language_model.layers.28.mlp.down_proj.weight",
  "groups.7.linear.0.linear_attn.in_proj_qkv.weight": "model.language_model.layers.28.linear_attn.in_proj_qkv.weight",
  "groups.7.linear.0.linear_attn.in_proj_z.weight": "model.language_model.layers.28.linear_attn.in_proj_z.weight",
  "groups.7.linear.0.linear_attn.in_proj_b.weight": "model.language_model.layers.28.linear_attn.in_proj_b.weight",
  "groups.7.linear.0.linear_attn.in_proj_a.weight": "model.language_model.layers.28.linear_attn.in_proj_a.weight",
  "groups.7.linear.0.linear_attn.out_proj.weight": "model.language_model.layers.28.linear_attn.out_proj.weight",
  "groups.7.linear.0.linear_attn.norm.weight": "model.language_model.layers.28.linear_attn.norm.weight",
  "groups.7.linear.0.linear_attn.conv_weight": "model.language_model.layers.28.linear_attn.conv1d.weight",
  "groups.7.linear.0.linear_attn.A_log": "model.language_model.layers.28.linear_attn.A_log",
  "groups.7.linear.0.linear_attn.dt_bias": "model.language_model.layers.28.linear_attn.dt_bias",
  "groups.7.linear.1.input_layernorm.weight": "model.language_model.layers.29.input_layernorm.weight",
  "groups.7.linear.1.post_attention_layernorm.weight": "model.language_model.layers.29.post_attention_layernorm.weight",
  "groups.7.linear.1.mlp.gate.weight": "model.language_model.layers.29.mlp.gate_proj.weight",
  "groups.7.linear.1.mlp.up.weight": "model.language_model.layers.29.mlp.up_proj.weight",
  "groups.7.linear.1.mlp.down.weight": "model.language_model.layers.29.mlp.down_proj.weight",
  "groups.7.linear.1.linear_attn.in_proj_qkv.weight": "model.language_model.layers.29.linear_attn.in_proj_qkv.weight",
  "groups.7.linear.1.linear_attn.in_proj_z.weight": "model.language_model.layers.29.linear_attn.in_proj_z.weight",
  "groups.7.linear.1.linear_attn.in_proj_b.weight": "model.language_model.layers.29.linear_attn.in_proj_b.weight",
  "groups.7.linear.1.linear_attn.in_proj_a.weight": "model.language_model.layers.29.linear_attn.in_proj_a.weight",
  "groups.7.linear.1.linear_attn.out_proj.weight": "model.language_model.layers.29.linear_attn.out_proj.weight",
  "groups.7.linear.1.linear_attn.norm.weight": "model.language_model.layers.29.linear_attn.norm.weight",
  "groups.7.linear.1.linear_attn.conv_weight": "model.language_model.layers.29.linear_attn.conv1d.weight",
  "groups.7.linear.1.linear_attn.A_log": "model.language_model.layers.29.linear_attn.A_log",
  "groups.7.linear.1.linear_attn.dt_bias": "model.language_model.layers.29.linear_attn.dt_bias",
  "groups.7.linear.2.input_layernorm.weight": "model.language_model.layers.30.input_layernorm.weight",
  "groups.7.linear.2.post_attention_layernorm.weight": "model.language_model.layers.30.post_attention_layernorm.weight",
  "groups.7.linear.2.mlp.gate.weight": "model.language_model.layers.30.mlp.gate_proj.weight",
  "groups.7.linear.2.mlp.up.weight": "model.language_model.layers.30.mlp.up_proj.weight",
  "groups.7.linear.2.mlp.down.weight": "model.language_model.layers.30.mlp.down_proj.weight",
  "groups.7.linear.2.linear_attn.in_proj_qkv.weight": "model.language_model.layers.30.linear_attn.in_proj_qkv.weight",
  "groups.7.linear.2.linear_attn.in_proj_z.weight": "model.language_model.layers.30.linear_attn.in_proj_z.weight",
  "groups.7.linear.2.linear_attn.in_proj_b.weight": "model.language_model.layers.30.linear_attn.in_proj_b.weight",
  "groups.7.linear.2.linear_attn.in_proj_a.weight": "model.language_model.layers.30.linear_attn.in_proj_a.weight",
  "groups.7.linear.2.linear_attn.out_proj.weight": "model.language_model.layers.30.linear_attn.out_proj.weight",
  "groups.7.linear.2.linear_attn.norm.weight": "model.language_model.layers.30.linear_attn.norm.weight",
  "groups.7.linear.2.linear_attn.conv_weight": "model.language_model.layers.30.linear_attn.conv1d.weight",
  "groups.7.linear.2.linear_attn.A_log": "model.language_model.layers.30.linear_attn.A_log",
  "groups.7.linear.2.linear_attn.dt_bias": "model.language_model.layers.30.linear_attn.dt_bias",
  "groups.7.full.input_layernorm.weight": "model.language_model.layers.31.input_layernorm.weight",
  "groups.7.full.post_attention_layernorm.weight": "model.language_model.layers.31.post_attention_layernorm.weight",
  "groups.7.full.mlp.gate.weight": "model.language_model.layers.31.mlp.gate_proj.weight",
  "groups.7.full.mlp.up.weight": "model.language_model.layers.31.mlp.up_proj.weight",
  "groups.7.full.mlp.down.weight": "model.language_model.layers.31.mlp.down_proj.weight",
  "groups.7.full.self_attn.q_proj.weight": "model.language_model.layers.31.self_attn.q_proj.weight",
  "groups.7.full.self_attn.k_proj.weight": "model.language_model.layers.31.self_attn.k_proj.weight",
  "groups.7.full.self_attn.v_proj.weight": "model.language_model.layers.31.self_attn.v_proj.weight",
  "groups.7.full.self_attn.o_proj.weight": "model.language_model.layers.31.self_attn.o_proj.weight",
  "groups.7.full.self_attn.q_norm.weight": "model.language_model.layers.31.self_attn.q_norm.weight",
  "groups.7.full.self_attn.k_norm.weight": "model.language_model.layers.31.self_attn.k_norm.weight",
  "groups.8.linear.0.input_layernorm.weight": "model.language_model.layers.32.input_layernorm.weight",
  "groups.8.linear.0.post_attention_layernorm.weight": "model.language_model.layers.32.post_attention_layernorm.weight",
  "groups.8.linear.0.mlp.gate.weight": "model.language_model.layers.32.mlp.gate_proj.weight",
  "groups.8.linear.0.mlp.up.weight": "model.language_model.layers.32.mlp.up_proj.weight",
  "groups.8.linear.0.mlp.down.weight": "model.language_model.layers.32.mlp.down_proj.weight",
  "groups.8.linear.0.linear_attn.in_proj_qkv.weight": "model.language_model.layers.32.linear_attn.in_proj_qkv.weight",
  "groups.8.linear.0.linear_attn.in_proj_z.weight": "model.language_model.layers.32.linear_attn.in_proj_z.weight",
  "groups.8.linear.0.linear_attn.in_proj_b.weight": "model.language_model.layers.32.linear_attn.in_proj_b.weight",
  "groups.8.linear.0.linear_attn.in_proj_a.weight": "model.language_model.layers.32.linear_attn.in_proj_a.weight",
  "groups.8.linear.0.linear_attn.out_proj.weight": "model.language_model.layers.32.linear_attn.out_proj.weight",
  "groups.8.linear.0.linear_attn.norm.weight": "model.language_model.layers.32.linear_attn.norm.weight",
  "groups.8.linear.0.linear_attn.conv_weight": "model.language_model.layers.32.linear_attn.conv1d.weight",
  "groups.8.linear.0.linear_attn.A_log": "model.language_model.layers.32.linear_attn.A_log",
  "groups.8.linear.0.linear_attn.dt_bias": "model.language_model.layers.32.linear_attn.dt_bias",
  "groups.8.linear.1.input_layernorm.weight": "model.language_model.layers.33.input_layernorm.weight",
  "groups.8.linear.1.post_attention_layernorm.weight": "model.language_model.layers.33.post_attention_layernorm.weight",
  "groups.8.linear.1.mlp.gate.weight": "model.language_model.layers.33.mlp.gate_proj.weight",
  "groups.8.linear.1.mlp.up.weight": "model.language_model.layers.33.mlp.up_proj.weight",
  "groups.8.linear.1.mlp.down.weight": "model.language_model.layers.33.mlp.down_proj.weight",
  "groups.8.linear.1.linear_attn.in_proj_qkv.weight": "model.language_model.layers.33.linear_attn.in_proj_qkv.weight",
  "groups.8.linear.1.linear_attn.in_proj_z.weight": "model.language_model.layers.33.linear_attn.in_proj_z.weight",
  "groups.8.linear.1.linear_attn.in_proj_b.weight": "model.language_model.layers.33.linear_attn.in_proj_b.weight",
  "groups.8.linear.1.linear_attn.in_proj_a.weight": "model.language_model.layers.33.linear_attn.in_proj_a.weight",
  "groups.8.linear.1.linear_attn.out_proj.weight": "model.language_model.layers.33.linear_attn.out_proj.weight",
  "groups.8.linear.1.linear_attn.norm.weight": "model.language_model.layers.33.linear_attn.norm.weight",
  "groups.8.linear.1.linear_attn.conv_weight": "model.language_model.layers.33.linear_attn.conv1d.weight",
  "groups.8.linear.1.linear_attn.A_log": "model.language_model.layers.33.linear_attn.A_log",
  "groups.8.linear.1.linear_attn.dt_bias": "model.language_model.layers.33.linear_attn.dt_bias",
  "groups.8.linear.2.input_layernorm.weight": "model.language_model.layers.34.input_layernorm.weight",
  "groups.8.linear.2.post_attention_layernorm.weight": "model.language_model.layers.34.post_attention_layernorm.weight",
  "groups.8.linear.2.mlp.gate.weight": "model.language_model.layers.34.mlp.gate_proj.weight",
  "groups.8.linear.2.mlp.up.weight": "model.language_model.layers.34.mlp.up_proj.weight",
  "groups.8.linear.2.mlp.down.weight": "model.language_model.layers.34.mlp.down_proj.weight",
  "groups.8.linear.2.linear_attn.in_proj_qkv.weight": "model.language_model.layers.34.linear_attn.in_proj_qkv.weight",
  "groups.8.linear.2.linear_attn.in_proj_z.weight": "model.language_model.layers.34.linear_attn.in_proj_z.weight",
  "groups.8.linear.2.linear_attn.in_proj_b.weight": "model.language_model.layers.34.linear_attn.in_proj_b.weight",
  "groups.8.linear.2.linear_attn.in_proj_a.weight": "model.language_model.layers.34.linear_attn.in_proj_a.weight",
  "groups.8.linear.2.linear_attn.out_proj.weight": "model.language_model.layers.34.linear_attn.out_proj.weight",
  "groups.8.linear.2.linear_attn.norm.weight": "model.language_model.layers.34.linear_attn.norm.weight",
  "groups.8.linear.2.linear_attn.conv_weight": "model.language_model.layers.34.linear_attn.conv1d.weight",
  "groups.8.linear.2.linear_attn.A_log": "model.language_model.layers.34.linear_attn.A_log",
  "groups.8.linear.2.linear_attn.dt_bias": "model.language_model.layers.34.linear_attn.dt_bias",
  "groups.8.full.input_layernorm.weight": "model.language_model.layers.35.input_layernorm.weight",
  "groups.8.full.post_attention_layernorm.weight": "model.language_model.layers.35.post_attention_layernorm.weight",
  "groups.8.full.mlp.gate.weight": "model.language_model.layers.35.mlp.gate_proj.weight",
  "groups.8.full.mlp.up.weight": "model.language_model.layers.35.mlp.up_proj.weight",
  "groups.8.full.mlp.down.weight": "model.language_model.layers.35.mlp.down_proj.weight",
  "groups.8.full.self_attn.q_proj.weight": "model.language_model.layers.35.self_attn.q_proj.weight",
  "groups.8.full.self_attn.k_proj.weight": "model.language_model.layers.35.self_attn.k_proj.weight",
  "groups.8.full.self_attn.v_proj.weight": "model.language_model.layers.35.self_attn.v_proj.weight",
  "groups.8.full.self_attn.o_proj.weight": "model.language_model.layers.35.self_attn.o_proj.weight",
  "groups.8.full.self_attn.q_norm.weight": "model.language_model.layers.35.self_attn.q_norm.weight",
  "groups.8.full.self_attn.k_norm.weight": "model.language_model.layers.35.self_attn.k_norm.weight",
  "groups.9.linear.0.input_layernorm.weight": "model.language_model.layers.36.input_layernorm.weight",
  "groups.9.linear.0.post_attention_layernorm.weight": "model.language_model.layers.36.post_attention_layernorm.weight",
  "groups.9.linear.0.mlp.gate.weight": "model.language_model.layers.36.mlp.gate_proj.weight",
  "groups.9.linear.0.mlp.up.weight": "model.language_model.layers.36.mlp.up_proj.weight",
  "groups.9.linear.0.mlp.down.weight": "model.language_model.layers.36.mlp.down_proj.weight",
  "groups.9.linear.0.linear_attn.in_proj_qkv.weight": "model.language_model.layers.36.linear_attn.in_proj_qkv.weight",
  "groups.9.linear.0.linear_attn.in_proj_z.weight": "model.language_model.layers.36.linear_attn.in_proj_z.weight",
  "groups.9.linear.0.linear_attn.in_proj_b.weight": "model.language_model.layers.36.linear_attn.in_proj_b.weight",
  "groups.9.linear.0.linear_attn.in_proj_a.weight": "model.language_model.layers.36.linear_attn.in_proj_a.weight",
  "groups.9.linear.0.linear_attn.out_proj.weight": "model.language_model.layers.36.linear_attn.out_proj.weight",
  "groups.9.linear.0.linear_attn.norm.weight": "model.language_model.layers.36.linear_attn.norm.weight",
  "groups.9.linear.0.linear_attn.conv_weight": "model.language_model.layers.36.linear_attn.conv1d.weight",
  "groups.9.linear.0.linear_attn.A_log": "model.language_model.layers.36.linear_attn.A_log",
  "groups.9.linear.0.linear_attn.dt_bias": "model.language_model.layers.36.linear_attn.dt_bias",
  "groups.9.linear.1.input_layernorm.weight": "model.language_model.layers.37.input_layernorm.weight",
  "groups.9.linear.1.post_attention_layernorm.weight": "model.language_model.layers.37.post_attention_layernorm.weight",
  "groups.9.linear.1.mlp.gate.weight": "model.language_model.layers.37.mlp.gate_proj.weight",
  "groups.9.linear.1.mlp.up.weight": "model.language_model.layers.37.mlp.up_proj.weight",
  "groups.9.linear.1.mlp.down.weight": "model.language_model.layers.37.mlp.down_proj.weight",
  "groups.9.linear.1.linear_attn.in_proj_qkv.weight": "model.language_model.layers.37.linear_attn.in_proj_qkv.weight",
  "groups.9.linear.1.linear_attn.in_proj_z.weight": "model.language_model.layers.37.linear_attn.in_proj_z.weight",
  "groups.9.linear.1.linear_attn.in_proj_b.weight": "model.language_model.layers.37.linear_attn.in_proj_b.weight",
  "groups.9.linear.1.linear_attn.in_proj_a.weight": "model.language_model.layers.37.linear_attn.in_proj_a.weight",
  "groups.9.linear.1.linear_attn.out_proj.weight": "model.language_model.layers.37.linear_attn.out_proj.weight",
  "groups.9.linear.1.linear_attn.norm.weight": "model.language_model.layers.37.linear_attn.norm.weight",
  "groups.9.linear.1.linear_attn.conv_weight": "model.language_model.layers.37.linear_attn.conv1d.weight",
  "groups.9.linear.1.linear_attn.A_log": "model.language_model.layers.37.linear_attn.A_log",
  "groups.9.linear.1.linear_attn.dt_bias": "model.language_model.layers.37.linear_attn.dt_bias",
  "groups.9.linear.2.input_layernorm.weight": "model.language_model.layers.38.input_layernorm.weight",
  "groups.9.linear.2.post_attention_layernorm.weight": "model.language_model.layers.38.post_attention_layernorm.weight",
  "groups.9.linear.2.mlp.gate.weight": "model.language_model.layers.38.mlp.gate_proj.weight",
  "groups.9.linear.2.mlp.up.weight": "model.language_model.layers.38.mlp.up_proj.weight",
  "groups.9.linear.2.mlp.down.weight": "model.language_model.layers.38.mlp.down_proj.weight",
  "groups.9.linear.2.linear_attn.in_proj_qkv.weight": "model.language_model.layers.38.linear_attn.in_proj_qkv.weight",
  "groups.9.linear.2.linear_attn.in_proj_z.weight": "model.language_model.layers.38.linear_attn.in_proj_z.weight",
  "groups.9.linear.2.linear_attn.in_proj_b.weight": "model.language_model.layers.38.linear_attn.in_proj_b.weight",
  "groups.9.linear.2.linear_attn.in_proj_a.weight": "model.language_model.layers.38.linear_attn.in_proj_a.weight",
  "groups.9.linear.2.linear_attn.out_proj.weight": "model.language_model.layers.38.linear_attn.out_proj.weight",
  "groups.9.linear.2.linear_attn.norm.weight": "model.language_model.layers.38.linear_attn.norm.weight",
  "groups.9.linear.2.linear_attn.conv_weight": "model.language_model.layers.38.linear_attn.conv1d.weight",
  "groups.9.linear.2.linear_attn.A_log": "model.language_model.layers.38.linear_attn.A_log",
  "groups.9.linear.2.linear_attn.dt_bias": "model.language_model.layers.38.linear_attn.dt_bias",
  "groups.9.full.input_layernorm.weight": "model.language_model.layers.39.input_layernorm.weight",
  "groups.9.full.post_attention_layernorm.weight": "model.language_model.layers.39.post_attention_layernorm.weight",
  "groups.9.full.mlp.gate.weight": "model.language_model.layers.39.mlp.gate_proj.weight",
  "groups.9.full.mlp.up.weight": "model.language_model.layers.39.mlp.up_proj.weight",
  "groups.9.full.mlp.down.weight": "model.language_model.layers.39.mlp.down_proj.weight",
  "groups.9.full.self_attn.q_proj.weight": "model.language_model.layers.39.self_attn.q_proj.weight",
  "groups.9.full.self_attn.k_proj.weight": "model.language_model.layers.39.self_attn.k_proj.weight",
  "groups.9.full.self_attn.v_proj.weight": "model.language_model.layers.39.self_attn.v_proj.weight",
  "groups.9.full.self_attn.o_proj.weight": "model.language_model.layers.39.self_attn.o_proj.weight",
  "groups.9.full.self_attn.q_norm.weight": "model.language_model.layers.39.self_attn.q_norm.weight",
  "groups.9.full.self_attn.k_norm.weight": "model.language_model.layers.39.self_attn.k_norm.weight",
  "groups.10.linear.0.input_layernorm.weight": "model.language_model.layers.40.input_layernorm.weight",
  "groups.10.linear.0.post_attention_layernorm.weight": "model.language_model.layers.40.post_attention_layernorm.weight",
  "groups.10.linear.0.mlp.gate.weight": "model.language_model.layers.40.mlp.gate_proj.weight",
  "groups.10.linear.0.mlp.up.weight": "model.language_model.layers.40.mlp.up_proj.weight",
  "groups.10.linear.0.mlp.down.weight": "model.language_model.layers.40.mlp.down_proj.weight",
  "groups.10.linear.0.linear_attn.in_proj_qkv.weight": "model.language_model.layers.40.linear_attn.in_proj_qkv.weight",
  "groups.10.linear.0.linear_attn.in_proj_z.weight": "model.language_model.layers.40.linear_attn.in_proj_z.weight",
  "groups.10.linear.0.linear_attn.in_proj_b.weight": "model.language_model.layers.40.linear_attn.in_proj_b.weight",
  "groups.10.linear.0.linear_attn.in_proj_a.weight": "model.language_model.layers.40.linear_attn.in_proj_a.weight",
  "groups.10.linear.0.linear_attn.out_proj.weight": "model.language_model.layers.40.linear_attn.out_proj.weight",
  "groups.10.linear.0.linear_attn.norm.weight": "model.language_model.layers.40.linear_attn.norm.weight",
  "groups.10.linear.0.linear_attn.conv_weight": "model.language_model.layers.40.linear_attn.conv1d.weight",
  "groups.10.linear.0.linear_attn.A_log": "model.language_model.layers.40.linear_attn.A_log",
  "groups.10.linear.0.linear_attn.dt_bias": "model.language_model.layers.40.linear_attn.dt_bias",
  "groups.10.linear.1.input_layernorm.weight": "model.language_model.layers.41.input_layernorm.weight",
  "groups.10.linear.1.post_attention_layernorm.weight": "model.language_model.layers.41.post_attention_layernorm.weight",
  "groups.10.linear.1.mlp.gate.weight": "model.language_model.layers.41.mlp.gate_proj.weight",
  "groups.10.linear.1.mlp.up.weight": "model.language_model.layers.41.mlp.up_proj.weight",
  "groups.10.linear.1.mlp.down.weight": "model.language_model.layers.41.mlp.down_proj.weight",
  "groups.10.linear.1.linear_attn.in_proj_qkv.weight": "model.language_model.layers.41.linear_attn.in_proj_qkv.weight",
  "groups.10.linear.1.linear_attn.in_proj_z.weight": "model.language_model.layers.41.linear_attn.in_proj_z.weight",
  "groups.10.linear.1.linear_attn.in_proj_b.weight": "model.language_model.layers.41.linear_attn.in_proj_b.weight",
  "groups.10.linear.1.linear_attn.in_proj_a.weight": "model.language_model.layers.41.linear_attn.in_proj_a.weight",
  "groups.10.linear.1.linear_attn.out_proj.weight": "model.language_model.layers.41.linear_attn.out_proj.weight",
  "groups.10.linear.1.linear_attn.norm.weight": "model.language_model.layers.41.linear_attn.norm.weight",
  "groups.10.linear.1.linear_attn.conv_weight": "model.language_model.layers.41.linear_attn.conv1d.weight",
  "groups.10.linear.1.linear_attn.A_log": "model.language_model.layers.41.linear_attn.A_log",
  "groups.10.linear.1.linear_attn.dt_bias": "model.language_model.layers.41.linear_attn.dt_bias",
  "groups.10.linear.2.input_layernorm.weight": "model.language_model.layers.42.input_layernorm.weight",
  "groups.10.linear.2.post_attention_layernorm.weight": "model.language_model.layers.42.post_attention_layernorm.weight",
  "groups.10.linear.2.mlp.gate.weight": "model.language_model.layers.42.mlp.gate_proj.weight",
  "groups.10.linear.2.mlp.up.weight": "model.language_model.layers.42.mlp.up_proj.weight",
  "groups.10.linear.2.mlp.down.weight": "model.language_model.layers.42.mlp.down_proj.weight",
  "groups.10.linear.2.linear_attn.in_proj_qkv.weight": "model.language_model.layers.42.linear_attn.in_proj_qkv.weight",
  "groups.10.linear.2.linear_attn.in_proj_z.weight": "model.language_model.layers.42.linear_attn.in_proj_z.weight",
  "groups.10.linear.2.linear_attn.in_proj_b.weight": "model.language_model.layers.42.linear_attn.in_proj_b.weight",
  "groups.10.linear.2.linear_attn.in_proj_a.weight": "model.language_model.layers.42.linear_attn.in_proj_a.weight",
  "groups.10.linear.2.linear_attn.out_proj.weight": "model.language_model.layers.42.linear_attn.out_proj.weight",
  "groups.10.linear.2.linear_attn.norm.weight": "model.language_model.layers.42.linear_attn.norm.weight",
  "groups.10.linear.2.linear_attn.conv_weight": "model.language_model.layers.42.linear_attn.conv1d.weight",
  "groups.10.linear.2.linear_attn.A_log": "model.language_model.layers.42.linear_attn.A_log",
  "groups.10.linear.2.linear_attn.dt_bias": "model.language_model.layers.42.linear_attn.dt_bias",
  "groups.10.full.input_layernorm.weight": "model.language_model.layers.43.input_layernorm.weight",
  "groups.10.full.post_attention_layernorm.weight": "model.language_model.layers.43.post_attention_layernorm.weight",
  "groups.10.full.mlp.gate.weight": "model.language_model.layers.43.mlp.gate_proj.weight",
  "groups.10.full.mlp.up.weight": "model.language_model.layers.43.mlp.up_proj.weight",
  "groups.10.full.mlp.down.weight": "model.language_model.layers.43.mlp.down_proj.weight",
  "groups.10.full.self_attn.q_proj.weight": "model.language_model.layers.43.self_attn.q_proj.weight",
  "groups.10.full.self_attn.k_proj.weight": "model.language_model.layers.43.self_attn.k_proj.weight",
  "groups.10.full.self_attn.v_proj.weight": "model.language_model.layers.43.self_attn.v_proj.weight",
  "groups.10.full.self_attn.o_proj.weight": "model.language_model.layers.43.self_attn.o_proj.weight",
  "groups.10.full.self_attn.q_norm.weight": "model.language_model.layers.43.self_attn.q_norm.weight",
  "groups.10.full.self_attn.k_norm.weight": "model.language_model.layers.43.self_attn.k_norm.weight",
  "groups.11.linear.0.input_layernorm.weight": "model.language_model.layers.44.input_layernorm.weight",
  "groups.11.linear.0.post_attention_layernorm.weight": "model.language_model.layers.44.post_attention_layernorm.weight",
  "groups.11.linear.0.mlp.gate.weight": "model.language_model.layers.44.mlp.gate_proj.weight",
  "groups.11.linear.0.mlp.up.weight": "model.language_model.layers.44.mlp.up_proj.weight",
  "groups.11.linear.0.mlp.down.weight": "model.language_model.layers.44.mlp.down_proj.weight",
  "groups.11.linear.0.linear_attn.in_proj_qkv.weight": "model.language_model.layers.44.linear_attn.in_proj_qkv.weight",
  "groups.11.linear.0.linear_attn.in_proj_z.weight": "model.language_model.layers.44.linear_attn.in_proj_z.weight",
  "groups.11.linear.0.linear_attn.in_proj_b.weight": "model.language_model.layers.44.linear_attn.in_proj_b.weight",
  "groups.11.linear.0.linear_attn.in_proj_a.weight": "model.language_model.layers.44.linear_attn.in_proj_a.weight",
  "groups.11.linear.0.linear_attn.out_proj.weight": "model.language_model.layers.44.linear_attn.out_proj.weight",
  "groups.11.linear.0.linear_attn.norm.weight": "model.language_model.layers.44.linear_attn.norm.weight",
  "groups.11.linear.0.linear_attn.conv_weight": "model.language_model.layers.44.linear_attn.conv1d.weight",
  "groups.11.linear.0.linear_attn.A_log": "model.language_model.layers.44.linear_attn.A_log",
  "groups.11.linear.0.linear_attn.dt_bias": "model.language_model.layers.44.linear_attn.dt_bias",
  "groups.11.linear.1.input_layernorm.weight": "model.language_model.layers.45.input_layernorm.weight",
  "groups.11.linear.1.post_attention_layernorm.weight": "model.language_model.layers.45.post_attention_layernorm.weight",
  "groups.11.linear.1.mlp.gate.weight": "model.language_model.layers.45.mlp.gate_proj.weight",
  "groups.11.linear.1.mlp.up.weight": "model.language_model.layers.45.mlp.up_proj.weight",
  "groups.11.linear.1.mlp.down.weight": "model.language_model.layers.45.mlp.down_proj.weight",
  "groups.11.linear.1.linear_attn.in_proj_qkv.weight": "model.language_model.layers.45.linear_attn.in_proj_qkv.weight",
  "groups.11.linear.1.linear_attn.in_proj_z.weight": "model.language_model.layers.45.linear_attn.in_proj_z.weight",
  "groups.11.linear.1.linear_attn.in_proj_b.weight": "model.language_model.layers.45.linear_attn.in_proj_b.weight",
  "groups.11.linear.1.linear_attn.in_proj_a.weight": "model.language_model.layers.45.linear_attn.in_proj_a.weight",
  "groups.11.linear.1.linear_attn.out_proj.weight": "model.language_model.layers.45.linear_attn.out_proj.weight",
  "groups.11.linear.1.linear_attn.norm.weight": "model.language_model.layers.45.linear_attn.norm.weight",
  "groups.11.linear.1.linear_attn.conv_weight": "model.language_model.layers.45.linear_attn.conv1d.weight",
  "groups.11.linear.1.linear_attn.A_log": "model.language_model.layers.45.linear_attn.A_log",
  "groups.11.linear.1.linear_attn.dt_bias": "model.language_model.layers.45.linear_attn.dt_bias",
  "groups.11.linear.2.input_layernorm.weight": "model.language_model.layers.46.input_layernorm.weight",
  "groups.11.linear.2.post_attention_layernorm.weight": "model.language_model.layers.46.post_attention_layernorm.weight",
  "groups.11.linear.2.mlp.gate.weight": "model.language_model.layers.46.mlp.gate_proj.weight",
  "groups.11.linear.2.mlp.up.weight": "model.language_model.layers.46.mlp.up_proj.weight",
  "groups.11.linear.2.mlp.down.weight": "model.language_model.layers.46.mlp.down_proj.weight",
  "groups.11.linear.2.linear_attn.in_proj_qkv.weight": "model.language_model.layers.46.linear_attn.in_proj_qkv.weight",
  "groups.11.linear.2.linear_attn.in_proj_z.weight": "model.language_model.layers.46.linear_attn.in_proj_z.weight",
  "groups.11.linear.2.linear_attn.in_proj_b.weight": "model.language_model.layers.46.linear_attn.in_proj_b.weight",
  "groups.11.linear.2.linear_attn.in_proj_a.weight": "model.language_model.layers.46.linear_attn.in_proj_a.weight",
  "groups.11.linear.2.linear_attn.out_proj.weight": "model.language_model.layers.46.linear_attn.out_proj.weight",
  "groups.11.linear.2.linear_attn.norm.weight": "model.language_model.layers.46.linear_attn.norm.weight",
  "groups.11.linear.2.linear_attn.conv_weight": "model.language_model.layers.46.linear_attn.conv1d.weight",
  "groups.11.linear.2.linear_attn.A_log": "model.language_model.layers.46.linear_attn.A_log",
  "groups.11.linear.2.linear_attn.dt_bias": "model.language_model.layers.46.linear_attn.dt_bias",
  "groups.11.full.input_layernorm.weight": "model.language_model.layers.47.input_layernorm.weight",
  "groups.11.full.post_attention_layernorm.weight": "model.language_model.layers.47.post_attention_layernorm.weight",
  "groups.11.full.mlp.gate.weight": "model.language_model.layers.47.mlp.gate_proj.weight",
  "groups.11.full.mlp.up.weight": "model.language_model.layers.47.mlp.up_proj.weight",
  "groups.11.full.mlp.down.weight": "model.language_model.layers.47.mlp.down_proj.weight",
  "groups.11.full.self_attn.q_proj.weight": "model.language_model.layers.47.self_attn.q_proj.weight",
  "groups.11.full.self_attn.k_proj.weight": "model.language_model.layers.47.self_attn.k_proj.weight",
  "groups.11.full.self_attn.v_proj.weight": "model.language_model.layers.47.self_attn.v_proj.weight",
  "groups.11.full.self_attn.o_proj.weight": "model.language_model.layers.47.self_attn.o_proj.weight",
  "groups.11.full.self_attn.q_norm.weight": "model.language_model.layers.47.self_attn.q_norm.weight",
  "groups.11.full.self_attn.k_norm.weight": "model.language_model.layers.47.self_attn.k_norm.weight",
  "groups.12.linear.0.input_layernorm.weight": "model.language_model.layers.48.input_layernorm.weight",
  "groups.12.linear.0.post_attention_layernorm.weight": "model.language_model.layers.48.post_attention_layernorm.weight",
  "groups.12.linear.0.mlp.gate.weight": "model.language_model.layers.48.mlp.gate_proj.weight",
  "groups.12.linear.0.mlp.up.weight": "model.language_model.layers.48.mlp.up_proj.weight",
  "groups.12.linear.0.mlp.down.weight": "model.language_model.layers.48.mlp.down_proj.weight",
  "groups.12.linear.0.linear_attn.in_proj_qkv.weight": "model.language_model.layers.48.linear_attn.in_proj_qkv.weight",
  "groups.12.linear.0.linear_attn.in_proj_z.weight": "model.language_model.layers.48.linear_attn.in_proj_z.weight",
  "groups.12.linear.0.linear_attn.in_proj_b.weight": "model.language_model.layers.48.linear_attn.in_proj_b.weight",
  "groups.12.linear.0.linear_attn.in_proj_a.weight": "model.language_model.layers.48.linear_attn.in_proj_a.weight",
  "groups.12.linear.0.linear_attn.out_proj.weight": "model.language_model.layers.48.linear_attn.out_proj.weight",
  "groups.12.linear.0.linear_attn.norm.weight": "model.language_model.layers.48.linear_attn.norm.weight",
  "groups.12.linear.0.linear_attn.conv_weight": "model.language_model.layers.48.linear_attn.conv1d.weight",
  "groups.12.linear.0.linear_attn.A_log": "model.language_model.layers.48.linear_attn.A_log",
  "groups.12.linear.0.linear_attn.dt_bias": "model.language_model.layers.48.linear_attn.dt_bias",
  "groups.12.linear.1.input_layernorm.weight": "model.language_model.layers.49.input_layernorm.weight",
  "groups.12.linear.1.post_attention_layernorm.weight": "model.language_model.layers.49.post_attention_layernorm.weight",
  "groups.12.linear.1.mlp.gate.weight": "model.language_model.layers.49.mlp.gate_proj.weight",
  "groups.12.linear.1.mlp.up.weight": "model.language_model.layers.49.mlp.up_proj.weight",
  "groups.12.linear.1.mlp.down.weight": "model.language_model.layers.49.mlp.down_proj.weight",
  "groups.12.linear.1.linear_attn.in_proj_qkv.weight": "model.language_model.layers.49.linear_attn.in_proj_qkv.weight",
  "groups.12.linear.1.linear_attn.in_proj_z.weight": "model.language_model.layers.49.linear_attn.in_proj_z.weight",
  "groups.12.linear.1.linear_attn.in_proj_b.weight": "model.language_model.layers.49.linear_attn.in_proj_b.weight",
  "groups.12.linear.1.linear_attn.in_proj_a.weight": "model.language_model.layers.49.linear_attn.in_proj_a.weight",
  "groups.12.linear.1.linear_attn.out_proj.weight": "model.language_model.layers.49.linear_attn.out_proj.weight",
  "groups.12.linear.1.linear_attn.norm.weight": "model.language_model.layers.49.linear_attn.norm.weight",
  "groups.12.linear.1.linear_attn.conv_weight": "model.language_model.layers.49.linear_attn.conv1d.weight",
  "groups.12.linear.1.linear_attn.A_log": "model.language_model.layers.49.linear_attn.A_log",
  "groups.12.linear.1.linear_attn.dt_bias": "model.language_model.layers.49.linear_attn.dt_bias",
  "groups.12.linear.2.input_layernorm.weight": "model.language_model.layers.50.input_layernorm.weight",
  "groups.12.linear.2.post_attention_layernorm.weight": "model.language_model.layers.50.post_attention_layernorm.weight",
  "groups.12.linear.2.mlp.gate.weight": "model.language_model.layers.50.mlp.gate_proj.weight",
  "groups.12.linear.2.mlp.up.weight": "model.language_model.layers.50.mlp.up_proj.weight",
  "groups.12.linear.2.mlp.down.weight": "model.language_model.layers.50.mlp.down_proj.weight",
  "groups.12.linear.2.linear_attn.in_proj_qkv.weight": "model.language_model.layers.50.linear_attn.in_proj_qkv.weight",
  "groups.12.linear.2.linear_attn.in_proj_z.weight": "model.language_model.layers.50.linear_attn.in_proj_z.weight",
  "groups.12.linear.2.linear_attn.in_proj_b.weight": "model.language_model.layers.50.linear_attn.in_proj_b.weight",
  "groups.12.linear.2.linear_attn.in_proj_a.weight": "model.language_model.layers.50.linear_attn.in_proj_a.weight",
  "groups.12.linear.2.linear_attn.out_proj.weight": "model.language_model.layers.50.linear_attn.out_proj.weight",
  "groups.12.linear.2.linear_attn.norm.weight": "model.language_model.layers.50.linear_attn.norm.weight",
  "groups.12.linear.2.linear_attn.conv_weight": "model.language_model.layers.50.linear_attn.conv1d.weight",
  "groups.12.linear.2.linear_attn.A_log": "model.language_model.layers.50.linear_attn.A_log",
  "groups.12.linear.2.linear_attn.dt_bias": "model.language_model.layers.50.linear_attn.dt_bias",
  "groups.12.full.input_layernorm.weight": "model.language_model.layers.51.input_layernorm.weight",
  "groups.12.full.post_attention_layernorm.weight": "model.language_model.layers.51.post_attention_layernorm.weight",
  "groups.12.full.mlp.gate.weight": "model.language_model.layers.51.mlp.gate_proj.weight",
  "groups.12.full.mlp.up.weight": "model.language_model.layers.51.mlp.up_proj.weight",
  "groups.12.full.mlp.down.weight": "model.language_model.layers.51.mlp.down_proj.weight",
  "groups.12.full.self_attn.q_proj.weight": "model.language_model.layers.51.self_attn.q_proj.weight",
  "groups.12.full.self_attn.k_proj.weight": "model.language_model.layers.51.self_attn.k_proj.weight",
  "groups.12.full.self_attn.v_proj.weight": "model.language_model.layers.51.self_attn.v_proj.weight",
  "groups.12.full.self_attn.o_proj.weight": "model.language_model.layers.51.self_attn.o_proj.weight",
  "groups.12.full.self_attn.q_norm.weight": "model.language_model.layers.51.self_attn.q_norm.weight",
  "groups.12.full.self_attn.k_norm.weight": "model.language_model.layers.51.self_attn.k_norm.weight",
  "groups.13.linear.0.input_layernorm.weight": "model.language_model.layers.52.input_layernorm.weight",
  "groups.13.linear.0.post_attention_layernorm.weight": "model.language_model.layers.52.post_attention_layernorm.weight",
  "groups.13.linear.0.mlp.gate.weight": "model.language_model.layers.52.mlp.gate_proj.weight",
  "groups.13.linear.0.mlp.up.weight": "model.language_model.layers.52.mlp.up_proj.weight",
  "groups.13.linear.0.mlp.down.weight": "model.language_model.layers.52.mlp.down_proj.weight",
  "groups.13.linear.0.linear_attn.in_proj_qkv.weight": "model.language_model.layers.52.linear_attn.in_proj_qkv.weight",
  "groups.13.linear.0.linear_attn.in_proj_z.weight": "model.language_model.layers.52.linear_attn.in_proj_z.weight",
  "groups.13.linear.0.linear_attn.in_proj_b.weight": "model.language_model.layers.52.linear_attn.in_proj_b.weight",
  "groups.13.linear.0.linear_attn.in_proj_a.weight": "model.language_model.layers.52.linear_attn.in_proj_a.weight",
  "groups.13.linear.0.linear_attn.out_proj.weight": "model.language_model.layers.52.linear_attn.out_proj.weight",
  "groups.13.linear.0.linear_attn.norm.weight": "model.language_model.layers.52.linear_attn.norm.weight",
  "groups.13.linear.0.linear_attn.conv_weight": "model.language_model.layers.52.linear_attn.conv1d.weight",
  "groups.13.linear.0.linear_attn.A_log": "model.language_model.layers.52.linear_attn.A_log",
  "groups.13.linear.0.linear_attn.dt_bias": "model.language_model.layers.52.linear_attn.dt_bias",
  "groups.13.linear.1.input_layernorm.weight": "model.language_model.layers.53.input_layernorm.weight",
  "groups.13.linear.1.post_attention_layernorm.weight": "model.language_model.layers.53.post_attention_layernorm.weight",
  "groups.13.linear.1.mlp.gate.weight": "model.language_model.layers.53.mlp.gate_proj.weight",
  "groups.13.linear.1.mlp.up.weight": "model.language_model.layers.53.mlp.up_proj.weight",
  "groups.13.linear.1.mlp.down.weight": "model.language_model.layers.53.mlp.down_proj.weight",
  "groups.13.linear.1.linear_attn.in_proj_qkv.weight": "model.language_model.layers.53.linear_attn.in_proj_qkv.weight",
  "groups.13.linear.1.linear_attn.in_proj_z.weight": "model.language_model.layers.53.linear_attn.in_proj_z.weight",
  "groups.13.linear.1.linear_attn.in_proj_b.weight": "model.language_model.layers.53.linear_attn.in_proj_b.weight",
  "groups.13.linear.1.linear_attn.in_proj_a.weight": "model.language_model.layers.53.linear_attn.in_proj_a.weight",
  "groups.13.linear.1.linear_attn.out_proj.weight": "model.language_model.layers.53.linear_attn.out_proj.weight",
  "groups.13.linear.1.linear_attn.norm.weight": "model.language_model.layers.53.linear_attn.norm.weight",
  "groups.13.linear.1.linear_attn.conv_weight": "model.language_model.layers.53.linear_attn.conv1d.weight",
  "groups.13.linear.1.linear_attn.A_log": "model.language_model.layers.53.linear_attn.A_log",
  "groups.13.linear.1.linear_attn.dt_bias": "model.language_model.layers.53.linear_attn.dt_bias",
  "groups.13.linear.2.input_layernorm.weight": "model.language_model.layers.54.input_layernorm.weight",
  "groups.13.linear.2.post_attention_layernorm.weight": "model.language_model.layers.54.post_attention_layernorm.weight",
  "groups.13.linear.2.mlp.gate.weight": "model.language_model.layers.54.mlp.gate_proj.weight",
  "groups.13.linear.2.mlp.up.weight": "model.language_model.layers.54.mlp.up_proj.weight",
  "groups.13.linear.2.mlp.down.weight": "model.language_model.layers.54.mlp.down_proj.weight",
  "groups.13.linear.2.linear_attn.in_proj_qkv.weight": "model.language_model.layers.54.linear_attn.in_proj_qkv.weight",
  "groups.13.linear.2.linear_attn.in_proj_z.weight": "model.language_model.layers.54.linear_attn.in_proj_z.weight",
  "groups.13.linear.2.linear_attn.in_proj_b.weight": "model.language_model.layers.54.linear_attn.in_proj_b.weight",
  "groups.13.linear.2.linear_attn.in_proj_a.weight": "model.language_model.layers.54.linear_attn.in_proj_a.weight",
  "groups.13.linear.2.linear_attn.out_proj.weight": "model.language_model.layers.54.linear_attn.out_proj.weight",
  "groups.13.linear.2.linear_attn.norm.weight": "model.language_model.layers.54.linear_attn.norm.weight",
  "groups.13.linear.2.linear_attn.conv_weight": "model.language_model.layers.54.linear_attn.conv1d.weight",
  "groups.13.linear.2.linear_attn.A_log": "model.language_model.layers.54.linear_attn.A_log",
  "groups.13.linear.2.linear_attn.dt_bias": "model.language_model.layers.54.linear_attn.dt_bias",
  "groups.13.full.input_layernorm.weight": "model.language_model.layers.55.input_layernorm.weight",
  "groups.13.full.post_attention_layernorm.weight": "model.language_model.layers.55.post_attention_layernorm.weight",
  "groups.13.full.mlp.gate.weight": "model.language_model.layers.55.mlp.gate_proj.weight",
  "groups.13.full.mlp.up.weight": "model.language_model.layers.55.mlp.up_proj.weight",
  "groups.13.full.mlp.down.weight": "model.language_model.layers.55.mlp.down_proj.weight",
  "groups.13.full.self_attn.q_proj.weight": "model.language_model.layers.55.self_attn.q_proj.weight",
  "groups.13.full.self_attn.k_proj.weight": "model.language_model.layers.55.self_attn.k_proj.weight",
  "groups.13.full.self_attn.v_proj.weight": "model.language_model.layers.55.self_attn.v_proj.weight",
  "groups.13.full.self_attn.o_proj.weight": "model.language_model.layers.55.self_attn.o_proj.weight",
  "groups.13.full.self_attn.q_norm.weight": "model.language_model.layers.55.self_attn.q_norm.weight",
  "groups.13.full.self_attn.k_norm.weight": "model.language_model.layers.55.self_attn.k_norm.weight",
  "groups.14.linear.0.input_layernorm.weight": "model.language_model.layers.56.input_layernorm.weight",
  "groups.14.linear.0.post_attention_layernorm.weight": "model.language_model.layers.56.post_attention_layernorm.weight",
  "groups.14.linear.0.mlp.gate.weight": "model.language_model.layers.56.mlp.gate_proj.weight",
  "groups.14.linear.0.mlp.up.weight": "model.language_model.layers.56.mlp.up_proj.weight",
  "groups.14.linear.0.mlp.down.weight": "model.language_model.layers.56.mlp.down_proj.weight",
  "groups.14.linear.0.linear_attn.in_proj_qkv.weight": "model.language_model.layers.56.linear_attn.in_proj_qkv.weight",
  "groups.14.linear.0.linear_attn.in_proj_z.weight": "model.language_model.layers.56.linear_attn.in_proj_z.weight",
  "groups.14.linear.0.linear_attn.in_proj_b.weight": "model.language_model.layers.56.linear_attn.in_proj_b.weight",
  "groups.14.linear.0.linear_attn.in_proj_a.weight": "model.language_model.layers.56.linear_attn.in_proj_a.weight",
  "groups.14.linear.0.linear_attn.out_proj.weight": "model.language_model.layers.56.linear_attn.out_proj.weight",
  "groups.14.linear.0.linear_attn.norm.weight": "model.language_model.layers.56.linear_attn.norm.weight",
  "groups.14.linear.0.linear_attn.conv_weight": "model.language_model.layers.56.linear_attn.conv1d.weight",
  "groups.14.linear.0.linear_attn.A_log": "model.language_model.layers.56.linear_attn.A_log",
  "groups.14.linear.0.linear_attn.dt_bias": "model.language_model.layers.56.linear_attn.dt_bias",
  "groups.14.linear.1.input_layernorm.weight": "model.language_model.layers.57.input_layernorm.weight",
  "groups.14.linear.1.post_attention_layernorm.weight": "model.language_model.layers.57.post_attention_layernorm.weight",
  "groups.14.linear.1.mlp.gate.weight": "model.language_model.layers.57.mlp.gate_proj.weight",
  "groups.14.linear.1.mlp.up.weight": "model.language_model.layers.57.mlp.up_proj.weight",
  "groups.14.linear.1.mlp.down.weight": "model.language_model.layers.57.mlp.down_proj.weight",
  "groups.14.linear.1.linear_attn.in_proj_qkv.weight": "model.language_model.layers.57.linear_attn.in_proj_qkv.weight",
  "groups.14.linear.1.linear_attn.in_proj_z.weight": "model.language_model.layers.57.linear_attn.in_proj_z.weight",
  "groups.14.linear.1.linear_attn.in_proj_b.weight": "model.language_model.layers.57.linear_attn.in_proj_b.weight",
  "groups.14.linear.1.linear_attn.in_proj_a.weight": "model.language_model.layers.57.linear_attn.in_proj_a.weight",
  "groups.14.linear.1.linear_attn.out_proj.weight": "model.language_model.layers.57.linear_attn.out_proj.weight",
  "groups.14.linear.1.linear_attn.norm.weight": "model.language_model.layers.57.linear_attn.norm.weight",
  "groups.14.linear.1.linear_attn.conv_weight": "model.language_model.layers.57.linear_attn.conv1d.weight",
  "groups.14.linear.1.linear_attn.A_log": "model.language_model.layers.57.linear_attn.A_log",
  "groups.14.linear.1.linear_attn.dt_bias": "model.language_model.layers.57.linear_attn.dt_bias",
  "groups.14.linear.2.input_layernorm.weight": "model.language_model.layers.58.input_layernorm.weight",
  "groups.14.linear.2.post_attention_layernorm.weight": "model.language_model.layers.58.post_attention_layernorm.weight",
  "groups.14.linear.2.mlp.gate.weight": "model.language_model.layers.58.mlp.gate_proj.weight",
  "groups.14.linear.2.mlp.up.weight": "model.language_model.layers.58.mlp.up_proj.weight",
  "groups.14.linear.2.mlp.down.weight": "model.language_model.layers.58.mlp.down_proj.weight",
  "groups.14.linear.2.linear_attn.in_proj_qkv.weight": "model.language_model.layers.58.linear_attn.in_proj_qkv.weight",
  "groups.14.linear.2.linear_attn.in_proj_z.weight": "model.language_model.layers.58.linear_attn.in_proj_z.weight",
  "groups.14.linear.2.linear_attn.in_proj_b.weight": "model.language_model.layers.58.linear_attn.in_proj_b.weight",
  "groups.14.linear.2.linear_attn.in_proj_a.weight": "model.language_model.layers.58.linear_attn.in_proj_a.weight",
  "groups.14.linear.2.linear_attn.out_proj.weight": "model.language_model.layers.58.linear_attn.out_proj.weight",
  "groups.14.linear.2.linear_attn.norm.weight": "model.language_model.layers.58.linear_attn.norm.weight",
  "groups.14.linear.2.linear_attn.conv_weight": "model.language_model.layers.58.linear_attn.conv1d.weight",
  "groups.14.linear.2.linear_attn.A_log": "model.language_model.layers.58.linear_attn.A_log",
  "groups.14.linear.2.linear_attn.dt_bias": "model.language_model.layers.58.linear_attn.dt_bias",
  "groups.14.full.input_layernorm.weight": "model.language_model.layers.59.input_layernorm.weight",
  "groups.14.full.post_attention_layernorm.weight": "model.language_model.layers.59.post_attention_layernorm.weight",
  "groups.14.full.mlp.gate.weight": "model.language_model.layers.59.mlp.gate_proj.weight",
  "groups.14.full.mlp.up.weight": "model.language_model.layers.59.mlp.up_proj.weight",
  "groups.14.full.mlp.down.weight": "model.language_model.layers.59.mlp.down_proj.weight",
  "groups.14.full.self_attn.q_proj.weight": "model.language_model.layers.59.self_attn.q_proj.weight",
  "groups.14.full.self_attn.k_proj.weight": "model.language_model.layers.59.self_attn.k_proj.weight",
  "groups.14.full.self_attn.v_proj.weight": "model.language_model.layers.59.self_attn.v_proj.weight",
  "groups.14.full.self_attn.o_proj.weight": "model.language_model.layers.59.self_attn.o_proj.weight",
  "groups.14.full.self_attn.q_norm.weight": "model.language_model.layers.59.self_attn.q_norm.weight",
  "groups.14.full.self_attn.k_norm.weight": "model.language_model.layers.59.self_attn.k_norm.weight",
  "groups.15.linear.0.input_layernorm.weight": "model.language_model.layers.60.input_layernorm.weight",
  "groups.15.linear.0.post_attention_layernorm.weight": "model.language_model.layers.60.post_attention_layernorm.weight",
  "groups.15.linear.0.mlp.gate.weight": "model.language_model.layers.60.mlp.gate_proj.weight",
  "groups.15.linear.0.mlp.up.weight": "model.language_model.layers.60.mlp.up_proj.weight",
  "groups.15.linear.0.mlp.down.weight": "model.language_model.layers.60.mlp.down_proj.weight",
  "groups.15.linear.0.linear_attn.in_proj_qkv.weight": "model.language_model.layers.60.linear_attn.in_proj_qkv.weight",
  "groups.15.linear.0.linear_attn.in_proj_z.weight": "model.language_model.layers.60.linear_attn.in_proj_z.weight",
  "groups.15.linear.0.linear_attn.in_proj_b.weight": "model.language_model.layers.60.linear_attn.in_proj_b.weight",
  "groups.15.linear.0.linear_attn.in_proj_a.weight": "model.language_model.layers.60.linear_attn.in_proj_a.weight",
  "groups.15.linear.0.linear_attn.out_proj.weight": "model.language_model.layers.60.linear_attn.out_proj.weight",
  "groups.15.linear.0.linear_attn.norm.weight": "model.language_model.layers.60.linear_attn.norm.weight",
  "groups.15.linear.0.linear_attn.conv_weight": "model.language_model.layers.60.linear_attn.conv1d.weight",
  "groups.15.linear.0.linear_attn.A_log": "model.language_model.layers.60.linear_attn.A_log",
  "groups.15.linear.0.linear_attn.dt_bias": "model.language_model.layers.60.linear_attn.dt_bias",
  "groups.15.linear.1.input_layernorm.weight": "model.language_model.layers.61.input_layernorm.weight",
  "groups.15.linear.1.post_attention_layernorm.weight": "model.language_model.layers.61.post_attention_layernorm.weight",
  "groups.15.linear.1.mlp.gate.weight": "model.language_model.layers.61.mlp.gate_proj.weight",
  "groups.15.linear.1.mlp.up.weight": "model.language_model.layers.61.mlp.up_proj.weight",
  "groups.15.linear.1.mlp.down.weight": "model.language_model.layers.61.mlp.down_proj.weight",
  "groups.15.linear.1.linear_attn.in_proj_qkv.weight": "model.language_model.layers.61.linear_attn.in_proj_qkv.weight",
  "groups.15.linear.1.linear_attn.in_proj_z.weight": "model.language_model.layers.61.linear_attn.in_proj_z.weight",
  "groups.15.linear.1.linear_attn.in_proj_b.weight": "model.language_model.layers.61.linear_attn.in_proj_b.weight",
  "groups.15.linear.1.linear_attn.in_proj_a.weight": "model.language_model.layers.61.linear_attn.in_proj_a.weight",
  "groups.15.linear.1.linear_attn.out_proj.weight": "model.language_model.layers.61.linear_attn.out_proj.weight",
  "groups.15.linear.1.linear_attn.norm.weight": "model.language_model.layers.61.linear_attn.norm.weight",
  "groups.15.linear.1.linear_attn.conv_weight": "model.language_model.layers.61.linear_attn.conv1d.weight",
  "groups.15.linear.1.linear_attn.A_log": "model.language_model.layers.61.linear_attn.A_log",
  "groups.15.linear.1.linear_attn.dt_bias": "model.language_model.layers.61.linear_attn.dt_bias",
  "groups.15.linear.2.input_layernorm.weight": "model.language_model.layers.62.input_layernorm.weight",
  "groups.15.linear.2.post_attention_layernorm.weight": "model.language_model.layers.62.post_attention_layernorm.weight",
  "groups.15.linear.2.mlp.gate.weight": "model.language_model.layers.62.mlp.gate_proj.weight",
  "groups.15.linear.2.mlp.up.weight": "model.language_model.layers.62.mlp.up_proj.weight",
  "groups.15.linear.2.mlp.down.weight": "model.language_model.layers.62.mlp.down_proj.weight",
  "groups.15.linear.2.linear_attn.in_proj_qkv.weight": "model.language_model.layers.62.linear_attn.in_proj_qkv.weight",
  "groups.15.linear.2.linear_attn.in_proj_z.weight": "model.language_model.layers.62.linear_attn.in_proj_z.weight",
  "groups.15.linear.2.linear_attn.in_proj_b.weight": "model.language_model.layers.62.linear_attn.in_proj_b.weight",
  "groups.15.linear.2.linear_attn.in_proj_a.weight": "model.language_model.layers.62.linear_attn.in_proj_a.weight",
  "groups.15.linear.2.linear_attn.out_proj.weight": "model.language_model.layers.62.linear_attn.out_proj.weight",
  "groups.15.linear.2.linear_attn.norm.weight": "model.language_model.layers.62.linear_attn.norm.weight",
  "groups.15.linear.2.linear_attn.conv_weight": "model.language_model.layers.62.linear_attn.conv1d.weight",
  "groups.15.linear.2.linear_attn.A_log": "model.language_model.layers.62.linear_attn.A_log",
  "groups.15.linear.2.linear_attn.dt_bias": "model.language_model.layers.62.linear_attn.dt_bias",
  "groups.15.full.input_layernorm.weight": "model.language_model.layers.63.input_layernorm.weight",
  "groups.15.full.post_attention_layernorm.weight": "model.language_model.layers.63.post_attention_layernorm.weight",
  "groups.15.full.mlp.gate.weight": "model.language_model.layers.63.mlp.gate_proj.weight",
  "groups.15.full.mlp.up.weight": "model.language_model.layers.63.mlp.up_proj.weight",
  "groups.15.full.mlp.down.weight": "model.language_model.layers.63.mlp.down_proj.weight",
  "groups.15.full.self_attn.q_proj.weight": "model.language_model.layers.63.self_attn.q_proj.weight",
  "groups.15.full.self_attn.k_proj.weight": "model.language_model.layers.63.self_attn.k_proj.weight",
  "groups.15.full.self_attn.v_proj.weight": "model.language_model.layers.63.self_attn.v_proj.weight",
  "groups.15.full.self_attn.o_proj.weight": "model.language_model.layers.63.self_attn.o_proj.weight",
  "groups.15.full.self_attn.q_norm.weight": "model.language_model.layers.63.self_attn.q_norm.weight",
  "groups.15.full.self_attn.k_norm.weight": "model.language_model.layers.63.self_attn.k_norm.weight"
}

Open on GitHub

linnet.toml62 B
toml
[package]
name = "qwen3_5"
version = "0.1.0"
language = "0.1"

Open on GitHub

nest.toml1.7 kB
toml
[model]
name = "qwen3.8-27b"
title = "Qwen3.8 27B"
summary = "A 27B-parameter hybrid decoder: three Gated DeltaNet (linear attention) layers for every gated full-attention layer, zero-centered RMS norms, SwiGLU, and an untied output head; the text model of Qwen3.8-27B, without its vision tower."
license = "Apache-2.0"
family = "qwen3_5"
tags = ["text-generation", "decoder-only", "linear-attention", "gated-deltanet", "hybrid"]

[links]
huggingface = "https://huggingface.co/Qwen/Qwen3.8-27B"
github = "https://github.com/QwenLM/Qwen3.5"

[source]
path = "src/lib.linnet"
root = "Model"
entry = "forward"

[generics]
Vocab = 248320
H = 5120
Heads = 24
KvHeads = 4
HeadDim = 256
KeyHeads = 16
ValueHeads = 48
KeyDim = 128
ValueDim = 128
Conv = 10240
Width = 4
Inner = 17408
Groups = 16
Batch = 1
MaxSeq = 262144
T = "bf16"

[check]
B = 1
S = 8

[weights]
repo = "Qwen/Qwen3.8-27B"
revision = "1d4bf0f2ff6012fd82039f2fa52739d0dd7c60c0"
files = [
    "model-00001-of-00018.safetensors",
    "model-00002-of-00018.safetensors",
    "model-00003-of-00018.safetensors",
    "model-00004-of-00018.safetensors",
    "model-00005-of-00018.safetensors",
    "model-00006-of-00018.safetensors",
    "model-00007-of-00018.safetensors",
    "model-00008-of-00018.safetensors",
    "model-00009-of-00018.safetensors",
    "model-00010-of-00018.safetensors",
    "model-00011-of-00018.safetensors",
    "model-00012-of-00018.safetensors",
    "model-00013-of-00018.safetensors",
    "model-00014-of-00018.safetensors",
    "model-00015-of-00018.safetensors",
    "model-00016-of-00018.safetensors",
    "model-00017-of-00018.safetensors",
    "model-00018-of-00018.safetensors",
]
bindings = "bindings.json"

Open on GitHub

src
attention.linnet8.1 kB
linnet
// Qwen3.5's full-attention layers (every fourth): grouped-query attention
// with a per-head RMS norm on the queries and keys, rotary positions on the
// first quarter of each head, and an output gate. `q_proj` gives each head
// its query and its gate side by side (`[Heads, 2 * HeadDim]`); the heads'
// outputs are scaled by `sigmoid(gate)` before `o_proj`.
//
// The caches are the usual `[Batch, KvHeads, MaxSeq, HeadDim]` pair:
// `decode`/`prefill` for one batch at one position, `decode_rows` and
// `prefill_slots` for a server's rows each at its own length.
module qwen3_5.attention

use crate.norm::{RmsNorm}
use crate.rope::{THETA, tables}
use std.nn.activations::{sigmoid}
use std.nn.attention::{causal_mask, grouped_attention, grouped_attention_rows}
use std.nn.cache::{write_at, write_rows, write_slots, write_span}
use std.nn.linear::{Linear}
use std.nn.rope::{rope, rope_rows}

pub block GatedAttention<
    H: Dim,
    Heads: Dim,
    KvHeads: Dim,
    HeadDim: Dim,
    Batch: Dim,
    MaxSeq: Dim,
    T: Float,
>
where
    Heads > 0,
    KvHeads > 0,
    Heads % KvHeads == 0,
    (HeadDim / 4) % 2 == 0,
    MaxSeq > 0,
    Batch > 0
{
    sub q_proj: Linear<H, Heads * HeadDim * 2, T>
    sub k_proj: Linear<H, KvHeads * HeadDim, T>
    sub v_proj: Linear<H, KvHeads * HeadDim, T>
    sub o_proj: Linear<Heads * HeadDim, H, T>
    sub q_norm: RmsNorm<HeadDim, T>
    sub k_norm: RmsNorm<HeadDim, T>

    state cache_k: Tensor[Batch, KvHeads, MaxSeq, HeadDim; T]
    state cache_v: Tensor[Batch, KvHeads, MaxSeq, HeadDim; T]

    // A whole sequence, causal, no cache.
    pub fn forward<B: Dim, S: Dim>(x: Tensor[B, S, H; T]) -> Tensor[B, S, H; T] {
        let (cos_table, sin_table) = tables<S, HeadDim / 4, T>(THETA)
        let (q, gate, k, v) = project<B, S>(x)
        let mixed = grouped_attention(
            rotate<B, Heads, S>(q, cos_table, sin_table),
            rotate<B, KvHeads, S>(k, cos_table, sin_table),
            v,
            rsqrt(cast<f32>(HeadDim)),
            some(causal_mask<S, S>()),
        )
        return finish<B, S>(mixed, gate)
    }

    // One position `pos` for every row.
    pub fn decode(x: Tensor[Batch, 1, H; T], pos: i32) -> Tensor[Batch, 1, H; T] {
        let (cos_table, sin_table) = tables<MaxSeq, HeadDim / 4, T>(THETA)
        let cos_at[d] = cos_table[cast<i64>(pos), d]
        let sin_at[d] = sin_table[cast<i64>(pos), d]
        let cos_row = reshape(cos_at, [1, HeadDim / 4])
        let sin_row = reshape(sin_at, [1, HeadDim / 4])
        let (q, gate, k, v) = project<Batch, 1>(x)
        cache_k = write_at(cache_k, rotate<Batch, KvHeads, 1>(k, cos_row, sin_row), pos)
        cache_v = write_at(cache_v, v, pos)
        let positions = iota<i32>(MaxSeq)
        let seen[s] = positions[s] <= pos
        let mixed = grouped_attention(
            rotate<Batch, Heads, 1>(q, cos_row, sin_row),
            cache_k,
            cache_v,
            rsqrt(cast<f32>(HeadDim)),
            some(reshape(seen, [1, MaxSeq])),
        )
        return finish<Batch, 1>(mixed, gate)
    }

    // `S` positions from `pos` for every row, as a prompt arrives.
    pub fn prefill<S: Dim>(x: Tensor[Batch, S, H; T], pos: i32) -> Tensor[Batch, S, H; T]
    where S > 0 {
        let (cos_table, sin_table) = tables<MaxSeq, HeadDim / 4, T>(THETA)
        let rows[i] = cast<i64>(pos) + iota<i64>(S)[i]
        let cos_rows[i, d] = cos_table[rows[i], d]
        let sin_rows[i, d] = sin_table[rows[i], d]
        let (q, gate, k, v) = project<Batch, S>(x)
        cache_k = write_span(cache_k, rotate<Batch, KvHeads, S>(k, cos_rows, sin_rows), pos)
        cache_v = write_span(cache_v, v, pos)
        let positions = iota<i32>(MaxSeq)
        let queries = iota<i32>(S)
        let seen[i, s] = positions[s] <= pos + queries[i]
        let mixed = grouped_attention(
            rotate<Batch, Heads, S>(q, cos_rows, sin_rows),
            cache_k,
            cache_v,
            rsqrt(cast<f32>(HeadDim)),
            some(seen),
        )
        return finish<Batch, S>(mixed, gate)
    }

    // One position per row, row `b` at `positions[b]`.
    pub fn decode_rows(
        x: Tensor[Batch, 1, H; T],
        positions: Tensor[Batch; i32],
    ) -> Tensor[Batch, 1, H; T] {
        let (cos_table, sin_table) = tables<MaxSeq, HeadDim / 4, T>(THETA)
        let cos_at[b, d] = cos_table[cast<i64>(positions[b]), d]
        let sin_at[b, d] = sin_table[cast<i64>(positions[b]), d]
        let cos_rows = reshape(cos_at, [Batch, 1, HeadDim / 4])
        let sin_rows = reshape(sin_at, [Batch, 1, HeadDim / 4])
        let (q, gate, k, v) = project<Batch, 1>(x)
        cache_k = write_rows(cache_k, rotate_rows<Batch, KvHeads>(k, cos_rows, sin_rows), positions)
        cache_v = write_rows(cache_v, v, positions)
        let slots = iota<i32>(MaxSeq)
        let seen[b, s] = slots[s] <= positions[b]
        let mixed = grouped_attention_rows(
            rotate_rows<Batch, Heads>(q, cos_rows, sin_rows),
            cache_k,
            cache_v,
            rsqrt(cast<f32>(HeadDim)),
            reshape(seen, [Batch, 1, MaxSeq]),
        )
        return finish<Batch, 1>(mixed, gate)
    }

    // `M` prompts of `S` tokens from their first positions into rows
    // `slots`: each prompt's keys and values fill its row, its queries
    // attend causally among themselves.
    pub fn prefill_slots<M: Dim, S: Dim>(
        x: Tensor[M, S, H; T],
        slots: Tensor[M; i32],
    ) -> Tensor[M, S, H; T]
    where
        M > 0,
        S > 0
    {
        let (cos_table, sin_table) = tables<S, HeadDim / 4, T>(THETA)
        let (q, gate, k, v) = project<M, S>(x)
        let rotated = rotate<M, KvHeads, S>(k, cos_table, sin_table)
        cache_k = write_slots(cache_k, rotated, slots, 0)
        cache_v = write_slots(cache_v, v, slots, 0)
        let mixed = grouped_attention(
            rotate<M, Heads, S>(q, cos_table, sin_table),
            rotated,
            v,
            rsqrt(cast<f32>(HeadDim)),
            some(causal_mask<S, S>()),
        )
        return finish<M, S>(mixed, gate)
    }

    // Queries and their gates, keys, values: `[B, Heads, S, HeadDim]`,
    // `[B, S, Heads * HeadDim]`, and `[B, KvHeads, S, HeadDim]` twice, the
    // queries and keys normalized.
    fn project<B: Dim, S: Dim>(
        x: Tensor[B, S, H; T],
    ) -> (Tensor[B, Heads, S, HeadDim; T], Tensor[B, S, Heads *
        HeadDim; T], Tensor[B, KvHeads, S, HeadDim; T], Tensor[B, KvHeads, S, HeadDim; T]) {
        let both = reshape(q_proj.forward(x), [B, S, Heads, 2 * HeadDim])
        let q = q_norm.forward(both[:, :, :, 0:HeadDim])
        let gate = reshape(both[:, :, :, HeadDim:2 * HeadDim], [B, S, Heads * HeadDim])
        let k = k_norm.forward(reshape(k_proj.forward(x), [B, S, KvHeads, HeadDim]))
        let v = reshape(v_proj.forward(x), [B, S, KvHeads, HeadDim])
        return (
            permute(q, [0, 2, 1, 3]),
            gate,
            permute(k, [0, 2, 1, 3]),
            permute(v, [0, 2, 1, 3]),
        )
    }

    // The heads merged, gated, projected back.
    fn finish<B: Dim, S: Dim>(
        mixed: Tensor[B, Heads, S, HeadDim; T],
        gate: Tensor[B, S, Heads * HeadDim; T],
    ) -> Tensor[B, S, H; T] {
        let merged = reshape(permute(mixed, [0, 2, 1, 3]), [B, S, Heads * HeadDim])
        return o_proj.forward(merged * sigmoid(gate))
    }

    // Rotary positions on each head's first quarter, one table for the batch.
    fn rotate<B: Dim, N: Dim, S: Dim>(
        x: Tensor[B, N, S, HeadDim; T],
        cos_table: Tensor[S, HeadDim / 4; T],
        sin_table: Tensor[S, HeadDim / 4; T],
    ) -> Tensor[B, N, S, HeadDim; T] {
        let turned = rope(x[:, :, :, 0:HeadDim / 4], cos_table, sin_table)
        return concat(turned, x[:, :, :, HeadDim / 4:HeadDim], axis = -1)
    }

    // `rotate` with a table row per sequence, one position each.
    fn rotate_rows<B: Dim, N: Dim>(
        x: Tensor[B, N, 1, HeadDim; T],
        cos_rows: Tensor[B, 1, HeadDim / 4; T],
        sin_rows: Tensor[B, 1, HeadDim / 4; T],
    ) -> Tensor[B, N, 1, HeadDim; T] {
        let turned = rope_rows(x[:, :, :, 0:HeadDim / 4], cos_rows, sin_rows)
        return concat(turned, x[:, :, :, HeadDim / 4:HeadDim], axis = -1)
    }
}

Open on GitHub

deltanet.linnet8.8 kB
linnet
// Qwen3.5's linear-attention layers (three of every four): Gated DeltaNet.
//
// One projection gives the queries, keys and values side by side; a
// depthwise causal convolution of width `Width` runs over them, then
// `silu`. The queries and keys are L2-normalized per head, and each value
// head keeps a state of `[KeyDim, ValueDim]` that the gated delta rule
// (`std.nn.recurrent`) forgets by `exp(decay)` and writes at rate `beta` each
// token:
//
//   beta = sigmoid(b),  decay = -exp(A_log) * softplus(a + dt_bias)
//
// The heads' outputs are normalized and gated by `silu(z)`, then projected
// back. `KeyHeads` query/key heads each serve `ValueHeads / KeyHeads` value
// heads.
//
// Two states per layer, by row: `history`, the convolution's last
// `Width - 1` inputs, and `recurrent`, the delta rule's state in f32. A
// prompt starts both from zero; a decoding step reads and replaces them.
module qwen3_5.deltanet

use crate.norm::{GatedRmsNorm}
use std.nn.activations::{sigmoid, silu}
use std.nn.cache::{write_slots}
use std.nn.linear::{Linear}
use std.nn.recurrent::{causal_conv, gated_delta_rule, gated_delta_step}

pub block GatedDeltaNet<
    H: Dim,
    KeyHeads: Dim,
    ValueHeads: Dim,
    KeyDim: Dim,
    ValueDim: Dim,
    Conv: Dim,
    Width: Dim,
    Batch: Dim,
    T: Float,
>
where
    KeyHeads > 0,
    KeyDim > 0,
    ValueHeads % KeyHeads == 0,
    Conv == 2 * KeyHeads * KeyDim + ValueHeads * ValueDim,
    Width > 1,
    Batch > 0
{
    sub in_proj_qkv: Linear<H, Conv, T>
    sub in_proj_z: Linear<H, ValueHeads * ValueDim, T>
    sub in_proj_b: Linear<H, ValueHeads, T>
    sub in_proj_a: Linear<H, ValueHeads, T>
    sub norm: GatedRmsNorm<ValueDim, T>
    sub out_proj: Linear<ValueHeads * ValueDim, H, T>

    param conv_weight: Tensor[Conv, 1, Width; T]
    param A_log: Tensor[ValueHeads; T]
    param dt_bias: Tensor[ValueHeads; T]

    state history: Tensor[Batch, 1, Width - 1, Conv; T]
    state recurrent: Tensor[Batch, ValueHeads, KeyDim, ValueDim; f32]

    // A whole sequence from zero, no state kept.
    pub fn forward<B: Dim, S: Dim>(x: Tensor[B, S, H; T]) -> Tensor[B, S, H; T]
    where S > 0 {
        let lengths = fill<i32>([B], cast<i32>(S))
        let (out, _, _) = span<B, S>(x, zero_history<B>(), zero_state<B>(), lengths)
        return out
    }

    // One token for every row, each continuing its state.
    pub fn decode(x: Tensor[Batch, 1, H; T]) -> Tensor[Batch, 1, H; T] {
        let mixed = in_proj_qkv.forward(x)
        let window = concat(reshape(history, [Batch, Width - 1, Conv]), mixed, axis = 1)
        let convolved = causal_conv(mixed, reshape(history, [Batch, Width - 1, Conv]), conv_taps())
        history = reshape(window[:, 1:Width, :], [Batch, 1, Width - 1, Conv])
        let (q, k, v) = heads<Batch, 1>(cast<T>(silu(convolved)))
        let (decay, beta) = gates<Batch, 1>(x)
        let stepped = gated_delta_step(
            reshape(q, [Batch, KeyHeads, KeyDim]),
            reshape(k, [Batch, KeyHeads, KeyDim]),
            reshape(v, [Batch, ValueHeads, ValueDim]),
            reshape(decay, [Batch, ValueHeads]),
            reshape(beta, [Batch, ValueHeads]),
            recurrent,
            rsqrt(cast<f32>(KeyDim)),
        )
        recurrent = permute(stepped[:, 1:1 + KeyDim, :, :], [0, 2, 1, 3])
        return finish<Batch, 1>(
            reshape(cast<T>(stepped[:, 0:1, :, :]), [Batch, 1, ValueHeads, ValueDim]),
            x,
        )
    }

    // `S` tokens for every row: from zero at position 0, otherwise
    // continuing the rows' states.
    pub fn prefill<S: Dim>(x: Tensor[Batch, S, H; T], pos: i32) -> Tensor[Batch, S, H; T]
    where S > 0 {
        let fresh = pos == 0
        let start_history =
            if fresh { zero_history<Batch>() } else { reshape(history, [Batch, Width - 1, Conv]) }
        let start_state = if fresh { zero_state<Batch>() } else { recurrent }
        let lengths = fill<i32>([Batch], cast<i32>(S))
        let (out, ends, final) = span<Batch, S>(x, start_history, start_state, lengths)
        history = reshape(ends, [Batch, 1, Width - 1, Conv])
        recurrent = final
        return out
    }

    // `M` prompts from their first positions into rows `slots`, prompt `m`
    // the first `lengths[m]` of its `S` tokens: the padding after it neither
    // decays nor writes the state, and the history is its last inputs.
    pub fn prefill_slots<M: Dim, S: Dim>(
        x: Tensor[M, S, H; T],
        slots: Tensor[M; i32],
        lengths: Tensor[M; i32],
    ) -> Tensor[M, S, H; T]
    where
        M > 0,
        S > 0
    {
        let (out, ends, final) = span<M, S>(x, zero_history<M>(), zero_state<M>(), lengths)
        history = write_slots(history, reshape(ends, [M, 1, Width - 1, Conv]), slots, 0)
        recurrent = write_slots(recurrent, final, slots, 0)
        return out
    }

    // `S` tokens of `B` sequences from `start_history` and `start_state`,
    // sequence `b` the first `lengths[b]`: the outputs, the history after
    // each sequence's last token, and its final state.
    fn span<B: Dim, S: Dim>(
        x: Tensor[B, S, H; T],
        start_history: Tensor[B, Width - 1, Conv; T],
        start_state: Tensor[B, ValueHeads, KeyDim, ValueDim; f32],
        lengths: Tensor[B; i32],
    ) -> (Tensor[B, S, H; T], Tensor[B, Width -
        1, Conv; T], Tensor[B, ValueHeads, KeyDim, ValueDim; f32])
    where S > 0 {
        let mixed = in_proj_qkv.forward(x)
        let convolved = causal_conv(mixed, start_history, conv_taps())
        let (q, k, v) = heads<B, S>(cast<T>(silu(convolved)))
        let (decay, beta) = gates<B, S>(x)
        let steps = iota<i32>(S)
        let inside[b, s] = steps[s] < lengths[b]
        let kept_decay[b, s, h] = select(inside[b, s], decay[b, s, h], 0.0)
        let kept_beta[b, s, h] = select(inside[b, s], beta[b, s, h], 0.0)
        let ruled = gated_delta_rule(
            q,
            k,
            v,
            kept_decay,
            kept_beta,
            start_state,
            rsqrt(cast<f32>(KeyDim)),
        )
        let final = permute(ruled[:, S:S + KeyDim, :, :], [0, 2, 1, 3])
        // The last `Width - 1` inputs before each sequence's end, the
        // history's own where the sequence is shorter.
        let padded = concat(start_history, mixed, axis = 1)
        let taps = iota<i32>(Width - 1)
        let at[b, j] = cast<i64>(lengths[b] + taps[j])
        let ends[b, j, c] = padded[b, at[b, j], c]
        return (finish<B, S>(cast<T>(ruled[:, 0:S, :, :]), x), ends, final)
    }

    // The convolved projection split into L2-normalized query and key heads
    // and the value heads.
    fn heads<B: Dim, S: Dim>(
        convolved: Tensor[B, S, Conv; T],
    ) -> (Tensor[B, S, KeyHeads, KeyDim; T], Tensor[B, S, KeyHeads, KeyDim; T], Tensor[B, S, ValueHeads, ValueDim; T]) {
        let q = reshape(convolved[:, :, 0:KeyHeads * KeyDim], [B, S, KeyHeads, KeyDim])
        let k = reshape(
            convolved[:, :, KeyHeads * KeyDim:2 * KeyHeads * KeyDim],
            [B, S, KeyHeads, KeyDim],
        )
        let v = reshape(convolved[:, :, 2 * KeyHeads * KeyDim:Conv], [B, S, ValueHeads, ValueDim])
        return (unit<B, S>(q), unit<B, S>(k), v)
    }

    // Each head scaled to unit length, in f32.
    fn unit<B: Dim, S: Dim>(
        x: Tensor[B, S, KeyHeads, KeyDim; T],
    ) -> Tensor[B, S, KeyHeads, KeyDim; T] {
        let xf = cast<f32>(x)
        let squares[b, s, h] = sum[d] xf[b, s, h, d] * xf[b, s, h, d]
        let scaled[b, s, h, d] = xf[b, s, h, d] * rsqrt(squares[b, s, h] + 1e-6)
        return cast<T>(scaled)
    }

    // Each token's decay (log space) and write rate per value head, in f32.
    fn gates<B: Dim, S: Dim>(
        x: Tensor[B, S, H; T],
    ) -> (Tensor[B, S, ValueHeads; f32], Tensor[B, S, ValueHeads; f32]) {
        let a = cast<f32>(in_proj_a.forward(x))
        let rate = sigmoid(cast<f32>(in_proj_b.forward(x)))
        let shifted[b, s, h] = a[b, s, h] + cast<f32>(dt_bias[h])
        // softplus, stable for large inputs
        let soft[b, s, h] = max(shifted[b, s, h], 0.0) + log(1.0 + exp(-abs(shifted[b, s, h])))
        let decay[b, s, h] = -exp(cast<f32>(A_log[h])) * soft[b, s, h]
        return (decay, rate)
    }

    // The heads' outputs normalized, gated by `silu(z)`, projected back.
    fn finish<B: Dim, S: Dim>(
        out: Tensor[B, S, ValueHeads, ValueDim; T],
        x: Tensor[B, S, H; T],
    ) -> Tensor[B, S, H; T] {
        let z = reshape(in_proj_z.forward(x), [B, S, ValueHeads, ValueDim])
        return out_proj.forward(reshape(norm.forward(out, z), [B, S, ValueHeads * ValueDim]))
    }

    fn conv_taps() -> Tensor[Conv, Width; T] {
        return reshape(conv_weight, [Conv, Width])
    }

    fn zero_history<B: Dim>() -> Tensor[B, Width - 1, Conv; T] {
        return fill<T>([B, Width - 1, Conv], 0.0)
    }

    fn zero_state<B: Dim>() -> Tensor[B, ValueHeads, KeyDim, ValueDim; f32] {
        return fill<f32>([B, ValueHeads, KeyDim, ValueDim], 0.0)
    }
}

Open on GitHub

lib.linnet9.8 kB
linnet
// Qwen3.5, the text model (Qwen3.8-27B is this architecture): a hybrid
// decoder whose layers come in fours, three of linear attention (Gated
// DeltaNet, `crate.deltanet`) and then one of gated full attention
// (`crate.attention`), each followed by a SwiGLU MLP, with zero-centered
// RMS norms throughout and an untied output head. The checkpoint's vision
// tower and its multi-token-prediction layer are not part of it.
//
// The entries a decoder serves from: `forward` and `next_token` over whole
// sequences, `prefill`/`decode` for a batch at one position, and
// `prefill_slots`/`decode_rows` for a server's rows each at its own length.
// The full-attention layers keep key/value caches; the linear-attention
// layers keep a convolution history and a recurrent state per row.
module qwen3_5

use crate.attention::{GatedAttention}
use crate.deltanet::{GatedDeltaNet}
use crate.norm::{RmsNorm}
use std.nn.embedding::{Embedding}
use std.nn.linear::{Linear}
use std.nn.mlp::{SwiGlu}

pub block DeltaLayer<
    H: Dim,
    KeyHeads: Dim,
    ValueHeads: Dim,
    KeyDim: Dim,
    ValueDim: Dim,
    Conv: Dim,
    Width: Dim,
    Inner: Dim,
    Batch: Dim,
    T: Float,
>
where
    KeyHeads > 0,
    KeyDim > 0,
    ValueHeads % KeyHeads == 0,
    Conv == 2 * KeyHeads * KeyDim + ValueHeads * ValueDim,
    Width > 1,
    Batch > 0
{
    sub input_layernorm: RmsNorm<H, T>
    sub linear_attn: GatedDeltaNet<H, KeyHeads, ValueHeads, KeyDim, ValueDim, Conv, Width, Batch, T>
    sub post_attention_layernorm: RmsNorm<H, T>
    sub mlp: SwiGlu<H, Inner, T>

    pub fn forward<B: Dim, S: Dim>(x: Tensor[B, S, H; T]) -> Tensor[B, S, H; T]
    where S > 0 {
        return feed(x + linear_attn.forward(input_layernorm.forward(x)))
    }

    pub fn decode(x: Tensor[Batch, 1, H; T]) -> Tensor[Batch, 1, H; T] {
        return feed(x + linear_attn.decode(input_layernorm.forward(x)))
    }

    pub fn prefill<S: Dim>(x: Tensor[Batch, S, H; T], pos: i32) -> Tensor[Batch, S, H; T]
    where S > 0 {
        return feed(x + linear_attn.prefill(input_layernorm.forward(x), pos))
    }

    pub fn prefill_slots<M: Dim, S: Dim>(
        x: Tensor[M, S, H; T],
        slots: Tensor[M; i32],
        lengths: Tensor[M; i32],
    ) -> Tensor[M, S, H; T]
    where
        M > 0,
        S > 0
    {
        return feed(x + linear_attn.prefill_slots(input_layernorm.forward(x), slots, lengths))
    }

    fn feed<*S: Shape>(x: Tensor[*S, H; T]) -> Tensor[*S, H; T] {
        return x + mlp.forward(post_attention_layernorm.forward(x))
    }
}

pub block AttentionLayer<
    H: Dim,
    Heads: Dim,
    KvHeads: Dim,
    HeadDim: Dim,
    Inner: Dim,
    Batch: Dim,
    MaxSeq: Dim,
    T: Float,
>
where
    Heads > 0,
    KvHeads > 0,
    Heads % KvHeads == 0,
    (HeadDim / 4) % 2 == 0,
    MaxSeq > 0,
    Batch > 0
{
    sub input_layernorm: RmsNorm<H, T>
    sub self_attn: GatedAttention<H, Heads, KvHeads, HeadDim, Batch, MaxSeq, T>
    sub post_attention_layernorm: RmsNorm<H, T>
    sub mlp: SwiGlu<H, Inner, T>

    pub fn forward<B: Dim, S: Dim>(x: Tensor[B, S, H; T]) -> Tensor[B, S, H; T] {
        return feed(x + self_attn.forward(input_layernorm.forward(x)))
    }

    pub fn decode(x: Tensor[Batch, 1, H; T], pos: i32) -> Tensor[Batch, 1, H; T] {
        return feed(x + self_attn.decode(input_layernorm.forward(x), pos))
    }

    pub fn prefill<S: Dim>(x: Tensor[Batch, S, H; T], pos: i32) -> Tensor[Batch, S, H; T]
    where S > 0 {
        return feed(x + self_attn.prefill(input_layernorm.forward(x), pos))
    }

    pub fn decode_rows(
        x: Tensor[Batch, 1, H; T],
        positions: Tensor[Batch; i32],
    ) -> Tensor[Batch, 1, H; T] {
        return feed(x + self_attn.decode_rows(input_layernorm.forward(x), positions))
    }

    pub fn prefill_slots<M: Dim, S: Dim>(
        x: Tensor[M, S, H; T],
        slots: Tensor[M; i32],
    ) -> Tensor[M, S, H; T]
    where
        M > 0,
        S > 0
    {
        return feed(x + self_attn.prefill_slots(input_layernorm.forward(x), slots))
    }

    fn feed<*S: Shape>(x: Tensor[*S, H; T]) -> Tensor[*S, H; T] {
        return x + mlp.forward(post_attention_layernorm.forward(x))
    }
}

// Four layers: three of linear attention, then one of full attention
// (`full_attention_interval` 4). A `sub` array holds one block type, so the
// four are the repeating unit.
pub block LayerGroup<
    H: Dim,
    Heads: Dim,
    KvHeads: Dim,
    HeadDim: Dim,
    KeyHeads: Dim,
    ValueHeads: Dim,
    KeyDim: Dim,
    ValueDim: Dim,
    Conv: Dim,
    Width: Dim,
    Inner: Dim,
    Batch: Dim,
    MaxSeq: Dim,
    T: Float,
>
where
    Heads > 0,
    KvHeads > 0,
    Heads % KvHeads == 0,
    (HeadDim / 4) % 2 == 0,
    KeyHeads > 0,
    KeyDim > 0,
    ValueHeads % KeyHeads == 0,
    Conv == 2 * KeyHeads * KeyDim + ValueHeads * ValueDim,
    Width > 1,
    MaxSeq > 0,
    Batch > 0
{
    sub linear: [DeltaLayer<H, KeyHeads, ValueHeads, KeyDim, ValueDim, Conv, Width, Inner, Batch, T>; 3]
    sub full: AttentionLayer<H, Heads, KvHeads, HeadDim, Inner, Batch, MaxSeq, T>

    pub fn forward<B: Dim, S: Dim>(x: Tensor[B, S, H; T]) -> Tensor[B, S, H; T]
    where S > 0 {
        var y = x
        static for layer in linear {
            y = layer.forward(y)
        }
        return full.forward(y)
    }

    pub fn decode(x: Tensor[Batch, 1, H; T], pos: i32) -> Tensor[Batch, 1, H; T] {
        var y = x
        static for layer in linear {
            y = layer.decode(y)
        }
        return full.decode(y, pos)
    }

    pub fn prefill<S: Dim>(x: Tensor[Batch, S, H; T], pos: i32) -> Tensor[Batch, S, H; T]
    where S > 0 {
        var y = x
        static for layer in linear {
            y = layer.prefill(y, pos)
        }
        return full.prefill(y, pos)
    }

    pub fn decode_rows(
        x: Tensor[Batch, 1, H; T],
        positions: Tensor[Batch; i32],
    ) -> Tensor[Batch, 1, H; T] {
        var y = x
        static for layer in linear {
            y = layer.decode(y)
        }
        return full.decode_rows(y, positions)
    }

    pub fn prefill_slots<M: Dim, S: Dim>(
        x: Tensor[M, S, H; T],
        slots: Tensor[M; i32],
        lengths: Tensor[M; i32],
    ) -> Tensor[M, S, H; T]
    where
        M > 0,
        S > 0
    {
        var y = x
        static for layer in linear {
            y = layer.prefill_slots(y, slots, lengths)
        }
        return full.prefill_slots(y, slots)
    }
}

pub block Model<
    Vocab: Dim,
    H: Dim,
    Heads: Dim,
    KvHeads: Dim,
    HeadDim: Dim,
    KeyHeads: Dim,
    ValueHeads: Dim,
    KeyDim: Dim,
    ValueDim: Dim,
    Conv: Dim,
    Width: Dim,
    Inner: Dim,
    Groups: Dim,
    Batch: Dim,
    MaxSeq: Dim,
    T: Float = bf16,
>
where
    Heads > 0,
    KvHeads > 0,
    Heads % KvHeads == 0,
    (HeadDim / 4) % 2 == 0,
    KeyHeads > 0,
    KeyDim > 0,
    ValueHeads % KeyHeads == 0,
    Conv == 2 * KeyHeads * KeyDim + ValueHeads * ValueDim,
    Width > 1,
    MaxSeq > 0,
    Batch > 0
{
    sub embed_tokens: Embedding<Vocab, H, T>
    sub groups: [LayerGroup<H, Heads, KvHeads, HeadDim, KeyHeads, ValueHeads, KeyDim, ValueDim, Conv, Width, Inner, Batch, MaxSeq, T>; Groups]
    sub norm: RmsNorm<H, T>
    sub lm_head: Linear<H, Vocab, T>

    // Logits for every position.
    pub entry forward<B: Dim, S: Dim>(tokens: Tensor[B, S; i32]) -> Tensor[B, S, Vocab; T]
    where S > 0 {
        let rows = reshape(norm.forward(hidden_states(tokens)), [B * S, H])
        return reshape(lm_head.forward(rows), [B, S, Vocab])
    }

    // Logits for the last position only.
    pub entry next_token<B: Dim, S: Dim>(tokens: Tensor[B, S; i32]) -> Tensor[B, Vocab; T]
    where S > 0 {
        return logits(hidden_states(tokens)[:, S - 1, :])
    }

    // One new token per sequence at `pos`, continuing the caches and states.
    pub entry decode(token: Tensor[Batch, 1; i32], pos: i32) -> Tensor[Batch, Vocab; T] {
        var x = embed_tokens.forward(token)
        static for group in groups {
            x = group.decode(x, pos)
        }
        return logits(x[:, 0, :])
    }

    // A prompt of `S` tokens at `pos` in one pass (from zero at position 0);
    // the logits after its last token.
    pub entry prefill<S: Dim>(tokens: Tensor[Batch, S; i32], pos: i32) -> Tensor[Batch, Vocab; T]
    where S > 0 {
        var x = embed_tokens.forward(tokens)
        static for group in groups {
            x = group.prefill(x, pos)
        }
        return logits(x[:, S - 1, :])
    }

    // One new token per row, row `b` at `positions[b]` (continuous
    // batching). A row with no request computes along and is ignored.
    pub entry decode_rows(
        tokens: Tensor[Batch, 1; i32],
        positions: Tensor[Batch; i32],
    ) -> Tensor[Batch, Vocab; T] {
        var x = embed_tokens.forward(tokens)
        static for group in groups {
            x = group.decode_rows(x, positions)
        }
        return logits(x[:, 0, :])
    }

    // `M` requests' prompts into rows `slots`, prompt `m` the first
    // `lengths[m]` of its `S` tokens; the logits after each prompt's last
    // token. `decode_rows` continues row `slots[m]` at `lengths[m]`.
    pub entry prefill_slots<M: Dim, S: Dim>(
        tokens: Tensor[M, S; i32],
        slots: Tensor[M; i32],
        lengths: Tensor[M; i32],
    ) -> Tensor[M, Vocab; T]
    where
        M > 0,
        S > 0
    {
        var x = embed_tokens.forward(tokens)
        static for group in groups {
            x = group.prefill_slots(x, slots, lengths)
        }
        let last[b, h] = x[b, cast<i64>(lengths[b]) - 1, h]
        return logits(last)
    }

    fn logits<R: Dim>(x: Tensor[R, H; T]) -> Tensor[R, Vocab; T] {
        return lm_head.forward(norm.forward(x))
    }

    fn hidden_states<B: Dim, S: Dim>(tokens: Tensor[B, S; i32]) -> Tensor[B, S, H; T]
    where S > 0 {
        var x = embed_tokens.forward(tokens)
        static for group in groups {
            x = group.forward(x)
        }
        return x
    }
}

Open on GitHub

norm.linnet1.3 kB
linnet
// Qwen3.5's two normalizations.
module qwen3_5.norm

use std.nn.activations::{silu}

// RMS normalization around one: the checkpoint stores `w` and the layer
// scales by `1 + w`, in f32, rounding once at the end (Qwen3-Next's
// zero-centered norm).
pub block RmsNorm<H: Dim, T: Float> {
    param weight: Tensor[H; T]

    pub fn forward<*S: Shape>(x: Tensor[*S, H; T]) -> Tensor[*S, H; T] {
        let xf = cast<f32>(x)
        let mean_square[*s] = sum[h] xf[*s, h] * xf[*s, h] / cast<f32>(H)
        let scaled[*s, h] = xf[*s, h] * rsqrt(mean_square[*s] + 1e-6) * (1.0 + cast<f32>(weight[h]))
        return cast<T>(scaled)
    }
}

// The linear attention's output norm, gated: each head's output normalized,
// rounded, scaled by `weight` (around zero, not one), then times
// `silu(gate)` in f32.
pub block GatedRmsNorm<D: Dim, T: Float> {
    param weight: Tensor[D; T]

    pub fn forward<*S: Shape>(x: Tensor[*S, D; T], gate: Tensor[*S, D; T]) -> Tensor[*S, D; T] {
        let xf = cast<f32>(x)
        let mean_square[*s] = sum[d] xf[*s, d] * xf[*s, d] / cast<f32>(D)
        let normalized[*s, d] = xf[*s, d] * rsqrt(mean_square[*s] + 1e-6)
        let weighted = cast<f32>(cast<T>(normalized) * weight)
        return cast<T>(weighted * silu(cast<f32>(gate)))
    }
}

Open on GitHub

rope.linnet856 B
linnet
// Rotary tables for Qwen3.5's full-attention layers: only the first quarter
// of each head (`partial_rotary_factor` 0.25, 64 of 256) rotates, at a base
// of 10,000,000. The checkpoint's multimodal rope (`mrope_section`) gives a
// text token the same position on all three of its axes, which is this.
module qwen3_5.rope

pub const THETA: f32 = 10000000.0

// `(cos, sin)` of shape `[S, D]` for `D` rotating dimensions, each frequency
// repeated for both halves as `rope` expects.
pub fn tables<S: Dim, D: Dim, T: Float>(theta: f32) -> (Tensor[S, D; T], Tensor[S, D; T])
where D % 2 == 0 {
    let inv_freq[i] = exp(-(cast<f32>(iota<i64>(D / 2)[i]) * 2.0 / cast<f32>(D)) * log(theta))
    let angles[s, i] = cast<f32>(iota<i64>(S)[s]) * inv_freq[i]
    let full = concat(angles, angles, axis = -1)
    return (cast<T>(cos(full)), cast<T>(sin(full)))
}

Open on GitHub

model-00001-of-00018.safetensorsHugging Face ↗

model-00002-of-00018.safetensorsHugging Face ↗

model-00003-of-00018.safetensorsHugging Face ↗

model-00004-of-00018.safetensorsHugging Face ↗

model-00005-of-00018.safetensorsHugging Face ↗

model-00006-of-00018.safetensorsHugging Face ↗

model-00007-of-00018.safetensorsHugging Face ↗

model-00008-of-00018.safetensorsHugging Face ↗

model-00009-of-00018.safetensorsHugging Face ↗

model-00010-of-00018.safetensorsHugging Face ↗

model-00011-of-00018.safetensorsHugging Face ↗

model-00012-of-00018.safetensorsHugging Face ↗

model-00013-of-00018.safetensorsHugging Face ↗

model-00014-of-00018.safetensorsHugging Face ↗

model-00015-of-00018.safetensorsHugging Face ↗

model-00016-of-00018.safetensorsHugging Face ↗

model-00017-of-00018.safetensorsHugging Face ↗

model-00018-of-00018.safetensorsHugging Face ↗