Xenova HF Staff commited on
Commit
4e80716
·
verified ·
1 Parent(s): 3ab8080

sync 91d990483a17

Browse files
README.md CHANGED
@@ -18,22 +18,22 @@ See the [ONNX Runtime `MoE` contrib-operator spec](https://github.com/microsoft/
18
 
19
  ## Inputs
20
 
21
- | Name | Bind key | Logical dtype | Rank | Shape | Description | Presence |
22
  | --- | --- | --- | --- | --- | --- | --- |
23
- | `input` | `inputT` | `T` | — | — | Token activations, either 2D `(num_tokens, hidden_size)` or 3D `(batch_size, sequence_length, hidden_size)`. | required |
24
- | `router_probs` | `routerT` | `T` | `2` | — | 2D router logits of shape `(num_tokens, num_experts)`, where `num_tokens` is the product of every leading dimension of `input`. Despite the historical port name, the operator applies a full softmax before top-k selection. | required |
25
- | `fc1_experts_weights` | `fc1T` | `T` | `3` | — | 3D first-layer expert weights of shape `(num_experts, fusion_size * inter_size, hidden_size)`, where `fusion_size` is 2 for fused SwiGLU (`swiglu_fusion` 1 or 2) and 1 otherwise. | required |
26
- | `fc1_experts_bias` | `fc1BiasT` | `T` | `2` | — | Optional 2D FC1 bias of shape `(num_experts, fusion_size * inter_size)`. | optional |
27
- | `fc2_experts_weights` | `fc2T` | `T` | `3` | — | 3D second-layer expert weights of shape `(num_experts, hidden_size, inter_size)`. | required |
28
- | `fc2_experts_bias` | `fc2BiasT` | `T` | `2` | — | Optional 2D FC2 bias of shape `(num_experts, hidden_size)`, added per expert before that expert's routing weight is applied. | optional |
29
- | `fc3_experts_weights` | `fc3T` | `T` | `3` | — | Optional 3D third-layer expert weights of shape `(num_experts, inter_size, hidden_size)`. It supplies the separate linear operand for SwiGLU when `swiglu_fusion` is 0, or the multiplicative linear projection for SiLU gating. Other activations do not consume FC3. | optional |
30
- | `fc3_experts_bias` | `fc3BiasT` | `T` | `2` | — | Optional 2D FC3 bias of shape `(num_experts, inter_size)`. | optional |
31
 
32
  ## Outputs
33
 
34
- | Name | Bind key | Logical dtype | Rank | Shape | Description | Presence |
35
  | --- | --- | --- | --- | --- | --- | --- |
36
- | `output` | `outputT` | `T` | same as `input` | same as `input` | Routed expert output with the same shape as `input`. | required |
37
 
38
  ## Attributes
39
 
@@ -47,8 +47,8 @@ Attributes and default values (overridable per request):
47
  | `k` | `1` | Number of experts selected per token; the schema default is 1. |
48
  | `normalize_routing_weights` | `0` | Whether to normalize the selected routing weights; the schema default is 0. |
49
  | `swiglu_fusion` | `0` | 0 keeps the SwiGLU operands in separate FC1/FC3 GEMMs, 1 interleaves them in one FC1 row, and 2 concatenates them. The schema default is 0. |
50
- | `use_sparse_mixer` | `0` | Whether to use sparse-mixer routing. The standard default and only supported value is 0. |
51
  | `swiglu_limit` | — | Optional SwiGLU clamp limit; omission means no clamp. |
 
52
 
53
  ## Type constraints
54
 
@@ -56,9 +56,30 @@ Attributes and default values (overridable per request):
56
  | --- | --- |
57
  | `T` | `float32` |
58
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  ## Files
60
 
61
- - [`metadata.json`](build/webgpu/metadata.json) — kernel metadata (id, digests, provenance)
62
  - [`manifest.json`](build/webgpu/manifest.json) — the op contract (source of truth)
63
  - [`test.json`](build/webgpu/test.json) — correctness cases
64
  - [`bench.json`](build/webgpu/bench.json) — benchmark + tuning cases
@@ -66,6 +87,7 @@ Attributes and default values (overridable per request):
66
  - [`moe-ffn-gemv.wgsl.jinja`](build/webgpu/moe-ffn-gemv.wgsl.jinja)
67
  - [`moe-ffn-grouped.wgsl.jinja`](build/webgpu/moe-ffn-grouped.wgsl.jinja)
68
  - [`moe-ffn-stage.wgsl.jinja`](build/webgpu/moe-ffn-stage.wgsl.jinja)
 
69
  - [`moe-mix-stage.wgsl.jinja`](build/webgpu/moe-mix-stage.wgsl.jinja)
70
  - [`moe-output-gemv.wgsl.jinja`](build/webgpu/moe-output-gemv.wgsl.jinja)
71
  - [`moe-output-grouped.wgsl.jinja`](build/webgpu/moe-output-grouped.wgsl.jinja)
@@ -74,10 +96,14 @@ Attributes and default values (overridable per request):
74
 
75
  ## Use with `@huggingface/kernels`
76
 
77
- The loader derives every required output's shape and logical dtype from the manifest contract and this call.
78
- It then allocates the result tensors automatically.
 
 
 
79
 
80
  The `version: 1` option selects the published kernel contract; it is independent of any operator opset, contrib `since_version`, or model version.
 
81
 
82
  Replace each `*Data` placeholder with a typed array containing the corresponding input data.
83
 
 
18
 
19
  ## Inputs
20
 
21
+ | Name | Upstream name | Logical dtype | Rank | Shape | Description | Presence |
22
  | --- | --- | --- | --- | --- | --- | --- |
23
+ | `inputT` | `input` | `T` | — | — | Token activations, either 2D `(num_tokens, hidden_size)` or 3D `(batch_size, sequence_length, hidden_size)`. | required |
24
+ | `routerT` | `router_probs` | `T` | `2` | — | 2D router logits of shape `(num_tokens, num_experts)`, where `num_tokens` is the product of every leading dimension of `input`. A full softmax is applied before top-k selection. | required |
25
+ | `fc1T` | `fc1_experts_weights` | `T` | `3` | — | 3D first-layer expert weights of shape `(num_experts, fusion_size * inter_size, hidden_size)`, where `fusion_size` is 2 for fused SwiGLU (`swiglu_fusion` 1 or 2) and 1 otherwise. | required |
26
+ | `fc1BiasT` | `fc1_experts_bias` | `T` | `2` | — | Optional 2D FC1 bias of shape `(num_experts, fusion_size * inter_size)`. | optional |
27
+ | `fc2T` | `fc2_experts_weights` | `T` | `3` | — | 3D second-layer expert weights of shape `(num_experts, hidden_size, inter_size)`. | required |
28
+ | `fc2BiasT` | `fc2_experts_bias` | `T` | `2` | — | Optional 2D FC2 bias of shape `(num_experts, hidden_size)`, added per expert before that expert's routing weight is applied. | optional |
29
+ | `fc3T` | `fc3_experts_weights` | `T` | `3` | — | Optional 3D third-layer expert weights of shape `(num_experts, inter_size, hidden_size)`. It supplies the separate linear operand for SwiGLU when `swiglu_fusion` is 0, or the multiplicative linear projection for SiLU gating. Other activations do not consume FC3. | optional |
30
+ | `fc3BiasT` | `fc3_experts_bias` | `T` | `2` | — | Optional 2D FC3 bias of shape `(num_experts, inter_size)`. | optional |
31
 
32
  ## Outputs
33
 
34
+ | Name | Upstream name | Logical dtype | Rank | Shape | Description | Presence |
35
  | --- | --- | --- | --- | --- | --- | --- |
36
+ | `outputT` | `output` | `T` | same as `inputT` | same as `inputT` | Routed expert output with the same shape as `input`. | required |
37
 
38
  ## Attributes
39
 
 
47
  | `k` | `1` | Number of experts selected per token; the schema default is 1. |
48
  | `normalize_routing_weights` | `0` | Whether to normalize the selected routing weights; the schema default is 0. |
49
  | `swiglu_fusion` | `0` | 0 keeps the SwiGLU operands in separate FC1/FC3 GEMMs, 1 interleaves them in one FC1 row, and 2 concatenates them. The schema default is 0. |
 
50
  | `swiglu_limit` | — | Optional SwiGLU clamp limit; omission means no clamp. |
51
+ | `use_sparse_mixer` | `0` | Whether to use sparse-mixer routing. The standard default and only supported value is 0. |
52
 
53
  ## Type constraints
54
 
 
56
  | --- | --- |
57
  | `T` | `float32` |
58
 
59
+ ## Implementation variants
60
+
61
+ One implementation is selected per call from the device capabilities, the request shapes and the dtypes; these notes say what each one covers.
62
+
63
+ - `sgmat_grouped_routed_fc1plain_fc3none_fc2plain` — Expert-grouped f32 matrix projections load public weight layouts directly. Two statically interleaved accumulation chains limit rounding growth; the input tile is reused for result publication. Requires compatible subgroups, f32 fragments, workgroup limits, and complete weight tiles.
64
+ - `sgmat_grouped_routed_fc1plain_fc3none_fc2bias` — Expert-grouped f32 matrix projections load public weight layouts directly. Two statically interleaved accumulation chains limit rounding growth; the input tile is reused for result publication. Requires compatible subgroups, f32 fragments, workgroup limits, and complete weight tiles.
65
+ - `sgmat_grouped_routed_fc1plain_fc3plain_fc2plain` — Expert-grouped f32 matrix projections load public weight layouts directly. Two statically interleaved accumulation chains limit rounding growth; the input tile is reused for result publication. Requires compatible subgroups, f32 fragments, workgroup limits, and complete weight tiles.
66
+ - `sgmat_grouped_routed_fc1plain_fc3plain_fc2bias` — Expert-grouped f32 matrix projections load public weight layouts directly. Two statically interleaved accumulation chains limit rounding growth; the input tile is reused for result publication. Requires compatible subgroups, f32 fragments, workgroup limits, and complete weight tiles.
67
+ - `sgmat_grouped_routed_fc1plain_fc3biased_fc2plain` — Expert-grouped f32 matrix projections load public weight layouts directly. Two statically interleaved accumulation chains limit rounding growth; the input tile is reused for result publication. Requires compatible subgroups, f32 fragments, workgroup limits, and complete weight tiles.
68
+ - `sgmat_grouped_routed_fc1plain_fc3biased_fc2bias` — Expert-grouped f32 matrix projections load public weight layouts directly. Two statically interleaved accumulation chains limit rounding growth; the input tile is reused for result publication. Requires compatible subgroups, f32 fragments, workgroup limits, and complete weight tiles.
69
+ - `sgmat_grouped_routed_fc1bias_fc3none_fc2plain` — Expert-grouped f32 matrix projections load public weight layouts directly. Two statically interleaved accumulation chains limit rounding growth; the input tile is reused for result publication. Requires compatible subgroups, f32 fragments, workgroup limits, and complete weight tiles.
70
+ - `sgmat_grouped_routed_fc1bias_fc3none_fc2bias` — Expert-grouped f32 matrix projections load public weight layouts directly. Two statically interleaved accumulation chains limit rounding growth; the input tile is reused for result publication. Requires compatible subgroups, f32 fragments, workgroup limits, and complete weight tiles.
71
+ - `sgmat_grouped_routed_fc1bias_fc3plain_fc2plain` — Expert-grouped f32 matrix projections load public weight layouts directly. Two statically interleaved accumulation chains limit rounding growth; the input tile is reused for result publication. Requires compatible subgroups, f32 fragments, workgroup limits, and complete weight tiles.
72
+ - `sgmat_grouped_routed_fc1bias_fc3plain_fc2bias` — Expert-grouped f32 matrix projections load public weight layouts directly. Two statically interleaved accumulation chains limit rounding growth; the input tile is reused for result publication. Requires compatible subgroups, f32 fragments, workgroup limits, and complete weight tiles.
73
+ - `sgmat_grouped_routed_fc1bias_fc3biased_fc2plain` — Expert-grouped f32 matrix projections load public weight layouts directly. Two statically interleaved accumulation chains limit rounding growth; the input tile is reused for result publication. Requires compatible subgroups, f32 fragments, workgroup limits, and complete weight tiles.
74
+ - `sgmat_grouped_routed_fc1bias_fc3biased_fc2bias` — Expert-grouped f32 matrix projections load public weight layouts directly. Two statically interleaved accumulation chains limit rounding growth; the input tile is reused for result publication. Requires compatible subgroups, f32 fragments, workgroup limits, and complete weight tiles.
75
+
76
+ ## Device requirements
77
+
78
+ Some implementation variants require `subgroup-matrix` and `subgroups`. These are route-specific capabilities, not package-wide requirements; availability also depends on the request shape and dtype.
79
+
80
  ## Files
81
 
82
+ - [`metadata.json`](build/webgpu/metadata.json) — kernel metadata (id, digests, per-variant templates, provenance)
83
  - [`manifest.json`](build/webgpu/manifest.json) — the op contract (source of truth)
84
  - [`test.json`](build/webgpu/test.json) — correctness cases
85
  - [`bench.json`](build/webgpu/bench.json) — benchmark + tuning cases
 
87
  - [`moe-ffn-gemv.wgsl.jinja`](build/webgpu/moe-ffn-gemv.wgsl.jinja)
88
  - [`moe-ffn-grouped.wgsl.jinja`](build/webgpu/moe-ffn-grouped.wgsl.jinja)
89
  - [`moe-ffn-stage.wgsl.jinja`](build/webgpu/moe-ffn-stage.wgsl.jinja)
90
+ - [`moe-grouped-sgmat.wgsl.jinja`](build/webgpu/moe-grouped-sgmat.wgsl.jinja)
91
  - [`moe-mix-stage.wgsl.jinja`](build/webgpu/moe-mix-stage.wgsl.jinja)
92
  - [`moe-output-gemv.wgsl.jinja`](build/webgpu/moe-output-gemv.wgsl.jinja)
93
  - [`moe-output-grouped.wgsl.jinja`](build/webgpu/moe-output-grouped.wgsl.jinja)
 
96
 
97
  ## Use with `@huggingface/kernels`
98
 
99
+ ```sh
100
+ npm install --save-exact @huggingface/kernels@0.0.1-preview.2
101
+ ```
102
+
103
+ Required output shapes and logical data types are inferred from the supplied inputs and attributes; result tensors are allocated automatically.
104
 
105
  The `version: 1` option selects the published kernel contract; it is independent of any operator opset, contrib `since_version`, or model version.
106
+ It follows the `v1` branch as fixes land. To pin exact artifact bytes, pass a 40-character commit `revision` instead of `version`.
107
 
108
  Replace each `*Data` placeholder with a typed array containing the corresponding input data.
109
 
build/webgpu/bench.json CHANGED
@@ -1,5 +1,4 @@
1
  {
2
- "op": "com.microsoft.MoE",
3
  "tunableSpace": {
4
  "workgroupSize": [64, 128],
5
  "decodeLanes": [32],
@@ -72,7 +71,7 @@
72
  "outputs": { "outputT": { "dtype": "float32", "shape": [1, 1024] } },
73
  "bench": { "metrics": [{ "type": "bandwidth", "value": "args.topK * 3 * args.hidden * args.inter * 4" }] },
74
  "provenance": {
75
- "notes": "Scored as bandwidth, not gflops: a decode step reads whole expert weight matrices to produce one output row, so memory is its roofline and the compute peak is the wrong denominator. The prefill cases stay on gflops."
76
  }
77
  },
78
  {
@@ -105,7 +104,7 @@
105
  "outputs": { "outputT": { "dtype": "float32", "shape": [1, 1024] } },
106
  "bench": { "metrics": [{ "type": "bandwidth", "value": "args.topK * 2 * args.hidden * args.inter * 4" }] },
107
  "provenance": {
108
- "notes": "Scored as bandwidth, not gflops: a decode step reads whole expert weight matrices to produce one output row, so memory is its roofline and the compute peak is the wrong denominator. The prefill cases stay on gflops."
109
  }
110
  },
111
  {
@@ -138,7 +137,7 @@
138
  "outputs": { "outputT": { "dtype": "float32", "shape": [8, 1024] } },
139
  "bench": { "metrics": [{ "type": "bandwidth", "value": "args.topK * 3 * args.hidden * args.inter * 4" }] },
140
  "provenance": {
141
- "notes": "Scored as bandwidth, not gflops: a decode step reads whole expert weight matrices to produce one output row, so memory is its roofline and the compute peak is the wrong denominator. The prefill cases stay on gflops."
142
  }
143
  },
144
  {
@@ -369,7 +368,7 @@
369
  "name": "moe-f32-qwen3-moe-decode-t1-h2048-e32-k8-i768",
370
  "preset": "model",
371
  "provenance": {
372
- "notes": "Qwen3-MoE class defaults (hidden_size 2048, moe_intermediate_size 768, num_experts_per_tok 8); expert count capped at 32 of the config's 128 to keep each weight tensor under 512 MB. Scored as bandwidth, not gflops: a decode step reads whole expert weight matrices to produce one output row, so memory is its roofline and the compute peak is the wrong denominator. The prefill cases stay on gflops."
373
  },
374
  "vars": { "tokens": 1, "hidden": 2048, "experts": 32, "inter": 768, "topK": 8 },
375
  "attrs": { "k": 8, "activation_type": "swiglu", "swiglu_fusion": 2, "normalize_routing_weights": 1 },
@@ -405,7 +404,7 @@
405
  "name": "moe-f32-olmoe-decode-t1-h2048-e16-k8-i2048",
406
  "preset": "model",
407
  "provenance": {
408
- "notes": "OLMoE class defaults (hidden_size 2048, intermediate_size 2048, num_experts_per_tok 8); expert count capped at 16 of the config's 64. Scored as bandwidth, not gflops: a decode step reads whole expert weight matrices to produce one output row, so memory is its roofline and the compute peak is the wrong denominator. The prefill cases stay on gflops."
409
  },
410
  "vars": { "tokens": 1, "hidden": 2048, "experts": 16, "inter": 2048, "topK": 8 },
411
  "attrs": { "k": 8, "activation_type": "swiglu", "swiglu_fusion": 2, "normalize_routing_weights": 1 },
@@ -439,7 +438,7 @@
439
  "name": "moe-f32-qwen2-moe-decode-t1-h2048-e20-k4-i1408",
440
  "preset": "model",
441
  "provenance": {
442
- "notes": "Qwen2-MoE class defaults (hidden_size 2048, moe_intermediate_size 1408, num_experts_per_tok 4); expert count capped at 20 of the config's 60. Scored as bandwidth, not gflops: a decode step reads whole expert weight matrices to produce one output row, so memory is its roofline and the compute peak is the wrong denominator. The prefill cases stay on gflops."
443
  },
444
  "vars": { "tokens": 1, "hidden": 2048, "experts": 20, "inter": 1408, "topK": 4 },
445
  "attrs": { "k": 4, "activation_type": "swiglu", "swiglu_fusion": 2, "normalize_routing_weights": 1 },
@@ -468,6 +467,646 @@
468
  "bench": {
469
  "metrics": [{ "type": "gflops", "value": "2 * args.tokens * args.topK * args.hidden * args.inter * 3" }]
470
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
471
  }
472
  ]
473
  }
 
1
  {
 
2
  "tunableSpace": {
3
  "workgroupSize": [64, 128],
4
  "decodeLanes": [32],
 
71
  "outputs": { "outputT": { "dtype": "float32", "shape": [1, 1024] } },
72
  "bench": { "metrics": [{ "type": "bandwidth", "value": "args.topK * 3 * args.hidden * args.inter * 4" }] },
73
  "provenance": {
74
+ "notes": "The bandwidth metric counts one float32 read of the selected experts' three gated-MLP weight matrices."
75
  }
76
  },
77
  {
 
104
  "outputs": { "outputT": { "dtype": "float32", "shape": [1, 1024] } },
105
  "bench": { "metrics": [{ "type": "bandwidth", "value": "args.topK * 2 * args.hidden * args.inter * 4" }] },
106
  "provenance": {
107
+ "notes": "The bandwidth metric counts one float32 read of the selected expert's two ReLU-MLP weight matrices."
108
  }
109
  },
110
  {
 
137
  "outputs": { "outputT": { "dtype": "float32", "shape": [8, 1024] } },
138
  "bench": { "metrics": [{ "type": "bandwidth", "value": "args.topK * 3 * args.hidden * args.inter * 4" }] },
139
  "provenance": {
140
+ "notes": "The bandwidth metric counts one float32 read of the selected experts' three gated-MLP weight matrices."
141
  }
142
  },
143
  {
 
368
  "name": "moe-f32-qwen3-moe-decode-t1-h2048-e32-k8-i768",
369
  "preset": "model",
370
  "provenance": {
371
+ "notes": "Qwen3-MoE geometry uses hidden size 2,048, intermediate size 768, top-k 8, and 32 instantiated experts to keep each weight tensor below 512 MB. The bandwidth metric counts the selected experts' three float32 weight matrices."
372
  },
373
  "vars": { "tokens": 1, "hidden": 2048, "experts": 32, "inter": 768, "topK": 8 },
374
  "attrs": { "k": 8, "activation_type": "swiglu", "swiglu_fusion": 2, "normalize_routing_weights": 1 },
 
404
  "name": "moe-f32-olmoe-decode-t1-h2048-e16-k8-i2048",
405
  "preset": "model",
406
  "provenance": {
407
+ "notes": "OLMoE geometry uses hidden and intermediate sizes of 2,048, top-k 8, and 16 instantiated experts. The bandwidth metric counts the selected experts' three float32 weight matrices."
408
  },
409
  "vars": { "tokens": 1, "hidden": 2048, "experts": 16, "inter": 2048, "topK": 8 },
410
  "attrs": { "k": 8, "activation_type": "swiglu", "swiglu_fusion": 2, "normalize_routing_weights": 1 },
 
438
  "name": "moe-f32-qwen2-moe-decode-t1-h2048-e20-k4-i1408",
439
  "preset": "model",
440
  "provenance": {
441
+ "notes": "Qwen2-MoE geometry uses hidden size 2,048, intermediate size 1,408, top-k 4, and 20 instantiated experts. The bandwidth metric counts the selected experts' three float32 weight matrices."
442
  },
443
  "vars": { "tokens": 1, "hidden": 2048, "experts": 20, "inter": 1408, "topK": 4 },
444
  "attrs": { "k": 4, "activation_type": "swiglu", "swiglu_fusion": 2, "normalize_routing_weights": 1 },
 
467
  "bench": {
468
  "metrics": [{ "type": "gflops", "value": "2 * args.tokens * args.topK * args.hidden * args.inter * 3" }]
469
  }
470
+ },
471
+ {
472
+ "name": "boundary-matrix_silu_gate_fc3_bias_only",
473
+ "attrs": { "k": 1, "activation_type": "silu", "normalize_routing_weights": 0 },
474
+ "inputs": {
475
+ "inputT": {
476
+ "dtype": "float32",
477
+ "shape": [96, 64],
478
+ "data": { "kind": "fillFloat32", "sinStep": 0.23, "cosStep": 0.31, "scale": 0.5 }
479
+ },
480
+ "routerT": {
481
+ "dtype": "float32",
482
+ "shape": [96, 3],
483
+ "data": { "kind": "fillFloat32", "sinStep": 0.37, "cosStep": 0.25, "scale": 0.7 }
484
+ },
485
+ "fc1T": {
486
+ "dtype": "float32",
487
+ "shape": [3, 96, 64],
488
+ "data": { "kind": "fillFloat32", "sinStep": 0.11, "cosStep": 0.23, "scale": 0.18 }
489
+ },
490
+ "fc2T": {
491
+ "dtype": "float32",
492
+ "shape": [3, 64, 96],
493
+ "data": { "kind": "fillFloat32", "sinStep": 0.07, "cosStep": 0.41, "scale": 0.16 }
494
+ },
495
+ "fc3T": {
496
+ "dtype": "float32",
497
+ "shape": [3, 96, 64],
498
+ "data": { "kind": "fillFloat32", "sinStep": 0.13, "cosStep": 0.29, "scale": 0.15 }
499
+ },
500
+ "fc3BiasT": {
501
+ "dtype": "float32",
502
+ "shape": [3, 96],
503
+ "data": { "kind": "fillFloat32", "sinStep": 0.31, "cosStep": 0.23, "scale": 0.2 }
504
+ }
505
+ },
506
+ "outputs": { "outputT": { "dtype": "float32", "shape": [96, 64] } },
507
+ "preset": "model"
508
+ },
509
+ {
510
+ "name": "boundary-matrix_fc1plain_fc3none_fc2plain_relu",
511
+ "attrs": { "k": 2, "activation_type": "relu", "normalize_routing_weights": 1 },
512
+ "inputs": {
513
+ "inputT": {
514
+ "dtype": "float32",
515
+ "shape": [48, 64],
516
+ "data": { "kind": "fillFloat32", "sinStep": 0.09, "cosStep": 0.29, "scale": 0.4 }
517
+ },
518
+ "routerT": {
519
+ "dtype": "float32",
520
+ "shape": [48, 3],
521
+ "data": { "kind": "fillFloat32", "sinStep": 0.3, "cosStep": 0.24, "scale": 0.7 }
522
+ },
523
+ "fc1T": {
524
+ "dtype": "float32",
525
+ "shape": [3, 64, 64],
526
+ "data": { "kind": "fillFloat32", "sinStep": 0.12, "cosStep": 0.36, "scale": 0.15 }
527
+ },
528
+ "fc2T": {
529
+ "dtype": "float32",
530
+ "shape": [3, 64, 64],
531
+ "data": { "kind": "fillFloat32", "sinStep": 0.14, "cosStep": 0.26, "scale": 0.15 }
532
+ }
533
+ },
534
+ "outputs": { "outputT": { "dtype": "float32", "shape": [48, 64] } },
535
+ "preset": "model"
536
+ },
537
+ {
538
+ "name": "boundary-matrix_fc1plain_fc3none_fc2bias_swiglu2",
539
+ "attrs": {
540
+ "activation_type": "swiglu",
541
+ "activation_alpha": 1.702,
542
+ "activation_beta": 0.05,
543
+ "swiglu_fusion": 2,
544
+ "normalize_routing_weights": 1
545
+ },
546
+ "inputs": {
547
+ "inputT": {
548
+ "dtype": "float32",
549
+ "shape": [96, 128],
550
+ "data": { "kind": "fillFloat32", "sinStep": 0.107, "cosStep": 0.281, "scale": 0.4 }
551
+ },
552
+ "routerT": {
553
+ "dtype": "float32",
554
+ "shape": [96, 3],
555
+ "data": { "kind": "fillFloat32", "sinStep": 0.317, "cosStep": 0.231, "scale": 0.7 }
556
+ },
557
+ "fc1T": {
558
+ "dtype": "float32",
559
+ "shape": [3, 192, 128],
560
+ "data": { "kind": "fillFloat32", "sinStep": 0.137, "cosStep": 0.351, "scale": 0.15 }
561
+ },
562
+ "fc2T": {
563
+ "dtype": "float32",
564
+ "shape": [3, 128, 96],
565
+ "data": { "kind": "fillFloat32", "sinStep": 0.157, "cosStep": 0.251, "scale": 0.15 }
566
+ },
567
+ "fc2BiasT": {
568
+ "dtype": "float32",
569
+ "shape": [3, 128],
570
+ "data": { "kind": "fillFloat32", "sinStep": 0.277, "cosStep": 0.321, "scale": 0.2 }
571
+ }
572
+ },
573
+ "outputs": { "outputT": { "dtype": "float32", "shape": [96, 128] } },
574
+ "preset": "model"
575
+ },
576
+ {
577
+ "name": "boundary-matrix_fc1bias_fc3none_fc2plain_swiglu1",
578
+ "attrs": { "k": 2, "activation_type": "swiglu", "swiglu_fusion": 1, "normalize_routing_weights": 1 },
579
+ "inputs": {
580
+ "inputT": {
581
+ "dtype": "float32",
582
+ "shape": [2, 24, 64],
583
+ "data": { "kind": "fillFloat32", "sinStep": 0.124, "cosStep": 0.272, "scale": 0.4 }
584
+ },
585
+ "routerT": {
586
+ "dtype": "float32",
587
+ "shape": [48, 3],
588
+ "data": { "kind": "fillFloat32", "sinStep": 0.334, "cosStep": 0.222, "scale": 0.7 }
589
+ },
590
+ "fc1T": {
591
+ "dtype": "float32",
592
+ "shape": [3, 192, 64],
593
+ "data": { "kind": "fillFloat32", "sinStep": 0.154, "cosStep": 0.342, "scale": 0.15 }
594
+ },
595
+ "fc1BiasT": {
596
+ "dtype": "float32",
597
+ "shape": [3, 192],
598
+ "data": { "kind": "fillFloat32", "sinStep": 0.234, "cosStep": 0.422, "scale": 0.2 }
599
+ },
600
+ "fc2T": {
601
+ "dtype": "float32",
602
+ "shape": [3, 64, 96],
603
+ "data": { "kind": "fillFloat32", "sinStep": 0.174, "cosStep": 0.242, "scale": 0.15 }
604
+ }
605
+ },
606
+ "outputs": { "outputT": { "dtype": "float32", "shape": [2, 24, 64] } },
607
+ "preset": "model"
608
+ },
609
+ {
610
+ "name": "boundary-matrix_fc1bias_fc3none_fc2bias_swiglu2",
611
+ "attrs": { "activation_type": "swiglu", "swiglu_fusion": 2, "normalize_routing_weights": 1 },
612
+ "inputs": {
613
+ "inputT": {
614
+ "dtype": "float32",
615
+ "shape": [96, 128],
616
+ "data": { "kind": "fillFloat32", "sinStep": 0.141, "cosStep": 0.263, "scale": 0.4 }
617
+ },
618
+ "routerT": {
619
+ "dtype": "float32",
620
+ "shape": [96, 3],
621
+ "data": { "kind": "fillFloat32", "sinStep": 0.351, "cosStep": 0.213, "scale": 0.7 }
622
+ },
623
+ "fc1T": {
624
+ "dtype": "float32",
625
+ "shape": [3, 192, 128],
626
+ "data": { "kind": "fillFloat32", "sinStep": 0.171, "cosStep": 0.333, "scale": 0.15 }
627
+ },
628
+ "fc1BiasT": {
629
+ "dtype": "float32",
630
+ "shape": [3, 192],
631
+ "data": { "kind": "fillFloat32", "sinStep": 0.251, "cosStep": 0.413, "scale": 0.2 }
632
+ },
633
+ "fc2T": {
634
+ "dtype": "float32",
635
+ "shape": [3, 128, 96],
636
+ "data": { "kind": "fillFloat32", "sinStep": 0.191, "cosStep": 0.233, "scale": 0.15 }
637
+ },
638
+ "fc2BiasT": {
639
+ "dtype": "float32",
640
+ "shape": [3, 128],
641
+ "data": { "kind": "fillFloat32", "sinStep": 0.311, "cosStep": 0.303, "scale": 0.2 }
642
+ }
643
+ },
644
+ "outputs": { "outputT": { "dtype": "float32", "shape": [96, 128] } },
645
+ "preset": "model"
646
+ },
647
+ {
648
+ "name": "boundary-matrix_partial_tiles_gelu",
649
+ "attrs": { "activation_type": "gelu", "normalize_routing_weights": 1, "k": 2 },
650
+ "inputs": {
651
+ "inputT": {
652
+ "dtype": "float32",
653
+ "shape": [32, 64],
654
+ "data": { "kind": "fillFloat32", "sinStep": 0.173, "cosStep": 0.229, "scale": 0.4 }
655
+ },
656
+ "routerT": {
657
+ "dtype": "float32",
658
+ "shape": [32, 3],
659
+ "data": { "kind": "fillFloat32", "sinStep": 0.347, "cosStep": 0.163, "scale": 0.7 }
660
+ },
661
+ "fc1T": {
662
+ "dtype": "float32",
663
+ "shape": [3, 64, 64],
664
+ "data": { "kind": "fillFloat32", "sinStep": 0.199, "cosStep": 0.271, "scale": 0.15 }
665
+ },
666
+ "fc1BiasT": {
667
+ "dtype": "float32",
668
+ "shape": [3, 64],
669
+ "data": { "kind": "fillFloat32", "sinStep": 0.251, "cosStep": 0.413, "scale": 0.2 }
670
+ },
671
+ "fc2T": {
672
+ "dtype": "float32",
673
+ "shape": [3, 64, 64],
674
+ "data": { "kind": "fillFloat32", "sinStep": 0.241, "cosStep": 0.179, "scale": 0.15 }
675
+ },
676
+ "fc2BiasT": {
677
+ "dtype": "float32",
678
+ "shape": [3, 64],
679
+ "data": { "kind": "fillFloat32", "sinStep": 0.311, "cosStep": 0.303, "scale": 0.2 }
680
+ }
681
+ },
682
+ "outputs": { "outputT": { "dtype": "float32", "shape": [32, 64] } },
683
+ "preset": "model"
684
+ },
685
+ {
686
+ "name": "boundary-matrix_fc1plain_fc3plain_fc2plain_swiglu0",
687
+ "attrs": { "activation_type": "swiglu", "swiglu_fusion": 0, "normalize_routing_weights": 1 },
688
+ "inputs": {
689
+ "inputT": {
690
+ "dtype": "float32",
691
+ "shape": [2, 48, 128],
692
+ "data": { "kind": "fillFloat32", "sinStep": 0.158, "cosStep": 0.254, "scale": 0.4 }
693
+ },
694
+ "routerT": {
695
+ "dtype": "float32",
696
+ "shape": [96, 3],
697
+ "data": { "kind": "fillFloat32", "sinStep": 0.368, "cosStep": 0.204, "scale": 0.7 }
698
+ },
699
+ "fc1T": {
700
+ "dtype": "float32",
701
+ "shape": [3, 96, 128],
702
+ "data": { "kind": "fillFloat32", "sinStep": 0.188, "cosStep": 0.324, "scale": 0.15 }
703
+ },
704
+ "fc2T": {
705
+ "dtype": "float32",
706
+ "shape": [3, 128, 96],
707
+ "data": { "kind": "fillFloat32", "sinStep": 0.208, "cosStep": 0.224, "scale": 0.15 }
708
+ },
709
+ "fc3T": {
710
+ "dtype": "float32",
711
+ "shape": [3, 96, 128],
712
+ "data": { "kind": "fillFloat32", "sinStep": 0.228, "cosStep": 0.364, "scale": 0.15 }
713
+ }
714
+ },
715
+ "outputs": { "outputT": { "dtype": "float32", "shape": [2, 48, 128] } },
716
+ "preset": "model"
717
+ },
718
+ {
719
+ "name": "boundary-matrix_fc1plain_fc3plain_fc2bias_swiglu0",
720
+ "attrs": {
721
+ "k": 2,
722
+ "activation_type": "swiglu",
723
+ "activation_alpha": 1.702,
724
+ "activation_beta": 0.05,
725
+ "swiglu_fusion": 0,
726
+ "normalize_routing_weights": 1
727
+ },
728
+ "inputs": {
729
+ "inputT": {
730
+ "dtype": "float32",
731
+ "shape": [48, 64],
732
+ "data": { "kind": "fillFloat32", "sinStep": 0.175, "cosStep": 0.245, "scale": 0.4 }
733
+ },
734
+ "routerT": {
735
+ "dtype": "float32",
736
+ "shape": [48, 3],
737
+ "data": { "kind": "fillFloat32", "sinStep": 0.385, "cosStep": 0.195, "scale": 0.7 }
738
+ },
739
+ "fc1T": {
740
+ "dtype": "float32",
741
+ "shape": [3, 96, 64],
742
+ "data": { "kind": "fillFloat32", "sinStep": 0.205, "cosStep": 0.315, "scale": 0.15 }
743
+ },
744
+ "fc2T": {
745
+ "dtype": "float32",
746
+ "shape": [3, 64, 96],
747
+ "data": { "kind": "fillFloat32", "sinStep": 0.225, "cosStep": 0.215, "scale": 0.15 }
748
+ },
749
+ "fc2BiasT": {
750
+ "dtype": "float32",
751
+ "shape": [3, 64],
752
+ "data": { "kind": "fillFloat32", "sinStep": 0.345, "cosStep": 0.285, "scale": 0.2 }
753
+ },
754
+ "fc3T": {
755
+ "dtype": "float32",
756
+ "shape": [3, 96, 64],
757
+ "data": { "kind": "fillFloat32", "sinStep": 0.245, "cosStep": 0.355, "scale": 0.15 }
758
+ }
759
+ },
760
+ "outputs": { "outputT": { "dtype": "float32", "shape": [48, 64] } },
761
+ "preset": "model"
762
+ },
763
+ {
764
+ "name": "boundary-matrix_fc1plain_fc3biased_fc2plain_swiglu0",
765
+ "attrs": {
766
+ "activation_type": "swiglu",
767
+ "activation_alpha": 1.702,
768
+ "activation_beta": 0.05,
769
+ "swiglu_fusion": 0,
770
+ "normalize_routing_weights": 1
771
+ },
772
+ "inputs": {
773
+ "inputT": {
774
+ "dtype": "float32",
775
+ "shape": [96, 128],
776
+ "data": { "kind": "fillFloat32", "sinStep": 0.192, "cosStep": 0.236, "scale": 0.4 }
777
+ },
778
+ "routerT": {
779
+ "dtype": "float32",
780
+ "shape": [96, 3],
781
+ "data": { "kind": "fillFloat32", "sinStep": 0.402, "cosStep": 0.186, "scale": 0.7 }
782
+ },
783
+ "fc1T": {
784
+ "dtype": "float32",
785
+ "shape": [3, 96, 128],
786
+ "data": { "kind": "fillFloat32", "sinStep": 0.222, "cosStep": 0.306, "scale": 0.15 }
787
+ },
788
+ "fc2T": {
789
+ "dtype": "float32",
790
+ "shape": [3, 128, 96],
791
+ "data": { "kind": "fillFloat32", "sinStep": 0.242, "cosStep": 0.206, "scale": 0.15 }
792
+ },
793
+ "fc3T": {
794
+ "dtype": "float32",
795
+ "shape": [3, 96, 128],
796
+ "data": { "kind": "fillFloat32", "sinStep": 0.262, "cosStep": 0.346, "scale": 0.15 }
797
+ },
798
+ "fc3BiasT": {
799
+ "dtype": "float32",
800
+ "shape": [3, 96],
801
+ "data": { "kind": "fillFloat32", "sinStep": 0.322, "cosStep": 0.176, "scale": 0.2 }
802
+ }
803
+ },
804
+ "outputs": { "outputT": { "dtype": "float32", "shape": [96, 128] } },
805
+ "preset": "model"
806
+ },
807
+ {
808
+ "name": "boundary-matrix_fc1plain_fc3biased_fc2bias_swiglu0",
809
+ "attrs": { "k": 2, "activation_type": "swiglu", "swiglu_fusion": 0, "normalize_routing_weights": 1 },
810
+ "inputs": {
811
+ "inputT": {
812
+ "dtype": "float32",
813
+ "shape": [2, 24, 64],
814
+ "data": { "kind": "fillFloat32", "sinStep": 0.209, "cosStep": 0.227, "scale": 0.4 }
815
+ },
816
+ "routerT": {
817
+ "dtype": "float32",
818
+ "shape": [48, 3],
819
+ "data": { "kind": "fillFloat32", "sinStep": 0.419, "cosStep": 0.177, "scale": 0.7 }
820
+ },
821
+ "fc1T": {
822
+ "dtype": "float32",
823
+ "shape": [3, 96, 64],
824
+ "data": { "kind": "fillFloat32", "sinStep": 0.239, "cosStep": 0.297, "scale": 0.15 }
825
+ },
826
+ "fc2T": {
827
+ "dtype": "float32",
828
+ "shape": [3, 64, 96],
829
+ "data": { "kind": "fillFloat32", "sinStep": 0.259, "cosStep": 0.197, "scale": 0.15 }
830
+ },
831
+ "fc2BiasT": {
832
+ "dtype": "float32",
833
+ "shape": [3, 64],
834
+ "data": { "kind": "fillFloat32", "sinStep": 0.379, "cosStep": 0.267, "scale": 0.2 }
835
+ },
836
+ "fc3T": {
837
+ "dtype": "float32",
838
+ "shape": [3, 96, 64],
839
+ "data": { "kind": "fillFloat32", "sinStep": 0.279, "cosStep": 0.337, "scale": 0.15 }
840
+ },
841
+ "fc3BiasT": {
842
+ "dtype": "float32",
843
+ "shape": [3, 96],
844
+ "data": { "kind": "fillFloat32", "sinStep": 0.339, "cosStep": 0.167, "scale": 0.2 }
845
+ }
846
+ },
847
+ "outputs": { "outputT": { "dtype": "float32", "shape": [2, 24, 64] } },
848
+ "preset": "model"
849
+ },
850
+ {
851
+ "name": "boundary-matrix_fc1bias_fc3plain_fc2plain_swiglu0",
852
+ "attrs": {
853
+ "k": 2,
854
+ "activation_type": "swiglu",
855
+ "activation_alpha": 1.702,
856
+ "activation_beta": 0.05,
857
+ "swiglu_fusion": 0,
858
+ "normalize_routing_weights": 1
859
+ },
860
+ "inputs": {
861
+ "inputT": {
862
+ "dtype": "float32",
863
+ "shape": [48, 128],
864
+ "data": { "kind": "fillFloat32", "sinStep": 0.226, "cosStep": 0.218, "scale": 0.4 }
865
+ },
866
+ "routerT": {
867
+ "dtype": "float32",
868
+ "shape": [48, 3],
869
+ "data": { "kind": "fillFloat32", "sinStep": 0.436, "cosStep": 0.168, "scale": 0.7 }
870
+ },
871
+ "fc1T": {
872
+ "dtype": "float32",
873
+ "shape": [3, 96, 128],
874
+ "data": { "kind": "fillFloat32", "sinStep": 0.256, "cosStep": 0.288, "scale": 0.15 }
875
+ },
876
+ "fc1BiasT": {
877
+ "dtype": "float32",
878
+ "shape": [3, 96],
879
+ "data": { "kind": "fillFloat32", "sinStep": 0.336, "cosStep": 0.368, "scale": 0.2 }
880
+ },
881
+ "fc2T": {
882
+ "dtype": "float32",
883
+ "shape": [3, 128, 96],
884
+ "data": { "kind": "fillFloat32", "sinStep": 0.276, "cosStep": 0.188, "scale": 0.15 }
885
+ },
886
+ "fc3T": {
887
+ "dtype": "float32",
888
+ "shape": [3, 96, 128],
889
+ "data": { "kind": "fillFloat32", "sinStep": 0.296, "cosStep": 0.328, "scale": 0.15 }
890
+ }
891
+ },
892
+ "outputs": { "outputT": { "dtype": "float32", "shape": [48, 128] } },
893
+ "preset": "model"
894
+ },
895
+ {
896
+ "name": "boundary-matrix_fc1bias_fc3plain_fc2bias_swiglu0",
897
+ "attrs": { "activation_type": "swiglu", "swiglu_fusion": 0, "normalize_routing_weights": 1 },
898
+ "inputs": {
899
+ "inputT": {
900
+ "dtype": "float32",
901
+ "shape": [96, 64],
902
+ "data": { "kind": "fillFloat32", "sinStep": 0.243, "cosStep": 0.209, "scale": 0.4 }
903
+ },
904
+ "routerT": {
905
+ "dtype": "float32",
906
+ "shape": [96, 3],
907
+ "data": { "kind": "fillFloat32", "sinStep": 0.453, "cosStep": 0.159, "scale": 0.7 }
908
+ },
909
+ "fc1T": {
910
+ "dtype": "float32",
911
+ "shape": [3, 96, 64],
912
+ "data": { "kind": "fillFloat32", "sinStep": 0.273, "cosStep": 0.279, "scale": 0.15 }
913
+ },
914
+ "fc1BiasT": {
915
+ "dtype": "float32",
916
+ "shape": [3, 96],
917
+ "data": { "kind": "fillFloat32", "sinStep": 0.353, "cosStep": 0.359, "scale": 0.2 }
918
+ },
919
+ "fc2T": {
920
+ "dtype": "float32",
921
+ "shape": [3, 64, 96],
922
+ "data": { "kind": "fillFloat32", "sinStep": 0.293, "cosStep": 0.179, "scale": 0.15 }
923
+ },
924
+ "fc2BiasT": {
925
+ "dtype": "float32",
926
+ "shape": [3, 64],
927
+ "data": { "kind": "fillFloat32", "sinStep": 0.413, "cosStep": 0.249, "scale": 0.2 }
928
+ },
929
+ "fc3T": {
930
+ "dtype": "float32",
931
+ "shape": [3, 96, 64],
932
+ "data": { "kind": "fillFloat32", "sinStep": 0.313, "cosStep": 0.319, "scale": 0.15 }
933
+ }
934
+ },
935
+ "outputs": { "outputT": { "dtype": "float32", "shape": [96, 64] } },
936
+ "preset": "model"
937
+ },
938
+ {
939
+ "name": "boundary-matrix_fc1bias_fc3biased_fc2plain_swiglu0",
940
+ "attrs": { "k": 2, "activation_type": "swiglu", "swiglu_fusion": 0, "normalize_routing_weights": 1 },
941
+ "inputs": {
942
+ "inputT": {
943
+ "dtype": "float32",
944
+ "shape": [2, 24, 128],
945
+ "data": { "kind": "fillFloat32", "sinStep": 0.26, "cosStep": 0.2, "scale": 0.4 }
946
+ },
947
+ "routerT": {
948
+ "dtype": "float32",
949
+ "shape": [48, 3],
950
+ "data": { "kind": "fillFloat32", "sinStep": 0.47, "cosStep": 0.15, "scale": 0.7 }
951
+ },
952
+ "fc1T": {
953
+ "dtype": "float32",
954
+ "shape": [3, 96, 128],
955
+ "data": { "kind": "fillFloat32", "sinStep": 0.29, "cosStep": 0.27, "scale": 0.15 }
956
+ },
957
+ "fc1BiasT": {
958
+ "dtype": "float32",
959
+ "shape": [3, 96],
960
+ "data": { "kind": "fillFloat32", "sinStep": 0.37, "cosStep": 0.35, "scale": 0.2 }
961
+ },
962
+ "fc2T": {
963
+ "dtype": "float32",
964
+ "shape": [3, 128, 96],
965
+ "data": { "kind": "fillFloat32", "sinStep": 0.31, "cosStep": 0.17, "scale": 0.15 }
966
+ },
967
+ "fc3T": {
968
+ "dtype": "float32",
969
+ "shape": [3, 96, 128],
970
+ "data": { "kind": "fillFloat32", "sinStep": 0.33, "cosStep": 0.31, "scale": 0.15 }
971
+ },
972
+ "fc3BiasT": {
973
+ "dtype": "float32",
974
+ "shape": [3, 96],
975
+ "data": { "kind": "fillFloat32", "sinStep": 0.39, "cosStep": 0.14, "scale": 0.2 }
976
+ }
977
+ },
978
+ "outputs": { "outputT": { "dtype": "float32", "shape": [2, 24, 128] } },
979
+ "preset": "model"
980
+ },
981
+ {
982
+ "name": "boundary-matrix_fc1bias_fc3biased_fc2bias_swiglu0",
983
+ "attrs": {
984
+ "activation_type": "swiglu",
985
+ "activation_alpha": 1.702,
986
+ "activation_beta": 0.05,
987
+ "swiglu_fusion": 0,
988
+ "normalize_routing_weights": 1
989
+ },
990
+ "inputs": {
991
+ "inputT": {
992
+ "dtype": "float32",
993
+ "shape": [96, 64],
994
+ "data": { "kind": "fillFloat32", "sinStep": 0.277, "cosStep": 0.191, "scale": 0.4 }
995
+ },
996
+ "routerT": {
997
+ "dtype": "float32",
998
+ "shape": [96, 3],
999
+ "data": { "kind": "fillFloat32", "sinStep": 0.487, "cosStep": 0.141, "scale": 0.7 }
1000
+ },
1001
+ "fc1T": {
1002
+ "dtype": "float32",
1003
+ "shape": [3, 96, 64],
1004
+ "data": { "kind": "fillFloat32", "sinStep": 0.307, "cosStep": 0.261, "scale": 0.15 }
1005
+ },
1006
+ "fc1BiasT": {
1007
+ "dtype": "float32",
1008
+ "shape": [3, 96],
1009
+ "data": { "kind": "fillFloat32", "sinStep": 0.387, "cosStep": 0.341, "scale": 0.2 }
1010
+ },
1011
+ "fc2T": {
1012
+ "dtype": "float32",
1013
+ "shape": [3, 64, 96],
1014
+ "data": { "kind": "fillFloat32", "sinStep": 0.327, "cosStep": 0.161, "scale": 0.15 }
1015
+ },
1016
+ "fc2BiasT": {
1017
+ "dtype": "float32",
1018
+ "shape": [3, 64],
1019
+ "data": { "kind": "fillFloat32", "sinStep": 0.447, "cosStep": 0.231, "scale": 0.2 }
1020
+ },
1021
+ "fc3T": {
1022
+ "dtype": "float32",
1023
+ "shape": [3, 96, 64],
1024
+ "data": { "kind": "fillFloat32", "sinStep": 0.347, "cosStep": 0.301, "scale": 0.15 }
1025
+ },
1026
+ "fc3BiasT": {
1027
+ "dtype": "float32",
1028
+ "shape": [3, 96],
1029
+ "data": { "kind": "fillFloat32", "sinStep": 0.407, "cosStep": 0.131, "scale": 0.2 }
1030
+ }
1031
+ },
1032
+ "outputs": { "outputT": { "dtype": "float32", "shape": [96, 64] } },
1033
+ "preset": "model"
1034
+ },
1035
+ {
1036
+ "name": "boundary-matrix_identity_no_fc3",
1037
+ "attrs": { "k": 2, "activation_type": "identity", "normalize_routing_weights": 1 },
1038
+ "inputs": {
1039
+ "inputT": {
1040
+ "dtype": "float32",
1041
+ "shape": [48, 128],
1042
+ "data": { "kind": "fillFloat32", "sinStep": 0.181, "cosStep": 0.217, "scale": 0.4 }
1043
+ },
1044
+ "routerT": {
1045
+ "dtype": "float32",
1046
+ "shape": [48, 3],
1047
+ "data": { "kind": "fillFloat32", "sinStep": 0.391, "cosStep": 0.127, "scale": 0.7 }
1048
+ },
1049
+ "fc1T": {
1050
+ "dtype": "float32",
1051
+ "shape": [3, 64, 128],
1052
+ "data": { "kind": "fillFloat32", "sinStep": 0.211, "cosStep": 0.287, "scale": 0.15 }
1053
+ },
1054
+ "fc2T": {
1055
+ "dtype": "float32",
1056
+ "shape": [3, 128, 64],
1057
+ "data": { "kind": "fillFloat32", "sinStep": 0.231, "cosStep": 0.187, "scale": 0.15 }
1058
+ }
1059
+ },
1060
+ "outputs": { "outputT": { "dtype": "float32", "shape": [48, 128] } },
1061
+ "preset": "model"
1062
+ },
1063
+ {
1064
+ "name": "boundary-matrix_unaligned_hidden_inter",
1065
+ "attrs": { "activation_type": "silu", "normalize_routing_weights": 1, "k": 2 },
1066
+ "inputs": {
1067
+ "inputT": {
1068
+ "dtype": "float32",
1069
+ "shape": [2, 48, 64],
1070
+ "data": { "kind": "fillFloat32", "sinStep": 0.163, "cosStep": 0.239, "scale": 0.4 }
1071
+ },
1072
+ "routerT": {
1073
+ "dtype": "float32",
1074
+ "shape": [96, 3],
1075
+ "data": { "kind": "fillFloat32", "sinStep": 0.337, "cosStep": 0.173, "scale": 0.7 }
1076
+ },
1077
+ "fc1T": {
1078
+ "dtype": "float32",
1079
+ "shape": [3, 96, 64],
1080
+ "data": { "kind": "fillFloat32", "sinStep": 0.209, "cosStep": 0.281, "scale": 0.15 }
1081
+ },
1082
+ "fc1BiasT": {
1083
+ "dtype": "float32",
1084
+ "shape": [3, 96],
1085
+ "data": { "kind": "fillFloat32", "sinStep": 0.261, "cosStep": 0.423, "scale": 0.2 }
1086
+ },
1087
+ "fc2T": {
1088
+ "dtype": "float32",
1089
+ "shape": [3, 64, 96],
1090
+ "data": { "kind": "fillFloat32", "sinStep": 0.251, "cosStep": 0.189, "scale": 0.15 }
1091
+ },
1092
+ "fc2BiasT": {
1093
+ "dtype": "float32",
1094
+ "shape": [3, 64],
1095
+ "data": { "kind": "fillFloat32", "sinStep": 0.321, "cosStep": 0.313, "scale": 0.2 }
1096
+ },
1097
+ "fc3T": {
1098
+ "dtype": "float32",
1099
+ "shape": [3, 96, 64],
1100
+ "data": { "kind": "fillFloat32", "sinStep": 0.227, "cosStep": 0.197, "scale": 0.15 }
1101
+ },
1102
+ "fc3BiasT": {
1103
+ "dtype": "float32",
1104
+ "shape": [3, 96],
1105
+ "data": { "kind": "fillFloat32", "sinStep": 0.283, "cosStep": 0.359, "scale": 0.2 }
1106
+ }
1107
+ },
1108
+ "outputs": { "outputT": { "dtype": "float32", "shape": [2, 48, 64] } },
1109
+ "preset": "model"
1110
  }
1111
  ]
1112
  }
