File size: 1,927 Bytes
3fd1a35 | 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 26 27 28 29 30 31 32 33 34 35 36 | #!/usr/bin/env python3
"""Sequential full-model ablations; each variant restores the production service."""
import argparse
import json
import os
from pathlib import Path
import subprocess
import sys
p=argparse.ArgumentParser(description=__doc__)
p.add_argument('--output',type=Path,required=True)
p.add_argument('--variants',nargs='+',default=['attention,shared,dense,head','attention','shared','dense','head'])
p.add_argument('--loss-steps',type=int,default=0)
p.add_argument('--calibrated-w4-families')
p.add_argument('--shared-stage',action='store_true')
a=p.parse_args()
root=Path(os.environ.get('LING3_BOARD_ROOT', '.')).resolve();tools=Path(__file__).resolve().parent
reference=root/'mixed-precision-reference';suite=reference/'suite.json'
a.output.mkdir(parents=True,exist_ok=True)
env=os.environ.copy();env['OPENBLAS_NUM_THREADS']='1';env['OMP_NUM_THREADS']='1'
extra=[]
if a.shared_stage:extra.append('--shared-stage')
if a.calibrated_w4_families:extra.extend(['--calibrated-w4-families',a.calibrated_w4_families])
for families in a.variants:
output=a.output/families.replace(',','_')
if output.exists():raise FileExistsError(output)
print('START '+families,flush=True)
subprocess.run([sys.executable,str(tools/'validate_official_bridge_board.py'),'--suite',str(suite),
'--output',str(output),'--only-candidate','--warm-request','--mixed-families',families,
'--loss-steps',str(a.loss_steps)]+extra,check=True,env=env)
subprocess.run([sys.executable,str(tools/'score_loss_numpy.py'),'--suite',str(suite),
'--reference',str(reference),'--candidate',str(output),'--steps',str(a.loss_steps)],check=True,env=env)
print('COMPLETE '+families,flush=True)
(a.output/'completed.json').write_text(json.dumps({'variants':a.variants,'loss_steps':a.loss_steps,
'shared_stage':a.shared_stage,'calibrated_w4_families':a.calibrated_w4_families,'status':'complete'},indent=2)+'\n')
|