Voice-profile corpus — what each build actually costs

Measured constants, three inference engines, eight build scenarios, against both compute budgets. Profile B (the Mediathek merge) is dropped — standard profile only.

Correction — an earlier version of this page was wrong. It carried a "pipelined decode, 18.8×" column and recommended porting to it as a 3.6× saving. That was a bad inference: the 18.8× came from a benchmark of a different workload (one repeated prompt, batch 256, no adapters, no reference conditioning), and the gap to our throughput was wrongly attributed entirely to pipelining.

The port was then written and measured on the real workload: it produced 1.01×. Decode simply is not a meaningful share of our loop — the same finding as scoring at 4.8 %. Generation dominates, so overlapping anything around it saves nothing. That column is gone and the honest measured rate (3.0–3.9× realtime) is the default below.
Read this first. Every number below rests on measurements, not estimates: 2,126 generations per GPU-hour and a 8.83 s mean clip from the 323,200-generation demo; 288 core-hours per node-hour and 4 GPUs per node read straight off Slurm accounting; the engine speeds from the SGLang-Omni benchmark; and the quality-versus-N figures from an exact order-statistic analysis of real 200-candidate pools.

The single biggest lever is not N — it is the batch size. Measured on this exact workload:
batch× realtimems / clip
8 (what the demo ran)3.921254
165.69859
327.69637
64 (now in use)8.88543
2.3× for a one-line change, and it needs no new engine, no new dependency and keeps LoRA adapters working. Every figure below uses batch 64 as the default.

The condition matrix — now 832 groups per voice

blockconditionsgroups
Emotions40 × {intense, moderate} × {free, contained} × {EN, DE}320
VoiceNet dimensions57 × 4 levels × {EN, DE}456
Edge casesscreams, groans, shivers, laughter, whimpering, crying × {EN, DE}28
Sports commentator× {EN, DE}2
Explicitness× {EN, DE}, behind the age safety gate2
Character clusters NEW 12 character-cluster LoRAs × {EN, DE} — each also rendered a second time through Chatterbox voice conversion, so the two can be compared later24
total per voice832

What N buys you

Share of the achievable best-of-200 gain, from the exact order-statistic analysis:

Nrewardspeaker sim genuinenessemotion
850%64%36%38%
1663%74%50%50%
3275%83%63%64%
6486%90%77%77%
12895%96%91%91%
200100%100%100%100%

Speaker similarity saturates first — 74 % of the achievable gain already at N=16, 83 % at 32. Genuineness and emotion strength keep climbing all the way to 200, so they are what larger N actually buys.

On N = 1024. The candidate pools are 200 deep, so any N above 200 is extrapolated, not measured. Fitting the asymptotic form a + b·√(ln N) to the measured points (R² = 0.999 for reward, 0.997 for speaker similarity) gives reward 0.6199 → 0.6957 and speaker similarity 0.6540 → 0.6785 going from N=200 to N=1024 — a 5× cost increase for +0.076 and +0.024. S10 is included only to show that; S9 (300 × N=200) captures most of it for half the price and is the one to prefer. Note also that in S9 the 300 high-N voices are already 26 % of all clips despite being 5 % of the voices; at N=1024 they are 63 %.

The budgets

projecttotal core-hremaining % leftexpires
REFORMO201,600,00068,709,72134.1%2026-12-31
LAIONIZE41,660,00037,569,23190.2%2027-04-30
REFORMO expires 2026-12-31 with 68.7 M core-hours unspent. Using it all would need ~14.5 M core-h/month against a recent run-rate of ~6.0 M. On the current trajectory roughly 40 million core-hours simply expire. Spend REFORMO first; keep LAIONIZE, which runs four months longer and is 90 % untouched, as the reserve.

Scenarios

