File size: 1,493 Bytes
4fcc185
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os,time,json,collections
os.environ.setdefault('MPLCONFIGDIR',os.path.abspath('.cache/matplotlib'))
from pathlib import Path
import numpy as np,joblib
from inference import Predictor
from bci_data import cached
from evaluate import candidates

def run():
 groups={}
 for s,r,p in candidates():
  if s!=1:continue
  groups[(r['model'],r['montage'],r['channels'],r.get('seed','deterministic'))]=(r,p)
 x,_,_=cached(1,'validation');out=[]
 for key,(r,p) in sorted(groups.items(),key=lambda x:str(x[0])):
  t=time.perf_counter();m=Predictor(p);loadtime=time.perf_counter()-t;m.predict(x[0]);times=[m.predict(x[i])['latency_ms'] for i in range(5)];extra={}
  if m.neural:extra['parameters']=sum(q.numel() for q in m.model.parameters())
  elif hasattr(m.model,'steps'):
   last=m.model.steps[-1][1]
   if hasattr(last,'n_support_'):extra['support_vectors']=int(last.n_support_.sum());extra['feature_dimensions']=last.n_features_in_
   elif hasattr(last,'coef_'):extra['coefficients']=int(last.coef_.size)
  out.append({'model':key[0],'montage':key[1],'channels':key[2],'seed':key[3],'representative_subject':1,'source_split':'validation','warm_trials':5,'median_preprocess_and_inference_ms':float(np.median(times)),'range_ms':[min(times),max(times)],'load_seconds':loadtime,'checkpoint_bytes':p.stat().st_size,'device':'cpu',**extra})
 Path('reports/inference_benchmarks.json').write_text(json.dumps(out,indent=2));print('Benchmarked',len(out),'configurations')
if __name__=='__main__':run()