49 lines
2.1 KiB
Python
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()
|