[WIP] Add benchmarking tool to compare tool witha a baseline#91
[WIP] Add benchmarking tool to compare tool witha a baseline#91fedeizzo wants to merge 3 commits into
Conversation
|
Another example of massive improvement 📊 Benchmark Report:
|
| Test | Status | Details |
|---|---|---|
| Baseline Output Valid | ✅ Pass | |
| New Output Valid | ✅ Pass | |
| Parity (Request 0) | ✅ Pass | ok |
| Parity (Request 1) | ✅ Pass | ok |
⏱️ Performance Metrics
| Metric | Baseline | New | Diff | % Change |
|---|---|---|---|---|
session.wall_ms |
31068.68 | 20454.04 | -10614.64 | 🟢 -34.17% |
voxcpm2.audiovae.decoder.graph.build_ms |
0.84 | 7.45 | +6.61 | 🔴 +785.78% |
voxcpm2.audiovae.decoder.graph.rebuilt |
1.00 | 1.00 | +0.00 | +0.00% |
voxcpm2.audiovae.decoder.graph.reused |
95.00 | 95.00 | +0.00 | +0.00% |
voxcpm2.audiovae.decoder.latent_capacity |
384.00 | 384.00 | +0.00 | +0.00% |
voxcpm2.audiovae_decoder_ms |
11238.63 | 1608.07 | -9630.55 | 🟢 -85.69% |
voxcpm2.generator_ms |
19830.03 | 18845.94 | -984.09 | 🟢 -4.96% |
voxcpm2.generator_streaming_callbacks_ms |
31068.65 | 20454.01 | -10614.64 | 🟢 -34.17% |
voxcpm2.streaming_chunks |
96.00 | 96.00 | +0.00 | +0.00% |
|
@0xShug0 some massive gains for vulkan should come for free if external/ggml is updated, at least by looking at similar code in llama.cpp (which has a newer version). Do you plan to bump it? |
|
@fedeizzo This is super useful! The current repo already has a path test tool that does something similar: it compares session wall time and output parity against a given run using collected logs. I’d suggest extending the path test compare tool with a more detailed timing breakdown instead of using warmbench, which will be deprecated soon. For GGML update, I have did my test a few days ago #63 (comment). My decision was not to change GGML. Of course, the RTF can be misleading as a session wall time of 10 ms versus 11 ms already translates to about a 10% difference in RTF. The reason for using RTF is that changing GGML also produced WAVs with different numbers of frames. (RTF/session wall deltas that are likely runtime noise are filtered) v16 -- v.0.16.0 v16 CUDA vs vendor
v17 CUDA vs vendor
v16 Vulkan vs vendor
v17 Vulkan vs vendor
v16 CUDA vs vendor
v17 CUDA vs vendor
v16 Vulkan vs vendor
v17 Vulkan vs vendor
|
|
@fedeizzo For Vulkan optimization, I’d prefer to keep it scoped to Vulkan and specific models, and make the changes additive. There is already a unit test for comparing different GGML lowerings: #48 (comment). Some lowerings work better on Vulkan but are much slower on CUDA in my tests. Since the current priority is still CUDA performance, I'd avoid any changes that could cause a CUDA performance regression. |
b6b7fd7 to
71ffe4b
Compare
What does this PR do?
This PR tries to update the existing warmbench script to have an experiment -> validation loop between two versions of audio.cpp.
An example of the output can be found at the end of the pr description (I'm working on a PR with some vulkan improvements).
@0xShug0 what do you think? can we integrate this in the main repo once the code is properly written?
📊 Benchmark Report:
qwen3_tts(vulkan)🧪 Validation Status
⏱️ Performance Metrics
qwen3_tts.prefill_build_msqwen3_tts.speaker_encoder.graph.build_msqwen3_tts.speech_decoder.graph.build_msqwen3_tts.speech_decoder.graph.compute_msqwen3_tts.speech_decoder.graph.rebuildsqwen3_tts.speech_decoder.input_upload_msqwen3_tts.speech_decoder.output_read_msqwen3_tts.speech_decoder.total_msqwen3_tts.speech_decoder_msqwen3_tts.speech_tokenizer_encoder.graph.build_msqwen3_tts.synthesize_wall_msqwen3_tts.talker.cached_step.graph.compute_msqwen3_tts.talker.cached_step.input_upload_msqwen3_tts.talker.cached_step.kv_copy_msqwen3_tts.talker.cached_step.mask_upload_msqwen3_tts.talker.cached_step.output_read_msqwen3_tts.talker.cached_step_build_msqwen3_tts.talker.cached_step_msqwen3_tts.talker.code_predictor.graph.compute_msqwen3_tts.talker.code_predictor.input_upload_msqwen3_tts.talker.code_predictor.output_read_msqwen3_tts.talker.code_predictor_build_msqwen3_tts.talker.code_predictor_msqwen3_tts.talker.frame_embed_msqwen3_tts.talker.import_prefill_state_msqwen3_tts.talker.prefill.graph.build_msqwen3_tts.talker.prefill_msqwen3_tts.talker.processor_msqwen3_tts.talker.prompt_state_msqwen3_tts.talker.total_msqwen3_tts.talker_msqwen3_tts.voice_prompt_mssession.wall_ms