| |
| """Load each delivered checkpoint on CPU and verify finite logits.""" |
|
|
| from __future__ import annotations |
|
|
| import gc |
| import json |
| import os |
| import platform |
| import sys |
| import traceback |
| from pathlib import Path |
|
|
|
|
| THREADS = "4" |
| for variable in ( |
| "OMP_NUM_THREADS", |
| "MKL_NUM_THREADS", |
| "OPENBLAS_NUM_THREADS", |
| "NUMEXPR_NUM_THREADS", |
| "VECLIB_MAXIMUM_THREADS", |
| "BLIS_NUM_THREADS", |
| ): |
| os.environ.setdefault(variable, THREADS) |
| os.environ.setdefault("CUDA_VISIBLE_DEVICES", "") |
|
|
| import torch |
| import safetensors |
| import transformers |
| from transformers import AutoConfig, AutoModelForCausalLM, AutoTokenizer |
|
|
|
|
| ROOT = Path(__file__).resolve().parents[1] |
| PROMPT = 'def rmsd(a, b):\n """Root-mean-square deviation."""\n' |
| TARGETS = { |
| "pretrained/codegpt_multilingual_5epoch": ROOT / "models/pretrained/codegpt_multilingual_5epoch", |
| "pretrained/gpt2_124m_code_5epoch": ROOT / "models/pretrained/gpt2_124m_code_5epoch", |
| "pretrained/qwen25_coder_7b_cpt": ROOT / "models/pretrained/qwen25_coder_7b_cpt", |
| "pretrained/stage1_cpt": ROOT / "models/pretrained/stage1_cpt", |
| "sft/sft_f3_refined_instruct": ROOT / "models/sft/sft_f3_refined_instruct", |
| } |
| for checkpoint in sorted((ROOT / "models/sft").iterdir()): |
| if checkpoint.is_dir() and (checkpoint / "config.json").is_file(): |
| TARGETS.setdefault(f"sft/{checkpoint.name}", checkpoint) |
|
|
|
|
| def check(name: str, path: Path) -> dict: |
| result = {"model": name, "path": str(path.relative_to(ROOT)), "ok": False} |
| try: |
| config = AutoConfig.from_pretrained(path) |
| result.update( |
| architecture=(config.architectures or [type(config).__name__])[0], |
| hidden_size=getattr(config, "hidden_size", None), |
| layers=getattr(config, "num_hidden_layers", None), |
| vocab_size=getattr(config, "vocab_size", None), |
| ) |
| tokenizer = AutoTokenizer.from_pretrained(path) |
| model = AutoModelForCausalLM.from_pretrained( |
| path, |
| dtype="auto", |
| low_cpu_mem_usage=True, |
| ) |
| model.eval() |
| inputs = tokenizer(PROMPT, return_tensors="pt") |
| with torch.no_grad(): |
| logits = model(**inputs).logits |
| last = logits[0, -1].float() |
| result.update( |
| tokenizer=type(tokenizer).__name__, |
| parameters_million=round(sum(p.numel() for p in model.parameters()) / 1e6, 1), |
| logits_shape=list(logits.shape), |
| finite=bool(torch.isfinite(logits).all()), |
| top1_zscore=round(((last.max() - last.mean()) / last.std()).item(), 2), |
| ) |
| result["ok"] = result["finite"] and result["top1_zscore"] > 3.0 |
| del model, tokenizer, inputs, logits, last |
| gc.collect() |
| except Exception as error: |
| result["error"] = f"{type(error).__name__}: {error}" |
| result["traceback"] = traceback.format_exc(limit=3) |
| return result |
|
|
|
|
| def main() -> int: |
| torch.set_num_threads(int(THREADS)) |
| results = [check(name, path) for name, path in TARGETS.items()] |
| report = { |
| "validation_environment": { |
| "python": platform.python_version(), |
| "torch": torch.__version__, |
| "transformers": transformers.__version__, |
| "safetensors": safetensors.__version__, |
| "device": "cpu", |
| "threads": int(THREADS), |
| }, |
| "results": results, |
| } |
| output = ROOT / "evidence/smoke_test_results.json" |
| output.write_text(json.dumps(report, indent=2, ensure_ascii=False) + "\n", encoding="utf-8") |
| for result in results: |
| status = "PASS" if result["ok"] else "FAIL" |
| detail = f"{result.get('parameters_million', '?')}M, z={result.get('top1_zscore', '?')}" |
| print(f"{status}: {result['model']} ({detail})") |
| passed = sum(result["ok"] for result in results) |
| print(f"{passed}/{len(results)} checkpoints passed; results: {output}") |
| return 0 if passed == len(results) else 1 |
|
|
|
|
| if __name__ == "__main__": |
| sys.exit(main()) |
|
|