feat: trace DeepSeek V2-Lite real routes
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Compare deterministic evidence from two DeepSeek-V2-Lite trace runs."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import hashlib
|
||||
import json
|
||||
from datetime import datetime, timezone
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
|
||||
def parse_args() -> argparse.Namespace:
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--first", type=Path, required=True)
|
||||
parser.add_argument("--second", type=Path, required=True)
|
||||
parser.add_argument("--output", type=Path, required=True)
|
||||
parser.add_argument("--captured-at", default=None)
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def read(path: Path) -> dict[str, Any]:
|
||||
return json.loads(path.read_text())
|
||||
|
||||
|
||||
def sha256(path: Path) -> str:
|
||||
return hashlib.sha256(path.read_bytes()).hexdigest()
|
||||
|
||||
|
||||
def main() -> None:
|
||||
args = parse_args()
|
||||
first = read(args.first)
|
||||
second = read(args.second)
|
||||
checks: list[dict[str, Any]] = []
|
||||
|
||||
def check(name: str, left: Any, right: Any) -> None:
|
||||
checks.append({"name": name, "exact": left == right})
|
||||
|
||||
check("provenance", first["provenance"], second["provenance"])
|
||||
check("configuration", first["configuration"], second["configuration"])
|
||||
check("prompt_tokenization", first["prompts"], second["prompts"])
|
||||
check(
|
||||
"initial_hidden_hash",
|
||||
first["execution"]["initial_hidden"]["sha256_fp32"],
|
||||
second["execution"]["initial_hidden"]["sha256_fp32"],
|
||||
)
|
||||
check(
|
||||
"final_hidden_hash",
|
||||
first["execution"]["final_hidden"]["sha256_fp32"],
|
||||
second["execution"]["final_hidden"]["sha256_fp32"],
|
||||
)
|
||||
for left, right in zip(
|
||||
first["execution"]["layers"],
|
||||
second["execution"]["layers"],
|
||||
strict=True,
|
||||
):
|
||||
layer = left["layer"]
|
||||
check(
|
||||
f"layer_{layer}_hidden_hash",
|
||||
left["hidden_after"]["sha256_fp32"],
|
||||
right["hidden_after"]["sha256_fp32"],
|
||||
)
|
||||
check(f"layer_{layer}_mla_shapes", left["mla"], right["mla"])
|
||||
if "routing" in left:
|
||||
check(
|
||||
f"layer_{layer}_aggregate_load",
|
||||
left["routing"]["aggregate_load"],
|
||||
right["routing"]["aggregate_load"],
|
||||
)
|
||||
check(
|
||||
f"layer_{layer}_token_routes",
|
||||
[
|
||||
prompt["token_routes"]
|
||||
for prompt in left["routing"]["per_prompt"]
|
||||
],
|
||||
[
|
||||
prompt["token_routes"]
|
||||
for prompt in right["routing"]["per_prompt"]
|
||||
],
|
||||
)
|
||||
|
||||
captured_at = args.captured_at or datetime.now(timezone.utc).isoformat()
|
||||
result = {
|
||||
"schema_version": 1,
|
||||
"captured_at": captured_at,
|
||||
"first": {
|
||||
"captured_at": first["captured_at"],
|
||||
"sha256": sha256(args.first),
|
||||
},
|
||||
"second": {
|
||||
"captured_at": second["captured_at"],
|
||||
"sha256": sha256(args.second),
|
||||
},
|
||||
"timing_compared": False,
|
||||
"checks": checks,
|
||||
"exact_checks": sum(item["exact"] for item in checks),
|
||||
"total_checks": len(checks),
|
||||
"all_exact": all(item["exact"] for item in checks),
|
||||
}
|
||||
if not result["all_exact"]:
|
||||
failed = [item["name"] for item in checks if not item["exact"]]
|
||||
raise AssertionError(f"trace mismatch: {failed}")
|
||||
args.output.parent.mkdir(parents=True, exist_ok=True)
|
||||
args.output.write_text(json.dumps(result, indent=2) + "\n")
|
||||
print(json.dumps(result, indent=2))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user