build/webgpu/manifest.json CHANGED
The diff for this file is too large to render. See raw diff
 
build/webgpu/metadata.json CHANGED
@@ -1,26 +1,79 @@
1
  {
2
  "name": "com.microsoft.MoE",
3
- "id": "_com_microsoft_moe_webgpu_9c7f8e1",
4
  "version": 1,
5
  "license": "Apache-2.0",
6
  "backend": { "type": "webgpu" },
7
  "digest": {
8
  "algorithm": "sha256",
9
  "files": {
10
- "bench.json": "Oq7rf+LMUf5McimJEVeHF3PM3CEHu7X/yCrhSJdoZq4=",
11
  "expert-group-slots.wgsl.jinja": "Ta+3H2FA1qRRzksdkwgKLZiO+AokmuM+B9JVN8cv1EQ=",
12
- "manifest.json": "1u7xRTHJz3qXke+74gJ0e7GZQdJ9SCJw/8gpaOkB9U4=",
13
- "moe-ffn-gemv.wgsl.jinja": "loPQLZYp+Lkz/jq0ML5cYbMFP+IWHlpULSiZcaOx33s=",
14
- "moe-ffn-grouped.wgsl.jinja": "m5rGC8aq9oW2TsQ2P3B2uV7Hm7u90DFORehlxFnSw5c=",
15
- "moe-ffn-stage.wgsl.jinja": "uIz5vVs9A8s5K5B2ZDj4fYDX3BGsWUfR8LxThIR95Tk=",
16
- "moe-mix-stage.wgsl.jinja": "+deuFyuBn04UeIX8Hk2/ntCHNfM1vgkNDTcsh3uXVdI=",
 
17
  "moe-output-gemv.wgsl.jinja": "5yj+BoTsRHiHW92Q8fVvtojdkY7r1jHupMX+FPVQMBk=",
18
  "moe-output-grouped.wgsl.jinja": "qzP5G/WtwF4zOBrtySCLTCBflHuvKlU8dk4/CRIzxe8=",
19
- "moe-output-stage.wgsl.jinja": "wtB+CtWxl8XChH4Y4/8LEBdHOznrdsUlAo65tmGEuWw=",
20
- "moe-route-stage.wgsl.jinja": "6uVRcLbpzp0Y1a8+jRTHOfvBhfCKpCoVju0dBDCVlgo=",
21
- "test.json": "T5bB5QuC2mzb2c0i+BQMaTbJjyyvFaL3ikEc4mFJBaw="
22
  }
23
  },
24
- "provenance": { "kernel": { "sha": "2e7068faf55e7f43df740015f6d1ee49391a41c5", "dirty": false } },
25
- "webgpu": { "manifestSpec": "1.0", "specialized": true, "opPath": "ops/com.microsoft.MoE" }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  }
 
