Datasets:
audio audioduration (s) 34.1 44.3 | label class label 4
classes |
|---|---|
0a_baseline | |
0a_baseline | |
0a_baseline | |
0a_baseline | |
0a_baseline | |
0a_baseline | |
0a_baseline | |
0a_baseline | |
0a_baseline | |
0a_baseline | |
0a_baseline | |
0a_baseline | |
0a_baseline | |
0a_baseline | |
0a_baseline | |
0a_baseline | |
0a_baseline | |
0a_baseline | |
0a_baseline | |
0a_baseline | |
1b_cfg_k3 | |
1b_cfg_k3 | |
1b_cfg_k3 | |
1b_cfg_k3 | |
1b_cfg_k3 | |
1b_cfg_k3 | |
1b_cfg_k3 | |
1b_cfg_k3 | |
1b_cfg_k3 | |
1b_cfg_k3 | |
1b_cfg_k3 | |
1b_cfg_k3 | |
1b_cfg_k3 | |
1b_cfg_k3 | |
1b_cfg_k3 | |
1b_cfg_k3 | |
1b_cfg_k3 | |
1b_cfg_k3 | |
1b_cfg_k3 | |
1b_cfg_k3 | |
2c_cfg_k1 | |
2c_cfg_k1 | |
2c_cfg_k1 | |
2c_cfg_k1 | |
2c_cfg_k1 | |
2c_cfg_k1 | |
2c_cfg_k1 | |
2c_cfg_k1 | |
2c_cfg_k1 | |
2c_cfg_k1 | |
2c_cfg_k1 | |
2c_cfg_k1 | |
2c_cfg_k1 | |
2c_cfg_k1 | |
2c_cfg_k1 | |
2c_cfg_k1 | |
2c_cfg_k1 | |
2c_cfg_k1 | |
2c_cfg_k1 | |
2c_cfg_k1 | |
3d_cfg_k3_scaled | |
3d_cfg_k3_scaled | |
3d_cfg_k3_scaled | |
3d_cfg_k3_scaled | |
3d_cfg_k3_scaled | |
3d_cfg_k3_scaled | |
3d_cfg_k3_scaled | |
3d_cfg_k3_scaled | |
3d_cfg_k3_scaled | |
3d_cfg_k3_scaled | |
3d_cfg_k3_scaled | |
3d_cfg_k3_scaled | |
3d_cfg_k3_scaled | |
3d_cfg_k3_scaled | |
3d_cfg_k3_scaled | |
3d_cfg_k3_scaled | |
3d_cfg_k3_scaled | |
3d_cfg_k3_scaled | |
3d_cfg_k3_scaled | |
3d_cfg_k3_scaled |
CFG-skip A/B — judge the failed configs by ear
⚠️ SYNTHETIC AUDIO
Every clip is generated by a text-to-speech model. Nothing here is a recording of any person. The passages are neutral benchmark text — not transcripts, quotations, or teachings of Sri Ganapathi Sachidananda Swamiji or anyone else.
Four configs, the same 20 passages with the same per-request seeds, so the
only variable is the guidance strategy. a_baseline/3.wav and b_cfg_k3/3.wav
are the same sentence — play them back to back.
These are the configs that reached n=75–80 concurrent but which I flagged as failing on quality. Published so the call is yours rather than mine.
What you're comparing
| folder | config | max concurrency @ RTF ≤ 0.875 |
|---|---|---|
a_baseline/ |
full CFG on all 9 Euler steps — the reference | 64 |
b_cfg_k3/ |
full CFG on first 3 steps, cached delta for 6 | 75–80 |
c_cfg_k1/ |
full CFG on step 1 only, cached delta for 8 | 80 |
d_cfg_k3_scaled/ |
as b, delta rescaled by field decay |
75–80 |
Why I called it a fail
Half the diffusion head's batch is the unconditional pass that classifier-free guidance needs. Skipping it on later steps and reusing the cached guidance delta halves those steps' cost — that's where the extra concurrency comes from.
The numbers say intelligibility is fine and level uniformity is better than baseline:
| dBFS | level sd | median WER | mean WER | crest factor | |
|---|---|---|---|---|---|
a_baseline |
−17.77 | 4.26 | 0.014 | 0.0141 | 16.3 dB |
b_cfg_k3 |
−11.66 | 2.33 | 0.014 | 0.0169 | 11.4 dB |
c_cfg_k1 |
−12.24 | 2.65 | 0.014 | 0.0133 | 11.9 dB |
d_cfg_k3_scaled |
−10.35 | 1.28 | 0.013 | 0.0134 | 10.2 dB |
(Crest = mean peak / mean RMS across the 20 clips in each set, recomputed directly from these files.)
WER is unchanged or better. Level consistency is up to 3.3× tighter. So by two of the three metrics this is an improvement.
The problem is the crest factor: 16.3 dB → 10.2 dB. Nothing clips (peaks sit at 0.996, zero clipped samples), but every clip pins its peak at full scale while RMS rises ~7 dB. That is dynamic-range compression, not a gain offset — turning the volume down would match the loudness and leave the dynamics squashed. Speech with 7 dB less dynamic range tends to read as flat, loud, and close-miked.
That is precisely the kind of defect WER cannot see, which is why the level and
crest metrics exist here at all: an earlier attempt (inference_timesteps=4)
passed a WER check while being 7 dB quiet and audibly degraded.
What to listen for: not words — those are intact. Listen for dynamics. Does the baseline breathe between phrases where the CFG-skip versions feel pushed forward and even? If that difference doesn't bother you at your playback levels, n=75–80 is available and I'll wire it up.
d_cfg_k3_scaled was my attempted fix — rescaling the cached delta by how much
the velocity field had decayed. It made the compression worse (−10.35 vs
−11.66 dBFS), which is how I learned the field grows rather than shrinks across
Euler steps.
Config common to all four
model: sw-voice/swamiji-voxcpm2-ft-lr0.0001-10ep-deva
engine: nano-vllm-voxcpm 2.0.3 + PR#79 (streaming VAE)
inference_timesteps: 10 # unchanged in every variant
cfg_value: 1.5
max_model_len: 400
compile_dit: true
fp16_dit: inductor # fp16-accumulate GEMMs, separately verified clean
GPU: 1x RTX 3080 12 GB
Only cfg_full_steps differs: 9 (baseline), 3, 1, 3-scaled.
Contents
Each folder holds 0.wav … 19.wav (48 kHz mono, 16-bit) plus meta.json with
the per-clip text, duration and dBFS. Same index = same passage and seed across
all four folders.
For reference: the config that passed
sw-voice/swamiji-tts-64-concurrent-fp16 — 64 concurrent, median WER 0.014,
level within 0.14 dB of baseline, crest factor unchanged. That is the one I'd
ship without asking.
- Downloads last month
- 19