Erasus (Efficient Representative And Surgical Unlearning Selection) is a Python framework for machine unlearning across all major foundation model types (LLMs, VLMs, Diffusion, Audio, Video). It surgically removes data, concepts, or behaviors from trained models without full retraining.
- Language: Python 3.9+
- Framework: PyTorch
- Package manager: pip (pyproject.toml)
- Entry point:
erasusCLI (erasus/cli/main.py) - License: MIT
# Install (editable, with dev tools)
pip install -e ".[dev]"
# Run all tests (exclude optional-dep-only tests)
python3 -m pytest tests/ -v --tb=short --ignore=tests/test_components.py --ignore=tests/unit/test_sprint_b.py --ignore=tests/unit/test_sprint_f.py
# Run a specific test file
python3 -m pytest tests/unit/test_verification.py -v
# Lint
ruff check erasus/ tests/
# Format check
ruff format --check erasus/ tests/Everything is built on a plugin registry:
erasus/core/registry.py → strategy_registry, selector_registry, model_registry, metric_registry
erasus/core/base_strategy.py → BaseStrategy (abstract)
erasus/core/base_selector.py → BaseSelector (abstract)
erasus/core/base_metric.py → BaseMetric (abstract)
erasus/core/base_unlearner.py → BaseUnlearner (abstract)
New strategies/selectors/metrics are registered via @registry.register("name") decorator.
erasus/
├── core/ # Base classes, registry, config, types
├── unlearners/ # High-level orchestrators (Generic, VLM, LLM, Diffusion, Audio, Video, Federated)
├── strategies/ # 27 unlearning algorithms (gradient/, parameter/, data/, llm_specific/, diffusion_specific/, vlm_specific/)
├── selectors/ # 24 coreset selection methods (gradient_based/, geometry_based/, learning_based/, ensemble/)
├── losses/ # 8 loss functions
├── metrics/ # 25+ evaluation metrics (forgetting/, utility/, efficiency/, privacy/)
├── evaluation/ # Adversarial + relearning robustness tests, unified verification suite
├── models/ # Model wrappers (vlm/, llm/, diffusion/, audio/, video/)
├── data/ # Dataset loaders, preprocessing, partitioning
├── privacy/ # DP mechanisms, certificates
├── certification/ # Formal (epsilon, delta)-removal verification
├── visualization/ # 16 visualization modules
├── experiments/ # Experiment tracking, HPO, ablation
├── cli/ # CLI commands (unlearn, evaluate, benchmark, visualize)
└── utils/ # Helpers, checkpointing, distributed, profiling
forget_data + retain_data → Selector (picks coreset) → Strategy.unlearn() → Modified Model → Metrics
from erasus import ErasusUnlearner
unlearner = ErasusUnlearner(model=model, strategy="gradient_ascent", selector="influence")
result = unlearner.fit(forget_data=forget_loader, retain_data=retain_loader, epochs=5)
metrics = unlearner.evaluate(forget_data=forget_loader, retain_data=retain_loader)- Style: PEP 8, enforced by ruff (line length 100)
- Type hints: Required on all public functions
- Docstrings: NumPy-style docstrings on public classes and methods
- Imports: Use
from __future__ import annotationsat the top of every module - Base classes: All strategies extend
BaseStrategy, all selectors extendBaseSelector, all metrics extendBaseMetric - Registration: Use
@registry.register("name")decorator or register in__init__.py - Error handling: Raise errors for invalid config. Use
warnings.warn()only with explicit opt-in fallbacks. - No silent fallbacks: Selectors should raise errors if required data is missing, not silently fall back to random selection (this is a known issue being fixed).
- Tests live in
tests/withunit/andintegration/subdirs - Fixtures in
tests/conftest.py—TinyClassifier,TinyCNN,_make_loader() - All tests use synthetic tiny models (input_dim=16, 4 classes) for speed
- 3 test files require optional deps (
matplotlib, etc.) and may fail in minimal environments:test_components.py,test_sprint_b.py,test_sprint_f.py - Pre-existing failure:
test_imports.py::test_visualization_importsfails without matplotlib
The erasus/evaluation/ package implements adversarial unlearning verification:
mia_suite.py: 6-attack MIA battery (LOSS, ZLib, Reference, GradNorm, MinK, MinK++)memorization.py: Extraction Strength, Exact Memorization, Verbatim Memorization metricsadversarial.py: Cross-prompt leakage, keyword injection, paraphrase robustness testsrelearning.py: Benign fine-tuning, quantization, LoRA relearning, prompt extraction attacksverification_suite.py: Unified runner that combines all of the above into a single PASS/PARTIAL/FAIL verdict
benchmarks/tofu/— TOFU (LLM unlearning, fictitious author QA)benchmarks/muse/— MUSE (6-way evaluation)benchmarks/wmdp/— WMDP (hazardous knowledge removal)- Currently use synthetic data +
BenchmarkModelfor CI. Real model benchmarks planned.
- This is a research framework, not a production service
- The project is pre-v1 (currently 0.1.1, alpha status)
- Main competitor is OpenUnlearning (CMU, LLM-only). Erasus differentiates via cross-modality support, coreset selection, and verification.
- See
ROADMAP.mdfor the detailed improvement plan - See
project_ideas.mdfor future extension ideas