Files
digital-drosophila/models/male-cns-lif/author-apl-lab-v1/run_case.py
T
2026-09-30 09:26:21 +08:00

49 lines
2.1 KiB
Python

"""A fresh process per declared case; no concurrent scientific GPU jobs."""
import argparse
import json
import os
import sys
import urllib.request
from context import ROOT,MODEL,EXP,CFG,check,budget
def main():
parser=argparse.ArgumentParser()
parser.add_argument('backend',choices=['gpu','oracle','component'])
parser.add_argument('case')
parser.add_argument('--repeat',type=int,default=0)
args=parser.parse_args()
assert '/' not in args.case and '..' not in args.case and 0<=args.repeat<3
check();budget()
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'
# The pinned Brian environment intentionally has neither Torch nor PyYAML.
# Keep this preflight standard-library-only; never install into that env.
for port in (8188,8189,8190):
with urllib.request.urlopen(f'http://192.168.10.51:{port}/queue',timeout=5) as response:
queue=json.load(response)
assert not queue['queue_running'] and not queue['queue_pending'],'ComfyUI busy: defer, never evict'
case=EXP/'cases'/args.case
assert case.is_dir()
out=EXP/'gpu'/f'{args.case}-r{args.repeat}'
if args.backend=='gpu':
from gpu_apl import run_gpu
result=run_gpu(case,out,EXP/'extension-build')
elif args.backend=='oracle':
assert args.repeat==0
from oracle_apl import run_case
result=run_case(case,EXP/'oracle'/args.case)
else:
assert args.repeat==0
from validate_components import validate
result=validate(out,EXP/'apl-bundle',EXP/'component-audit'/(args.case+'.json'))
budget()
print(json.dumps(dict(backend=args.backend,case=args.case,repeat=args.repeat,
complete=result.get('complete'),pass_all=result.get('pass_all')),allow_nan=False),flush=True)
if not result.get('pass_all',False):raise SystemExit(1)
if __name__=='__main__':main()