our_knp/mnist-altai-native/finalize_native.py

26 lines
4.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from pathlib import Path
import hashlib,json,tarfile,shutil
r=Path.home()/'run/mnist-altai-native';probe=Path.home()/'run/altai-official-probe';repo=Path.home()/'KNP'
cpu=json.loads((r/'cpu-full-v3/VERIFIED.json').read_text());cuda=json.loads((r/'cuda-full/VERIFIED.json').read_text());gm=json.loads((r/'gm-shards-v1/VERIFIED.json').read_text());assert cpu['correct']==cuda['correct']==9776;assert gm['hidden_exact'] and gm['output_exact'] and gm['total']==1000
sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest()
proofs={}
for tag,d in [('cpu',r/'cpu-full-v3'),('cuda',r/'cuda-full'),('golden1000',r/'gm-shards-v1')]:
proofs[tag]={n:sha(d/n) for n in ['hidden_counts.bin','output_counts.bin','predictions.csv']}
assert proofs['cpu']==proofs['cuda']
summary={'native_cpu_full':cpu,'native_cuda_full':cuda,'official_golden_subset':{k:v for k,v in gm.items() if k!='shards'},'wall_speedup_cpu_cuda':cpu['wall_seconds']/cuda['wall_seconds'],'hashes':proofs,'model_sha256':sha(r/'model.bin'),'current_executable_sha256':sha(probe/'native_digits'),'preserved_full_test_executable_sha256':sha(probe/'native_digits_v3'),'golden_api_2534':{k:v for k,v in json.loads((r/'web-golden-2534.json').read_text()).items() if k not in ['counts','output_counts','scores']},'physical_device_tested':False,'full_test_official_golden':False,'web_url':'http://10.9.8.230:8081/native_viz.html'}
(r/'final-summary.json').write_text(json.dumps(summary,ensure_ascii=False,indent=2))
meta=json.loads((repo/'viz/native-model.json').read_text());meta.update(golden_verified_subset=1000,golden_subset_accuracy=.975,golden_subset_configuration='8 independent processes; 2 replicas each; standard4x4',official_backend='1.0.2 AltAIv1_GoldenModel',model_sha256=sha(r/'model.bin'));(repo/'viz/native-model.json').write_text(json.dumps(meta,ensure_ascii=False))
p=repo/'viz/native_viz.html';s=p.read_text().replace('Официальный GoldenModel проверяется отдельно; подробный статус — в параметрах модели.','Официальный GoldenModel проверен отдельно на первых1000 test: все скрытые и выходные счётчики точно совпали с эталоном. Полный test10000 проверен в KNP CPU и CUDA.');p.write_text(s)
shutil.copy2(Path.home()/'run/mnist-fast/split.npz',r/'training-split.npz');shutil.copy2(Path.home()/'run/mnist-native-20261015/dataset-manifest.json',r/'dataset-manifest.json')
include=['model.bin','model.npz','selection.json','history.json','metrics-reference.json','reference.npz','training-split.npz','dataset-manifest.json','final-summary.json','cpu-full-v3/VERIFIED.json','cpu-full-v3/predictions.csv','cuda-full/VERIFIED.json','cpu-final-v6-32/VERIFIED.json','cuda-final-v6-32/VERIFIED.json','gm-shards-v1/VERIFIED.json','gm-shards-v1/hidden_counts.bin','gm-shards-v1/output_counts.bin','gm-shards-v1/predictions.csv','gm-reset-v3/summary.json','gm-1000/FAILED.json','gm-1000/summary.json','gm-1000-grid8-v4/FAILED.json','web-api-cases.json','web-golden-2534.json']
with tarfile.open(r/'native-model-and-proofs.tar.gz','w:gz') as t:
for name in include:t.add(r/name,arcname=name)
for f in (repo/'mnist-altai-native').iterdir():
if f.is_file():t.add(f,arcname='source/'+f.name)
for f in probe.glob('self-*.log'):t.add(f,arcname='microprobes/'+f.name)
t.add(probe/'native-build.json',arcname='native-build.json');t.add(probe/'compile-command.txt',arcname='compile-command.txt')
(r/'native-model-and-proofs.sha256').write_text(sha(r/'native-model-and-proofs.tar.gz')+' native-model-and-proofs.tar.gz\n')
# Pre-seed the remote report import with the identical artifact, avoiding needless roundtrip upload.
target=repo/'reports/imported-neiro-2026-10-15/reports/altai-native-artifacts';target.mkdir(parents=True,exist_ok=True)
for name in ['native-model-and-proofs.tar.gz','native-model-and-proofs.sha256','final-summary.json']:shutil.copy2(r/name,target/name)
print(json.dumps({'artifact_bytes':(r/'native-model-and-proofs.tar.gz').stat().st_size,'golden':gm['correct'],'total':gm['total'],'cpu_cuda_speedup':summary['wall_speedup_cpu_cuda']}))