our_knp/pets-knp/verify_deployment.py

25 lines
2.5 KiB
Python

"""Post-review checks: persistent graph parity, adversarial hidden reset, frozen model hashes."""
from pathlib import Path
import numpy as np,json,subprocess,hashlib,time,sys
from worker import DetectorWorker
R=Path.home()/'run/pets-knp';M=R/'head-v2';O=R/'deployment-checks';O.mkdir(exist_ok=False)
w=DetectorWorker();x=np.load(R/'data/val.npz')['rgb'];times=[]
try:
for i,image in enumerate([x[0],x[1],np.full_like(x[0],255),x[1],np.zeros_like(x[0]),x[1]]):
p=O/f'worker-{i}';inp=O/f'image-{i}.bin';image.tofile(inp);t=time.monotonic();w.infer(inp,p);times.append(time.monotonic()-t)
counts=np.fromfile(str(p)+'_counts.bin',np.int32)
ref=np.fromfile(R/'checks/sequence-gpu_counts.bin',np.int32).reshape(-1,800)[[0,1,3,4,5,6][i]]
assert np.array_equal(counts,ref)
finally:w.close()
# Unit activation with greatest positive charge: one-hot maximum and dense legal L2 packet.
q=np.zeros((6,800),np.int32);model=np.load(M/'model.npz');h=int(np.argmax(np.linalg.norm(model['w'],axis=0)));positive=np.maximum(model['w'][:,h],0).astype(float);positive*=2048/max(np.linalg.norm(positive),1);q[0]=np.clip(np.rint(positive),0,640).astype(np.int32);q[1]=0;q[2]=np.fromfile(R/'eval-v2-final/validation-encoded.bin',np.int32).reshape(-1,800)[1];q[3]=q[2];q[4,0]=640;q[5]=q[2]
q.tofile(O/'adversarial-encoded.bin');ref=np.clip(np.floor(np.maximum(q.astype(np.int64)@model['w']+model['b'],0)/model['thresholds']),0,64).astype(np.int32)
for mode in ('cuda','cpu'):
with (O/(mode+'.log')).open('w') as log:subprocess.run([str(R/'pets_hidden'),str(O/'adversarial-encoded.bin'),str(M),mode,str(O/(mode+'.bin'))],check=True,stdout=log,stderr=subprocess.STDOUT)
out=np.fromfile(O/(mode+'.bin'),np.int32).reshape(-1,256);assert np.array_equal(out,ref);assert np.array_equal(out[2],out[3]) and np.array_equal(out[2],out[5])
# Malformed INT_MIN must reject, without overflow, before creating a backend.
import shutil
bad=O/'bad-model';shutil.copytree(M,bad);bb=np.fromfile(bad/'hidden_b.bin',np.int32);bb[0]=np.iinfo(np.int32).min;bb.tofile(bad/'hidden_b.bin')
result=subprocess.run([str(R/'pets_hidden'),str(O/'adversarial-encoded.bin'),str(bad),'cpu',str(O/'bad-output.bin')],capture_output=True);assert result.returncode!=0 and b'Reset exactness bound' in result.stderr
summary={'persistent_worker_detector_counts_exact':True,'worker_seconds':times,'hidden_adversarial_cpu_cuda_reference_exact':True,'hidden_maxcount_in_adversarial':int(ref.max()),'INT_MIN_rejected':True}
(O/'VERIFIED.json').write_text(json.dumps(summary,indent=2));print(json.dumps(summary),flush=True)