mjolnir-cli 0.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. mjolnir_cli/__init__.py +8 -0
  2. mjolnir_cli/__main__.py +4 -0
  3. mjolnir_cli/accuracy.py +333 -0
  4. mjolnir_cli/autoresearch.py +539 -0
  5. mjolnir_cli/benchy.py +475 -0
  6. mjolnir_cli/bundled/configs/Qwen/Qwen3.8-27B/NVFP4/config.yaml +78 -0
  7. mjolnir_cli/bundled/configs/Qwen/Qwen3.8-27B/NVFP4_DFLASH2/config.yaml +103 -0
  8. mjolnir_cli/bundled/configs/Qwen/Qwen3.8-27B/NVFP4_DSPARK/config.yaml +102 -0
  9. mjolnir_cli/bundled/configs/Qwen/Qwen3.8-27B/NVFP4_FA2/config.yaml +84 -0
  10. mjolnir_cli/bundled/configs/Qwen/Qwen3.8-27B/NVFP4_FA4hd256/config.yaml +104 -0
  11. mjolnir_cli/bundled/configs/Qwen/Qwen3.8-27B/NVFP4_MJOLNIR/config.yaml +86 -0
  12. mjolnir_cli/bundled/configs/Qwen/Qwen3.8-27B/NVFP4_MJOLNIR_E2M3/config.yaml +93 -0
  13. mjolnir_cli/bundled/configs/Qwen/Qwen3.8-27B/NVFP4_MJOLNIR_E2M3_DFLASH2/config.yaml +123 -0
  14. mjolnir_cli/bundled/configs/Qwen/Qwen3.8-27B/NVFP4_MJOLNIR_E2M3_DSPARK/config.yaml +124 -0
  15. mjolnir_cli/bundled/configs/Qwen/Qwen3.8-27B/NVFP4_MJOLNIR_E2M3_LMH8/.env +2 -0
  16. mjolnir_cli/bundled/configs/Qwen/Qwen3.8-27B/NVFP4_MJOLNIR_E2M3_LMH8/config.yaml +98 -0
  17. mjolnir_cli/bundled/configs/Qwen/Qwen3.8-27B/NVFP4_MJOLNIR_E2M3_LMH8_VT32K/.env +4 -0
  18. mjolnir_cli/bundled/configs/Qwen/Qwen3.8-27B/NVFP4_MJOLNIR_E2M3_LMH8_VT32K/config.yaml +98 -0
  19. mjolnir_cli/bundled/configs/Qwen/Qwen3.8-27B/NVFP4_MJOLNIR_E2M3_LMH8_VT64K/.env +4 -0
  20. mjolnir_cli/bundled/configs/Qwen/Qwen3.8-27B/NVFP4_MJOLNIR_E2M3_LMH8_VT64K/config.yaml +102 -0
  21. mjolnir_cli/bundled/configs/Qwen/Qwen3.8-27B/NVFP4_MJOLNIR_E2M3_VT32K/.env +3 -0
  22. mjolnir_cli/bundled/configs/Qwen/Qwen3.8-27B/NVFP4_MJOLNIR_E2M3_VT32K/config.yaml +98 -0
  23. mjolnir_cli/bundled/configs/Qwen/Qwen3.8-27B/draft_vocab.json +1 -0
  24. mjolnir_cli/bundled/configs/Qwen/Qwen3.8-27B/kv_scales.json +35197 -0
  25. mjolnir_cli/bundled/configs/Qwen/Qwen3.8_chat_template.jinja +456 -0
  26. mjolnir_cli/bundled/docker/litellm/docker-compose.yaml +113 -0
  27. mjolnir_cli/bundled/docker/litellm/litellm.env.example +51 -0
  28. mjolnir_cli/bundled/docker/litellm/litellm_config.template.example.yaml +192 -0
  29. mjolnir_cli/bundled/docker/perses/README.md +89 -0
  30. mjolnir_cli/bundled/docker/perses/dashboards/global-datasource.yaml +17 -0
  31. mjolnir_cli/bundled/docker/perses/dashboards/performance_statistics.yaml +771 -0
  32. mjolnir_cli/bundled/docker/perses/dashboards/project.yaml +13 -0
  33. mjolnir_cli/bundled/docker/perses/dashboards/query_statistics.yaml +399 -0
  34. mjolnir_cli/bundled/docker/perses/docker-compose.yaml +51 -0
  35. mjolnir_cli/bundled/docker/perses/perses.yml +16 -0
  36. mjolnir_cli/bundled/docker/perses/prometheus.template.yaml +20 -0
  37. mjolnir_cli/bundled/scripts/hw/setup-thor.sh +1287 -0
  38. mjolnir_cli/cachectl.py +146 -0
  39. mjolnir_cli/charts.py +1687 -0
  40. mjolnir_cli/cli.py +1480 -0
  41. mjolnir_cli/clidoc.py +170 -0
  42. mjolnir_cli/config.py +346 -0
  43. mjolnir_cli/dockerctl.py +533 -0
  44. mjolnir_cli/drivers/fa2_driver.py +89 -0
  45. mjolnir_cli/drivers/fi_driver.py +134 -0
  46. mjolnir_cli/e2e.py +302 -0
  47. mjolnir_cli/fonts/InterDisplay-Bold.ttf +0 -0
  48. mjolnir_cli/fonts/InterDisplay-Medium.ttf +0 -0
  49. mjolnir_cli/fonts/InterDisplay-Regular.ttf +0 -0
  50. mjolnir_cli/fonts/InterDisplay-SemiBold.ttf +0 -0
  51. mjolnir_cli/fonts/OFL.txt +92 -0
  52. mjolnir_cli/gate.py +233 -0
  53. mjolnir_cli/history.py +159 -0
  54. mjolnir_cli/interactive.py +383 -0
  55. mjolnir_cli/legs.py +109 -0
  56. mjolnir_cli/litellm.py +254 -0
  57. mjolnir_cli/perses.py +214 -0
  58. mjolnir_cli/picker.py +70 -0
  59. mjolnir_cli/readme.py +1020 -0
  60. mjolnir_cli/stack.py +340 -0
  61. mjolnir_cli/tasks.py +122 -0
  62. mjolnir_cli/theme.py +281 -0
  63. mjolnir_cli/thor.py +108 -0
  64. mjolnir_cli/verify/__init__.py +2 -0
  65. mjolnir_cli/verify/cli.py +816 -0
  66. mjolnir_cli/verify/docker.py +334 -0
  67. mjolnir_cli/verify/kvcache.py +180 -0
  68. mjolnir_cli/verify/legs.py +134 -0
  69. mjolnir_cli/verify/ncu.py +141 -0
  70. mjolnir_cli/verify/profile.py +312 -0
  71. mjolnir_cli/verify/report.py +177 -0
  72. mjolnir_cli/verify/results.py +157 -0
  73. mjolnir_cli/verify/spec.py +279 -0
  74. mjolnir_cli/verify/stages.py +817 -0
  75. mjolnir_cli-0.2.0.dist-info/METADATA +87 -0
  76. mjolnir_cli-0.2.0.dist-info/RECORD +80 -0
  77. mjolnir_cli-0.2.0.dist-info/WHEEL +4 -0
  78. mjolnir_cli-0.2.0.dist-info/entry_points.txt +2 -0
  79. mjolnir_cli-0.2.0.dist-info/licenses/LICENSE +202 -0
  80. mjolnir_cli-0.2.0.dist-info/licenses/NOTICE +64 -0
