Files
digital-drosophila/models/male-cns-lif/author-fullgraph-lab-v1/run_trial.py
T

42 lines
2.0 KiB
Python

"""One process per CPU/GPU trial, gate the ordered fixed protocol."""
import argparse
import json
import os
import sys
import time
import traceback
from context import ROOT,MODEL,EXP,CFG,check,save,budget_check
def main():
ap=argparse.ArgumentParser();ap.add_argument('backend',choices=['oracle','gpu']);ap.add_argument('case')
a=ap.parse_args();check();budget_check()
names=[x['name'] for x in CFG['trials']];assert a.case in names
position=names.index(a.case)
if position:
previous=json.loads((EXP/'audit'/('completed-'+names[position-1]+'.json')).read_text())
assert previous['pass_all'], 'Previous fixed trial failed; do not continue'
case=EXP/'cases'/a.case;out=EXP/a.backend/a.case
assert not out.exists(), 'Never overwrite an executed trial'
start=time.perf_counter()
try:
if a.backend=='oracle':
from oracle_full import run_case
result=run_case(case,out)
else:
os.environ['CUDA_VISIBLE_DEVICES']=CFG['gpu_uuid'];os.environ['CUDA_HOME']='/usr/local/cuda'
os.environ['PATH']=str(ROOT/'models/male-cns-lif/.venv/bin')+':/usr/local/cuda/bin:'+os.environ['PATH']
os.environ['MAX_JOBS']='2';os.environ['TORCH_CUDA_ARCH_LIST']='8.9'
sys.path.insert(0,str(ROOT/'models/male-cns-lif/terminal-scope-diagnostic-v1'))
from diagnostic import queues
queues()
from gpu_full import run_gpu
result=run_gpu(case,out,EXP/'oracle'/a.case,EXP/'extension-build')
save(EXP/'audit'/(a.backend+'-'+a.case+'.json'),dict(case=a.case,backend=a.backend,
wall_seconds_including_validation=time.perf_counter()-start,result=result))
budget_check();print('COMPLETED',a.backend,a.case,json.dumps(result),flush=True)
except Exception as exc:
save(EXP/'audit'/('error-'+a.backend+'-'+a.case+'.json'),dict(error=str(exc),type=type(exc).__name__,traceback=traceback.format_exc()))
raise
if __name__=='__main__':main()