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 -&gt; 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 -&gt; 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 -&gt; 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 -&gt; 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>