File size: 2,264 Bytes
f2b866c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env python3
"""Plot actual observations; no fitted/synthetic latency values."""
from pathlib import Path
import json
import statistics
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

root=Path(__file__).resolve().parents[1]/'artifacts/benchmarks'
rows=[json.loads(l) for l in (root/'20260920T205217-steps/results.jsonl').read_text().splitlines()]
fig,ax=plt.subplots(1,2,figsize=(11,4.7),gridspec_kw={'width_ratios':[1.3,1]})
colors={True:'#777d60',False:'#9c6c28'}
for steps in [20,30,40]:
 selected=[r for r in rows if r['recipe']['parameters']['steps']==steps]
 vals=[]
 for i,r in enumerate(selected):
  m=r['recipe']['metrics'];y=m['inference_seconds'];vals.append(y)
  warm=m.get('gpu_worker_call_index',1)>1
  ax[0].scatter(steps+(i-3.5)*.33,y,color=colors[warm],s=35)
 ax[0].plot([steps-2,steps+2],[statistics.median(vals)]*2,color='#252521',lw=2)
ax[0].set(xticks=[20,30,40],xlabel='Denoising steps',ylabel='Synchronized pipeline seconds',
          title='48 GB · 1K · eight prompt/seed cases per step',ylim=(0,26))
for x,(label,suite) in enumerate([('KV on','20260920T212255-repeatability'),('KV off','20260920T214119-repeatability')]):
 rs=[json.loads(l) for l in (root/suite/'results.jsonl').read_text().splitlines()]
 for i,r in enumerate(rs):
  m=r['recipe']['metrics'];warm=m['gpu_worker_call_index']>1
  ax[1].scatter(x+(i-1)*.07,m['inference_seconds'],color=colors[warm],s=45)
ax[1].set(xticks=[0,1],xticklabels=['KV on','KV off'],xlim=(-.5,1.5),ylim=(0,14),
          ylabel='Synchronized pipeline seconds',title='96 GB · 1K / 40 · same text prompt and seed')
for a in ax:
 a.spines[['top','right']].set_visible(False);a.grid(axis='y',alpha=.15);a.set_axisbelow(True)
handles=[plt.Line2D([0],[0],marker='o',linestyle='',color=colors[v],label=l) for v,l in [(True,'Reused GPU worker'),(False,'New GPU worker')]]
fig.legend(handles=handles,loc='lower center',ncol=2,frameon=False,bbox_to_anchor=(.5,.06))
fig.text(.5,.015,'Actual ZeroGPU measurements, 20 September 2026. Small samples; no population confidence interval or latency SLA.',ha='center',fontsize=9,color='#666')
fig.tight_layout(rect=[0,.15,1,1]);fig.savefig(root/'latency.png',dpi=180);fig.savefig(root/'latency.svg')
print(root/'latency.png')