scenarioengineGPU-hcore-h % REFORMO left% LAIONIZE left
S1
6,000 × N=32 (flat)
159,744,000 clips · 391,817 h audio
reward: N=32: 75%
batch 8 — as the demo ran (3.9x)100,2537,218,23010.5%19.2%
batch 64 — measured, now in use (8.9x)44,4233,198,4914.7%8.5%
SGLang-Omni 31.2x — LoRA support UNVERIFIED12,858925,7921.3%2.5%
S2
5,000 × N=32 + 1,000 × N=64
186,368,000 clips · 457,119 h audio
reward: N=32: 75% / N=64: 86%
batch 8 — as the demo ran (3.9x)116,9128,417,66912.3%22.4%
batch 64 — measured, now in use (8.9x)51,7773,727,9735.4%9.9%
SGLang-Omni 31.2x — LoRA support UNVERIFIED14,9511,076,4911.6%2.9%
S3
5,000 × N=16 only
66,560,000 clips · 163,257 h audio
reward: N=16: 63%
batch 8 — as the demo ran (3.9x)41,8973,016,5964.4%8.0%
batch 64 — measured, now in use (8.9x)18,6351,341,7052.0%3.6%
SGLang-Omni 31.2x — LoRA support UNVERIFIED5,483394,7470.6%1.1%
S4
5,000 × N=16 + 1,000 × N=64
119,808,000 clips · 293,862 h audio
reward: N=16: 63% / N=64: 86%
batch 8 — as the demo ran (3.9x)75,2655,419,0737.9%14.4%
batch 64 — measured, now in use (8.9x)33,3932,404,2683.5%6.4%
SGLang-Omni 31.2x — LoRA support UNVERIFIED9,719699,7441.0%1.9%
S5
5,000 × N=16 + 900 × N=32 + 100 × N=128
101,171,200 clips · 248,150 h audio
reward: N=16: 63% / N=32: 75% / N=128: 95%
batch 8 — as the demo ran (3.9x)63,6044,579,4666.7%12.2%
batch 64 — measured, now in use (8.9x)28,2452,033,6313.0%5.4%
SGLang-Omni 31.2x — LoRA support UNVERIFIED8,254594,2550.9%1.6%
S6
5,000 × N=16 + 900 × N=32 + 100 × N=250
111,321,600 clips · 273,047 h audio
reward: N=16: 63% / N=32: 75% / N=250: 100%
batch 8 — as the demo ran (3.9x)69,9555,036,7527.3%13.4%
batch 64 — measured, now in use (8.9x)31,0492,235,4963.3%6.0%
SGLang-Omni 31.2x — LoRA support UNVERIFIED9,052651,7090.9%1.7%
S7
5,000 × N=16 + 900 × N=32 + 100 × N=500
132,121,600 clips · 324,065 h audio
reward: N=16: 63% / N=32: 75% / N=500: 100%
batch 8 — as the demo ran (3.9x)82,9705,973,8138.7%15.9%
batch 64 — measured, now in use (8.9x)36,7942,649,1533.9%7.1%
SGLang-Omni 31.2x — LoRA support UNVERIFIED10,687769,4421.1%2.0%
S8
6,000 × N=128 (max quality)
638,976,000 clips · 1,567,266 h audio
reward: N=128: 95%
batch 8 — as the demo ran (3.9x)400,11328,808,12141.9%76.7%
batch 64 — measured, now in use (8.9x)176,79412,729,16318.5%33.9%
SGLang-Omni 31.2x — LoRA support UNVERIFIED50,5333,638,3685.3%9.7%
S9
5,700 × N=32 + 300 × N=200 ← high-quality core
201,676,800 clips · 494,668 h audio
reward: N=32: 75% / N=200: 100%
batch 8 — as the demo ran (3.9x)126,4919,107,34613.3%24.2%
batch 64 — measured, now in use (8.9x)56,0064,032,4255.9%10.7%
SGLang-Omni 31.2x — LoRA support UNVERIFIED16,1551,163,1421.7%3.1%
S10
5,700 × N=32 + 300 × N=1024 (for comparison)
407,347,200 clips · 999,132 h audio
reward: N=32: 75% / N=1024: 100%
batch 8 — as the demo ran (3.9x)255,18118,373,00726.7%48.9%
batch 64 — measured, now in use (8.9x)112,8158,122,67211.8%21.6%
SGLang-Omni 31.2x — LoRA support UNVERIFIED32,3232,327,2903.4%6.2%
How to read it. Green is under 10 % of that budget's remainder, amber under 40 %, red above. Note that with the current engine several builds are uncomfortable, while with pipelined decode almost everything is affordable — the engine choice moves more than the scenario choice does.

Recommendation

  1. Port pipelined decode first. It is the same transformers stack, LoRA adapters keep working, and it is a measured 3.6×. Everything else is downstream of this.
  2. Then S5 (5,000×16 + 900×32 + 100×128). Broad coverage where speaker similarity is already 74 % saturated, a solid middle tier, and a 100-voice high-quality core for the work that needs it — at a fraction of a flat build.
  3. Treat SGLang-Omni as a follow-up, not a plan. It is 6× faster in the benchmark but nothing has yet shown it can hot-swap LoRA adapters at arbitrary merge strength, which the entire condition matrix depends on. Confirm that before counting on it.
  4. Always pack 4 GPUs per node. Slurm bills the whole node either way; one GPU per node quadruples every figure above.

Assumptions and where they are weak