File size: 1,170 Bytes
ea9e5f8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Local CPU-only microbenchmark for scoring, not model-serving QPS.

Run: python bench_controller.py --requests 100000 --actions 20
"""
import argparse
import statistics
import time
from service.policy import Candidate,Limits,select

p=argparse.ArgumentParser()
p.add_argument("--requests",type=int,default=50000)
p.add_argument("--actions",type=int,default=20)
a=p.parse_args()
assert a.actions>0 and a.requests>0
options=[Candidate(f"a{i}",.65+i%6/100,.0002+i*.0001,600+i*30,1+(i%2)) for i in range(a.actions)]
lim=Limits(max_expected_cost_usd=.02,deadline_ms=4000,max_llm_calls=2,price_per_usd=3,price_per_second=.03)
lat=[]
for i in range(a.requests):
    start=time.perf_counter_ns()
    result=select(options,lim)
    lat.append((time.perf_counter_ns()-start)/1e6)
assert result["decision_llm_calls"]==0
lat.sort()
print({"calls":a.requests,"actions_per_call":a.actions,"mean_ms":round(statistics.mean(lat),6),
       "p50_ms":round(lat[int(.5*len(lat))],6),"p95_ms":round(lat[int(.95*len(lat))],6),
       "p99_ms":round(lat[int(.99*len(lat))],6),"controller_llm_calls":0,
       "note":"Local CPU-only numerical benchmark; does not test provider throughput."})