main
yaml 474 lines 7.35 KB
Raw
1 # Sparse MLA benchmark: forward_mha vs forward_mqa
2 #
3 # Usage:
4 # python benchmark.py --config configs/mla_sparse_mha_vs_mqa.yaml
5 #
6 # Heatmap grid:
7 # - batch_size: 1, 2, 4, 8, 16, 32
8 # - seq_len: 32, 64, 128, 256, 512, 1024, 2048
9 # - q_len: powers of two through seq_len
10 #
11 # Specs with q_len < seq_len include context; the q_len == seq_len diagonal
12 # covers pure prefill.
13 # The model shape below is the DP case. For the TP8 run, manually change
14 # model.num_q_heads from 128 to 16 before rerunning this benchmark.
15
16 mode: mha_vs_mqa
17
18 model:
19 name: "deepseek-v3"
20 num_layers: 60
21 num_q_heads: 128
22 num_kv_heads: 1
23 head_dim: 576
24 kv_lora_rank: 512
25 qk_nope_head_dim: 128
26 qk_rope_head_dim: 64
27 v_head_dim: 128
28 block_size: 128
29 max_model_len: 2048
30
31 batch_specs:
32 # Batch size 1
33 # seq_len = 32
34 - "1q1s32"
35 - "1q2s32"
36 - "1q4s32"
37 - "1q8s32"
38 - "1q16s32"
39 - "1q32"
40 # seq_len = 64
41 - "1q1s64"
42 - "1q2s64"
43 - "1q4s64"
44 - "1q8s64"
45 - "1q16s64"
46 - "1q32s64"
47 - "1q64"
48 # seq_len = 128
49 - "1q1s128"
50 - "1q2s128"
51 - "1q4s128"
52 - "1q8s128"
53 - "1q16s128"
54 - "1q32s128"
55 - "1q64s128"
56 - "1q128"
57 # seq_len = 256
58 - "1q1s256"
59 - "1q2s256"
60 - "1q4s256"
61 - "1q8s256"
62 - "1q16s256"
63 - "1q32s256"
64 - "1q64s256"
65 - "1q128s256"
66 - "1q256"
67 # seq_len = 512
68 - "1q1s512"
69 - "1q2s512"
70 - "1q4s512"
71 - "1q8s512"
72 - "1q16s512"
73 - "1q32s512"
74 - "1q64s512"
75 - "1q128s512"
76 - "1q256s512"
77 - "1q512"
78 # seq_len = 1024
79 - "1q1s1024"
80 - "1q2s1024"
81 - "1q4s1024"
82 - "1q8s1024"
83 - "1q16s1024"
84 - "1q32s1024"
85 - "1q64s1024"
86 - "1q128s1024"
87 - "1q256s1024"
88 - "1q512s1024"
89 - "1q1024"
90 # seq_len = 2048
91 - "1q1s2048"
92 - "1q2s2048"
93 - "1q4s2048"
94 - "1q8s2048"
95 - "1q16s2048"
96 - "1q32s2048"
97 - "1q64s2048"
98 - "1q128s2048"
99 - "1q256s2048"
100 - "1q512s2048"
101 - "1q1024s2048"
102 - "1q2048"
103
104 # Batch size 2
105 # seq_len = 32
106 - "2q1s32"
107 - "2q2s32"
108 - "2q4s32"
109 - "2q8s32"
110 - "2q16s32"
111 - "2q32"
112 # seq_len = 64
113 - "2q1s64"
114 - "2q2s64"
115 - "2q4s64"
116 - "2q8s64"
117 - "2q16s64"
118 - "2q32s64"
119 - "2q64"
120 # seq_len = 128
121 - "2q1s128"
122 - "2q2s128"
123 - "2q4s128"
124 - "2q8s128"
125 - "2q16s128"
126 - "2q32s128"
127 - "2q64s128"
128 - "2q128"
129 # seq_len = 256
130 - "2q1s256"
131 - "2q2s256"
132 - "2q4s256"
133 - "2q8s256"
134 - "2q16s256"
135 - "2q32s256"
136 - "2q64s256"
137 - "2q128s256"
138 - "2q256"
139 # seq_len = 512
140 - "2q1s512"
141 - "2q2s512"
142 - "2q4s512"
143 - "2q8s512"
144 - "2q16s512"
145 - "2q32s512"
146 - "2q64s512"
147 - "2q128s512"
148 - "2q256s512"
149 - "2q512"
150 # seq_len = 1024
151 - "2q1s1024"
152 - "2q2s1024"
153 - "2q4s1024"
154 - "2q8s1024"
155 - "2q16s1024"
156 - "2q32s1024"
157 - "2q64s1024"
158 - "2q128s1024"
159 - "2q256s1024"
160 - "2q512s1024"
161 - "2q1024"
162 # seq_len = 2048
163 - "2q1s2048"
164 - "2q2s2048"
165 - "2q4s2048"
166 - "2q8s2048"
167 - "2q16s2048"
168 - "2q32s2048"
169 - "2q64s2048"
170 - "2q128s2048"
171 - "2q256s2048"
172 - "2q512s2048"
173 - "2q1024s2048"
174 - "2q2048"
175
176 # Batch size 4
177 # seq_len = 32
178 - "4q1s32"
179 - "4q2s32"
180 - "4q4s32"
181 - "4q8s32"
182 - "4q16s32"
183 - "4q32"
184 # seq_len = 64
185 - "4q1s64"
186 - "4q2s64"
187 - "4q4s64"
188 - "4q8s64"
189 - "4q16s64"
190 - "4q32s64"
191 - "4q64"
192 # seq_len = 128
193 - "4q1s128"
194 - "4q2s128"
195 - "4q4s128"
196 - "4q8s128"
197 - "4q16s128"
198 - "4q32s128"
199 - "4q64s128"
200 - "4q128"
201 # seq_len = 256
202 - "4q1s256"
203 - "4q2s256"
204 - "4q4s256"
205 - "4q8s256"
206 - "4q16s256"
207 - "4q32s256"
208 - "4q64s256"
209 - "4q128s256"
210 - "4q256"
211 # seq_len = 512
212 - "4q1s512"
213 - "4q2s512"
214 - "4q4s512"
215 - "4q8s512"
216 - "4q16s512"
217 - "4q32s512"
218 - "4q64s512"
219 - "4q128s512"
220 - "4q256s512"
221 - "4q512"
222 # seq_len = 1024
223 - "4q1s1024"
224 - "4q2s1024"
225 - "4q4s1024"
226 - "4q8s1024"
227 - "4q16s1024"
228 - "4q32s1024"
229 - "4q64s1024"
230 - "4q128s1024"
231 - "4q256s1024"
232 - "4q512s1024"
233 - "4q1024"
234 # seq_len = 2048
235 - "4q1s2048"
236 - "4q2s2048"
237 - "4q4s2048"
238 - "4q8s2048"
239 - "4q16s2048"
240 - "4q32s2048"
241 - "4q64s2048"
242 - "4q128s2048"
243 - "4q256s2048"
244 - "4q512s2048"
245 - "4q1024s2048"
246 - "4q2048"
247
248 # Batch size 8
249 # seq_len = 32
250 - "8q1s32"
251 - "8q2s32"
252 - "8q4s32"
253 - "8q8s32"
254 - "8q16s32"
255 - "8q32"
256 # seq_len = 64
257 - "8q1s64"
258 - "8q2s64"
259 - "8q4s64"
260 - "8q8s64"
261 - "8q16s64"
262 - "8q32s64"
263 - "8q64"
264 # seq_len = 128
265 - "8q1s128"
266 - "8q2s128"
267 - "8q4s128"
268 - "8q8s128"
269 - "8q16s128"
270 - "8q32s128"
271 - "8q64s128"
272 - "8q128"
273 # seq_len = 256
274 - "8q1s256"
275 - "8q2s256"
276 - "8q4s256"
277 - "8q8s256"
278 - "8q16s256"
279 - "8q32s256"
280 - "8q64s256"
281 - "8q128s256"
282 - "8q256"
283 # seq_len = 512
284 - "8q1s512"
285 - "8q2s512"
286 - "8q4s512"
287 - "8q8s512"
288 - "8q16s512"
289 - "8q32s512"
290 - "8q64s512"
291 - "8q128s512"
292 - "8q256s512"
293 - "8q512"
294 # seq_len = 1024
295 - "8q1s1024"
296 - "8q2s1024"
297 - "8q4s1024"
298 - "8q8s1024"
299 - "8q16s1024"
300 - "8q32s1024"
301 - "8q64s1024"
302 - "8q128s1024"
303 - "8q256s1024"
304 - "8q512s1024"
305 - "8q1024"
306 # seq_len = 2048
307 - "8q1s2048"
308 - "8q2s2048"
309 - "8q4s2048"
310 - "8q8s2048"
311 - "8q16s2048"
312 - "8q32s2048"
313 - "8q64s2048"
314 - "8q128s2048"
315 - "8q256s2048"
316 - "8q512s2048"
317 - "8q1024s2048"
318 - "8q2048"
319
320 # Batch size 16
321 # seq_len = 32
322 - "16q1s32"
323 - "16q2s32"
324 - "16q4s32"
325 - "16q8s32"
326 - "16q16s32"
327 - "16q32"
328 # seq_len = 64
329 - "16q1s64"
330 - "16q2s64"
331 - "16q4s64"
332 - "16q8s64"
333 - "16q16s64"
334 - "16q32s64"
335 - "16q64"
336 # seq_len = 128
337 - "16q1s128"
338 - "16q2s128"
339 - "16q4s128"
340 - "16q8s128"
341 - "16q16s128"
342 - "16q32s128"
343 - "16q64s128"
344 - "16q128"
345 # seq_len = 256
346 - "16q1s256"
347 - "16q2s256"
348 - "16q4s256"
349 - "16q8s256"
350 - "16q16s256"
351 - "16q32s256"
352 - "16q64s256"
353 - "16q128s256"
354 - "16q256"
355 # seq_len = 512
356 - "16q1s512"
357 - "16q2s512"
358 - "16q4s512"
359 - "16q8s512"
360 - "16q16s512"
361 - "16q32s512"
362 - "16q64s512"
363 - "16q128s512"
364 - "16q256s512"
365 - "16q512"
366 # seq_len = 1024
367 - "16q1s1024"
368 - "16q2s1024"
369 - "16q4s1024"
370 - "16q8s1024"
371 - "16q16s1024"
372 - "16q32s1024"
373 - "16q64s1024"
374 - "16q128s1024"
375 - "16q256s1024"
376 - "16q512s1024"
377 - "16q1024"
378 # seq_len = 2048
379 - "16q1s2048"
380 - "16q2s2048"
381 - "16q4s2048"
382 - "16q8s2048"
383 - "16q16s2048"
384 - "16q32s2048"
385 - "16q64s2048"
386 - "16q128s2048"
387 - "16q256s2048"
388 - "16q512s2048"
389 - "16q1024s2048"
390 - "16q2048"
391
392 # Batch size 32
393 # seq_len = 32
394 - "32q1s32"
395 - "32q2s32"
396 - "32q4s32"
397 - "32q8s32"
398 - "32q16s32"
399 - "32q32"
400 # seq_len = 64
401 - "32q1s64"
402 - "32q2s64"
403 - "32q4s64"
404 - "32q8s64"
405 - "32q16s64"
406 - "32q32s64"
407 - "32q64"
408 # seq_len = 128
409 - "32q1s128"
410 - "32q2s128"
411 - "32q4s128"
412 - "32q8s128"
413 - "32q16s128"
414 - "32q32s128"
415 - "32q64s128"
416 - "32q128"
417 # seq_len = 256
418 - "32q1s256"
419 - "32q2s256"
420 - "32q4s256"
421 - "32q8s256"
422 - "32q16s256"
423 - "32q32s256"
424 - "32q64s256"
425 - "32q128s256"
426 - "32q256"
427 # seq_len = 512
428 - "32q1s512"
429 - "32q2s512"
430 - "32q4s512"
431 - "32q8s512"
432 - "32q16s512"
433 - "32q32s512"
434 - "32q64s512"
435 - "32q128s512"
436 - "32q256s512"
437 - "32q512"
438 # seq_len = 1024
439 - "32q1s1024"
440 - "32q2s1024"
441 - "32q4s1024"
442 - "32q8s1024"
443 - "32q16s1024"
444 - "32q32s1024"
445 - "32q64s1024"
446 - "32q128s1024"
447 - "32q256s1024"
448 - "32q512s1024"
449 - "32q1024"
450 # seq_len = 2048
451 - "32q1s2048"
452 - "32q2s2048"
453 - "32q4s2048"
454 - "32q8s2048"
455 - "32q16s2048"
456 - "32q32s2048"
457 - "32q64s2048"
458 - "32q128s2048"
459 - "32q256s2048"
460 - "32q512s2048"
461 - "32q1024s2048"
462 - "32q2048"
463
464 backends:
465 - FLASHMLA_SPARSE
466
467 device: "cuda:0"
468 profile_memory: false
469 sparse_mla_dense_mha_max_seq_len: 2048
470 sparse_mla_topk_pattern: "random"
471
472 output:
473 csv: "benchmark_output/mla_sparse_mha_vs_mqa.csv"
474 json: "benchmark_output/mla_sparse_mha_vs_mqa.json"