voice_audio_multi/tests/mira_tts/VULKAN_GPU_VALIDATION.md
Fabio c36510c21e
Some checks failed
Linux Build / Linux cpu (push) Has been cancelled
Linux Build / Linux cpu-clang (push) Has been cancelled
Linux Build / Linux vulkan (push) Has been cancelled
mac-build / macOS CPU (push) Has been cancelled
Nix Build / Nix (cpu) (push) Has been cancelled
Nix Build / Nix (vulkan) (push) Has been cancelled
windows-build / Windows CPU (push) Has been cancelled
Initial import: audio.cpp with Orange Pi documentation
2026-11-04 19:05:22 +01:00

2.5 KiB

MiraTTS Vulkan GPU validation

Local validation: 2026-09-05, Windows, RTX 3090, Vulkan device 1.

The generator now uses the selected Vulkan execution context instead of a CPU fallback. Its decoder uses F32 projection precision, grouped flash attention (materialized grouped K/V heads), and F32 input to the output projection. DirectSetRows KV updates and compact logits remain enabled.

The previous GPU configuration truncated the short test to 0.74 seconds. Projection precision alone and attention-layout changes alone did not resolve that failure in local probes. This is a model-scoped configuration fix, not a claim that an individual upstream Vulkan kernel has been conclusively diagnosed.

Long-lived offline session

Request Q8 wall ms BF16 wall ms Audio seconds
Cold 1632.78 1286.46 5.12
Repeat 884.67 923.20 5.12
Different prompt 902.05 926.29 5.12
Long-form 4957.44 3108.20 15.36
Repeat after long-form 933.39 1007.46 5.12

The three identical requests have identical audio hashes within each precision. These fixtures are token-capped; their duration is not evidence of complete prompt coverage. Timing excludes process startup/model loading and is not a controlled cross-backend performance comparison.

Streaming

Precision/request Wall ms First event ms Events Audio seconds
Q8 cold 3770.73 1437.21 4 20.02
Q8 repeat 3717.18 1375.11 4 20.02
BF16 cold 4202.34 1686.40 4 20.60
BF16 repeat 3986.38 1459.62 4 20.60

Repeated streaming audio hashes match. Both precisions pass tests/mira_tts/validate_bench.py with their offline/streaming summaries. Use --model-spec-override model_specs/mira_tts.json for the streaming fixture's chunking options, as in the test README.

Full short sentence

Text: "Hello, this is a native Mira TTS test." Reference: assets/resources/b.wav, seed 1234, default CLI token budget.

Precision Generation ms Audio seconds
Q8 1154.30 5.56
BF16 1363.06 6.60

Qwen3-ASR recognizes the complete sentence from both outputs (including Mira and TTS). This is a transcription smoke check, not perceptual quality parity. Samples and benchmark JSON/logs are in the local sibling outputs directory, with names MiraTTS-q8-Vulkan-GPU.wav, MiraTTS-bf16-Vulkan-GPU.wav, and vulkan-gpu-{q8,bf16}-{offline,streaming}.

CUDA waveform parity and other Vulkan vendors/devices are not claimed.