@@ -0,0 +1,771 @@
1
+ # Vendored from vllm-project/vllm (examples/observability/dashboards/perses/performance_statistics.yaml),
2
+ # fetched 2026-09-30. One adaptation for standalone Perses: `kind:
3
+ # PersesDashboard` (the k8s-operator CRD form) -> `kind: Dashboard` (the
4
+ # form the standalone API / provisioning accepts). Second adaptation:
5
+ # `project: ""` -> `project: vllm` (standalone Perses only renders dashboards
6
+ # whose project exists as a Project resource — see project.yaml). Everything
7
+ # else verbatim.
8
+ kind: Dashboard
9
+ metadata:
10
+ name: performance-statistics
11
+ createdAt: 0001-01-01T00:00:00Z
12
+ updatedAt: 0001-01-01T00:00:00Z
13
+ version: 0
14
+ project: vllm
15
+ spec:
16
+ display:
17
+ name: Performance Statistics
18
+
19
+ variables:
20
+ - kind: ListVariable
21
+ spec:
22
+ display:
23
+ name: Deployment_ID
24
+ hidden: false
25
+ name: Deployment_id
26
+ allowAllValue: true
27
+ allowMultiple: true
28
+ defaultValue:
29
+ - $__all
30
+ sort: alphabetical-asc
31
+ plugin:
32
+ kind: PrometheusLabelValuesVariable
33
+ spec:
34
+ datasource:
35
+ kind: PrometheusDatasource
36
+ name: accelerators-thanos-querier-datasource
37
+ labelName: model_name
38
+ matchers:
39
+ # Any one vllm metric that always carries model_name
40
+ - vllm:generation_tokens_total{}
41
+
42
+ panels:
43
+ "1":
44
+ kind: Panel
45
+ spec:
46
+ display:
47
+ name: E2E Latency over Time
48
+ plugin:
49
+ kind: TimeSeriesChart
50
+ spec:
51
+ legend:
52
+ mode: table
53
+ position: bottom
54
+ queries:
55
+ - kind: TimeSeriesQuery
56
+ spec:
57
+ plugin:
58
+ kind: PrometheusTimeSeriesQuery
59
+ spec:
60
+ datasource:
61
+ kind: PrometheusDatasource
62
+ name: accelerators-thanos-querier-datasource
63
+ # avg latency by model = sum(rate(sum)) / sum(rate(count))
64
+ query: >
65
+ sum by (model_name) (rate(vllm:e2e_request_latency_seconds_sum{model_name=~"$Deployment_id"}[$__interval]))
66
+ /
67
+ sum by (model_name) (rate(vllm:e2e_request_latency_seconds_count{model_name=~"$Deployment_id"}[$__interval]))
68
+ seriesNameFormat: '{{model_name}}'
69
+
70
+ "2":
71
+ kind: Panel
72
+ spec:
73
+ display:
74
+ name: E2E Latency (Avg)
75
+ plugin:
76
+ kind: StatChart
77
+ spec:
78
+ calculation: last-number
79
+ queries:
80
+ - kind: TimeSeriesQuery
81
+ spec:
82
+ plugin:
83
+ kind: PrometheusTimeSeriesQuery
84
+ spec:
85
+ datasource:
86
+ kind: PrometheusDatasource
87
+ name: accelerators-thanos-querier-datasource
88
+ query: >
89
+ (sum by (model_name) (increase(vllm:e2e_request_latency_seconds_sum{model_name=~"$Deployment_id"}[$__range])))
90
+ /
91
+ (sum by (model_name) (increase(vllm:e2e_request_latency_seconds_count{model_name=~"$Deployment_id"}[$__range])))
92
+
93
+ "3":
94
+ kind: Panel
95
+ spec:
96
+ display:
97
+ name: E2E Latency (P50)
98
+ plugin:
99
+ kind: StatChart
100
+ spec:
101
+ calculation: last-number
102
+ queries:
103
+ - kind: TimeSeriesQuery
104
+ spec:
105
+ plugin:
106
+ kind: PrometheusTimeSeriesQuery
107
+ spec:
108
+ datasource:
109
+ kind: PrometheusDatasource
110
+ name: accelerators-thanos-querier-datasource
111
+ query: >
112
+ histogram_quantile(
113
+ 0.50,
114
+ sum by (le, model_name) (
115
+ rate(vllm:e2e_request_latency_seconds_bucket{model_name=~"$Deployment_id"}[$__interval])
116
+ )
117
+ )
118
+
119
+ "4":
120
+ kind: Panel
121
+ spec:
122
+ display:
123
+ name: E2E Latency (P90)
124
+ plugin:
125
+ kind: StatChart
126
+ spec:
127
+ calculation: last-number
128
+ queries:
129
+ - kind: TimeSeriesQuery
130
+ spec:
131
+ plugin:
132
+ kind: PrometheusTimeSeriesQuery
133
+ spec:
134
+ datasource:
135
+ kind: PrometheusDatasource
136
+ name: accelerators-thanos-querier-datasource
137
+ query: >
138
+ histogram_quantile(
139
+ 0.90,
140
+ sum by (le, model_name) (
141
+ rate(vllm:e2e_request_latency_seconds_bucket{model_name=~"$Deployment_id"}[$__interval])
142
+ )
143
+ )
144
+
145
+ "5":
146
+ kind: Panel
147
+ spec:
148
+ display:
149
+ name: E2E Latency (P99)
150
+ plugin:
151
+ kind: StatChart
152
+ spec:
153
+ calculation: last-number
154
+ queries:
155
+ - kind: TimeSeriesQuery
156
+ spec:
157
+ plugin:
158
+ kind: PrometheusTimeSeriesQuery
159
+ spec:
160
+ datasource:
161
+ kind: PrometheusDatasource
162
+ name: accelerators-thanos-querier-datasource
163
+ query: >
164
+ histogram_quantile(
165
+ 0.99,
166
+ sum by (le, model_name) (
167
+ rate(vllm:e2e_request_latency_seconds_bucket{model_name=~"$Deployment_id"}[$__interval])
168
+ )
169
+ )
170
+
171
+ "6":
172
+ kind: Panel
173
+ spec:
174
+ display:
175
+ name: TTFT over Time
176
+ plugin:
177
+ kind: TimeSeriesChart
178
+ spec:
179
+ legend:
180
+ mode: table
181
+ position: bottom
182
+ queries:
183
+ - kind: TimeSeriesQuery
184
+ spec:
185
+ plugin:
186
+ kind: PrometheusTimeSeriesQuery
187
+ spec:
188
+ datasource:
189
+ kind: PrometheusDatasource
190
+ name: accelerators-thanos-querier-datasource
191
+ query: >
192
+ sum by (model_name) (rate(vllm:time_to_first_token_seconds_sum{model_name=~"$Deployment_id"}[$__interval]))
193
+ /
194
+ sum by (model_name) (rate(vllm:time_to_first_token_seconds_count{model_name=~"$Deployment_id"}[$__interval]))
195
+ seriesNameFormat: '{{model_name}}'
196
+
197
+ "7":
198
+ kind: Panel
199
+ spec:
200
+ display:
201
+ name: TTFT (Avg)
202
+ plugin:
203
+ kind: StatChart
204
+ spec:
205
+ calculation: last-number
206
+ queries:
207
+ - kind: TimeSeriesQuery
208
+ spec:
209
+ plugin:
210
+ kind: PrometheusTimeSeriesQuery
211
+ spec:
212
+ datasource:
213
+ kind: PrometheusDatasource
214
+ name: accelerators-thanos-querier-datasource
215
+ query: >
216
+ (sum by (model_name) (increase(vllm:time_to_first_token_seconds_sum{model_name=~"$Deployment_id"}[$__range])))
217
+ /
218
+ (sum by (model_name) (increase(vllm:time_to_first_token_seconds_count{model_name=~"$Deployment_id"}[$__range])))
219
+
220
+ "8":
221
+ kind: Panel
222
+ spec:
223
+ display:
224
+ name: TTFT (P50)
225
+ plugin:
226
+ kind: StatChart
227
+ spec:
228
+ calculation: last-number
229
+ queries:
230
+ - kind: TimeSeriesQuery
231
+ spec:
232
+ plugin:
233
+ kind: PrometheusTimeSeriesQuery
234
+ spec:
235
+ datasource:
236
+ kind: PrometheusDatasource
237
+ name: accelerators-thanos-querier-datasource
238
+ query: >
239
+ histogram_quantile(
240
+ 0.50,
241
+ sum by (le, model_name) (
242
+ rate(vllm:time_to_first_token_seconds_bucket{model_name=~"$Deployment_id"}[$__interval])
243
+ )
244
+ )
245
+
246
+ "9":
247
+ kind: Panel
248
+ spec:
249
+ display:
250
+ name: TTFT (P90)
251
+ plugin:
252
+ kind: StatChart
253
+ spec:
254
+ calculation: last-number
255
+ queries:
256
+ - kind: TimeSeriesQuery
257
+ spec:
258
+ plugin:
259
+ kind: PrometheusTimeSeriesQuery
260
+ spec:
261
+ datasource:
262
+ kind: PrometheusDatasource
263
+ name: accelerators-thanos-querier-datasource
264
+ query: >
265
+ histogram_quantile(
266
+ 0.90,
267
+ sum by (le, model_name) (
268
+ rate(vllm:time_to_first_token_seconds_bucket{model_name=~"$Deployment_id"}[$__interval])
269
+ )
270
+ )
271
+
272
+ "10":
273
+ kind: Panel
274
+ spec:
275
+ display:
276
+ name: TTFT (P99)
277
+ plugin:
278
+ kind: StatChart
279
+ spec:
280
+ calculation: last-number
281
+ queries:
282
+ - kind: TimeSeriesQuery
283
+ spec:
284
+ plugin:
285
+ kind: PrometheusTimeSeriesQuery
286
+ spec:
287
+ datasource:
288
+ kind: PrometheusDatasource
289
+ name: accelerators-thanos-querier-datasource
290
+ query: >
291
+ histogram_quantile(
292
+ 0.99,
293
+ sum by (le, model_name) (
294
+ rate(vllm:time_to_first_token_seconds_bucket{model_name=~"$Deployment_id"}[$__interval])
295
+ )
296
+ )
297
+
298
+ "11":
299
+ kind: Panel
300
+ spec:
301
+ display:
302
+ name: ITL (Time per Output Token) over Time
303
+ plugin:
304
+ kind: TimeSeriesChart
305
+ spec:
306
+ legend:
307
+ mode: table
308
+ position: bottom
309
+ queries:
310
+ - kind: TimeSeriesQuery
311
+ spec:
312
+ plugin:
313
+ kind: PrometheusTimeSeriesQuery
314
+ spec:
315
+ datasource:
316
+ kind: PrometheusDatasource
317
+ name: accelerators-thanos-querier-datasource
318
+ query: >
319
+ sum by (model_name) (rate(vllm:inter_token_latency_seconds_sum{model_name=~"$Deployment_id"}[$__interval]))
320
+ /
321
+ sum by (model_name) (rate(vllm:inter_token_latency_seconds_count{model_name=~"$Deployment_id"}[$__interval]))
322
+ seriesNameFormat: '{{model_name}}'
323
+ - kind: TimeSeriesQuery
324
+ spec:
325
+ plugin:
326
+ kind: PrometheusTimeSeriesQuery
327
+ spec:
328
+ datasource:
329
+ kind: PrometheusDatasource
330
+ name: accelerators-thanos-querier-datasource
331
+ query: >
332
+ histogram_quantile(
333
+ 0.50,
334
+ sum by (le, model_name) (
335
+ rate(vllm:inter_token_latency_seconds_bucket{model_name=~"$Deployment_id"}[$__interval])
336
+ )
337
+ )
338
+ seriesNameFormat: '{{model_name}} p50'
339
+ - kind: TimeSeriesQuery
340
+ spec:
341
+ plugin:
342
+ kind: PrometheusTimeSeriesQuery
343
+ spec:
344
+ datasource:
345
+ kind: PrometheusDatasource
346
+ name: accelerators-thanos-querier-datasource
347
+ query: >
348
+ histogram_quantile(
349
+ 0.90,
350
+ sum by (le, model_name) (
351
+ rate(vllm:inter_token_latency_seconds_bucket{model_name=~"$Deployment_id"}[$__interval])
352
+ )
353
+ )
354
+ seriesNameFormat: '{{model_name}} p90'
355
+ - kind: TimeSeriesQuery
356
+ spec:
357
+ plugin:
358
+ kind: PrometheusTimeSeriesQuery
359
+ spec:
360
+ datasource:
361
+ kind: PrometheusDatasource
362
+ name: accelerators-thanos-querier-datasource
363
+ query: >
364
+ histogram_quantile(
365
+ 0.99,
366
+ sum by (le, model_name) (
367
+ rate(vllm:inter_token_latency_seconds_bucket{model_name=~"$Deployment_id"}[$__interval])
368
+ )
369
+ )
370
+ seriesNameFormat: '{{model_name}} p99'
371
+
372
+ "12":
373
+ kind: Panel
374
+ spec:
375
+ display:
376
+ name: ITL (Avg)
377
+ plugin:
378
+ kind: StatChart
379
+ spec:
380
+ calculation: last-number
381
+ queries:
382
+ - kind: TimeSeriesQuery
383
+ spec:
384
+ plugin:
385
+ kind: PrometheusTimeSeriesQuery
386
+ spec:
387
+ datasource:
388
+ kind: PrometheusDatasource
389
+ name: accelerators-thanos-querier-datasource
390
+ query: >
391
+ (sum by (model_name) (increase(vllm:inter_token_latency_seconds_sum{model_name=~"$Deployment_id"}[$__range])))
392
+ /
393
+ (sum by (model_name) (increase(vllm:inter_token_latency_seconds_count{model_name=~"$Deployment_id"}[$__range])))
394
+
395
+ "13":
396
+ kind: Panel
397
+ spec:
398
+ display:
399
+ name: ITL (P50)
400
+ plugin:
401
+ kind: StatChart
402
+ spec:
403
+ calculation: last-number
404
+ queries:
405
+ - kind: TimeSeriesQuery
406
+ spec:
407
+ plugin:
408
+ kind: PrometheusTimeSeriesQuery
409
+ spec:
410
+ datasource:
411
+ kind: PrometheusDatasource
412
+ name: accelerators-thanos-querier-datasource
413
+ query: >
414
+ histogram_quantile(
415
+ 0.50,
416
+ sum by (le, model_name) (
417
+ rate(vllm:inter_token_latency_seconds_bucket{model_name=~"$Deployment_id"}[$__interval])
418
+ )
419
+ )
420
+
421
+ "14":
422
+ kind: Panel
423
+ spec:
424
+ display:
425
+ name: ITL (P90)
426
+ plugin:
427
+ kind: StatChart
428
+ spec:
429
+ calculation: last-number
430
+ queries:
431
+ - kind: TimeSeriesQuery
432
+ spec:
433
+ plugin:
434
+ kind: PrometheusTimeSeriesQuery
435
+ spec:
436
+ datasource:
437
+ kind: PrometheusDatasource
438
+ name: accelerators-thanos-querier-datasource
439
+ query: >
440
+ histogram_quantile(
441
+ 0.90,
442
+ sum by (le, model_name) (
443
+ rate(vllm:inter_token_latency_seconds_bucket{model_name=~"$Deployment_id"}[$__interval])
444
+ )
445
+ )
446
+
447
+ "15":
448
+ kind: Panel
449
+ spec:
450
+ display:
451
+ name: ITL (P99)
452
+ plugin:
453
+ kind: StatChart
454
+ spec:
455
+ calculation: last-number
456
+ queries:
457
+ - kind: TimeSeriesQuery
458
+ spec:
459
+ plugin:
460
+ kind: PrometheusTimeSeriesQuery
461
+ spec:
462
+ datasource:
463
+ kind: PrometheusDatasource
464
+ name: accelerators-thanos-querier-datasource
465
+ query: >
466
+ histogram_quantile(
467
+ 0.99,
468
+ sum by (le, model_name) (
469
+ rate(vllm:inter_token_latency_seconds_bucket{model_name=~"$Deployment_id"}[$__interval])
470
+ )
471
+ )
472
+
473
+ "16":
474
+ kind: Panel
475
+ spec:
476
+ display:
477
+ name: TPS (Tokens/sec) over Time
478
+ plugin:
479
+ kind: TimeSeriesChart
480
+ spec:
481
+ legend:
482
+ mode: table
483
+ position: bottom
484
+ queries:
485
+ - kind: TimeSeriesQuery
486
+ spec:
487
+ plugin:
488
+ kind: PrometheusTimeSeriesQuery
489
+ spec:
490
+ datasource:
491
+ kind: PrometheusDatasource
492
+ name: accelerators-thanos-querier-datasource
493
+ query: >
494
+ sum by (model_name) (rate(vllm:generation_tokens_total{model_name=~"$Deployment_id"}[$__interval]))
495
+ seriesNameFormat: '{{model_name}} generation'
496
+ - kind: TimeSeriesQuery
497
+ spec:
498
+ plugin:
499
+ kind: PrometheusTimeSeriesQuery
500
+ spec:
501
+ datasource:
502
+ kind: PrometheusDatasource
503
+ name: accelerators-thanos-querier-datasource
504
+ query: >
505
+ sum by (model_name) (rate(vllm:prompt_tokens_total{model_name=~"$Deployment_id"}[$__interval]))
506
+ seriesNameFormat: '{{model_name}} prompt'
507
+ - kind: TimeSeriesQuery
508
+ spec:
509
+ plugin:
510
+ kind: PrometheusTimeSeriesQuery
511
+ spec:
512
+ datasource:
513
+ kind: PrometheusDatasource
514
+ name: accelerators-thanos-querier-datasource
515
+ # overall iteration tokens/sec if exposed
516
+ query: >
517
+ rate(vllm:iteration_tokens_total_count[$__interval])
518
+ seriesNameFormat: 'iteration overall'
519
+
520
+ "17":
521
+ kind: Panel
522
+ spec:
523
+ display:
524
+ name: KV Cache Usage (avg %)
525
+ plugin:
526
+ kind: StatChart
527
+ spec:
528
+ calculation: last-number
529
+ queries:
530
+ - kind: TimeSeriesQuery
531
+ spec:
532
+ plugin:
533
+ kind: PrometheusTimeSeriesQuery
534
+ spec:
535
+ datasource:
536
+ kind: PrometheusDatasource
537
+ name: accelerators-thanos-querier-datasource
538
+ # Multiply by 100 so we can read it as a percentage without setting a unit (avoids CUE unit conflicts)
539
+ query: >
540
+ 100 * avg(vllm:kv_cache_usage_perc)
541
+
542
+ "18":
543
+ kind: Panel
544
+ spec:
545
+ display:
546
+ name: Running Requests by Pod
547
+ plugin:
548
+ kind: TimeSeriesChart
549
+ spec:
550
+ legend:
551
+ mode: table
552
+ position: bottom
553
+ queries:
554
+ - kind: TimeSeriesQuery
555
+ spec:
556
+ plugin:
557
+ kind: PrometheusTimeSeriesQuery
558
+ spec:
559
+ datasource:
560
+ kind: PrometheusDatasource
561
+ name: accelerators-thanos-querier-datasource
562
+ query: >
563
+ sum by (pod) (vllm:num_requests_running)
564
+ seriesNameFormat: '{{pod}}'
565
+
566
+ "19":
567
+ kind: Panel
568
+ spec:
569
+ display:
570
+ name: Waiting Requests by Pod
571
+ plugin:
572
+ kind: TimeSeriesChart
573
+ spec:
574
+ legend:
575
+ mode: table
576
+ position: bottom
577
+ queries:
578
+ - kind: TimeSeriesQuery
579
+ spec:
580
+ plugin:
581
+ kind: PrometheusTimeSeriesQuery
582
+ spec:
583
+ datasource:
584
+ kind: PrometheusDatasource
585
+ name: accelerators-thanos-querier-datasource
586
+ query: >
587
+ sum by (pod) (vllm:num_requests_waiting)
588
+ seriesNameFormat: '{{pod}}'
589
+
590
+ "20":
591
+ kind: Panel
592
+ spec:
593
+ display:
594
+ name: Running Requests (sum)
595
+ plugin:
596
+ kind: StatChart
597
+ spec:
598
+ calculation: last-number
599
+ queries:
600
+ - kind: TimeSeriesQuery
601
+ spec:
602
+ plugin:
603
+ kind: PrometheusTimeSeriesQuery
604
+ spec:
605
+ datasource:
606
+ kind: PrometheusDatasource
607
+ name: accelerators-thanos-querier-datasource
608
+ query: sum(vllm:num_requests_running)
609
+
610
+ "21":
611
+ kind: Panel
612
+ spec:
613
+ display:
614
+ name: Waiting Requests (sum)
615
+ plugin:
616
+ kind: StatChart
617
+ spec:
618
+ calculation: last-number
619
+ queries:
620
+ - kind: TimeSeriesQuery
621
+ spec:
622
+ plugin:
623
+ kind: PrometheusTimeSeriesQuery
624
+ spec:
625
+ datasource:
626
+ kind: PrometheusDatasource
627
+ name: accelerators-thanos-querier-datasource
628
+ query: sum(vllm:num_requests_waiting)
629
+
630
+ layouts:
631
+ - kind: Grid
632
+ spec:
633
+ display:
634
+ title: Overview
635
+ items:
636
+ - x: 0
637
+ y: 0
638
+ width: 6
639
+ height: 3
640
+ content: { $ref: '#/spec/panels/17' } # KV cache %
641
+ - x: 6
642
+ y: 0
643
+ width: 6
644
+ height: 3
645
+ content: { $ref: '#/spec/panels/20' } # running sum
646
+ - x: 12
647
+ y: 0
648
+ width: 6
649
+ height: 3
650
+ content: { $ref: '#/spec/panels/21' } # waiting sum
651
+
652
+ - kind: Grid
653
+ spec:
654
+ display:
655
+ title: E2E Latency
656
+ items:
657
+ - x: 0
658
+ y: 1
659
+ width: 10
660
+ height: 6
661
+ content: { $ref: '#/spec/panels/1' }
662
+ - x: 10
663
+ y: 1
664
+ width: 7
665
+ height: 3
666
+ content: { $ref: '#/spec/panels/2' }
667
+ - x: 17
668
+ y: 1
669
+ width: 7
670
+ height: 3
671
+ content: { $ref: '#/spec/panels/3' }
672
+ - x: 10
673
+ y: 4
674
+ width: 7
675
+ height: 3
676
+ content: { $ref: '#/spec/panels/4' }
677
+ - x: 17
678
+ y: 4
679
+ width: 7
680
+ height: 3
681
+ content: { $ref: '#/spec/panels/5' }
682
+
683
+ - kind: Grid
684
+ spec:
685
+ display:
686
+ title: TTFT
687
+ items:
688
+ - x: 0
689
+ y: 8
690
+ width: 10
691
+ height: 6
692
+ content: { $ref: '#/spec/panels/6' }
693
+ - x: 10
694
+ y: 8
695
+ width: 7
696
+ height: 3
697
+ content: { $ref: '#/spec/panels/7' }
698
+ - x: 17
699
+ y: 8
700
+ width: 7
701
+ height: 3
702
+ content: { $ref: '#/spec/panels/8' }
703
+ - x: 10
704
+ y: 11
705
+ width: 7
706
+ height: 3
707
+ content: { $ref: '#/spec/panels/9' }
708
+ - x: 17
709
+ y: 11
710
+ width: 7
711
+ height: 3
712
+ content: { $ref: '#/spec/panels/10' }
713
+
714
+ - kind: Grid
715
+ spec:
716
+ display:
717
+ title: ITL (Time per Output Token)
718
+ items:
719
+ - x: 0
720
+ y: 15
721
+ width: 10
722
+ height: 6
723
+ content: { $ref: '#/spec/panels/11' }
724
+ - x: 10
725
+ y: 15
726
+ width: 7
727
+ height: 3
728
+ content: { $ref: '#/spec/panels/12' }
729
+ - x: 17
730
+ y: 15
731
+ width: 7
732
+ height: 3
733
+ content: { $ref: '#/spec/panels/13' }
734
+ - x: 10
735
+ y: 18
736
+ width: 7
737
+ height: 3
738
+ content: { $ref: '#/spec/panels/14' }
739
+ - x: 17
740
+ y: 18
741
+ width: 7
742
+ height: 3
743
+ content: { $ref: '#/spec/panels/15' }
744
+
745
+ - kind: Grid
746
+ spec:
747
+ display:
748
+ title: TPS (Prompt / Generation / Iteration)
749
+ items:
750
+ - x: 0
751
+ y: 22
752
+ width: 14
753
+ height: 6
754
+ content: { $ref: '#/spec/panels/16' }
755
+
756
+ - kind: Grid
757
+ spec:
758
+ display:
759
+ title: Per-Pod Request State
760
+ items:
761
+ - x: 0
762
+ y: 28
763
+ width: 12
764
+ height: 6
765
+ content: { $ref: '#/spec/panels/18' }
766
+ - x: 12
767
+ y: 28
768
+ width: 12
769
+ height: 6
770
+ content: { $ref: '#/spec/panels/19' }
771
+