1
  {
2
  "name": "com.microsoft.MoE",
3
+ "id": "_com_microsoft_moe_webgpu_7f9cfff",
4
  "version": 1,
5
  "license": "Apache-2.0",
6
  "backend": { "type": "webgpu" },
7
  "digest": {
8
  "algorithm": "sha256",
9
  "files": {
10
+ "bench.json": "dk7Y+0dMicwCWAn3BjOAjL0VyY0CqCabC1DuWCMDMis=",
11
  "expert-group-slots.wgsl.jinja": "Ta+3H2FA1qRRzksdkwgKLZiO+AokmuM+B9JVN8cv1EQ=",
12
+ "manifest.json": "CRRrdafIg5G627yy63AxYRy9pW6V5I93qKobNmgV6vs=",
13
+ "moe-ffn-gemv.wgsl.jinja": "2LCF3pr7u1cfGz0eUHwkSXr5JQbFgynU8IZS7wFnAuU=",
14
+ "moe-ffn-grouped.wgsl.jinja": "s1GymR5z3Kj0z7/NOdw6jFgA6D5LM4yfYISrcqmoy+Y=",
15
+ "moe-ffn-stage.wgsl.jinja": "NNU6+WY7JCjo8itC+pYuTQIwPbjX2PZb1P2WXNS3z/Y=",
16
+ "moe-grouped-sgmat.wgsl.jinja": "+bkbK0RGxiTY2JlmPLkynnUctqoUcRkdu5OMEl+d9nA=",
17
+ "moe-mix-stage.wgsl.jinja": "+xEc6boXboFbx+4AJ2/KWElM04LRuufmiIKfEK51/oo=",
18
  "moe-output-gemv.wgsl.jinja": "5yj+BoTsRHiHW92Q8fVvtojdkY7r1jHupMX+FPVQMBk=",
19
  "moe-output-grouped.wgsl.jinja": "qzP5G/WtwF4zOBrtySCLTCBflHuvKlU8dk4/CRIzxe8=",
20
+ "moe-output-stage.wgsl.jinja": "DqLA91ZM2ELUfyDxELZMxHqb0qgmDh/V6Q9k1wVkQH8=",
21
+ "moe-route-stage.wgsl.jinja": "aj6lm39GKmPH+aAkK7f4i5JpGdb47wPNURH4JQW/A1w=",
22
+ "test.json": "5rXwo178i5IeETKSYI6HhcwOn6rOVmXBaiy8J12coIk="
23
  }
24
  },
25
+ "provenance": { "kernel": { "sha": "91d990483a174128daf7673f3f37a7c890493ae1", "dirty": false } },
26
+ "webgpu": {
27
+ "manifestSpec": "2.0",
28
+ "variants": {
29
+ "split_routed_fc1plain_fc3none_fc2plain": ["moe-ffn-stage.wgsl.jinja", "moe-output-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
30
+ "gemv_routed_fc1plain_fc3none_fc2plain": ["moe-ffn-gemv.wgsl.jinja", "moe-output-gemv.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
31
+ "split_routed_fc1plain_fc3none_fc2bias": ["moe-ffn-stage.wgsl.jinja", "moe-output-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
32
+ "gemv_routed_fc1plain_fc3none_fc2bias": ["moe-ffn-gemv.wgsl.jinja", "moe-output-gemv.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
33
+ "split_routed_fc1plain_fc3plain_fc2plain": ["moe-ffn-stage.wgsl.jinja", "moe-output-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
34
+ "gemv_routed_fc1plain_fc3plain_fc2plain": ["moe-ffn-gemv.wgsl.jinja", "moe-output-gemv.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
35
+ "split_routed_fc1plain_fc3plain_fc2bias": ["moe-ffn-stage.wgsl.jinja", "moe-output-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
36
+ "gemv_routed_fc1plain_fc3plain_fc2bias": ["moe-ffn-gemv.wgsl.jinja", "moe-output-gemv.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
37
+ "split_routed_fc1plain_fc3biased_fc2plain": ["moe-ffn-stage.wgsl.jinja", "moe-output-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
38
+ "gemv_routed_fc1plain_fc3biased_fc2plain": ["moe-ffn-gemv.wgsl.jinja", "moe-output-gemv.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
39
+ "split_routed_fc1plain_fc3biased_fc2bias": ["moe-ffn-stage.wgsl.jinja", "moe-output-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
40
+ "gemv_routed_fc1plain_fc3biased_fc2bias": ["moe-ffn-gemv.wgsl.jinja", "moe-output-gemv.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
41
+ "split_routed_fc1bias_fc3none_fc2plain": ["moe-ffn-stage.wgsl.jinja", "moe-output-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
42
+ "gemv_routed_fc1bias_fc3none_fc2plain": ["moe-ffn-gemv.wgsl.jinja", "moe-output-gemv.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
43
+ "split_routed_fc1bias_fc3none_fc2bias": ["moe-ffn-stage.wgsl.jinja", "moe-output-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
44
+ "gemv_routed_fc1bias_fc3none_fc2bias": ["moe-ffn-gemv.wgsl.jinja", "moe-output-gemv.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
45
+ "split_routed_fc1bias_fc3plain_fc2plain": ["moe-ffn-stage.wgsl.jinja", "moe-output-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
46
+ "gemv_routed_fc1bias_fc3plain_fc2plain": ["moe-ffn-gemv.wgsl.jinja", "moe-output-gemv.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
47
+ "split_routed_fc1bias_fc3plain_fc2bias": ["moe-ffn-stage.wgsl.jinja", "moe-output-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
48
+ "gemv_routed_fc1bias_fc3plain_fc2bias": ["moe-ffn-gemv.wgsl.jinja", "moe-output-gemv.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
49
+ "split_routed_fc1bias_fc3biased_fc2plain": ["moe-ffn-stage.wgsl.jinja", "moe-output-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
50
+ "gemv_routed_fc1bias_fc3biased_fc2plain": ["moe-ffn-gemv.wgsl.jinja", "moe-output-gemv.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
51
+ "split_routed_fc1bias_fc3biased_fc2bias": ["moe-ffn-stage.wgsl.jinja", "moe-output-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
52
+ "gemv_routed_fc1bias_fc3biased_fc2bias": ["moe-ffn-gemv.wgsl.jinja", "moe-output-gemv.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
53
+ "sgmat_grouped_routed_fc1plain_fc3none_fc2plain": ["expert-group-slots.wgsl.jinja", "moe-grouped-sgmat.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
54
+ "grouped_routed_fc1plain_fc3none_fc2plain": ["expert-group-slots.wgsl.jinja", "moe-ffn-grouped.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-output-grouped.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
55
+ "sgmat_grouped_routed_fc1plain_fc3none_fc2bias": ["expert-group-slots.wgsl.jinja", "moe-grouped-sgmat.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
56
+ "grouped_routed_fc1plain_fc3none_fc2bias": ["expert-group-slots.wgsl.jinja", "moe-ffn-grouped.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-output-grouped.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
57
+ "sgmat_grouped_routed_fc1plain_fc3plain_fc2plain": ["expert-group-slots.wgsl.jinja", "moe-grouped-sgmat.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
58
+ "grouped_routed_fc1plain_fc3plain_fc2plain": ["expert-group-slots.wgsl.jinja", "moe-ffn-grouped.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-output-grouped.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
59
+ "sgmat_grouped_routed_fc1plain_fc3plain_fc2bias": ["expert-group-slots.wgsl.jinja", "moe-grouped-sgmat.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
60
+ "grouped_routed_fc1plain_fc3plain_fc2bias": ["expert-group-slots.wgsl.jinja", "moe-ffn-grouped.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-output-grouped.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
61
+ "sgmat_grouped_routed_fc1plain_fc3biased_fc2plain": ["expert-group-slots.wgsl.jinja", "moe-grouped-sgmat.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
62
+ "grouped_routed_fc1plain_fc3biased_fc2plain": ["expert-group-slots.wgsl.jinja", "moe-ffn-grouped.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-output-grouped.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
63
+ "sgmat_grouped_routed_fc1plain_fc3biased_fc2bias": ["expert-group-slots.wgsl.jinja", "moe-grouped-sgmat.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
64
+ "grouped_routed_fc1plain_fc3biased_fc2bias": ["expert-group-slots.wgsl.jinja", "moe-ffn-grouped.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-output-grouped.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
65
+ "sgmat_grouped_routed_fc1bias_fc3none_fc2plain": ["expert-group-slots.wgsl.jinja", "moe-grouped-sgmat.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
66
+ "grouped_routed_fc1bias_fc3none_fc2plain": ["expert-group-slots.wgsl.jinja", "moe-ffn-grouped.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-output-grouped.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
67
+ "sgmat_grouped_routed_fc1bias_fc3none_fc2bias": ["expert-group-slots.wgsl.jinja", "moe-grouped-sgmat.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
68
+ "grouped_routed_fc1bias_fc3none_fc2bias": ["expert-group-slots.wgsl.jinja", "moe-ffn-grouped.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-output-grouped.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
69
+ "sgmat_grouped_routed_fc1bias_fc3plain_fc2plain": ["expert-group-slots.wgsl.jinja", "moe-grouped-sgmat.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
70
+ "grouped_routed_fc1bias_fc3plain_fc2plain": ["expert-group-slots.wgsl.jinja", "moe-ffn-grouped.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-output-grouped.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
71
+ "sgmat_grouped_routed_fc1bias_fc3plain_fc2bias": ["expert-group-slots.wgsl.jinja", "moe-grouped-sgmat.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
72
+ "grouped_routed_fc1bias_fc3plain_fc2bias": ["expert-group-slots.wgsl.jinja", "moe-ffn-grouped.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-output-grouped.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
73
+ "sgmat_grouped_routed_fc1bias_fc3biased_fc2plain": ["expert-group-slots.wgsl.jinja", "moe-grouped-sgmat.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
74
+ "grouped_routed_fc1bias_fc3biased_fc2plain": ["expert-group-slots.wgsl.jinja", "moe-ffn-grouped.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-output-grouped.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
75
+ "sgmat_grouped_routed_fc1bias_fc3biased_fc2bias": ["expert-group-slots.wgsl.jinja", "moe-grouped-sgmat.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-route-stage.wgsl.jinja"],
76
+ "grouped_routed_fc1bias_fc3biased_fc2bias": ["expert-group-slots.wgsl.jinja", "moe-ffn-grouped.wgsl.jinja", "moe-mix-stage.wgsl.jinja", "moe-output-grouped.wgsl.jinja", "moe-route-stage.wgsl.jinja"]
77
+ }
78
+ }
79
  }
build/webgpu/moe-ffn-gemv.wgsl.jinja CHANGED
@@ -41,7 +41,7 @@ fn swiglu(gate_in: f32, up_in: f32) -> f32 {
41
  let gate = gate_in;
42
  let up = up_in;
43
  {% endif %}
44
- return gate / (1.0 + exp(-params.activationAlpha * gate)) * (up + params.activationBeta);
45
  }
46
  {% endif %}
47
 
 
41
  let gate = gate_in;
42
  let up = up_in;
43
  {% endif %}
44
+ return gate / (1.0 + exp(-{{ matrixActivationAlpha if matrixActivationAlpha is defined else "params.activationAlpha" }} * gate)) * (up + {{ matrixActivationBeta if matrixActivationBeta is defined else "params.activationBeta" }});
45
  }
46
  {% endif %}
47
 
build/webgpu/moe-ffn-grouped.wgsl.jinja CHANGED
@@ -1,13 +1,8 @@
1
  {{ env.wgsl.resourceDeclarations }}
2
 
3
- // FC1 (and, where the schema splits them, FC3) projection plus the activation, on the grouped
4
- // schedule. The other two schedules read a whole expert weight matrix once per routed slot,
5
- // which at prefill is the entire cost: for hidden 1024 / inter 512 that is 2 MB of weights per
6
- // slot, re-read for every slot the expert serves.
7
- //
8
- // Here the group stage has already sorted the chunk's slots by expert, so a tile of MTILE rows
9
- // shares ONE expert -- and therefore one weight tile, staged in workgroup memory and reused by
10
- // every row.
11
  const HIDDEN: u32 = {{ hidden }}u;
12
  const INTER: u32 = {{ inter }}u;
13
  const FC1_ROWS: u32 = {{ fc1Rows }}u;
@@ -52,7 +47,7 @@ fn swiglu(gate_in: f32, up_in: f32) -> f32 {
52
  let gate = gate_in;
53
  let up = up_in;
54
  {% endif %}
55
- return gate / (1.0 + exp(-params.activationAlpha * gate)) * (up + params.activationBeta);
56
  }
57
  {% endif %}
58
 
 
1
  {{ env.wgsl.resourceDeclarations }}
2
 
3
+ // Grouped FC1 projection (plus FC3 when present) and activation. Routed slots are
4
+ // sorted by expert before this pass, so every row in an MTILE tile uses the same
5
+ // expert and reuses its staged weight tile.
 
 
 
 
 
6
  const HIDDEN: u32 = {{ hidden }}u;
7
  const INTER: u32 = {{ inter }}u;
8
  const FC1_ROWS: u32 = {{ fc1Rows }}u;
 
47
  let gate = gate_in;
48
  let up = up_in;
49
  {% endif %}
50
+ return gate / (1.0 + exp(-{{ matrixActivationAlpha if matrixActivationAlpha is defined else "params.activationAlpha" }} * gate)) * (up + {{ matrixActivationBeta if matrixActivationBeta is defined else "params.activationBeta" }});
51
  }
52
  {% endif %}
53
 
build/webgpu/moe-ffn-stage.wgsl.jinja CHANGED
@@ -64,17 +64,16 @@ fn swiglu(gate_in: f32, up_in: f32) -> f32 {
64
  let gate = gate_in;
65
  let up = up_in;
66
  {% endif %}
67
- return gate / (1.0 + exp(-params.activationAlpha * gate)) * (up + params.activationBeta);
68
  }
69
  {% endif %}
70
 
71
 
72
  @compute @workgroup_size(WG, 1, 1)
73
- fn main(@builtin(global_invocation_id) gid: vec3<u32>,
74
- @builtin(num_workgroups) nwg: vec3<u32>) {
75
- // 2D-folded flat index: gid.y carries the high bits past the maxComputeWorkgroupsPerDimension
76
- // workgroup-per-dimension dispatch limit. Reduces to gid.x when nwg.y == 1.
77
- let index = gid.x + gid.y * nwg.x * WG;
78
  let total = params.tokenCount * TOP_K * INTER;
79
  if (index >= total) {
80
  return;
 
64
  let gate = gate_in;
65
  let up = up_in;
66
  {% endif %}
67
+ return gate / (1.0 + exp(-{{ matrixActivationAlpha if matrixActivationAlpha is defined else "params.activationAlpha" }} * gate)) * (up + {{ matrixActivationBeta if matrixActivationBeta is defined else "params.activationBeta" }});
68
  }
69
  {% endif %}
70
 
71
 
72
  @compute @workgroup_size(WG, 1, 1)
73
+ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
74
+ // 2D-folded flat index: gid.y carries the high bits past the per-axis dispatch fold width.
75
+ // Reduces to gid.x when the dispatch does not fold.
76
+ let index = gid.x + gid.y * {{ DISPATCH_FOLD_WIDTH }}u * WG;
 
77
  let total = params.tokenCount * TOP_K * INTER;
78
  if (index >= total) {
79
  return;
build/webgpu/moe-grouped-sgmat.wgsl.jinja ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ enable subgroups;
2
+ {% if pinSubgroupSize32 %}
3
+ enable subgroup_size_control;
4
+ {% endif %}
5
+ enable chromium_experimental_subgroup_matrix;
6
+ diagnostic(off, chromium.subgroup_matrix_uniformity);
7
+
8
+ {{ env.wgsl.resourceDeclarations }}
9
+ {% set ffn = matrixStage == "ffn" %}
10
+ {% set second = ffn and (hasFc3 or activation == "swiglu") %}
11
+ {% set reduction = hidden if ffn else inter %}
12
+ {% set columns = inter if ffn else hidden %}
13
+ {% if ffn and activation == "gelu" %}fn tanh_safe(x: f32) -> f32 {
14
+ if (x > 10.0) { return 1.0; }
15
+ if (x < -10.0) { return -1.0; }
16
+ return tanh(x);
17
+ }
18
+
19
+ fn gelu_tanh(v: f32) -> f32 {
20
+ return 0.5 * v * (1.0 + tanh_safe(0.7978845608028654 * (v + 0.044715 * v * v * v)));
21
+ }{% endif %}
22
+ {% if ffn %}{% if activation == "swiglu" %}
23
+
24
+ fn swiglu(gate_in: f32, up_in: f32) -> f32 {
25
+ {% if hasSwigluLimit %}
26
+ // swiglu_limit clamps the gate operand from above and the linear operand to [-limit, limit]
27
+ // before the product; when the attribute is absent no clamp is applied.
28
+ let gate = min(gate_in, {{ swigluLimit }});
29
+ let up = clamp(up_in, -({{ swigluLimit }}), {{ swigluLimit }});
30
+ {% else %}
31
+ let gate = gate_in;
32
+ let up = up_in;
33
+ {% endif %}
34
+ return gate / (1.0 + exp(-{{ matrixActivationAlpha if matrixActivationAlpha is defined else "params.activationAlpha" }} * gate)) * (up + {{ matrixActivationBeta if matrixActivationBeta is defined else "params.activationBeta" }});
35
+ }
36
+ {% endif %}
37
+ {% endif %}
38
+ const HIDDEN: u32 = {{ hidden }}u;
39
+ const INTER: u32 = {{ inter }}u;
40
+ {% if ffn %}
41
+ const TOP_K: u32 = {{ topK }}u;
42
+ const FC1_ROWS: u32 = {{ fc1Rows }}u;
43
+ {% endif %}
44
+ const TILE_K: u32 = 32u;
45
+ const SUB_ROWS: u32 = 16u;
46
+ const SUB_COLS: u32 = {{ 16 if second else 32 }}u;
47
+ // Two independent f32 chains reduce rounding growth over long reductions.
48
+ // Jinja assigns alternating 8-wide steps to the chains at compile time.
49
+ // Each subgroup publishes four result banks per chain after A is dead.
50
+ // The two row groups reuse those banks with barriers on both sides.
51
+ var<workgroup> tile_A: array<f32, {{ (groupedSgmatSharedBytes / 4) | int }}>;
52
+
53
+ {% macro weight_offset(c) %}
54
+ {% if ffn %}
55
+ {% set column = "n_base + subtile_idx * SUB_COLS + " ~ ((c % 2) * 8 if second else c * 8) ~ "u" %}
56
+ {% if second and c >= 2 and hasFc3 %}
57
+ (expert * INTER + {{ column }}) * HIDDEN + kidx + step
58
+ {% else %}
59
+ (expert * FC1_ROWS + {% if second and not hasFc3 and swigluFusion == 1 %}({{ column }}) * 2u{% if c >= 2 %} + 1u{% endif %}{% else %}{{ column }}{% if second and c >= 2 %} + INTER{% endif %}{% endif %}) * HIDDEN + kidx + step
60
+ {% endif %}
61
+ {% else %}
62
+ (expert * HIDDEN + n_base + subtile_idx * SUB_COLS + {{ c * 8 }}u) * INTER + kidx + step
63
+ {% endif %}
64
+ {% endmacro %}
65
+ @compute @workgroup_size(128){{ " @subgroup_size(32)" if pinSubgroupSize32 else "" }}
66
+ fn main(@builtin(workgroup_id) wid: vec3<u32>,
67
+ @builtin(local_invocation_index) local_idx: u32,
68
+ @builtin(subgroup_invocation_id) lane: u32,
69
+ @builtin(subgroup_size) sg_size: u32) {
70
+ if (wid.x >= tile_meta[0]) { return; }
71
+ let expert = tile_meta[1u + wid.x * 3u];
72
+ let slice_base = tile_meta[2u + wid.x * 3u];
73
+ let rows = tile_meta[3u + wid.x * 3u];
74
+ let a_row = local_idx / 4u;
75
+ let a_slot = select(0u, slot_list[slice_base + a_row], a_row < rows);
76
+ let subtile_id = local_idx / sg_size;
77
+ let subtile_idy = subtile_id % 2u;
78
+ let subtile_idx = subtile_id / 2u;
79
+ let n_base = wid.y * {{ 32 if second else 64 }}u;
80
+ {% for r in range(2) %}{% for c in range(4) %}{% for chain in range(2) %}
81
+ var mat{{ ["C","D","E","F"][chain] }}{{ r }}{{ c }}: subgroup_matrix_result<f32, 8, 8>;
82
+ {% endfor %}{% endfor %}{% endfor %}
83
+ for (var kidx = 0u; kidx < {{ reduction }}u; kidx += TILE_K) {
84
+ for (var i = 0u; i < 8u; i++) {
85
+ let k = kidx + (local_idx % 4u) * 8u + i;
86
+ var v = 0.0;
87
+ if (a_row < rows) {
88
+ {% if ffn %}
89
+ v = input[(params.tokenOffset + a_slot / TOP_K) * HIDDEN + k];
90
+ {% else %}
91
+ v = hidden_act[a_slot * INTER + k];
92
+ {% endif %}
93
+ }
94
+ tile_A[a_row * TILE_K + (local_idx % 4u) * 8u + i] = v;
95
+ }
96
+ workgroupBarrier();
97
+ {% for stepIndex in range(4) %}
98
+ {
99
+ let step = {{ stepIndex * 8 }}u;
100
+
101
+ {% for r in range(2) %}
102
+ let matA{{ r }} = subgroupMatrixLoad<subgroup_matrix_left<f32, 8, 8>, row_major>(&tile_A, (subtile_idy * SUB_ROWS + {{ r * 8 }}u) * TILE_K + step, TILE_K);
103
+ {% endfor %}
104
+ {% for c in range(4) %}
105
+ {% set source = ("fc3_experts_weights" if second and c >= 2 and hasFc3 else "fc1_experts_weights") if ffn else "fc2_experts_weights" %}
106
+ {% set stride = hidden * (2 if second and not hasFc3 and swigluFusion == 1 else 1) if ffn else inter %}
107
+ let matB{{ c }} = subgroupMatrixLoad<subgroup_matrix_right<f32, 8, 8>, col_major>(&{{ source }}, {{ weight_offset(c) }}, {{ stride }}u);
108
+ {% endfor %}
109
+ {% for r in range(2) %}{% for c in range(4) %}
110
+ mat{{ ["C","D","E","F"][stepIndex % 2] }}{{ r }}{{ c }} = subgroupMatrixMultiplyAccumulate(matA{{ r }}, matB{{ c }}, mat{{ ["C","D","E","F"][stepIndex % 2] }}{{ r }}{{ c }});
111
+ {% endfor %}{% endfor %}
112
+
113
+ }
114
+ {% endfor %}
115
+ workgroupBarrier();
116
+ }
117
+ let row = lane / 4u;
118
+ let lane_col = (lane % 4u) * 2u;
119
+ {% for r in range(2) %}
120
+ {% for c in range(4) %}
121
+ {% for chain in range(2) %}
122
+ subgroupMatrixStore<row_major>(&tile_A, {{ chain * 1024 }}u + (subtile_id * 4u + {{ c }}u) * 64u, mat{{ ["C","D","E","F"][chain] }}{{ r }}{{ c }}, 8u);
123
+ {% endfor %}
124
+ {% endfor %}
125
+ workgroupBarrier();
126
+ {
127
+ let m = subtile_idy * SUB_ROWS + {{ r * 8 }}u + row;
128
+ if (m < rows) {
129
+ let out_slot = slot_list[slice_base + m];
130
+ {% for c in range(2 if second else 4) %}{% for half in range(2) %}
131
+ {
132
+ let n = n_base + subtile_idx * SUB_COLS + {{ c * 8 + half }}u + lane_col;
133
+ let col = n;
134
+ if (col < {{ columns }}u) {
135
+ let bank = (subtile_id * 4u + {{ c }}u) * 64u + row * 8u + lane_col + {{ half }}u;
136
+ {% if ffn %}
137
+ let a = ((tile_A[bank] + tile_A[1024u + bank])){% if hasFc1Bias %} + fc1_experts_bias[expert * FC1_ROWS + {{ "col * 2u" if second and not hasFc3 and swigluFusion == 1 else "col" }}]{% endif %};
138
+ {% if second %}
139
+ let b = ((tile_A[bank + 2u * 64u] + tile_A[1024u + bank + 2u * 64u])){% if hasFc3 and hasFc3Bias %} + fc3_experts_bias[expert * INTER + col]{% elif not hasFc3 and hasFc1Bias %} + fc1_experts_bias[expert * FC1_ROWS + {{ "col * 2u + 1u" if swigluFusion == 1 else "INTER + col" }}]{% endif %};
140
+ {% endif %}
141
+ {% if activation == "swiglu" %}
142
+ let value = swiglu(a, b);
143
+ {% else %}
144
+ {% if activation == "relu" %}
145
+ let activated = max(a, 0.0);
146
+ {% elif activation == "gelu" %}
147
+ let activated = gelu_tanh(a);
148
+ {% elif activation == "silu" %}
149
+ let activated = a / (1.0 + exp(-a));
150
+ {% else %}
151
+ let activated = a;
152
+ {% endif %}
153
+ let value = activated{% if hasFc3 %} * b{% endif %};
154
+ {% endif %}
155
+ hidden_act[out_slot * INTER + col] = value;
156
+ {% else %}
157
+ slot_out[out_slot * HIDDEN + col] = ((tile_A[bank] + tile_A[1024u + bank])){% if hasFc2Bias %} + fc2_experts_bias[expert * HIDDEN + col]{% endif %};
158
+ {% endif %}
159
+ }
160
+ }
161
+ {% endfor %}{% endfor %}
162
+ }
163
+ }
164
+ {% if r == 0 %} workgroupBarrier();{% endif %}
165
+ {% endfor %}
166
+ }
build/webgpu/moe-mix-stage.wgsl.jinja CHANGED
@@ -10,11 +10,10 @@ const TOP_K: u32 = {{ topK }}u;
10
  const WG: u32 = {{ workgroupSize }}u;
11
 
12
  @compute @workgroup_size(WG, 1, 1)
13
- fn main(@builtin(global_invocation_id) gid: vec3<u32>,
14
- @builtin(num_workgroups) nwg: vec3<u32>) {
15
- // 2D-folded flat index: gid.y carries the high bits past the maxComputeWorkgroupsPerDimension
16
- // workgroup-per-dimension dispatch limit. Reduces to gid.x when nwg.y == 1.
17
- let index = gid.x + gid.y * nwg.x * WG;
18
  let total = params.tokenCount * HIDDEN;
19
  if (index >= total) {
20
  return;
 
10
  const WG: u32 = {{ workgroupSize }}u;
11
 
12
  @compute @workgroup_size(WG, 1, 1)
13
+ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
14
+ // 2D-folded flat index: gid.y carries the high bits past the per-axis dispatch fold width.
15
+ // Reduces to gid.x when the dispatch does not fold.
16
+ let index = gid.x + gid.y * {{ DISPATCH_FOLD_WIDTH }}u * WG;
 
17
  let total = params.tokenCount * HIDDEN;
18
  if (index >= total) {
19
  return;
build/webgpu/moe-output-stage.wgsl.jinja CHANGED
@@ -8,11 +8,10 @@ const TOP_K: u32 = {{ topK }}u;
8
  const WG: u32 = {{ workgroupSize }}u;
9
 
10
  @compute @workgroup_size(WG, 1, 1)
11
- fn main(@builtin(global_invocation_id) gid: vec3<u32>,
12
- @builtin(num_workgroups) nwg: vec3<u32>) {
13
- // 2D-folded flat index: gid.y carries the high bits past the maxComputeWorkgroupsPerDimension
14
- // workgroup-per-dimension dispatch limit. Reduces to gid.x when nwg.y == 1.
15
- let index = gid.x + gid.y * nwg.x * WG;
16
  let total = params.tokenCount * HIDDEN;
17
  if (index >= total) {
18
  return;
 
8
  const WG: u32 = {{ workgroupSize }}u;
9
 
10
  @compute @workgroup_size(WG, 1, 1)
11
+ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
12
+ // 2D-folded flat index: gid.y carries the high bits past the per-axis dispatch fold width.
13
+ // Reduces to gid.x when the dispatch does not fold.
14
+ let index = gid.x + gid.y * {{ DISPATCH_FOLD_WIDTH }}u * WG;
 
15
  let total = params.tokenCount * HIDDEN;
16
  if (index >= total) {
17
  return;
build/webgpu/moe-route-stage.wgsl.jinja CHANGED
@@ -10,10 +10,9 @@ const TOP_K: u32 = {{ topK }}u;
10
  const WG: u32 = {{ workgroupSize }}u;
11
 
12
  @compute @workgroup_size(WG, 1, 1)
13
- fn main(@builtin(global_invocation_id) gid: vec3<u32>,
14
- @builtin(num_workgroups) nwg: vec3<u32>) {
15
  // gid.y carries the high bits past the per-dimension dispatch limit.
16
- let token = gid.x + gid.y * nwg.x * WG;
17
  if (token >= TOKENS) {
18
  return;
19
  }
 
10
  const WG: u32 = {{ workgroupSize }}u;
11
 
12
  @compute @workgroup_size(WG, 1, 1)
13
+ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
 
14
  // gid.y carries the high bits past the per-dimension dispatch limit.
15
+ let token = gid.x + gid.y * {{ DISPATCH_FOLD_WIDTH }}u * WG;
16
  if (token >= TOKENS) {
17
  return;
18
  }
build/webgpu/test.json CHANGED
@@ -1,12 +1,11 @@
1
  {
2
- "op": "com.microsoft.MoE",
3
  "cases": [
4
  {
5
  "name": "relu_top1_no_bias",
6
  "provenance": {
7
  "source": "onnxruntime/docs/ContribOperators.md#com.microsoft.MoE",
8
  "test": "default activation_type (relu), one expert per token",
9
- "notes": "The schema's default activation and nothing optional: no biases, no FC3. Every other case is a delta from this one."
10
  },
11
  "attrs": { "normalize_routing_weights": 1 },
12
  "inputs": {
@@ -38,7 +37,7 @@
38
  "provenance": {
39
  "source": "onnxruntime/docs/ContribOperators.md#com.microsoft.MoE",
40
  "test": "activation_type gelu with an FC1 bias",
41
- "notes": "The tanh-approximate GELU used by ONNX Runtime's MoE kernel, over an FC1 that carries its own per-expert bias. The bias joins the projection before the activation, which is what separates it from a bias on the output side."
42
  },
43
  "attrs": { "k": 1, "activation_type": "gelu", "normalize_routing_weights": 0 },
44
  "inputs": {
@@ -149,7 +148,7 @@
149
  "provenance": {
150
  "source": "onnxruntime/docs/ContribOperators.md#com.microsoft.MoE",
151
  "test": "all three optional biases present at once",
152
- "notes": "FC1, FC2 and FC3 biases together on the provider-defined SiLU gated path."
153
  },
154
  "attrs": { "k": 2, "activation_type": "silu", "normalize_routing_weights": 1 },
155
  "inputs": {
@@ -461,7 +460,7 @@
461
  "provenance": {
462
  "source": "onnxruntime/docs/ContribOperators.md#com.microsoft.MoE",
463
  "test": "com.microsoft.MoE optional-input combination",
464
- "notes": "Each optional input changes the binding layout, so every combination of FC1 bias, FC3 (with or without its own bias) and FC2 bias is a distinct variant. This case is the one that selects fc1bias / no FC3 / fc2bias; without it that variant would ship unexercised."
465
  },
466
  "attrs": { "k": 1, "activation_type": "gelu", "normalize_routing_weights": 0 },
467
  "inputs": {
@@ -587,7 +586,7 @@
587
  "provenance": {
588
  "source": "onnxruntime/docs/ContribOperators.md#com.microsoft.MoE",
589
  "test": "com.microsoft.MoE optional-input combination",
590
- "notes": "Each optional input changes the binding layout, so every combination of FC1 bias, FC3 (with or without its own bias) and FC2 bias is a distinct variant. This case is the one that selects no FC1 bias / FC3 with bias / fc2bias; without it that variant would ship unexercised."
591
  },
592
  "attrs": { "k": 2, "activation_type": "silu", "normalize_routing_weights": 1 },
593
  "inputs": {
@@ -634,7 +633,7 @@
634
  "provenance": {
635
  "source": "onnxruntime/docs/ContribOperators.md#com.microsoft.MoE",
636
  "test": "com.microsoft.MoE optional-input combination",
637
- "notes": "Each optional input changes the binding layout, so every combination of FC1 bias, FC3 (with or without its own bias) and FC2 bias is a distinct variant. This case is the one that selects fc1bias / FC3 without bias / no FC2 bias; without it that variant would ship unexercised."
638
  },
639
  "attrs": { "k": 1, "activation_type": "silu", "normalize_routing_weights": 0 },
640
  "inputs": {
@@ -676,7 +675,7 @@
676
  "provenance": {
677
  "source": "onnxruntime/docs/ContribOperators.md#com.microsoft.MoE",
678
  "test": "com.microsoft.MoE optional-input combination",
679
- "notes": "Each optional input changes the binding layout, so every combination of FC1 bias, FC3 (with or without its own bias) and FC2 bias is a distinct variant. This case is the one that selects fc1bias / FC3 without bias / fc2bias; without it that variant would ship unexercised."
680
  },
681
  "attrs": { "k": 2, "activation_type": "silu", "normalize_routing_weights": 1 },
682
  "inputs": {
@@ -723,7 +722,7 @@
723
  "provenance": {
724
  "source": "onnxruntime/contrib_ops/cpu/moe/moe_cpu.cc",
725
  "test": "full-softmax routing and equal-probability pair ordering",
726
- "notes": "Equal zero logits become probabilities [0.5, 0.5]. ONNX Runtime selects the higher expert index on the tie; that expert emits 6, and the non-normalized route probability scales the result to exactly 3. This also exercises the schema defaults k=1, activation_type=relu, and normalize_routing_weights=0."
727
  },
728
  "inputs": {
729
  "inputT": { "dtype": "float32", "shape": [1, 1], "data": { "kind": "values", "values": [1.0] } },
@@ -745,7 +744,7 @@
745
  "provenance": {
746
  "source": "onnxruntime/docs/ContribOperators.md#com.microsoft.MoE",
747
  "test": "com.microsoft.MoE optional-input combination",
748
- "notes": "Each optional input changes the binding layout, so every combination of FC1 bias, FC3 (with or without its own bias) and FC2 bias is a distinct variant. This case is the one that selects fc1bias / FC3 with bias / no FC2 bias; without it that variant would ship unexercised."
749
  },
750
  "attrs": { "k": 1, "activation_type": "silu", "normalize_routing_weights": 0 },
751
  "inputs": {
@@ -790,7 +789,7 @@
790
  {
791
  "name": "deep_reduction_fc1plain_fc3none_fc2plain_identity",
792
  "provenance": {
793
- "notes": "A 128-long reduction on both projections, deep enough for the cooperative schedule; the 4-wide cases above stay on the one-thread-per-column schedule."
794
  },
795
  "attrs": { "activation_type": "identity", "normalize_routing_weights": 1 },
796
  "inputs": {
@@ -820,7 +819,7 @@
820
  {
821
  "name": "deep_reduction_fc1plain_fc3none_fc2bias_swiglu2",
822
  "provenance": {
823
- "notes": "A 128-long reduction on both projections, deep enough for the cooperative schedule; the 4-wide cases above stay on the one-thread-per-column schedule."
824
  },
825
  "attrs": {
826
  "k": 2,
@@ -862,7 +861,7 @@
862
  {
863
  "name": "deep_reduction_fc1bias_fc3none_fc2plain_swiglu1",
864
  "provenance": {
865
- "notes": "A 128-long reduction on both projections, deep enough for the cooperative schedule; the 4-wide cases above stay on the one-thread-per-column schedule."
866
  },
867
  "attrs": { "k": 2, "activation_type": "swiglu", "swiglu_fusion": 1, "normalize_routing_weights": 1 },
868
  "inputs": {
@@ -897,7 +896,7 @@
897
  {
898
  "name": "deep_reduction_fc1bias_fc3none_fc2bias_swiglu2",
899
  "provenance": {
900
- "notes": "A 128-long reduction on both projections, deep enough for the cooperative schedule; the 4-wide cases above stay on the one-thread-per-column schedule."
901
  },
902
  "attrs": { "activation_type": "swiglu", "swiglu_fusion": 2, "normalize_routing_weights": 1 },
903
  "inputs": {
@@ -937,7 +936,7 @@
937
  {
938
  "name": "deep_reduction_fc1plain_fc3plain_fc2plain_swiglu0",
939
  "provenance": {
940
- "notes": "A 128-long reduction on both projections, deep enough for the cooperative schedule; the 4-wide cases above stay on the one-thread-per-column schedule."
941
  },
942
  "attrs": { "activation_type": "swiglu", "swiglu_fusion": 0, "normalize_routing_weights": 1 },
943
  "inputs": {
@@ -972,7 +971,7 @@
972
  {
973
  "name": "deep_reduction_fc1plain_fc3plain_fc2bias_swiglu0",
974
  "provenance": {
975
- "notes": "A 128-long reduction on both projections, deep enough for the cooperative schedule; the 4-wide cases above stay on the one-thread-per-column schedule."
976
  },
977
  "attrs": {
978
  "k": 2,
@@ -1019,7 +1018,7 @@
1019
  {
1020
  "name": "deep_reduction_fc1plain_fc3biased_fc2plain_swiglu0",
1021
  "provenance": {
1022
- "notes": "A 128-long reduction on both projections, deep enough for the cooperative schedule; the 4-wide cases above stay on the one-thread-per-column schedule."
1023
  },
1024
  "attrs": {
1025
  "activation_type": "swiglu",
@@ -1065,7 +1064,7 @@
1065
  {
1066
  "name": "deep_reduction_fc1plain_fc3biased_fc2bias_swiglu0",
1067
  "provenance": {
1068
- "notes": "A 128-long reduction on both projections, deep enough for the cooperative schedule; the 4-wide cases above stay on the one-thread-per-column schedule."
1069
  },
1070
  "attrs": { "k": 2, "activation_type": "swiglu", "swiglu_fusion": 0, "normalize_routing_weights": 1 },
1071
  "inputs": {
@@ -1110,7 +1109,7 @@
1110
  {
1111
  "name": "deep_reduction_fc1bias_fc3plain_fc2plain_swiglu0",
1112
  "provenance": {
1113
- "notes": "A 128-long reduction on both projections, deep enough for the cooperative schedule; the 4-wide cases above stay on the one-thread-per-column schedule."
1114
  },
1115
  "attrs": {
1116
  "k": 2,
@@ -1157,7 +1156,7 @@
1157
  {
1158
  "name": "deep_reduction_fc1bias_fc3plain_fc2bias_swiglu0",
1159
  "provenance": {
1160
- "notes": "A 128-long reduction on both projections, deep enough for the cooperative schedule; the 4-wide cases above stay on the one-thread-per-column schedule."
1161
  },
1162
  "attrs": { "activation_type": "swiglu", "swiglu_fusion": 0, "normalize_routing_weights": 1 },
1163
  "inputs": {
@@ -1202,7 +1201,7 @@
1202
  {
1203
  "name": "deep_reduction_fc1bias_fc3biased_fc2plain_swiglu0",
1204
  "provenance": {
1205
- "notes": "A 128-long reduction on both projections, deep enough for the cooperative schedule; the 4-wide cases above stay on the one-thread-per-column schedule."
1206
  },
1207
  "attrs": { "k": 2, "activation_type": "swiglu", "swiglu_fusion": 0, "normalize_routing_weights": 1 },
1208
  "inputs": {
@@ -1247,7 +1246,7 @@
1247
  {
1248
  "name": "deep_reduction_fc1bias_fc3biased_fc2bias_swiglu0",
1249
  "provenance": {
1250
- "notes": "A 128-long reduction on both projections, deep enough for the cooperative schedule; the 4-wide cases above stay on the one-thread-per-column schedule."
1251
  },
1252
  "attrs": {
1253
  "activation_type": "swiglu",
@@ -1303,7 +1302,7 @@
1303
  {
1304
  "name": "identity_activation_top1",
1305
  "provenance": {
1306
- "notes": "activation_type identity passes the FC1 projection through unchanged, which is the only declared activation with no other case."
1307
  },
1308
  "attrs": { "activation_type": "identity" },
1309
  "inputs": {
@@ -1514,7 +1513,7 @@
1514
  {
1515
  "name": "grouped_prefill_partial_tiles_gelu",
1516
  "provenance": {
1517
- "notes": "Half the routed slots the grouped schedule used to demand, so most of every expert's tile is padding: the tiles are 32 rows and 3 experts share only 64 slots. Covers the band the slot threshold opened, where the store guard drops more rows than it keeps."
1518
  },
1519
  "attrs": { "activation_type": "gelu", "normalize_routing_weights": 1, "k": 2 },
1520
  "inputs": {
@@ -1996,6 +1995,678 @@
1996
  }
1997
  },
1998
  "outputs": { "outputT": { "dtype": "float32", "shape": [96, 34], "tolerance": 0.00002 } }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1999
  }
2000
  ]
2001
  }
 
1
  {
 
2
  "cases": [
3
  {
4
  "name": "relu_top1_no_bias",
5
  "provenance": {
6
  "source": "onnxruntime/docs/ContribOperators.md#com.microsoft.MoE",
7
  "test": "default activation_type (relu), one expert per token",
8
+ "notes": "Exercises the schema's default activation with no optional biases or FC3 input."
9
  },
10
  "attrs": { "normalize_routing_weights": 1 },
11
  "inputs": {
 
37
  "provenance": {
38
  "source": "onnxruntime/docs/ContribOperators.md#com.microsoft.MoE",
39
  "test": "activation_type gelu with an FC1 bias",
40
+ "notes": "Tanh-approximate GELU after the FC1 projection and its per-expert bias."
41
  },
42
  "attrs": { "k": 1, "activation_type": "gelu", "normalize_routing_weights": 0 },
43
  "inputs": {
 
148
  "provenance": {
149
  "source": "onnxruntime/docs/ContribOperators.md#com.microsoft.MoE",
150
  "test": "all three optional biases present at once",
151
+ "notes": "The SiLU gated path applies FC1, FC2, and FC3 biases in one invocation."
152
  },
153
  "attrs": { "k": 2, "activation_type": "silu", "normalize_routing_weights": 1 },
154
  "inputs": {
 
460
  "provenance": {
461
  "source": "onnxruntime/docs/ContribOperators.md#com.microsoft.MoE",
462
  "test": "com.microsoft.MoE optional-input combination",
463
+ "notes": "Uses FC1 and FC2 biases without an FC3 projection, exercising GELU on the FC1 projection before the biased FC2 projection."
464
  },
465
  "attrs": { "k": 1, "activation_type": "gelu", "normalize_routing_weights": 0 },
466
  "inputs": {
 
586
  "provenance": {
587
  "source": "onnxruntime/docs/ContribOperators.md#com.microsoft.MoE",
588
  "test": "com.microsoft.MoE optional-input combination",
589
+ "notes": "Uses the gated SiLU branch with an FC3 bias and an FC2 bias while omitting the FC1 bias; routing weights are normalized across the selected experts."
590
  },
591
  "attrs": { "k": 2, "activation_type": "silu", "normalize_routing_weights": 1 },
592
  "inputs": {
 
633
  "provenance": {
634
  "source": "onnxruntime/docs/ContribOperators.md#com.microsoft.MoE",
635
  "test": "com.microsoft.MoE optional-input combination",
636
+ "notes": "Uses the gated SiLU branch with an FC1 bias, an unbiased FC3 projection, and no FC2 bias."
637
  },
638
  "attrs": { "k": 1, "activation_type": "silu", "normalize_routing_weights": 0 },
639
  "inputs": {
 
675
  "provenance": {
676
  "source": "onnxruntime/docs/ContribOperators.md#com.microsoft.MoE",
677
  "test": "com.microsoft.MoE optional-input combination",
678
+ "notes": "Uses normalized top-2 routing with the gated SiLU branch, an FC1 bias, an unbiased FC3 projection, and an FC2 bias."
679
  },
680
  "attrs": { "k": 2, "activation_type": "silu", "normalize_routing_weights": 1 },
681
  "inputs": {
 
722
  "provenance": {
723
  "source": "onnxruntime/contrib_ops/cpu/moe/moe_cpu.cc",
724
  "test": "full-softmax routing and equal-probability pair ordering",
725
+ "notes": "Equal zero logits become probabilities [0.5, 0.5], with ties selecting the higher expert index. That expert emits 6, and its non-normalized route probability scales the result to exactly 3. Also exercises the defaults k=1, activation_type=relu, and normalize_routing_weights=0."
726
  },
727
  "inputs": {
728
  "inputT": { "dtype": "float32", "shape": [1, 1], "data": { "kind": "values", "values": [1.0] } },
 
744
  "provenance": {
745
  "source": "onnxruntime/docs/ContribOperators.md#com.microsoft.MoE",
746
  "test": "com.microsoft.MoE optional-input combination",
747
+ "notes": "Uses the gated SiLU branch with FC1 and FC3 biases and no FC2 bias."
748
  },
749
  "attrs": { "k": 1, "activation_type": "silu", "normalize_routing_weights": 0 },
750
  "inputs": {
 
789
  {
790
  "name": "deep_reduction_fc1plain_fc3none_fc2plain_identity",
791
  "provenance": {
792
+ "notes": "A 128-element reduction on both projections exercises the cooperative schedule with plain fc1, no fc3, plain fc2, and identity activation."
793
  },
794
  "attrs": { "activation_type": "identity", "normalize_routing_weights": 1 },
795
  "inputs": {
 
819
  {
820
  "name": "deep_reduction_fc1plain_fc3none_fc2bias_swiglu2",
821
  "provenance": {
822
+ "notes": "A 128-element reduction on both projections exercises the cooperative schedule with plain fc1, no fc3, biased fc2, and SwiGLU formula 2."
823
  },
824
  "attrs": {
825
  "k": 2,
 
861
  {
862
  "name": "deep_reduction_fc1bias_fc3none_fc2plain_swiglu1",
863
  "provenance": {
864
+ "notes": "A 128-element reduction on both projections exercises the cooperative schedule with biased fc1, no fc3, plain fc2, and SwiGLU formula 1."
865
  },
866
  "attrs": { "k": 2, "activation_type": "swiglu", "swiglu_fusion": 1, "normalize_routing_weights": 1 },
867
  "inputs": {
 
896
  {
897
  "name": "deep_reduction_fc1bias_fc3none_fc2bias_swiglu2",
898
  "provenance": {
899
+ "notes": "A 128-element reduction on both projections exercises the cooperative schedule with biased fc1, no fc3, biased fc2, and SwiGLU formula 2."
900
  },
901
  "attrs": { "activation_type": "swiglu", "swiglu_fusion": 2, "normalize_routing_weights": 1 },
902
  "inputs": {
 
936
  {
937
  "name": "deep_reduction_fc1plain_fc3plain_fc2plain_swiglu0",
938
  "provenance": {
939
+ "notes": "A 128-element reduction on both projections exercises the cooperative schedule with plain fc1, plain fc3, plain fc2, and formula 0."
940
  },
941
  "attrs": { "activation_type": "swiglu", "swiglu_fusion": 0, "normalize_routing_weights": 1 },
942
  "inputs": {
 
971
  {
972
  "name": "deep_reduction_fc1plain_fc3plain_fc2bias_swiglu0",
973
  "provenance": {
974
+ "notes": "A 128-element reduction on both projections exercises the cooperative schedule with plain fc1, plain fc3, biased fc2, and formula 0."
975
  },
976
  "attrs": {
977
  "k": 2,
 
1018
  {
1019
  "name": "deep_reduction_fc1plain_fc3biased_fc2plain_swiglu0",
1020
  "provenance": {
1021
+ "notes": "A 128-element reduction on both projections exercises the cooperative schedule with plain fc1, biased fc3, plain fc2, and formula 0."
1022
  },
1023
  "attrs": {
1024
  "activation_type": "swiglu",
 
1064
  {
1065
  "name": "deep_reduction_fc1plain_fc3biased_fc2bias_swiglu0",
1066
  "provenance": {
1067
+ "notes": "A 128-element reduction on both projections exercises the cooperative schedule with plain fc1, biased fc3, biased fc2, and formula 0."
1068
  },
1069
  "attrs": { "k": 2, "activation_type": "swiglu", "swiglu_fusion": 0, "normalize_routing_weights": 1 },
1070
  "inputs": {
 
1109
  {
1110
  "name": "deep_reduction_fc1bias_fc3plain_fc2plain_swiglu0",
1111
  "provenance": {
1112
+ "notes": "A 128-element reduction on both projections exercises the cooperative schedule with biased fc1, plain fc3, plain fc2, and formula 0."
1113
  },
1114
  "attrs": {
1115
  "k": 2,
 
1156
  {
1157
  "name": "deep_reduction_fc1bias_fc3plain_fc2bias_swiglu0",
1158
  "provenance": {
1159
+ "notes": "A 128-element reduction on both projections exercises the cooperative schedule with biased fc1, plain fc3, biased fc2, and formula 0."
1160
  },
1161
  "attrs": { "activation_type": "swiglu", "swiglu_fusion": 0, "normalize_routing_weights": 1 },
1162
  "inputs": {
 
1201
  {
1202
  "name": "deep_reduction_fc1bias_fc3biased_fc2plain_swiglu0",
1203
  "provenance": {
1204
+ "notes": "A 128-element reduction on both projections exercises the cooperative schedule with biased fc1, biased fc3, plain fc2, and formula 0."
1205
  },
1206
  "attrs": { "k": 2, "activation_type": "swiglu", "swiglu_fusion": 0, "normalize_routing_weights": 1 },
1207
  "inputs": {
 
1246
  {
1247
  "name": "deep_reduction_fc1bias_fc3biased_fc2bias_swiglu0",
1248
  "provenance": {
1249
+ "notes": "A 128-element reduction on both projections exercises the cooperative schedule with biased fc1, biased fc3, biased fc2, and formula 0."
1250
  },
1251
  "attrs": {
1252
  "activation_type": "swiglu",
 
1302
  {
1303
  "name": "identity_activation_top1",
1304
  "provenance": {
1305
+ "notes": "With `activation_type=identity`, the FC1 projection passes through unchanged before the output projection."
1306
  },
1307
  "attrs": { "activation_type": "identity" },
1308
  "inputs": {
 
1513
  {
1514
  "name": "grouped_prefill_partial_tiles_gelu",
1515
  "provenance": {
1516
+ "notes": "Three experts share 64 routed slots across 32-row tiles, so most lanes address padding and the store guard discards more rows than it writes."
1517
  },
1518
  "attrs": { "activation_type": "gelu", "normalize_routing_weights": 1, "k": 2 },
1519
  "inputs": {
 
1995
  }
1996
  },
1997
  "outputs": { "outputT": { "dtype": "float32", "shape": [96, 34], "tolerance": 0.00002 } }
1998
+ },
1999
+ {
2000
+ "name": "matrix_silu_gate_fc3_bias_only",
2001
+ "provenance": {
2002
+ "notes": "Direct-weight matrix sibling of grouped_prefill_silu_gate_fc3_bias_only. Preserves the activation, biases, input recipes, and tolerance; varies aligned reduction extents and rank while routed expert slices may end in partial row tiles."
2003
+ },
2004
+ "attrs": { "k": 1, "activation_type": "silu", "normalize_routing_weights": 0 },
2005
+ "inputs": {
2006
+ "inputT": {
2007
+ "dtype": "float32",
2008
+ "shape": [96, 64],
2009
+ "data": { "kind": "fillFloat32", "sinStep": 0.23, "cosStep": 0.31, "scale": 0.5 }
2010
+ },
2011
+ "routerT": {
2012
+ "dtype": "float32",
2013
+ "shape": [96, 3],
2014
+ "data": { "kind": "fillFloat32", "sinStep": 0.37, "cosStep": 0.25, "scale": 0.7 }
2015
+ },
2016
+ "fc1T": {
2017
+ "dtype": "float32",
2018
+ "shape": [3, 96, 64],
2019
+ "data": { "kind": "fillFloat32", "sinStep": 0.11, "cosStep": 0.23, "scale": 0.18 }
2020
+ },
2021
+ "fc2T": {
2022
+ "dtype": "float32",
2023
+ "shape": [3, 64, 96],
2024
+ "data": { "kind": "fillFloat32", "sinStep": 0.07, "cosStep": 0.41, "scale": 0.16 }
2025
+ },
2026
+ "fc3T": {
2027
+ "dtype": "float32",
2028
+ "shape": [3, 96, 64],
2029
+ "data": { "kind": "fillFloat32", "sinStep": 0.13, "cosStep": 0.29, "scale": 0.15 }
2030
+ },
2031
+ "fc3BiasT": {
2032
+ "dtype": "float32",
2033
+ "shape": [3, 96],
2034
+ "data": { "kind": "fillFloat32", "sinStep": 0.31, "cosStep": 0.23, "scale": 0.2 }
2035
+ }
2036
+ },
2037
+ "outputs": { "outputT": { "dtype": "float32", "shape": [96, 64], "tolerance": 0.00002 } }
2038
+ },
2039
+ {
2040
+ "name": "matrix_fc1plain_fc3none_fc2plain_relu",
2041
+ "provenance": {
2042
+ "notes": "Direct-weight matrix sibling of grouped_prefill_fc1plain_fc3none_fc2plain_relu. Preserves the activation, biases, input recipes, and tolerance; varies aligned reduction extents and rank while routed expert slices may end in partial row tiles."
2043
+ },
2044
+ "attrs": { "k": 2, "activation_type": "relu", "normalize_routing_weights": 1 },
2045
+ "inputs": {
2046
+ "inputT": {
2047
+ "dtype": "float32",
2048
+ "shape": [48, 64],
2049
+ "data": { "kind": "fillFloat32", "sinStep": 0.09, "cosStep": 0.29, "scale": 0.4 }
2050
+ },
2051
+ "routerT": {
2052
+ "dtype": "float32",
2053
+ "shape": [48, 3],
2054
+ "data": { "kind": "fillFloat32", "sinStep": 0.3, "cosStep": 0.24, "scale": 0.7 }
2055
+ },
2056
+ "fc1T": {
2057
+ "dtype": "float32",
2058
+ "shape": [3, 64, 64],
2059
+ "data": { "kind": "fillFloat32", "sinStep": 0.12, "cosStep": 0.36, "scale": 0.15 }
2060
+ },
2061
+ "fc2T": {
2062
+ "dtype": "float32",
2063
+ "shape": [3, 64, 64],
2064
+ "data": { "kind": "fillFloat32", "sinStep": 0.14, "cosStep": 0.26, "scale": 0.15 }
2065
+ }
2066
+ },
2067
+ "outputs": { "outputT": { "dtype": "float32", "shape": [48, 64], "tolerance": 0.00002 } }
2068
+ },
2069
+ {
2070
+ "name": "matrix_fc1plain_fc3none_fc2bias_swiglu2",
2071
+ "provenance": {
2072
+ "notes": "Direct-weight matrix sibling of grouped_prefill_fc1plain_fc3none_fc2bias_swiglu2. Preserves the activation, biases, input recipes, and tolerance; varies aligned reduction extents and rank while routed expert slices may end in partial row tiles."
2073
+ },
2074
+ "attrs": {
2075
+ "activation_type": "swiglu",
2076
+ "activation_alpha": 1.702,
2077
+ "activation_beta": 0.05,
2078
+ "swiglu_fusion": 2,
2079
+ "normalize_routing_weights": 1
2080
+ },
2081
+ "inputs": {
2082
+ "inputT": {
2083
+ "dtype": "float32",
2084
+ "shape": [96, 128],
2085
+ "data": { "kind": "fillFloat32", "sinStep": 0.107, "cosStep": 0.281, "scale": 0.4 }
2086
+ },
2087
+ "routerT": {
2088
+ "dtype": "float32",
2089
+ "shape": [96, 3],
2090
+ "data": { "kind": "fillFloat32", "sinStep": 0.317, "cosStep": 0.231, "scale": 0.7 }
2091
+ },
2092
+ "fc1T": {
2093
+ "dtype": "float32",
2094
+ "shape": [3, 192, 128],
2095
+ "data": { "kind": "fillFloat32", "sinStep": 0.137, "cosStep": 0.351, "scale": 0.15 }
2096
+ },
2097
+ "fc2T": {
2098
+ "dtype": "float32",
2099
+ "shape": [3, 128, 96],
2100
+ "data": { "kind": "fillFloat32", "sinStep": 0.157, "cosStep": 0.251, "scale": 0.15 }
2101
+ },
2102
+ "fc2BiasT": {
2103
+ "dtype": "float32",
2104
+ "shape": [3, 128],
2105
+ "data": { "kind": "fillFloat32", "sinStep": 0.277, "cosStep": 0.321, "scale": 0.2 }
2106
+ }
2107
+ },
2108
+ "outputs": { "outputT": { "dtype": "float32", "shape": [96, 128], "tolerance": 0.00002 } }
2109
+ },
2110
+ {
2111
+ "name": "matrix_fc1bias_fc3none_fc2plain_swiglu1",
2112
+ "provenance": {
2113
+ "notes": "Direct-weight matrix sibling of grouped_prefill_fc1bias_fc3none_fc2plain_swiglu1. Preserves the activation, biases, input recipes, and tolerance; varies aligned reduction extents and rank while routed expert slices may end in partial row tiles."
2114
+ },
2115
+ "attrs": { "k": 2, "activation_type": "swiglu", "swiglu_fusion": 1, "normalize_routing_weights": 1 },
2116
+ "inputs": {
2117
+ "inputT": {
2118
+ "dtype": "float32",
2119
+ "shape": [2, 24, 64],
2120
+ "data": { "kind": "fillFloat32", "sinStep": 0.124, "cosStep": 0.272, "scale": 0.4 }
2121
+ },
2122
+ "routerT": {
2123
+ "dtype": "float32",
2124
+ "shape": [48, 3],
2125
+ "data": { "kind": "fillFloat32", "sinStep": 0.334, "cosStep": 0.222, "scale": 0.7 }
2126
+ },
2127
+ "fc1T": {
2128
+ "dtype": "float32",
2129
+ "shape": [3, 192, 64],
2130
+ "data": { "kind": "fillFloat32", "sinStep": 0.154, "cosStep": 0.342, "scale": 0.15 }
2131
+ },
2132
+ "fc1BiasT": {
2133
+ "dtype": "float32",
2134
+ "shape": [3, 192],
2135
+ "data": { "kind": "fillFloat32", "sinStep": 0.234, "cosStep": 0.422, "scale": 0.2 }
2136
+ },
2137
+ "fc2T": {
2138
+ "dtype": "float32",
2139
+ "shape": [3, 64, 96],
2140
+ "data": { "kind": "fillFloat32", "sinStep": 0.174, "cosStep": 0.242, "scale": 0.15 }
2141
+ }
2142
+ },
2143
+ "outputs": { "outputT": { "dtype": "float32", "shape": [2, 24, 64], "tolerance": 0.00002 } }
2144
+ },
2145
+ {
2146
+ "name": "matrix_fc1bias_fc3none_fc2bias_swiglu2",
2147
+ "provenance": {
2148
+ "notes": "Direct-weight matrix sibling of grouped_prefill_fc1bias_fc3none_fc2bias_swiglu2. Preserves the activation, biases, input recipes, and tolerance; varies aligned reduction extents and rank while routed expert slices may end in partial row tiles."
2149
+ },
2150
+ "attrs": { "activation_type": "swiglu", "swiglu_fusion": 2, "normalize_routing_weights": 1 },
2151
+ "inputs": {
2152
+ "inputT": {
2153
+ "dtype": "float32",
2154
+ "shape": [96, 128],
2155
+ "data": { "kind": "fillFloat32", "sinStep": 0.141, "cosStep": 0.263, "scale": 0.4 }
2156
+ },
2157
+ "routerT": {
2158
+ "dtype": "float32",
2159
+ "shape": [96, 3],
2160
+ "data": { "kind": "fillFloat32", "sinStep": 0.351, "cosStep": 0.213, "scale": 0.7 }
2161
+ },
2162
+ "fc1T": {
2163
+ "dtype": "float32",
2164
+ "shape": [3, 192, 128],
2165
+ "data": { "kind": "fillFloat32", "sinStep": 0.171, "cosStep": 0.333, "scale": 0.15 }
2166
+ },
2167
+ "fc1BiasT": {
2168
+ "dtype": "float32",
2169
+ "shape": [3, 192],
2170
+ "data": { "kind": "fillFloat32", "sinStep": 0.251, "cosStep": 0.413, "scale": 0.2 }
2171
+ },
2172
+ "fc2T": {
2173
+ "dtype": "float32",
2174
+ "shape": [3, 128, 96],
2175
+ "data": { "kind": "fillFloat32", "sinStep": 0.191, "cosStep": 0.233, "scale": 0.15 }
2176
+ },
2177
+ "fc2BiasT": {
2178
+ "dtype": "float32",
2179
+ "shape": [3, 128],
2180
+ "data": { "kind": "fillFloat32", "sinStep": 0.311, "cosStep": 0.303, "scale": 0.2 }
2181
+ }
2182
+ },
2183
+ "outputs": { "outputT": { "dtype": "float32", "shape": [96, 128], "tolerance": 0.00002 } }
2184
+ },
2185
+ {
2186
+ "name": "matrix_partial_tiles_gelu",
2187
+ "provenance": {
2188
+ "notes": "Direct-weight matrix sibling of grouped_prefill_partial_tiles_gelu. Preserves the activation, biases, input recipes, and tolerance; varies aligned reduction extents and rank while routed expert slices may end in partial row tiles."
2189
+ },
2190
+ "attrs": { "activation_type": "gelu", "normalize_routing_weights": 1, "k": 2 },
2191
+ "inputs": {
2192
+ "inputT": {
2193
+ "dtype": "float32",
2194
+ "shape": [32, 64],
2195
+ "data": { "kind": "fillFloat32", "sinStep": 0.173, "cosStep": 0.229, "scale": 0.4 }
2196
+ },
2197
+ "routerT": {
2198
+ "dtype": "float32",
2199
+ "shape": [32, 3],
2200
+ "data": { "kind": "fillFloat32", "sinStep": 0.347, "cosStep": 0.163, "scale": 0.7 }
2201
+ },
2202
+ "fc1T": {
2203
+ "dtype": "float32",
2204
+ "shape": [3, 64, 64],
2205
+ "data": { "kind": "fillFloat32", "sinStep": 0.199, "cosStep": 0.271, "scale": 0.15 }
2206
+ },
2207
+ "fc1BiasT": {
2208
+ "dtype": "float32",
2209
+ "shape": [3, 64],
2210
+ "data": { "kind": "fillFloat32", "sinStep": 0.251, "cosStep": 0.413, "scale": 0.2 }
2211
+ },
2212
+ "fc2T": {
2213
+ "dtype": "float32",
2214
+ "shape": [3, 64, 64],
2215
+ "data": { "kind": "fillFloat32", "sinStep": 0.241, "cosStep": 0.179, "scale": 0.15 }
2216
+ },
2217
+ "fc2BiasT": {
2218
+ "dtype": "float32",
2219
+ "shape": [3, 64],
2220
+ "data": { "kind": "fillFloat32", "sinStep": 0.311, "cosStep": 0.303, "scale": 0.2 }
2221
+ }
2222
+ },
2223
+ "outputs": { "outputT": { "dtype": "float32", "shape": [32, 64], "tolerance": 0.00002 } }
2224
+ },
2225
+ {
2226
+ "name": "matrix_fc1plain_fc3plain_fc2plain_swiglu0",
2227
+ "provenance": {
2228
+ "notes": "Direct-weight matrix sibling of grouped_prefill_fc1plain_fc3plain_fc2plain_swiglu0. Preserves the activation, biases, input recipes, and tolerance; varies aligned reduction extents and rank while routed expert slices may end in partial row tiles."
2229
+ },
2230
+ "attrs": { "activation_type": "swiglu", "swiglu_fusion": 0, "normalize_routing_weights": 1 },
2231
+ "inputs": {
2232
+ "inputT": {
2233
+ "dtype": "float32",
2234
+ "shape": [2, 48, 128],
2235
+ "data": { "kind": "fillFloat32", "sinStep": 0.158, "cosStep": 0.254, "scale": 0.4 }
2236
+ },
2237
+ "routerT": {
2238
+ "dtype": "float32",
2239
+ "shape": [96, 3],
2240
+ "data": { "kind": "fillFloat32", "sinStep": 0.368, "cosStep": 0.204, "scale": 0.7 }
2241
+ },
2242
+ "fc1T": {
2243
+ "dtype": "float32",
2244
+ "shape": [3, 96, 128],
2245
+ "data": { "kind": "fillFloat32", "sinStep": 0.188, "cosStep": 0.324, "scale": 0.15 }
2246
+ },
2247
+ "fc2T": {
2248
+ "dtype": "float32",
2249
+ "shape": [3, 128, 96],
2250
+ "data": { "kind": "fillFloat32", "sinStep": 0.208, "cosStep": 0.224, "scale": 0.15 }
2251
+ },
2252
+ "fc3T": {
2253
+ "dtype": "float32",
2254
+ "shape": [3, 96, 128],
2255
+ "data": { "kind": "fillFloat32", "sinStep": 0.228, "cosStep": 0.364, "scale": 0.15 }
2256
+ }
2257
+ },
2258
+ "outputs": { "outputT": { "dtype": "float32", "shape": [2, 48, 128], "tolerance": 0.00002 } }
2259
+ },
2260
+ {
2261
+ "name": "matrix_fc1plain_fc3plain_fc2bias_swiglu0",
2262
+ "provenance": {
2263
+ "notes": "Direct-weight matrix sibling of grouped_prefill_fc1plain_fc3plain_fc2bias_swiglu0. Preserves the activation, biases, input recipes, and tolerance; varies aligned reduction extents and rank while routed expert slices may end in partial row tiles."
2264
+ },
2265
+ "attrs": {
2266
+ "k": 2,
2267
+ "activation_type": "swiglu",
2268
+ "activation_alpha": 1.702,
2269
+ "activation_beta": 0.05,
2270
+ "swiglu_fusion": 0,
2271
+ "normalize_routing_weights": 1
2272
+ },
2273
+ "inputs": {
2274
+ "inputT": {
2275
+ "dtype": "float32",
2276
+ "shape": [48, 64],
2277
+ "data": { "kind": "fillFloat32", "sinStep": 0.175, "cosStep": 0.245, "scale": 0.4 }
2278
+ },
2279
+ "routerT": {
2280
+ "dtype": "float32",
2281
+ "shape": [48, 3],
2282
+ "data": { "kind": "fillFloat32", "sinStep": 0.385, "cosStep": 0.195, "scale": 0.7 }
2283
+ },
2284
+ "fc1T": {
2285
+ "dtype": "float32",
2286
+ "shape": [3, 96, 64],
2287
+ "data": { "kind": "fillFloat32", "sinStep": 0.205, "cosStep": 0.315, "scale": 0.15 }
2288
+ },
2289
+ "fc2T": {
2290
+ "dtype": "float32",
2291
+ "shape": [3, 64, 96],
2292
+ "data": { "kind": "fillFloat32", "sinStep": 0.225, "cosStep": 0.215, "scale": 0.15 }
2293
+ },
2294
+ "fc2BiasT": {
2295
+ "dtype": "float32",
2296
+ "shape": [3, 64],
2297
+ "data": { "kind": "fillFloat32", "sinStep": 0.345, "cosStep": 0.285, "scale": 0.2 }
2298
+ },
2299
+ "fc3T": {
2300
+ "dtype": "float32",
2301
+ "shape": [3, 96, 64],
2302
+ "data": { "kind": "fillFloat32", "sinStep": 0.245, "cosStep": 0.355, "scale": 0.15 }
2303
+ }
2304
+ },
2305
+ "outputs": { "outputT": { "dtype": "float32", "shape": [48, 64], "tolerance": 0.00002 } }
2306
+ },
2307
+ {
2308
+ "name": "matrix_fc1plain_fc3biased_fc2plain_swiglu0",
2309
+ "provenance": {
2310
+ "notes": "Direct-weight matrix sibling of grouped_prefill_fc1plain_fc3biased_fc2plain_swiglu0. Preserves the activation, biases, input recipes, and tolerance; varies aligned reduction extents and rank while routed expert slices may end in partial row tiles."
2311
+ },
2312
+ "attrs": {
2313
+ "activation_type": "swiglu",
2314
+ "activation_alpha": 1.702,
2315
+ "activation_beta": 0.05,
2316
+ "swiglu_fusion": 0,
2317
+ "normalize_routing_weights": 1
2318
+ },
2319
+ "inputs": {
2320
+ "inputT": {
2321
+ "dtype": "float32",
2322
+ "shape": [96, 128],
2323
+ "data": { "kind": "fillFloat32", "sinStep": 0.192, "cosStep": 0.236, "scale": 0.4 }
2324
+ },
2325
+ "routerT": {
2326
+ "dtype": "float32",
2327
+ "shape": [96, 3],
2328
+ "data": { "kind": "fillFloat32", "sinStep": 0.402, "cosStep": 0.186, "scale": 0.7 }
2329
+ },
2330
+ "fc1T": {
2331
+ "dtype": "float32",
2332
+ "shape": [3, 96, 128],
2333
+ "data": { "kind": "fillFloat32", "sinStep": 0.222, "cosStep": 0.306, "scale": 0.15 }
2334
+ },
2335
+ "fc2T": {
2336
+ "dtype": "float32",
2337
+ "shape": [3, 128, 96],
2338
+ "data": { "kind": "fillFloat32", "sinStep": 0.242, "cosStep": 0.206, "scale": 0.15 }
2339
+ },
2340
+ "fc3T": {
2341
+ "dtype": "float32",
2342
+ "shape": [3, 96, 128],
2343
+ "data": { "kind": "fillFloat32", "sinStep": 0.262, "cosStep": 0.346, "scale": 0.15 }
2344
+ },
2345
+ "fc3BiasT": {
2346
+ "dtype": "float32",
2347
+ "shape": [3, 96],
2348
+ "data": { "kind": "fillFloat32", "sinStep": 0.322, "cosStep": 0.176, "scale": 0.2 }
2349
+ }
2350
+ },
2351
+ "outputs": { "outputT": { "dtype": "float32", "shape": [96, 128], "tolerance": 0.00002 } }
2352
+ },
2353
+ {
2354
+ "name": "matrix_fc1plain_fc3biased_fc2bias_swiglu0",
2355
+ "provenance": {
2356
+ "notes": "Direct-weight matrix sibling of grouped_prefill_fc1plain_fc3biased_fc2bias_swiglu0. Preserves the activation, biases, input recipes, and tolerance; varies aligned reduction extents and rank while routed expert slices may end in partial row tiles."
2357
+ },
2358
+ "attrs": { "k": 2, "activation_type": "swiglu", "swiglu_fusion": 0, "normalize_routing_weights": 1 },
2359
+ "inputs": {
2360
+ "inputT": {
2361
+ "dtype": "float32",
2362
+ "shape": [2, 24, 64],
2363
+ "data": { "kind": "fillFloat32", "sinStep": 0.209, "cosStep": 0.227, "scale": 0.4 }
2364
+ },
2365
+ "routerT": {
2366
+ "dtype": "float32",
2367
+ "shape": [48, 3],
2368
+ "data": { "kind": "fillFloat32", "sinStep": 0.419, "cosStep": 0.177, "scale": 0.7 }
2369
+ },
2370
+ "fc1T": {
2371
+ "dtype": "float32",
2372
+ "shape": [3, 96, 64],
2373
+ "data": { "kind": "fillFloat32", "sinStep": 0.239, "cosStep": 0.297, "scale": 0.15 }
2374
+ },
2375
+ "fc2T": {
2376
+ "dtype": "float32",
2377
+ "shape": [3, 64, 96],
2378
+ "data": { "kind": "fillFloat32", "sinStep": 0.259, "cosStep": 0.197, "scale": 0.15 }
2379
+ },
2380
+ "fc2BiasT": {
2381
+ "dtype": "float32",
2382
+ "shape": [3, 64],
2383
+ "data": { "kind": "fillFloat32", "sinStep": 0.379, "cosStep": 0.267, "scale": 0.2 }
2384
+ },
2385
+ "fc3T": {
2386
+ "dtype": "float32",
2387
+ "shape": [3, 96, 64],
2388
+ "data": { "kind": "fillFloat32", "sinStep": 0.279, "cosStep": 0.337, "scale": 0.15 }
2389
+ },
2390
+ "fc3BiasT": {
2391
+ "dtype": "float32",
2392
+ "shape": [3, 96],
2393
+ "data": { "kind": "fillFloat32", "sinStep": 0.339, "cosStep": 0.167, "scale": 0.2 }
2394
+ }
2395
+ },
2396
+ "outputs": { "outputT": { "dtype": "float32", "shape": [2, 24, 64], "tolerance": 0.00002 } }
2397
+ },
2398
+ {
2399
+ "name": "matrix_fc1bias_fc3plain_fc2plain_swiglu0",
2400
+ "provenance": {
2401
+ "notes": "Direct-weight matrix sibling of grouped_prefill_fc1bias_fc3plain_fc2plain_swiglu0. Preserves the activation, biases, input recipes, and tolerance; varies aligned reduction extents and rank while routed expert slices may end in partial row tiles."
2402
+ },
2403
+ "attrs": {
2404
+ "k": 2,
2405
+ "activation_type": "swiglu",
2406
+ "activation_alpha": 1.702,
2407
+ "activation_beta": 0.05,
2408
+ "swiglu_fusion": 0,
2409
+ "normalize_routing_weights": 1
2410
+ },
2411
+ "inputs": {
2412
+ "inputT": {
2413
+ "dtype": "float32",
2414
+ "shape": [48, 128],
2415
+ "data": { "kind": "fillFloat32", "sinStep": 0.226, "cosStep": 0.218, "scale": 0.4 }
2416
+ },
2417
+ "routerT": {
2418
+ "dtype": "float32",
2419
+ "shape": [48, 3],
2420
+ "data": { "kind": "fillFloat32", "sinStep": 0.436, "cosStep": 0.168, "scale": 0.7 }
2421
+ },
2422
+ "fc1T": {
2423
+ "dtype": "float32",
2424
+ "shape": [3, 96, 128],
2425
+ "data": { "kind": "fillFloat32", "sinStep": 0.256, "cosStep": 0.288, "scale": 0.15 }
2426
+ },
2427
+ "fc1BiasT": {
2428
+ "dtype": "float32",
2429
+ "shape": [3, 96],
2430
+ "data": { "kind": "fillFloat32", "sinStep": 0.336, "cosStep": 0.368, "scale": 0.2 }
2431
+ },
2432
+ "fc2T": {
2433
+ "dtype": "float32",
2434
+ "shape": [3, 128, 96],
2435
+ "data": { "kind": "fillFloat32", "sinStep": 0.276, "cosStep": 0.188, "scale": 0.15 }
2436
+ },
2437
+ "fc3T": {
2438
+ "dtype": "float32",
2439
+ "shape": [3, 96, 128],
2440
+ "data": { "kind": "fillFloat32", "sinStep": 0.296, "cosStep": 0.328, "scale": 0.15 }
2441
+ }
2442
+ },
2443
+ "outputs": { "outputT": { "dtype": "float32", "shape": [48, 128], "tolerance": 0.00002 } }
2444
+ },
2445
+ {
2446
+ "name": "matrix_fc1bias_fc3plain_fc2bias_swiglu0",
2447
+ "provenance": {
2448
+ "notes": "Direct-weight matrix sibling of grouped_prefill_fc1bias_fc3plain_fc2bias_swiglu0. Preserves the activation, biases, input recipes, and tolerance; varies aligned reduction extents and rank while routed expert slices may end in partial row tiles."
2449
+ },
2450
+ "attrs": { "activation_type": "swiglu", "swiglu_fusion": 0, "normalize_routing_weights": 1 },
2451
+ "inputs": {
2452
+ "inputT": {
2453
+ "dtype": "float32",
2454
+ "shape": [96, 64],
2455
+ "data": { "kind": "fillFloat32", "sinStep": 0.243, "cosStep": 0.209, "scale": 0.4 }
2456
+ },
2457
+ "routerT": {
2458
+ "dtype": "float32",
2459
+ "shape": [96, 3],
2460
+ "data": { "kind": "fillFloat32", "sinStep": 0.453, "cosStep": 0.159, "scale": 0.7 }
2461
+ },
2462
+ "fc1T": {
2463
+ "dtype": "float32",
2464
+ "shape": [3, 96, 64],
2465
+ "data": { "kind": "fillFloat32", "sinStep": 0.273, "cosStep": 0.279, "scale": 0.15 }
2466
+ },
2467
+ "fc1BiasT": {
2468
+ "dtype": "float32",
2469
+ "shape": [3, 96],
2470
+ "data": { "kind": "fillFloat32", "sinStep": 0.353, "cosStep": 0.359, "scale": 0.2 }
2471
+ },
2472
+ "fc2T": {
2473
+ "dtype": "float32",
2474
+ "shape": [3, 64, 96],
2475
+ "data": { "kind": "fillFloat32", "sinStep": 0.293, "cosStep": 0.179, "scale": 0.15 }
2476
+ },
2477
+ "fc2BiasT": {
2478
+ "dtype": "float32",
2479
+ "shape": [3, 64],
2480
+ "data": { "kind": "fillFloat32", "sinStep": 0.413, "cosStep": 0.249, "scale": 0.2 }
2481
+ },
2482
+ "fc3T": {
2483
+ "dtype": "float32",
2484
+ "shape": [3, 96, 64],
2485
+ "data": { "kind": "fillFloat32", "sinStep": 0.313, "cosStep": 0.319, "scale": 0.15 }
2486
+ }
2487
+ },
2488
+ "outputs": { "outputT": { "dtype": "float32", "shape": [96, 64], "tolerance": 0.00002 } }
2489
+ },
2490
+ {
2491
+ "name": "matrix_fc1bias_fc3biased_fc2plain_swiglu0",
2492
+ "provenance": {
2493
+ "notes": "Direct-weight matrix sibling of grouped_prefill_fc1bias_fc3biased_fc2plain_swiglu0. Preserves the activation, biases, input recipes, and tolerance; varies aligned reduction extents and rank while routed expert slices may end in partial row tiles."
2494
+ },
2495
+ "attrs": { "k": 2, "activation_type": "swiglu", "swiglu_fusion": 0, "normalize_routing_weights": 1 },
2496
+ "inputs": {
2497
+ "inputT": {
2498
+ "dtype": "float32",
2499
+ "shape": [2, 24, 128],
2500
+ "data": { "kind": "fillFloat32", "sinStep": 0.26, "cosStep": 0.2, "scale": 0.4 }
2501
+ },
2502
+ "routerT": {
2503
+ "dtype": "float32",
2504
+ "shape": [48, 3],
2505
+ "data": { "kind": "fillFloat32", "sinStep": 0.47, "cosStep": 0.15, "scale": 0.7 }
2506
+ },
2507
+ "fc1T": {
2508
+ "dtype": "float32",
2509
+ "shape": [3, 96, 128],
2510
+ "data": { "kind": "fillFloat32", "sinStep": 0.29, "cosStep": 0.27, "scale": 0.15 }
2511
+ },
2512
+ "fc1BiasT": {
2513
+ "dtype": "float32",
2514
+ "shape": [3, 96],
2515
+ "data": { "kind": "fillFloat32", "sinStep": 0.37, "cosStep": 0.35, "scale": 0.2 }
2516
+ },
2517
+ "fc2T": {
2518
+ "dtype": "float32",
2519
+ "shape": [3, 128, 96],
2520
+ "data": { "kind": "fillFloat32", "sinStep": 0.31, "cosStep": 0.17, "scale": 0.15 }
2521
+ },
2522
+ "fc3T": {
2523
+ "dtype": "float32",
2524
+ "shape": [3, 96, 128],
2525
+ "data": { "kind": "fillFloat32", "sinStep": 0.33, "cosStep": 0.31, "scale": 0.15 }
2526
+ },
2527
+ "fc3BiasT": {
2528
+ "dtype": "float32",
2529
+ "shape": [3, 96],
2530
+ "data": { "kind": "fillFloat32", "sinStep": 0.39, "cosStep": 0.14, "scale": 0.2 }
2531
+ }
2532
+ },
2533
+ "outputs": { "outputT": { "dtype": "float32", "shape": [2, 24, 128], "tolerance": 0.00002 } }
2534
+ },
2535
+ {
2536
+ "name": "matrix_fc1bias_fc3biased_fc2bias_swiglu0",
2537
+ "provenance": {
2538
+ "notes": "Direct-weight matrix sibling of grouped_prefill_fc1bias_fc3biased_fc2bias_swiglu0. Preserves the activation, biases, input recipes, and tolerance; varies aligned reduction extents and rank while routed expert slices may end in partial row tiles."
2539
+ },
2540
+ "attrs": {
2541
+ "activation_type": "swiglu",
2542
+ "activation_alpha": 1.702,
2543
+ "activation_beta": 0.05,
2544
+ "swiglu_fusion": 0,
2545
+ "normalize_routing_weights": 1
2546
+ },
2547
+ "inputs": {
2548
+ "inputT": {
2549
+ "dtype": "float32",
2550
+ "shape": [96, 64],
2551
+ "data": { "kind": "fillFloat32", "sinStep": 0.277, "cosStep": 0.191, "scale": 0.4 }
2552
+ },
2553
+ "routerT": {
2554
+ "dtype": "float32",
2555
+ "shape": [96, 3],
2556
+ "data": { "kind": "fillFloat32", "sinStep": 0.487, "cosStep": 0.141, "scale": 0.7 }
2557
+ },
2558
+ "fc1T": {
2559
+ "dtype": "float32",
2560
+ "shape": [3, 96, 64],
2561
+ "data": { "kind": "fillFloat32", "sinStep": 0.307, "cosStep": 0.261, "scale": 0.15 }
2562
+ },
2563
+ "fc1BiasT": {
2564
+ "dtype": "float32",
2565
+ "shape": [3, 96],
2566
+ "data": { "kind": "fillFloat32", "sinStep": 0.387, "cosStep": 0.341, "scale": 0.2 }
2567
+ },
2568
+ "fc2T": {
2569
+ "dtype": "float32",
2570
+ "shape": [3, 64, 96],
2571
+ "data": { "kind": "fillFloat32", "sinStep": 0.327, "cosStep": 0.161, "scale": 0.15 }
2572
+ },
2573
+ "fc2BiasT": {
2574
+ "dtype": "float32",
2575
+ "shape": [3, 64],
2576
+ "data": { "kind": "fillFloat32", "sinStep": 0.447, "cosStep": 0.231, "scale": 0.2 }
2577
+ },
2578
+ "fc3T": {
2579
+ "dtype": "float32",
2580
+ "shape": [3, 96, 64],
2581
+ "data": { "kind": "fillFloat32", "sinStep": 0.347, "cosStep": 0.301, "scale": 0.15 }
2582
+ },
2583
+ "fc3BiasT": {
2584
+ "dtype": "float32",
2585
+ "shape": [3, 96],
2586
+ "data": { "kind": "fillFloat32", "sinStep": 0.407, "cosStep": 0.131, "scale": 0.2 }
2587
+ }
2588
+ },
2589
+ "outputs": { "outputT": { "dtype": "float32", "shape": [96, 64], "tolerance": 0.00002 } }
2590
+ },
2591
+ {
2592
+ "name": "matrix_identity_no_fc3",
2593
+ "provenance": {
2594
+ "notes": "Direct-weight matrix sibling of grouped_prefill_identity_no_fc3. Preserves the activation, biases, input recipes, and tolerance; varies aligned reduction extents and rank while routed expert slices may end in partial row tiles."
2595
+ },
2596
+ "attrs": { "k": 2, "activation_type": "identity", "normalize_routing_weights": 1 },
2597
+ "inputs": {
2598
+ "inputT": {
2599
+ "dtype": "float32",
2600
+ "shape": [48, 128],
2601
+ "data": { "kind": "fillFloat32", "sinStep": 0.181, "cosStep": 0.217, "scale": 0.4 }
2602
+ },
2603
+ "routerT": {
2604
+ "dtype": "float32",
2605
+ "shape": [48, 3],
2606
+ "data": { "kind": "fillFloat32", "sinStep": 0.391, "cosStep": 0.127, "scale": 0.7 }
2607
+ },
2608
+ "fc1T": {
2609
+ "dtype": "float32",
2610
+ "shape": [3, 64, 128],
2611
+ "data": { "kind": "fillFloat32", "sinStep": 0.211, "cosStep": 0.287, "scale": 0.15 }
2612
+ },
2613
+ "fc2T": {
2614
+ "dtype": "float32",
2615
+ "shape": [3, 128, 64],
2616
+ "data": { "kind": "fillFloat32", "sinStep": 0.231, "cosStep": 0.187, "scale": 0.15 }
2617
+ }
2618
+ },
2619
+ "outputs": { "outputT": { "dtype": "float32", "shape": [48, 128], "tolerance": 0.00002 } }
2620
+ },
2621
+ {
2622
+ "name": "matrix_unaligned_hidden_inter",
2623
+ "provenance": {
2624
+ "notes": "Direct-weight matrix sibling of grouped_prefill_unaligned_hidden_inter. Preserves the activation, biases, input recipes, and tolerance; varies aligned reduction extents and rank while routed expert slices may end in partial row tiles."
2625
+ },
2626
+ "attrs": { "activation_type": "silu", "normalize_routing_weights": 1, "k": 2 },
2627
+ "inputs": {
2628
+ "inputT": {
2629
+ "dtype": "float32",
2630
+ "shape": [2, 48, 64],
2631
+ "data": { "kind": "fillFloat32", "sinStep": 0.163, "cosStep": 0.239, "scale": 0.4 }
2632
+ },
2633
+ "routerT": {
2634
+ "dtype": "float32",
2635
+ "shape": [96, 3],
2636
+ "data": { "kind": "fillFloat32", "sinStep": 0.337, "cosStep": 0.173, "scale": 0.7 }
2637
+ },
2638
+ "fc1T": {
2639
+ "dtype": "float32",
2640
+ "shape": [3, 96, 64],
2641
+ "data": { "kind": "fillFloat32", "sinStep": 0.209, "cosStep": 0.281, "scale": 0.15 }
2642
+ },
2643
+ "fc1BiasT": {
2644
+ "dtype": "float32",
2645
+ "shape": [3, 96],
2646
+ "data": { "kind": "fillFloat32", "sinStep": 0.261, "cosStep": 0.423, "scale": 0.2 }
2647
+ },
2648
+ "fc2T": {
2649
+ "dtype": "float32",
2650
+ "shape": [3, 64, 96],
2651
+ "data": { "kind": "fillFloat32", "sinStep": 0.251, "cosStep": 0.189, "scale": 0.15 }
2652
+ },
2653
+ "fc2BiasT": {
2654
+ "dtype": "float32",
2655
+ "shape": [3, 64],
2656
+ "data": { "kind": "fillFloat32", "sinStep": 0.321, "cosStep": 0.313, "scale": 0.2 }
2657
+ },
2658
+ "fc3T": {
2659
+ "dtype": "float32",
2660
+ "shape": [3, 96, 64],
2661
+ "data": { "kind": "fillFloat32", "sinStep": 0.227, "cosStep": 0.197, "scale": 0.15 }
2662
+ },
2663
+ "fc3BiasT": {
2664
+ "dtype": "float32",
2665
+ "shape": [3, 96],
2666
+ "data": { "kind": "fillFloat32", "sinStep": 0.283, "cosStep": 0.359, "scale": 0.2 }
2667
+ }
2668
+ },
2669
+ "outputs": { "outputT": { "dtype": "float32", "shape": [2, 48, 64], "tolerance": 0.00002 } }
2670
  }
2671
  ]
2672
  }