26 lines
4.1 KiB
Python
26 lines
4.1 KiB
Python
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']}))
|