Galactic-2.5-Mini / verify.py
openmodelai's picture
Upload 10 files
1440c49 verified
Raw History Blame Contribute Delete
2.33 kB
"""Offline load/forward/generation/round-trip checks of the exported checkpoint."""
import hashlib
import json
from pathlib import Path
import torch
from safetensors import safe_open
from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
root = Path(__file__).resolve().parent
path = root/'model'
torch.set_num_threads(2)
tok = AutoTokenizer.from_pretrained(path, local_files_only=True, trust_remote_code=False)
model = AutoModelForCausalLM.from_pretrained(path, local_files_only=True,
trust_remote_code=False, torch_dtype=torch.float32).eval()
count = sum(p.numel() for p in model.parameters())
assert count == 49999872
assert len(tok) == 23258
with safe_open(str(path/'model.safetensors'), framework='pt') as f:
tensor_count = len(f.keys())
assert all(f.get_tensor(k).dtype == torch.float16 for k in f.keys())
assert all(torch.isfinite(f.get_tensor(k)).all() for k in f.keys())
samples = []
for text in ['Однажды вечером', 'Once upon a time']:
assert tok.decode(tok.encode(text)) == text
set_seed(42)
inputs = tok(text, return_tensors='pt')
with torch.inference_mode():
logits = model(**inputs).logits
assert torch.isfinite(logits).all()
generated = model.generate(**inputs, max_new_tokens=48, do_sample=True,
temperature=.8, top_p=.9, repetition_penalty=1.1,
pad_token_id=tok.pad_token_id, eos_token_id=tok.eos_token_id)
samples.append({'prompt':text,'output':tok.decode(generated[0],skip_special_tokens=True)})
report = {'offline_transformers_load':'passed','trust_remote_code':False,
'parameters':count,'vocabulary_size':len(tok),'tensor_count':tensor_count,
'weights_dtype':'float16','finite_weights_and_logits':True,
'russian_english_tokenizer_roundtrip':'passed',
'generation_test':'execution only, NOT linguistic-quality certification',
'generation_seed':42,'max_new_tokens':48,'temperature':.8,'top_p':.9,
'repetition_penalty':1.1,'uncurated_samples':samples,
'safetensors_bytes':(path/'model.safetensors').stat().st_size,
'safetensors_sha256':hashlib.sha256((path/'model.safetensors').read_bytes()).hexdigest()}
(path/'verification.json').write_text(json.dumps(report,ensure_ascii=False,indent=2),encoding='utf-8')
print(json.dumps(report,ensure_ascii=False,indent=2))