Skip to content

BitMind-AI/model-fp

Repository files navigation

Model-FP

ONNX model fingerprinting tool for detecting functionally equivalent models by creating fingerprints based on the model's architecture and weights.

Features

  • Canonicalization & Preprocessing Split: Separates preprocessing from core model components
  • Architecture Fingerprints: WL-ish core graph + parameter-operation skeleton hashing
  • Weight Fingerprints: Per-layer sketches robust to batch normalization, noise, and permutations
  • Global Descriptors: 512D global descriptors for similarity comparison
  • CLI Interface: Simple command-line interface for model analysis and comparison

Repository Structure

model-fp/
├── model_fp/                # Main package
│   ├── canonicalize.py      # ONNX loading, canonicalization, preprocessing split
│   ├── arch.py              # Architecture fingerprinting (skeleton hashing)
│   ├── weights.py           # Weight fingerprinting (per-layer sketches)
│   ├── compare.py           # Fingerprint comparison and aggregation
│   ├── utils.py             # Shared utilities (hashing, JSON helpers)
│   ├── analyzer.py          # Weight analysis and outlier detection
│   └── cli.py               # Click-based command-line interface
├── tests/                   # Test suite
├── install.sh               # Installation script (uv + venv)
├── pyproject.toml           # Modern Python packaging
├── setup.py                 # Traditional packaging (for compatibility)
├── requirements.txt         # Dependencies
├── README.md               # This file - overview and quickstart
└── TECHNICAL.md            # Technical documentation

Installation

git clone https://github.com/your-username/model-fp.git
cd model-fp
./install.sh

Quick Start

1. Explain a Model

Get detailed information about a model's fingerprint

model-fp explain path/to/model.onnx

Output includes:

  • Parameter count
  • Architecture features (bag-of-ops)
  • Preprocessing operations
  • Various hash fingerprints (core graph, weights, skeleton)
  • Global vector norm

2. Compare Two Models

Compare two models to check for duplicates:

model-fp compare model_a.onnx model_b.onnx

Output includes:

  • Similarity scores (cosine similarity, exact matches)
  • Equivalence verdict
  • Detailed comparison metrics

3. Check Equivalence

Get a simple true/false result for model equivalence:

model-fp compare model_a.onnx model_b.onnx --equiv

Returns true or false with appropriate exit codes.

4. Analyze Weights [WORK IN PROGRESS; CURRENTLY UGLY AF]

Analyze weight distributions and outliers:

model-fp analyze path/to/model.onnx --top 10

Usage Examples

Basic Model Explanation

model-fp explain my_model.onnx

Model Comparison with Custom Threshold

model-fp compare model1.onnx model2.onnx --equiv --equiv-threshold 0.995

Save Results to File

model-fp explain model.onnx --output results.json
model-fp compare a.onnx b.onnx --output comparison.json

How It Works

Model-FP uses a three-stage fingerprinting approach:

  1. Canonicalization: Loads and normalizes ONNX models, separating preprocessing from core components
  2. Architecture Fingerprinting: Creates hashes based on parameterized operations and graph structure
  3. Weight Fingerprinting: Generates per-layer descriptors and global 512D vectors for similarity comparison

The system is designed to be robust against:

  • Minor export differences
  • Preprocessing variations
  • Batch normalization changes
  • Weight permutations
  • Noise and small perturbations

About

Model fingerprinting

Resources

License

Stars

Watchers

Forks

Packages

No packages published