Download export/verify_official.py from executorch-community/D-FINE-Small-COCO-ExecuTorch-WebGPU: direct link, hf CLI and curl.
- Browser
- Download file 1.99 kB
-
https://huggingface.co/executorch-community/D-FINE-Small-COCO-ExecuTorch-WebGPU/resolve/main/export/verify_official.py
- Command line
-
hf download hf://executorch-community/D-FINE-Small-COCO-ExecuTorch-WebGPU/export/verify_official.py
-
curl -L -o verify_official.py https://huggingface.co/executorch-community/D-FINE-Small-COCO-ExecuTorch-WebGPU/resolve/main/export/verify_official.py
1.99 kB
| """Check that every tensor in a converted Hugging Face D-FINE checkpoint is bit-identical to a | |
| tensor (or a q/k/v third of an in_proj tensor) of the official checkpoint. | |
| python verify_official.py Peterande/D-FINE 19214e91f5ce4c1e609022c38b1fc953c47404e7 dfine_s_coco.pth \ | |
| ustc-community/dfine-small-coco f79e65b5fbb33ceb9d3ebba042955d7410c608f8 | |
| """ | |
| import hashlib | |
| import json | |
| import sys | |
| import torch | |
| from huggingface_hub import hf_hub_download | |
| from safetensors.torch import load_file | |
| off_repo, off_rev, off_file, port_repo, port_rev = sys.argv[1:6] | |
| def digest(t): | |
| t = t.detach().contiguous().cpu() | |
| return hashlib.sha256(str(t.dtype).encode() + str(tuple(t.shape)).encode() + t.numpy().tobytes()).hexdigest() | |
| off_path = hf_hub_download(off_repo, off_file, revision=off_rev) | |
| ckpt = torch.load(off_path, map_location="cpu", weights_only=False) | |
| official = ckpt["model"] | |
| pool = {} | |
| for k, t in official.items(): | |
| if not torch.is_tensor(t): | |
| continue | |
| pool.setdefault(digest(t), k) | |
| if "in_proj" in k and t.shape[0] % 3 == 0: | |
| for i, part in enumerate(t.chunk(3, dim=0)): | |
| pool.setdefault(digest(part), f"{k}[{'qkv'[i]}]") | |
| port_path = hf_hub_download(port_repo, "model.safetensors", revision=port_rev) | |
| port = load_file(port_path) | |
| matched, unmatched = 0, [] | |
| for k, t in port.items(): | |
| if digest(t) in pool: | |
| matched += 1 | |
| else: | |
| unmatched.append((k, tuple(t.shape))) | |
| nparams = sum(t.numel() for t in port.values()) | |
| unparams = sum(port[k].numel() for k, _ in unmatched) | |
| print(json.dumps({ | |
| "official": f"{off_repo}@{off_rev}/{off_file}", | |
| "official_sha256": hashlib.sha256(open(off_path, "rb").read()).hexdigest(), | |
| "official_keys": list(ckpt.keys()), | |
| "port": f"{port_repo}@{port_rev}/model.safetensors", | |
| "port_tensors": len(port), | |
| "matched": matched, | |
| "unmatched": len(unmatched), | |
| "unmatched_params": unparams, | |
| "total_params": nparams, | |
| "unmatched_sample": unmatched[:25], | |
| }, indent=1)) | |