scarsty commited on
Commit
7656bef
·
verified ·
1 Parent(s): 64a7184

Upload folder using huggingface_hub

Browse files
qwen3/qwen3_0.5b_fp16.ini ADDED
@@ -0,0 +1,220 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [train]
2
+ load_file = qwen3_decoder_cccc.bin
3
+ load_net = 1
4
+ WorkType = 0
5
+ train_epochs = 0
6
+ Batch = 1
7
+ output_net = 1
8
+ gpu = 1
9
+ mp = 1
10
+ mp_device = 0
11
+ named_weights = 1
12
+ data_type = half
13
+
14
+ [llm]
15
+ tokenizer = tokenizer.json
16
+
17
+ [net]
18
+ net_num = 2
19
+
20
+ structure0='
21
+ D = 1024;
22
+ Dq = 2048;
23
+ Dkv = 1024;
24
+ H = 16;
25
+ Hkv = 8;
26
+ hd = 128;
27
+ I = 3072;
28
+ V = 151936;
29
+ T = 1024;
30
+ HB = 16;
31
+ HkvB = 8;
32
+
33
+ W_emb = MatrixWithName("W_emb", D, 1, 1, V);
34
+ token_ids = MatrixF(T, 1, 1, 1);
35
+ X = embed(token_ids, W_emb);
36
+
37
+ cos_tab = ropeCosTbl(T, hd, 1000000.0);
38
+ sin_tab = ropeSinTbl(T, hd, 1000000.0);
39
+
40
+ for (i = 0; i < 28; i++)
41
+ {
42
+ W_rms_attn = MatrixWithName("W_rms_attn_" + to_string(i), D, 1);
43
+ X_norm = rmsNorm(X, W_rms_attn);
44
+
45
+ W_q = MatrixWithName("W_q_" + to_string(i), D, Dq, 1, 1);
46
+ Q_dq = batchedMul(W_q, X_norm, 1, 0);
47
+ Q_hHT = reshape(Q_dq, {hd, H, T, 1});
48
+ W_qnorm = MatrixWithName("W_qnorm_" + to_string(i), hd, 1);
49
+ Q_qnorm = rmsNorm(Q_hHT, W_qnorm);
50
+ Q_hTH = permute(Q_qnorm, {0, 2, 1, 3});
51
+ Q_hb = reshapeBatch(Q_hTH, {hd, T, 1, HB});
52
+ Q_r = rope(Q_hb, cos_tab, sin_tab);
53
+
54
+ W_k = MatrixWithName("W_k_" + to_string(i), D, Dkv, 1, 1);
55
+ K_dkv = batchedMul(W_k, X_norm, 1, 0);
56
+ K_hHkvT = reshape(K_dkv, {hd, Hkv, T, 1});
57
+ W_knorm = MatrixWithName("W_knorm_" + to_string(i), hd, 1);
58
+ K_knorm = rmsNorm(K_hHkvT, W_knorm);
59
+ K_hTHkv = permute(K_knorm, {0, 2, 1, 3});
60
+ K_hb = reshapeBatch(K_hTHkv, {hd, T, 1, HkvB});
61
+ K_r = rope(K_hb, cos_tab, sin_tab);
62
+
63
+ W_v = MatrixWithName("W_v_" + to_string(i), D, Dkv, 1, 1);
64
+ V_dkv = batchedMul(W_v, X_norm, 1, 0);
65
+ V_hHkvT = reshape(V_dkv, {hd, Hkv, T, 1});
66
+ V_hTHkv = permute(V_hHkvT, {0, 2, 1, 3});
67
+ V_hb = reshapeBatch(V_hTHkv, {hd, T, 1, HkvB});
68
+
69
+ Kcache = MatrixWithName("Kcache_" + to_string(i), hd, T, 1, HkvB);
70
+ setIsWeight(Kcache, 0);
71
+ registerMatrix("Kcache_" + to_string(i), Kcache);
72
+ K_cached = kvcache(K_r, Kcache);
73
+
74
+ Vcache = MatrixWithName("Vcache_" + to_string(i), hd, T, 1, HkvB);
75
+ setIsWeight(Vcache, 0);
76
+ registerMatrix("Vcache_" + to_string(i), Vcache);
77
+ V_cached = kvcache(V_hb, Vcache);
78
+
79
+ K_r2 = reshapeBatch(K_cached, {hd, T, HkvB, 1});
80
+ K_r3 = tile(K_r2, {1, 1, 1, 2});
81
+ K_r4 = permute(K_r3, {0, 1, 3, 2});
82
+ K_tiled = reshapeBatch(K_r4, {hd, T, 1, HB});
83
+
84
+ V_r2 = reshapeBatch(V_cached, {hd, T, HkvB, 1});
85
+ V_r3 = tile(V_r2, {1, 1, 1, 2});
86
+ V_r4 = permute(V_r3, {0, 1, 3, 2});
87
+ V_tiled = reshapeBatch(V_r4, {hd, T, 1, HB});
88
+
89
+ Attn = attention(Q_r, K_tiled, V_tiled, hd, 1);
90
+
91
+ Attn_hTH = reshapeBatch(Attn, {hd, T, H, 1});
92
+ Attn_hHT = permute(Attn_hTH, {0, 2, 1, 3});
93
+ Attn_flat = reshape(Attn_hHT, {Dq, T, 1, 1});
94
+ W_o = MatrixWithName("W_o_" + to_string(i), Dq, D, 1, 1);
95
+ O_out = batchedMul(W_o, Attn_flat, 1, 0);
96
+
97
+ R1 = X + O_out;
98
+
99
+ W_rms_ffn = MatrixWithName("W_rms_ffn_" + to_string(i), D, 1);
100
+ R1_norm = rmsNorm(R1, W_rms_ffn);
101
+
102
+ W_gate = MatrixWithName("W_gate_" + to_string(i), D, I, 1, 1);
103
+ W_up = MatrixWithName("W_up_" + to_string(i), D, I, 1, 1);
104
+ gate_out = silu(batchedMul(W_gate, R1_norm, 1, 0));
105
+ up_out = batchedMul(W_up, R1_norm, 1, 0);
106
+ gated = elementMul(gate_out, up_out);
107
+ W_down = MatrixWithName("W_down_" + to_string(i), I, D, 1, 1);
108
+ ffn_out = batchedMul(W_down, gated, 1, 0);
109
+
110
+ X = R1 + ffn_out;
111
+ }
112
+
113
+ W_rms_final = MatrixWithName("W_rms_final", D, 1);
114
+ X_final = rmsNorm(X, W_rms_final);
115
+ W_lm_head = MatrixWithName("W_lm_head", D, V, 1, 1);
116
+ logits = batchedMul(W_lm_head, X_final, 1, 0);
117
+
118
+ setXY(token_ids, logits);
119
+ '
120
+
121
+ structure1='
122
+ D = 1024;
123
+ Dq = 2048;
124
+ Dkv = 1024;
125
+ H = 16;
126
+ Hkv = 8;
127
+ hd = 128;
128
+ I = 3072;
129
+ V = 151936;
130
+ T = 1;
131
+ T_kv = 1024;
132
+ HB = 16;
133
+ HkvB = 8;
134
+
135
+ W_emb = MatrixWithName("W_emb", D, 1, 1, V);
136
+ token_ids = MatrixF(T, 1, 1, 1);
137
+ X = embed(token_ids, W_emb);
138
+
139
+ cos_tab = ropeCosTbl(T_kv, hd, 1000000.0);
140
+ sin_tab = ropeSinTbl(T_kv, hd, 1000000.0);
141
+
142
+ for (i = 0; i < 28; i++)
143
+ {
144
+ W_rms_attn = MatrixWithName("W_rms_attn_" + to_string(i), D, 1);
145
+ X_norm = rmsNorm(X, W_rms_attn);
146
+
147
+ W_q = MatrixWithName("W_q_" + to_string(i), D, Dq, 1, 1);
148
+ Q_dq = batchedMul(W_q, X_norm, 1, 0);
149
+ Q_hHT = reshape(Q_dq, {hd, H, T, 1});
150
+ W_qnorm = MatrixWithName("W_qnorm_" + to_string(i), hd, 1);
151
+ Q_qnorm = rmsNorm(Q_hHT, W_qnorm);
152
+ Q_hTH = permute(Q_qnorm, {0, 2, 1, 3});
153
+ Q_hb = reshapeBatch(Q_hTH, {hd, T, 1, HB});
154
+ Q_r = rope(Q_hb, cos_tab, sin_tab);
155
+
156
+ W_k = MatrixWithName("W_k_" + to_string(i), D, Dkv, 1, 1);
157
+ K_dkv = batchedMul(W_k, X_norm, 1, 0);
158
+ K_hHkvT = reshape(K_dkv, {hd, Hkv, T, 1});
159
+ W_knorm = MatrixWithName("W_knorm_" + to_string(i), hd, 1);
160
+ K_knorm = rmsNorm(K_hHkvT, W_knorm);
161
+ K_hTHkv = permute(K_knorm, {0, 2, 1, 3});
162
+ K_hb = reshapeBatch(K_hTHkv, {hd, T, 1, HkvB});
163
+ K_r = rope(K_hb, cos_tab, sin_tab);
164
+
165
+ W_v = MatrixWithName("W_v_" + to_string(i), D, Dkv, 1, 1);
166
+ V_dkv = batchedMul(W_v, X_norm, 1, 0);
167
+ V_hHkvT = reshape(V_dkv, {hd, Hkv, T, 1});
168
+ V_hTHkv = permute(V_hHkvT, {0, 2, 1, 3});
169
+ V_hb = reshapeBatch(V_hTHkv, {hd, T, 1, HkvB});
170
+
171
+ // 通过 MatrixWithName 找到 group 0 预载的共享 KV cache,无需重新分配显存
172
+ Kcache = MatrixWithName("Kcache_" + to_string(i), hd, T_kv, 1, HkvB);
173
+ setIsWeight(Kcache, 0);
174
+ K_cached = kvcache(K_r, Kcache);
175
+
176
+ Vcache = MatrixWithName("Vcache_" + to_string(i), hd, T_kv, 1, HkvB);
177
+ setIsWeight(Vcache, 0);
178
+ V_cached = kvcache(V_hb, Vcache);
179
+
180
+ K_r2 = reshapeBatch(K_cached, {hd, T_kv, HkvB, 1});
181
+ K_r3 = tile(K_r2, {1, 1, 1, 2});
182
+ K_r4 = permute(K_r3, {0, 1, 3, 2});
183
+ K_tiled = reshapeBatch(K_r4, {hd, T_kv, 1, HB});
184
+
185
+ V_r2 = reshapeBatch(V_cached, {hd, T_kv, HkvB, 1});
186
+ V_r3 = tile(V_r2, {1, 1, 1, 2});
187
+ V_r4 = permute(V_r3, {0, 1, 3, 2});
188
+ V_tiled = reshapeBatch(V_r4, {hd, T_kv, 1, HB});
189
+
190
+ Attn = attention(Q_r, K_tiled, V_tiled, hd, 1);
191
+
192
+ Attn_hTH = reshapeBatch(Attn, {hd, T, H, 1});
193
+ Attn_hHT = permute(Attn_hTH, {0, 2, 1, 3});
194
+ Attn_flat = reshape(Attn_hHT, {Dq, T, 1, 1});
195
+ W_o = MatrixWithName("W_o_" + to_string(i), Dq, D, 1, 1);
196
+ O_out = batchedMul(W_o, Attn_flat, 1, 0);
197
+
198
+ R1 = X + O_out;
199
+
200
+ W_rms_ffn = MatrixWithName("W_rms_ffn_" + to_string(i), D, 1);
201
+ R1_norm = rmsNorm(R1, W_rms_ffn);
202
+
203
+ W_gate = MatrixWithName("W_gate_" + to_string(i), D, I, 1, 1);
204
+ W_up = MatrixWithName("W_up_" + to_string(i), D, I, 1, 1);
205
+ gate_out = silu(batchedMul(W_gate, R1_norm, 1, 0));
206
+ up_out = batchedMul(W_up, R1_norm, 1, 0);
207
+ gated = elementMul(gate_out, up_out);
208
+ W_down = MatrixWithName("W_down_" + to_string(i), I, D, 1, 1);
209
+ ffn_out = batchedMul(W_down, gated, 1, 0);
210
+
211
+ X = R1 + ffn_out;
212
+ }
213
+
214
+ W_rms_final = MatrixWithName("W_rms_final", D, 1);
215
+ X_final = rmsNorm(X, W_rms_final);
216
+ W_lm_head = MatrixWithName("W_lm_head", D, V, 1, 1);
217
+ logits = batchedMul(W_lm_head, X_final, 1, 0);
218
+
219
+ setXY(token_ids, logits);
220
+ '
qwen3/qwen3_8b_cccc.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:528987e32b63901db0fc36cb4f75fd643f8de13e65cc816178095b37d1ded3e1
3
+ size 16381484834
qwen3/qwen3_8b_fp16.ini ADDED
@@ -0,0 +1,220 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [train]
2
+ load_file = qwen3_8b_cccc.bin
3
+ load_net = 1
4
+ WorkType = 0
5
+ train_epochs = 0
6
+ Batch = 1
7
+ output_net = 1
8
+ gpu = 1
9
+ mp = 1
10
+ mp_device = 0
11
+ named_weights = 1
12
+ data_type = half
13
+
14
+ [llm]
15
+ tokenizer = tokenizer.json
16
+
17
+ [net]
18
+ net_num = 2
19
+
20
+ structure0='
21
+ D = 4096;
22
+ Dq = 4096;
23
+ Dkv = 1024;
24
+ H = 32;
25
+ Hkv = 8;
26
+ hd = 128;
27
+ I = 12288;
28
+ V = 151936;
29
+ T = 1024;
30
+ HB = 32;
31
+ HkvB = 8;
32
+
33
+ W_emb = MatrixWithName("W_emb", D, 1, 1, V);
34
+ token_ids = MatrixF(T, 1, 1, 1);
35
+ X = embed(token_ids, W_emb);
36
+
37
+ cos_tab = ropeCosTbl(T, hd, 1000000.0);
38
+ sin_tab = ropeSinTbl(T, hd, 1000000.0);
39
+
40
+ for (i = 0; i < 36; i++)
41
+ {
42
+ W_rms_attn = MatrixWithName("W_rms_attn_" + to_string(i), D, 1);
43
+ X_norm = rmsNorm(X, W_rms_attn);
44
+
45
+ W_q = MatrixWithName("W_q_" + to_string(i), D, Dq, 1, 1);
46
+ Q_dq = batchedMul(W_q, X_norm, 1, 0);
47
+ Q_hHT = reshape(Q_dq, {hd, H, T, 1});
48
+ W_qnorm = MatrixWithName("W_qnorm_" + to_string(i), hd, 1);
49
+ Q_qnorm = rmsNorm(Q_hHT, W_qnorm);
50
+ Q_hTH = permute(Q_qnorm, {0, 2, 1, 3});
51
+ Q_hb = reshapeBatch(Q_hTH, {hd, T, 1, HB});
52
+ Q_r = rope(Q_hb, cos_tab, sin_tab);
53
+
54
+ W_k = MatrixWithName("W_k_" + to_string(i), D, Dkv, 1, 1);
55
+ K_dkv = batchedMul(W_k, X_norm, 1, 0);
56
+ K_hHkvT = reshape(K_dkv, {hd, Hkv, T, 1});
57
+ W_knorm = MatrixWithName("W_knorm_" + to_string(i), hd, 1);
58
+ K_knorm = rmsNorm(K_hHkvT, W_knorm);
59
+ K_hTHkv = permute(K_knorm, {0, 2, 1, 3});
60
+ K_hb = reshapeBatch(K_hTHkv, {hd, T, 1, HkvB});
61
+ K_r = rope(K_hb, cos_tab, sin_tab);
62
+
63
+ W_v = MatrixWithName("W_v_" + to_string(i), D, Dkv, 1, 1);
64
+ V_dkv = batchedMul(W_v, X_norm, 1, 0);
65
+ V_hHkvT = reshape(V_dkv, {hd, Hkv, T, 1});
66
+ V_hTHkv = permute(V_hHkvT, {0, 2, 1, 3});
67
+ V_hb = reshapeBatch(V_hTHkv, {hd, T, 1, HkvB});
68
+
69
+ Kcache = MatrixWithName("Kcache_" + to_string(i), hd, T, 1, HkvB);
70
+ setIsWeight(Kcache, 0);
71
+ registerMatrix("Kcache_" + to_string(i), Kcache);
72
+ K_cached = kvcache(K_r, Kcache);
73
+
74
+ Vcache = MatrixWithName("Vcache_" + to_string(i), hd, T, 1, HkvB);
75
+ setIsWeight(Vcache, 0);
76
+ registerMatrix("Vcache_" + to_string(i), Vcache);
77
+ V_cached = kvcache(V_hb, Vcache);
78
+
79
+ K_r2 = reshapeBatch(K_cached, {hd, T, HkvB, 1});
80
+ K_r3 = tile(K_r2, {1, 1, 1, 4});
81
+ K_r4 = permute(K_r3, {0, 1, 3, 2});
82
+ K_tiled = reshapeBatch(K_r4, {hd, T, 1, HB});
83
+
84
+ V_r2 = reshapeBatch(V_cached, {hd, T, HkvB, 1});
85
+ V_r3 = tile(V_r2, {1, 1, 1, 4});
86
+ V_r4 = permute(V_r3, {0, 1, 3, 2});
87
+ V_tiled = reshapeBatch(V_r4, {hd, T, 1, HB});
88
+
89
+ Attn = attention(Q_r, K_tiled, V_tiled, hd, 1);
90
+
91
+ Attn_hTH = reshapeBatch(Attn, {hd, T, H, 1});
92
+ Attn_hHT = permute(Attn_hTH, {0, 2, 1, 3});
93
+ Attn_flat = reshape(Attn_hHT, {Dq, T, 1, 1});
94
+ W_o = MatrixWithName("W_o_" + to_string(i), Dq, D, 1, 1);
95
+ O_out = batchedMul(W_o, Attn_flat, 1, 0);
96
+
97
+ R1 = X + O_out;
98
+
99
+ W_rms_ffn = MatrixWithName("W_rms_ffn_" + to_string(i), D, 1);
100
+ R1_norm = rmsNorm(R1, W_rms_ffn);
101
+
102
+ W_gate = MatrixWithName("W_gate_" + to_string(i), D, I, 1, 1);
103
+ W_up = MatrixWithName("W_up_" + to_string(i), D, I, 1, 1);
104
+ gate_out = silu(batchedMul(W_gate, R1_norm, 1, 0));
105
+ up_out = batchedMul(W_up, R1_norm, 1, 0);
106
+ gated = elementMul(gate_out, up_out);
107
+ W_down = MatrixWithName("W_down_" + to_string(i), I, D, 1, 1);
108
+ ffn_out = batchedMul(W_down, gated, 1, 0);
109
+
110
+ X = R1 + ffn_out;
111
+ }
112
+
113
+ W_rms_final = MatrixWithName("W_rms_final", D, 1);
114
+ X_final = rmsNorm(X, W_rms_final);
115
+ W_lm_head = MatrixWithName("W_lm_head", D, V, 1, 1);
116
+ logits = batchedMul(W_lm_head, X_final, 1, 0);
117
+
118
+ setXY(token_ids, logits);
119
+ '
120
+
121
+ structure1='
122
+ D = 4096;
123
+ Dq = 4096;
124
+ Dkv = 1024;
125
+ H = 32;
126
+ Hkv = 8;
127
+ hd = 128;
128
+ I = 12288;
129
+ V = 151936;
130
+ T = 1;
131
+ T_kv = 1024;
132
+ HB = 32;
133
+ HkvB = 8;
134
+
135
+ W_emb = MatrixWithName("W_emb", D, 1, 1, V);
136
+ token_ids = MatrixF(T, 1, 1, 1);
137
+ X = embed(token_ids, W_emb);
138
+
139
+ cos_tab = ropeCosTbl(T_kv, hd, 1000000.0);
140
+ sin_tab = ropeSinTbl(T_kv, hd, 1000000.0);
141
+
142
+ for (i = 0; i < 36; i++)
143
+ {
144
+ W_rms_attn = MatrixWithName("W_rms_attn_" + to_string(i), D, 1);
145
+ X_norm = rmsNorm(X, W_rms_attn);
146
+
147
+ W_q = MatrixWithName("W_q_" + to_string(i), D, Dq, 1, 1);
148
+ Q_dq = batchedMul(W_q, X_norm, 1, 0);
149
+ Q_hHT = reshape(Q_dq, {hd, H, T, 1});
150
+ W_qnorm = MatrixWithName("W_qnorm_" + to_string(i), hd, 1);
151
+ Q_qnorm = rmsNorm(Q_hHT, W_qnorm);
152
+ Q_hTH = permute(Q_qnorm, {0, 2, 1, 3});
153
+ Q_hb = reshapeBatch(Q_hTH, {hd, T, 1, HB});
154
+ Q_r = rope(Q_hb, cos_tab, sin_tab);
155
+
156
+ W_k = MatrixWithName("W_k_" + to_string(i), D, Dkv, 1, 1);
157
+ K_dkv = batchedMul(W_k, X_norm, 1, 0);
158
+ K_hHkvT = reshape(K_dkv, {hd, Hkv, T, 1});
159
+ W_knorm = MatrixWithName("W_knorm_" + to_string(i), hd, 1);
160
+ K_knorm = rmsNorm(K_hHkvT, W_knorm);
161
+ K_hTHkv = permute(K_knorm, {0, 2, 1, 3});
162
+ K_hb = reshapeBatch(K_hTHkv, {hd, T, 1, HkvB});
163
+ K_r = rope(K_hb, cos_tab, sin_tab);
164
+
165
+ W_v = MatrixWithName("W_v_" + to_string(i), D, Dkv, 1, 1);
166
+ V_dkv = batchedMul(W_v, X_norm, 1, 0);
167
+ V_hHkvT = reshape(V_dkv, {hd, Hkv, T, 1});
168
+ V_hTHkv = permute(V_hHkvT, {0, 2, 1, 3});
169
+ V_hb = reshapeBatch(V_hTHkv, {hd, T, 1, HkvB});
170
+
171
+ // 通过 MatrixWithName 找到 group 0 预载的共享 KV cache,无需重新分配显存
172
+ Kcache = MatrixWithName("Kcache_" + to_string(i), hd, T_kv, 1, HkvB);
173
+ setIsWeight(Kcache, 0);
174
+ K_cached = kvcache(K_r, Kcache);
175
+
176
+ Vcache = MatrixWithName("Vcache_" + to_string(i), hd, T_kv, 1, HkvB);
177
+ setIsWeight(Vcache, 0);
178
+ V_cached = kvcache(V_hb, Vcache);
179
+
180
+ K_r2 = reshapeBatch(K_cached, {hd, T_kv, HkvB, 1});
181
+ K_r3 = tile(K_r2, {1, 1, 1, 4});
182
+ K_r4 = permute(K_r3, {0, 1, 3, 2});
183
+ K_tiled = reshapeBatch(K_r4, {hd, T_kv, 1, HB});
184
+
185
+ V_r2 = reshapeBatch(V_cached, {hd, T_kv, HkvB, 1});
186
+ V_r3 = tile(V_r2, {1, 1, 1, 4});
187
+ V_r4 = permute(V_r3, {0, 1, 3, 2});
188
+ V_tiled = reshapeBatch(V_r4, {hd, T_kv, 1, HB});
189
+
190
+ Attn = attention(Q_r, K_tiled, V_tiled, hd, 1);
191
+
192
+ Attn_hTH = reshapeBatch(Attn, {hd, T, H, 1});
193
+ Attn_hHT = permute(Attn_hTH, {0, 2, 1, 3});
194
+ Attn_flat = reshape(Attn_hHT, {Dq, T, 1, 1});
195
+ W_o = MatrixWithName("W_o_" + to_string(i), Dq, D, 1, 1);
196
+ O_out = batchedMul(W_o, Attn_flat, 1, 0);
197
+
198
+ R1 = X + O_out;
199
+
200
+ W_rms_ffn = MatrixWithName("W_rms_ffn_" + to_string(i), D, 1);
201
+ R1_norm = rmsNorm(R1, W_rms_ffn);
202
+
203
+ W_gate = MatrixWithName("W_gate_" + to_string(i), D, I, 1, 1);
204
+ W_up = MatrixWithName("W_up_" + to_string(i), D, I, 1, 1);
205
+ gate_out = silu(batchedMul(W_gate, R1_norm, 1, 0));
206
+ up_out = batchedMul(W_up, R1_norm, 1, 0);
207
+ gated = elementMul(gate_out, up_out);
208
+ W_down = MatrixWithName("W_down_" + to_string(i), I, D, 1, 1);
209
+ ffn_out = batchedMul(W_down, gated, 1, 0);
210
+
211
+ X = R1 + ffn_out;
212
+ }
213
+
214
+ W_rms_final = MatrixWithName("W_rms_final", D, 1);
215
+ X_final = rmsNorm(X, W_rms_final);
216
+ W_lm_head = MatrixWithName("W_lm_head", D, V, 1, 1);
217
+ logits = batchedMul(W_lm_head, X_final, 1, 0);
218
+
219
+ setXY(token_ids, logits);
220
+ '
qwen3/qwen3_decoder_cccc.bin CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:43efb535cfff9bfab19705aba4650df58a9d3b0b6975e6270d68ad0cd504945a
3
- size 3006540214
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0244cd483b026a7e461c0cf40cdcea24e808a0dada44778f2310ba143b373ccf
3
+ size 1503275183