GuideStablesince v0.2.0

Your first fingerprint

Compute a deterministic fingerprint over a real model and confirm two loads of the same checkpoint agree bit-for-bit.

Audience: New usersRead: 8 minEdit on GitHub

A fingerprint is the canonical identity of a model — a 32-byte BLAKE3 digest over its architecture, weights, and tokenizer. Two loads of the same checkpoint on the same environment produce the same digest; a single altered weight produces a completely different one.

1. Load a model

Any framework object works. This walkthrough uses HuggingFace transformers.

first_fingerprint.py·
·python
from transformers import AutoModel
model = AutoModel.from_pretrained("distilbert-base-uncased")

2. Fingerprint it

first_fingerprint.py·
·python
import neuronscope as ns
fp = ns.fingerprint(model)
print(fp.hex)

3. Verify determinism

Load the same checkpoint into a fresh process and compare. The digest is a value — equality is by bytes, not identity.

shellbash
python -c 'import neuronscope as ns; from transformers import AutoModel; print(ns.fingerprint(AutoModel.from_pretrained("distilbert-base-uncased")).hex)'

4. Split by component

  • kind="arch" — architecture only; stable across weight updates.
  • kind="weights" — parameter tensors only.
  • kind="tokenizer" — vocab + merges.
first_fingerprint.py·
·python
arch = ns.fingerprint(model, kind="arch").hex
weights = ns.fingerprint(model, kind="weights").hex
print(arch, weights, sep="\n")
Related