"""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()