初始化项目,由ModelHub XC社区提供模型
Model: jiamingshan/AHA-L2A-Qwen3-1.7B-repro Source: Original Platform
This commit is contained in:
72
recipe/scripts/validate_release.py
Normal file
72
recipe/scripts/validate_release.py
Normal file
@@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Fail fast if a downloaded release is incomplete or has drifted."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
from collections import Counter
|
||||
from pathlib import Path
|
||||
|
||||
from datasets import load_from_disk
|
||||
|
||||
|
||||
RECIPE = Path(__file__).resolve().parents[1]
|
||||
REPO = RECIPE.parent
|
||||
|
||||
|
||||
def sha256(path: Path) -> str:
|
||||
digest = hashlib.sha256()
|
||||
with path.open("rb") as handle:
|
||||
for block in iter(lambda: handle.read(8 * 1024 * 1024), b""):
|
||||
digest.update(block)
|
||||
return digest.hexdigest()
|
||||
|
||||
|
||||
def read_jsonl(path: Path) -> list[dict]:
|
||||
return [json.loads(line) for line in path.read_text().splitlines() if line.strip()]
|
||||
|
||||
|
||||
def main() -> None:
|
||||
manifest = json.loads((RECIPE / "manifest.json").read_text())
|
||||
checked = []
|
||||
for relative, expected in manifest["files"].items():
|
||||
path = (RECIPE / relative).resolve()
|
||||
if not path.exists():
|
||||
raise FileNotFoundError(path)
|
||||
if path.name == "model.safetensors" and os.environ.get("SKIP_LARGE_HASH") == "1":
|
||||
continue
|
||||
actual = sha256(path)
|
||||
if actual != expected:
|
||||
raise RuntimeError(f"SHA256 mismatch for {path}: {actual} != {expected}")
|
||||
checked.append(str(path.relative_to(REPO)))
|
||||
|
||||
config = json.loads((REPO / "config.json").read_text())
|
||||
if config.get("model_type") != "qwen3":
|
||||
raise RuntimeError(f"unexpected tuned-vanilla model_type: {config.get('model_type')}")
|
||||
dataset = load_from_disk(str(RECIPE / "data/am_distilled_long_mix"))
|
||||
if len(dataset["train"]) != 1024:
|
||||
raise RuntimeError(f"expected 1024 training rows, found {len(dataset['train'])}")
|
||||
|
||||
helmet = read_jsonl(RECIPE / "data/eval_inputs/helmet_icl_8k_n50_per_config.jsonl")
|
||||
mrcr = read_jsonl(RECIPE / "data/eval_inputs/mrcr_8k_2_4_8needle_n10_per_config.jsonl")
|
||||
helmet_counts = Counter(row["config"] for row in helmet)
|
||||
mrcr_counts = Counter(row["config"] for row in mrcr)
|
||||
if sorted(helmet_counts.values()) != [50] * 5:
|
||||
raise RuntimeError(f"unexpected HELMET counts: {helmet_counts}")
|
||||
if sorted(mrcr_counts.values()) != [10] * 3:
|
||||
raise RuntimeError(f"unexpected MRCR counts: {mrcr_counts}")
|
||||
|
||||
print(json.dumps({
|
||||
"status": "ok",
|
||||
"checked_sha256": checked,
|
||||
"model_type": config["model_type"],
|
||||
"training_rows": len(dataset["train"]),
|
||||
"helmet_rows": len(helmet),
|
||||
"mrcr_rows": len(mrcr),
|
||||
}, indent=2))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user