File size: 6,336 Bytes
a36d000 ed21fbb a36d000 ed21fbb a36d000 ed21fbb a36d000 ed21fbb a36d000 ed21fbb a36d000 ed21fbb a36d000 ed21fbb a36d000 ed21fbb a36d000 ed21fbb a36d000 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | <svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900" role="img" aria-labelledby="title desc">
<title id="title">Fish Audio S2-Pro RTX 5090 local serving benchmark</title>
<desc id="desc">Benchmark chart showing 69.9x faster first audio, 12.0x faster total request time, and 11.5x faster realtime factor after SGLang Omni serving optimizations.</desc>
<defs>
<linearGradient id="afterGradient" x1="0" x2="1" y1="0" y2="0">
<stop offset="0%" stop-color="#22c55e"/>
<stop offset="100%" stop-color="#38bdf8"/>
</linearGradient>
<filter id="softGlow" x="-20%" y="-40%" width="140%" height="180%">
<feGaussianBlur stdDeviation="4" result="blur"/>
<feMerge>
<feMergeNode in="blur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
<style>
.bg { fill: #07111f; }
.panel { fill: #0e1b2e; stroke: #1d3553; stroke-width: 2; }
.chart { fill: #10233d; }
.title { fill: #f8fafc; font: 700 48px Arial, sans-serif; letter-spacing: 1px; }
.subtitle { fill: #9fb1c7; font: 24px Arial, sans-serif; }
.card-title { fill: #f8fafc; font: 700 25px Arial, sans-serif; }
.big-green { fill: #22c55e; font: 800 50px Arial, sans-serif; }
.big-blue { fill: #38bdf8; font: 700 22px Arial, sans-serif; }
.body { fill: #e5e7eb; font: 22px Arial, sans-serif; }
.muted { fill: #9fb1c7; font: 18px Arial, sans-serif; }
.axis { fill: #e5e7eb; font: 23px Arial, sans-serif; }
.small { fill: #9fb1c7; font: 16px Arial, sans-serif; }
.footer { fill: #9fb1c7; font: 17px Arial, sans-serif; }
.warning { fill: #facc15; font: 700 18px Arial, sans-serif; }
.bar-before { fill: #64748b; }
.bar-after { fill: url(#afterGradient); filter: url(#softGlow); }
.grid { stroke: #27405f; stroke-width: 2; opacity: 0.6; }
.threshold { stroke: #fb7185; stroke-width: 4; stroke-dasharray: 10 8; }
.threshold-text { fill: #fb7185; font: 18px Arial, sans-serif; }
.label { fill: #f8fafc; font: 700 18px Arial, sans-serif; }
.percent { fill: #22c55e; font: 800 22px Arial, sans-serif; }
.speed { fill: #38bdf8; font: 800 22px Arial, sans-serif; }
</style>
</defs>
<rect class="bg" width="1600" height="900"/>
<text class="title" x="120" y="75">Fish Audio S2-Pro on RTX 5090</text>
<text class="subtitle" x="120" y="115">Local serving optimization: Python Fish server -> SGLang Omni + cached reference voice</text>
<text class="big-green" x="1280" y="75">0.48 RTF</text>
<text class="subtitle" x="1280" y="115">warm cached run, realtime capable</text>
<rect class="panel" x="110" y="150" rx="22" ry="22" width="430" height="170"/>
<text class="card-title" x="160" y="205">First audio</text>
<text class="big-green" x="160" y="252">69.9x</text>
<text class="big-blue" x="330" y="245">6,890% faster</text>
<text class="body" x="160" y="295">25.1s -> 0.36s</text>
<text class="muted" x="160" y="330">time to first audible chunk</text>
<rect class="panel" x="585" y="150" rx="22" ry="22" width="430" height="170"/>
<text class="card-title" x="635" y="205">Total request</text>
<text class="big-green" x="635" y="252">12.0x</text>
<text class="big-blue" x="800" y="245">1,100% faster</text>
<text class="body" x="635" y="295">25.1s -> 2.10s</text>
<text class="muted" x="635" y="330">end-to-end request time</text>
<rect class="panel" x="1060" y="150" rx="22" ry="22" width="430" height="170"/>
<text class="card-title" x="1110" y="205">Realtime factor</text>
<text class="big-green" x="1110" y="252">11.5x</text>
<text class="big-blue" x="1275" y="245">1,050% faster</text>
<text class="body" x="1110" y="295">5.51 -> 0.48</text>
<text class="muted" x="1110" y="330">below 1.0 means realtime</text>
<rect class="chart" x="150" y="405" width="1300" height="360"/>
<line class="grid" x1="532.2" y1="405" x2="532.2" y2="765"/>
<line class="grid" x1="915" y1="405" x2="915" y2="765"/>
<line class="grid" x1="1298" y1="405" x2="1298" y2="765"/>
<line class="threshold" x1="532.2" y1="405" x2="532.2" y2="765"/>
<text class="threshold-text" x="550" y="720">RTF 1.0 realtime line</text>
<text class="axis" x="55" y="475">First audio</text>
<rect class="bar-after" x="300" y="430" width="61.1" height="40"/>
<rect class="bar-before" x="300" y="470" width="772" height="40"/>
<text class="label" x="380" y="455">0.36s</text>
<text class="label" x="1088" y="497">25.1s</text>
<text class="percent" x="1248" y="475">6,890%</text>
<text class="speed" x="1370" y="475">69.9x</text>
<text class="axis" x="45" y="585">Total request</text>
<rect class="bar-after" x="300" y="540" width="356.4" height="40"/>
<rect class="bar-before" x="300" y="580" width="772" height="40"/>
<text class="label" x="685" y="567">2.10s</text>
<text class="label" x="1088" y="607">25.1s</text>
<text class="percent" x="1248" y="585">1,100%</text>
<text class="speed" x="1370" y="585">12.0x</text>
<text class="axis" x="24" y="695">Realtime factor</text>
<rect class="bar-after" x="300" y="650" width="109.3" height="40"/>
<rect class="bar-before" x="300" y="690" width="518" height="40"/>
<text class="label" x="440" y="677">0.48 RTF</text>
<text class="label" x="835" y="717">5.51 RTF</text>
<text class="percent" x="1248" y="695">1,050%</text>
<text class="speed" x="1370" y="695">11.5x</text>
<text class="small" x="1242" y="390">percent faster</text>
<text class="small" x="1368" y="390">speedup</text>
<rect class="bar-before" x="1325" y="725" width="36" height="12"/>
<text class="body" x="1370" y="738">Before</text>
<rect class="bar-after" x="1325" y="755" width="36" height="12"/>
<text class="body" x="1370" y="768">After</text>
<text class="small" x="300" y="800">Log scale: seconds for latency, realtime factor for RTF</text>
<text class="footer" x="120" y="840">Benchmark: short live TTS sample, local RTX 5090. Before = eager Python Fish server. After = Docker-backed SGLang Omni, CUDA graphs, SM120-safe KV fallback, preloaded/cached reference voice.</text>
<text class="warning" x="120" y="870">Model weights are unchanged from upstream fishaudio/s2-pro; the improvement comes from the serving/runtime profile.</text>
</svg>
|