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
163 lines
8.9 KiB
Markdown
163 lines
8.9 KiB
Markdown
# Underdog Bark 3.0 validation
|
|
|
|
PR #1132 adds standard Bark 3.0 to the existing `parakeet_tdt` community family,
|
|
using shared Bark support from #1130 and #1131. Tested on Windows 11, Ryzen 9
|
|
7950X3D, RTX 3090 24 GiB, MSVC 14.43, CUDA 12.4 and Vulkan SDK 1.4.350.0.
|
|
CPU-only and combined CUDA/Vulkan Release builds pass. No shared framework,
|
|
backend/kernel or multi-slot behavior is changed. Exact build/conversion/run
|
|
commands are in [the model guide](../models/underdog_bark3.md).
|
|
|
|
## Source, isolation and storage
|
|
|
|
Source: `ConwayResearch/Underdog-Bark-3.0`, pinned revision
|
|
`85db2ad18ab41e534a222ee253c29191d77ed919`. The 163,398,645-byte `model.bark`
|
|
has SHA-256 `c18de9418d73cbeb80b8c1287b392d480a56e191ef4a81d1baaa1b02e66d92ed`.
|
|
Base processor/tokenizer sidecars use NVIDIA revision
|
|
`541d1f99c6b0c3cd0b11a95167540bb8edefd82b` and are checked by hash.
|
|
|
|
All **699 inference tensors** independently decoded by the native converter's
|
|
packed reader exactly match the unmodified official `load_state_dict(...,
|
|
as_numpy=True)` before compatibility transforms. The container has 723 records;
|
|
24 training-only counters are excluded. Projection/BatchNorm compensation
|
|
matches the existing native loader. Every package embeds tokenizer/configs,
|
|
English spec v1, tensor hashes/provenance, NOTICE and the full CC-BY-4.0 license.
|
|
The reader does not execute downloaded Python.
|
|
|
|
The standard profile is immutable and selects its own checkpoint, provenance,
|
|
docs and `underdog_bark3_standard` variant. Plus defaults remain unchanged;
|
|
cross-model staging is rejected. No module-global model settings are mutated.
|
|
|
|
| GGUF storage | Bytes | SHA-256 |
|
|
|---|---:|---|
|
|
| f32 | 2,509,744,800 | `b75407e7aedf5db9b784f0d6da57d6f152b5a9e27a6cbcaa51d3742d45fbffe7` |
|
|
| mixed-f16 | 1,301,648,160 | `f9062eb55154ba2e4d7bcfdf7e524db4eff448a3752963ff7490da364e3f5406` |
|
|
| q8_0 | 1,183,845,280 | `b15480349003b18fd96e4bcf3bb3747363a541ade00c354c6efe6afc015b384b` |
|
|
| bf16 | 1,300,278,432 | `6b391938a3275ceb76ac6d3a5c7dcc934a2ac69b2fb81505542868a3ecbaea10` |
|
|
|
|
The compressed download is not a native 163 MB GPU codebook implementation.
|
|
F32/mixed-F16 preserve staged weight values; mixed-F16 retains non-representable
|
|
integer/scale products, normalization and compensated projections in F32.
|
|
Protected Q8 uses Q8_0 for eligible attention matrices, exact F16 for sensitive
|
|
feed-forward/pointwise weights, and F32 for non-representable products.
|
|
|
|
The initial fully rounded BF16 profile changed capitalization/token splitting
|
|
on one clip for CPU/CUDA. Standard BF16 now retains the predictor,
|
|
encoder-to-joint projection and joint output head in F32. This corrects all
|
|
tested comparisons while leaving Plus's existing BF16 policy unchanged.
|
|
Q8/BF16 remain rounded derivatives; these results do not promise universal parity.
|
|
|
|
## Original-reference matrix
|
|
|
|
Reference environment: Python 3.11.15, PyTorch 2.8.0, Transformers 5.19.0,
|
|
NumPy 2.4.6 and constriction 0.5.0. Short references use the independently
|
|
unpacked official FP32 checkpoint on CPU. The standard reference harness also
|
|
runs the pinned, unmodified official loader on CUDA and cross-checks its local
|
|
pinned processor against official `transcribe()`. It does not load native
|
|
staging weights. All inputs use identical mono 16 kHz samples and 4000 prefix
|
|
samples, with the prefix removed from returned native timestamps.
|
|
|
|
Six fixtures: checked-in LibriSpeech `2086-149220-0033.wav` (7.435 s), four
|
|
local video excerpts (7.9925, 12, 12 and 30 s), and 1 s silence. Excerpts start
|
|
at 0, 20, 240 and 90 s in `We need to talk about 5min.mp4`; that local video is
|
|
not shipped. Each session also repeats short/long/short without reloading.
|
|
|
|
| Backend | F32 | Lossless mixed-F16 | Protected Q8 | Protected BF16 |
|
|
|---|---:|---:|---:|---:|
|
|
| CPU | 9/9 | 9/9 | 9/9 | 9/9 |
|
|
| CUDA | 9/9 | 9/9 | 9/9 | 9/9 |
|
|
| Vulkan | 9/9 | 9/9 | 9/9 | 9/9 |
|
|
|
|
All **108/108** checks match original text including punctuation/case, with word
|
|
timestamps bounded by the original recording. The original checkpoint emits
|
|
`Yeah.` on the one-second silence input; unfiltered native inference preserves
|
|
it on all tested backends. Opt-in VAD skips the non-speech input and returns
|
|
empty text. Matching the reference does not validate hallucination-free ASR,
|
|
corpus WER or independent forced-alignment timestamp accuracy.
|
|
|
|
## Five-minute offline full-context time and memory
|
|
|
|
The complete recording is 299.99375 s and its original CUDA/FP32 transcript
|
|
contains 823 whitespace-separated words. Original PyTorch CUDA takes
|
|
**2.572 s**, the median of the last two of three requests after warmup.
|
|
|
|
| Backend | GGUF | Processing time | Sampled peak extra VRAM incl. model (GiB) | Peak RSS (GiB) | Text vs original FP32 |
|
|
|---|---|---:|---:|---:|---|
|
|
| CPU | f32 | 33.646 s | 0.00 | 5.17 | Exact |
|
|
| CPU | mixed-f16 | 34.637 s | 0.00 | 4.56 | Exact |
|
|
| CPU | q8_0 | 33.664 s | 0.00 | 4.52 | Exact |
|
|
| CPU | bf16 | 34.305 s | 0.00 | 4.56 | Exact |
|
|
| CUDA | f32 | 0.801 s | 5.90 | 2.95 | Exact |
|
|
| CUDA | mixed-f16 | 0.769 s | 5.06 | 2.15 | Exact |
|
|
| CUDA | q8_0 | 0.780 s | 4.64 | 2.11 | Exact |
|
|
| CUDA | bf16 | 0.776 s | 5.07 | 2.18 | Exact |
|
|
| VULKAN | f32 | 0.885 s | 5.70 | 2.91 | Exact |
|
|
| VULKAN | mixed-f16 | 0.888 s | 4.70 | 2.10 | Exact |
|
|
| VULKAN | q8_0 | 0.900 s | 4.68 | 2.03 | Exact |
|
|
| VULKAN | bf16 | 0.934 s | 4.60 | 2.12 | Exact |
|
|
|
|
All **12/12** full-recording outputs match the original transcript exactly,
|
|
with bounded timestamps. GPU timing is the median of the last two of three
|
|
full requests after short warmup; CPU is one full request including graph build.
|
|
Times exclude model load/file I/O and include preprocessing/decoding. All runs
|
|
use eight inference threads, `OMP_NUM_THREADS=8`, `OMP_WAIT_POLICY=PASSIVE`.
|
|
RTF is below 1 for every result. No CPU thread-count tuning was performed.
|
|
|
|
NVML device total minus a pre-process baseline and process working set were
|
|
sampled every 100 ms. Memory includes the model, temporary allocations and pools;
|
|
these are sampled peaks, not weights-excluded cache sizes. Exact matches on these
|
|
recordings do not make rounded Q8/BF16 generally lossless. Mixed-F16 is the
|
|
recommended package when preserving the source weight values.
|
|
|
|
## HTTP/SSE, reuse and regressions
|
|
|
|
**66/66 server checks** pass with mixed-F16: six original references in one
|
|
server, zero/empty/enabled/spoken hotword controls, two VAD speech spans with
|
|
original-sample timestamps, VAD silence/token budget, malformed options returning
|
|
HTTP 400 followed by successful recovery, and prompted/unbiased raw-PCM streams.
|
|
|
|
Ten additional identical requests per backend after two warmups retain the
|
|
reference text and show these post-request memory ranges:
|
|
|
|
| Backend | Requests | RSS range (MiB) | Device VRAM range (MiB) |
|
|
|---|---:|---:|---:|
|
|
| CPU | 10 | 0.03 | 0.00 |
|
|
| CUDA | 10 | 1.11 | 0.00 |
|
|
| VULKAN | 10 | 1.28 | 0.00 |
|
|
|
|
These are idle post-request ranges, separate from the full-recording peak table.
|
|
Ten focused CTests pass across CPU/GPU builds. Three standard-profile, five Plus,
|
|
five Pro and thirteen Phonon converter tests pass. Loader/catalog sync and its
|
|
self-tests pass; actual stock Parakeet streaming/finalize/reset remains stable.
|
|
|
|
## Limits and artifacts
|
|
|
|
English only. Full-context attention grows with duration and retains the encoder
|
|
frame limit. Buffered streaming, bounded windows and VAD change context and may
|
|
change recognition; this is not native cache-aware streaming. VAD is offline-only.
|
|
The source checkpoint's silence hallucination is retained. Metal/HIP and corpus
|
|
WER are unvalidated. No packed ANS GPU kernels, GGUF upload or unpublished
|
|
model-manager downloads are claimed.
|
|
|
|
Local evidence: `outputs/ub3/unpack-parity.json`, `models.json`,
|
|
`reference-results.json`, `official-gpu-reference.json`, `matrix/`,
|
|
`matrix-results.json`, `full/`, `full-results.json`, `features-test/`,
|
|
`memory-reuse/`, `memory-reuse-results.json`. Initial BF16 is retained under
|
|
`precision-profiles/`; the hashes above identify the final packages.
|
|
|
|
## Main merge and shared guide/config regression
|
|
|
|
Updated against main `aeb7bcf1` after Plus (#1131) merged. Bark C++ inference
|
|
sources are unchanged from the previous Standard validation. One model guide
|
|
(`docs/models/underdog_bark3.md`) and one lazy-loaded server example
|
|
(`examples/server/underdog-bark3-asr.json`) now cover Standard, Plus and Pro;
|
|
per-variant measurement records are retained. Conversion metadata, family UI
|
|
references and validation links point to the shared guide.
|
|
|
|
CPU-only and combined CUDA/Vulkan builds pass. Ten focused CTest executions,
|
|
26 converter tests and catalog self-tests/synchronization pass. All 54
|
|
Standard/Plus mixed-F16 repeated-request comparisons pass on CPU/CUDA/Vulkan,
|
|
with exact text and word timestamps against the earlier runs. All 18 routes in
|
|
the shared config pass (three variants x offline/streaming x three backends),
|
|
including Pro's original `bark3` / `bark3-stream` IDs and exact original text for
|
|
offline requests. These are compatibility checks, not new timing measurements.
|
|
Local commands/artifacts are under `outputs/bark-native/conflict-validation-*`.
|