25 lines
2.5 KiB
Python
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)
|