interp-engine 1.4.0__tar.gz → 1.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {interp_engine-1.4.0 → interp_engine-1.5.0}/.gitignore +3 -1
- {interp_engine-1.4.0 → interp_engine-1.5.0}/PKG-INFO +19 -7
- {interp_engine-1.4.0 → interp_engine-1.5.0}/README.md +17 -5
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/probe.py +6 -2
- interp_engine-1.5.0/interp_engine/memory.py +2519 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/model.py +42 -39
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/vllm_capture/static.py +10 -20
- {interp_engine-1.4.0 → interp_engine-1.5.0}/pyproject.toml +18 -5
- interp_engine-1.5.0/tests/test_gpu_sizer.py +226 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_load.py +22 -14
- interp_engine-1.5.0/tests/test_memory.py +931 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/LICENSE +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/README.md +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/__init__.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/bench_spec.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/cells.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/probe_lens_stream.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/publish.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/report_bench.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/deepseek-v4-flash-0731__eager.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/deepseek-v4-flash-0731__vllm-cudagraph.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/deepseek-v4-flash-0731__vllm-dspark-cudagraph.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/deepseek-v4-flash-0731__vllm-dspark.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/deepseek-v4-flash-0731__vllm-static.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/deepseek-v4-flash-0731__vllm.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/gemma-2-2b__eager.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/gemma-2-2b__vllm-cudagraph.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/gemma-2-2b__vllm-static.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/gemma-2-2b__vllm.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/llama-3.1-8b__eager.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/llama-3.1-8b__vllm-cudagraph.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/llama-3.1-8b__vllm-static.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/llama-3.1-8b__vllm.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/qwen3-4b__eager.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/qwen3-4b__vllm-cudagraph.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/qwen3-4b__vllm-static.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/qwen3-4b__vllm.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/qwen3.8-27b__eager.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/qwen3.8-27b__vllm-cudagraph.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/qwen3.8-27b__vllm-static.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results/qwen3.8-27b__vllm.json +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/results-latest.md +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/run_all.sh +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/run_bench.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/benchmarks/workloads.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/docs/AGENT_INTEGRATION.md +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/docs/ARCHITECTURE_QUIRKS.md +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/docs/COMPATIBILITY.md +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/docs/ENGINE_HOOK_MAPPINGS.md +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/docs/GRADIENTS.md +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/docs/INTERNALS.md +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/docs/PERFORMANCE.md +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/docs/PORTING.md +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/docs/README.md +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/docs/SUPPORTED_POINTS.md +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/docs/USAGE.md +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/__init__.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/_loop.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/address.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/arch.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/attn_config.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/attn_scores.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/autograd_support.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/capture.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/chat_compose.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/chat_conventions.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/chat_formatters.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/cuda_preflight.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/dispatch.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/facts.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/hooks.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/lens.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/load.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/mappers.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/moe_routing.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/notebook_stdout.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/points.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/protocol.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/residual_basis.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/select.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/steer.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/steer_specs.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/sync.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/tokenize.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/vllm_backend.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/vllm_capture/__init__.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/vllm_capture/_demux.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/vllm_capture/_hooks.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/vllm_capture/_payload.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/vllm_capture/_tree.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/vllm_capture/attn.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/vllm_capture/capture.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/vllm_capture/graphs.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/vllm_capture/lens/__init__.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/vllm_capture/lens/intervene.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/vllm_capture/lens/readout.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/vllm_capture/lens/unembed.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/vllm_capture/mhc.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/vllm_capture/native.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/vllm_capture/requests.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/vllm_capture/steering.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/interp_engine/vllm_plugin.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/conftest.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/harness.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/model_expectations.yaml +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/synthetic_families.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_address.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_attn_config_tripwire.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_attn_probs_indexing.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_attn_scores.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_attn_z_gqa.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_autograd_support.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_bench_workloads.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_capability_refusals.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_capture_addressing.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_chat_compose.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_chat_formatters.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_chat_templates.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_core.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_cuda_preflight.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_doc_code_fences.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_eager_autograd.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_facts.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_family_points.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_gated_attn_out.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_head_contributions.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_hook_call_conventions.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_layer_kinds.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_logit_transform.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_mappers.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_mlp_internals.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_model_expectations.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_moe.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_multimodal_arch.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_new_models_gpu.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_no_chat_template.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_normalized_hook.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_notebook_stdout.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_packaging.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_parity_gpt2.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_per_layer_attn_dims.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_points_registry.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_protocol.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_published_benchmarks.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_qk_norm.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_qkv_layout.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_reasoning_spans.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_release.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_resid_mid.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_residual_basis.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_sandwich_norms.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_select.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_sliding_window_attn.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_small_models_gpu.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_static_dsv4_gpu.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_static_parity_gpu.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_static_set.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_static_warmup.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_steer_context.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_steer_math_parity.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_sync_loop.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_sync_parity.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_unified_free_functions.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_unresolved_families.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_vllm_capture_gpu.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_vllm_capture_scales.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_vllm_engine_loop.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_vllm_graph_path.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_vllm_graphs_on_gpu.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_vllm_hook_availability.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_vllm_hyper_connections.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_vllm_kv_isolation.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_vllm_new_points.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_vllm_only_families.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_vllm_plugin.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_vllm_wire_grammar.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_vocabulary_boundary.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_worker_lens_capture_readout.py +0 -0
- {interp_engine-1.4.0 → interp_engine-1.5.0}/tests/test_worker_lens_readout.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: interp-engine
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.5.0
|
|
4
4
|
Summary: A fast, standardized, and easy to use interpretability engine.
|
|
5
5
|
Project-URL: Homepage, https://github.com/decoderesearch/interp-engine
|
|
6
6
|
Project-URL: Repository, https://github.com/decoderesearch/interp-engine
|
|
@@ -26,7 +26,7 @@ Provides-Extra: quant
|
|
|
26
26
|
Requires-Dist: accelerate>=1.0; extra == 'quant'
|
|
27
27
|
Requires-Dist: kernels<0.17.0,>=0.15.2; extra == 'quant'
|
|
28
28
|
Provides-Extra: vllm
|
|
29
|
-
Requires-Dist: vllm>=0.
|
|
29
|
+
Requires-Dist: vllm>=0.28.0; (sys_platform == 'linux') and extra == 'vllm'
|
|
30
30
|
Description-Content-Type: text/markdown
|
|
31
31
|
|
|
32
32
|
# interp-engine
|
|
@@ -60,6 +60,7 @@ This repo contains:
|
|
|
60
60
|
|
|
61
61
|
1. [`validator/`](validator/), which compares/validates it against TransformerLens, and nnsight/nnterp on real architectures.
|
|
62
62
|
2. [`visualizer-web/`](visualizer-web/), a "cheat sheet" hosted at [interp-engine.org](https://interp-engine.org) of each 'point' (eg `resid_post.16`), standardized across architectures.
|
|
63
|
+
3. [`gpu-sizer/`](gpu-sizer/), which finds the GPU/config you need to fit an interp-engine model (and what performance you'll get), to avoid OOMing while working. [docs](https://interp-engine.org/docs/gpu-sizer) | [API](https://interp-engine.org/docs/gpu-sizer-api)
|
|
63
64
|
|
|
64
65
|
## Installation
|
|
65
66
|
|
|
@@ -139,12 +140,15 @@ We verify correctness in two main ways:
|
|
|
139
140
|
1. A test suite that checks results across several models - what each check is designed to catch is in [INTERNALS.md](docs/INTERNALS.md#correctness).
|
|
140
141
|
2. A full `validator` comparison engine that checks most hook points across 50+ models, at early, middle and late layers - fully reproducible, with detailed results saved in the git repo at [`validator/`](validator/).
|
|
141
142
|
|
|
142
|
-
##
|
|
143
|
+
## GPU-Sizer
|
|
143
144
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
145
|
+
<p align="center">
|
|
146
|
+
<img src="https://neuronpedia.s3.amazonaws.com/site-assets/gpu-sizer.gif" alt="interp-engine demo gif" width="100%">
|
|
147
|
+
</p>
|
|
148
|
+
|
|
149
|
+
[docs](https://interp-engine.org/docs/gpu-sizer) | [API](https://interp-engine.org/docs/gpu-sizer-api)
|
|
150
|
+
|
|
151
|
+
Never OOM again - `interp-engine` includes gpu-sizer, an intuitive UI which tells you what GPU(s) and configs you need to get the best performance out of your selected model. For example, [interp-engine.org/sizer/Qwen/Qwen3.6-27B](https://interp-engine.org/sizer/Qwen/Qwen3.6-27B) shows that you can run `Qwen3.6-27B` with interp-engine's vllm-static backend for max speed while keeping it in a single 80GB A100, and have ~40k tokens for the KV Cache.
|
|
148
152
|
|
|
149
153
|
## Why use an Interpretability Engine instead of building from scratch?
|
|
150
154
|
|
|
@@ -152,6 +156,14 @@ We verify correctness in two main ways:
|
|
|
152
156
|
2. **Standardization + Verification**: Eliminate ambiguity when referring to points, plus a full test suite included.
|
|
153
157
|
3. **Faster Dev / Fewer Tokens Used**: You could spend ten million tokens and have your AI write, test, and make production-ready an interpretability engine. Or you could just `pip install interp-engine[vllm]`.
|
|
154
158
|
|
|
159
|
+
## Caveats
|
|
160
|
+
|
|
161
|
+
- **Gemma 4 requires transformers 5.14.1** because 5.15 moved `head_dim` into `per_layer_config` and vLLM's config read dies before a weight loads ([vllm#51744](https://github.com/vllm-project/vllm/issues/51744)).
|
|
162
|
+
- **DeepSeek-V2 on transformers older than 5.15.0** captures a wrong attention temperature — the engine warns at load, and upgrading is the fix ([COMPATIBILITY.md](docs/COMPATIBILITY.md)).
|
|
163
|
+
- **MXFP4 checkpoints (gpt-oss) need `interp-engine[quant]`**, which the `[vllm]` extra does not include; without it transformers dequantizes them to bf16 at roughly 3x the weights, which can turn a model that fits into one that does not.
|
|
164
|
+
|
|
165
|
+
Per-architecture structural quirks — which points a family serves and why — are not caveats but facts about the architecture, and live in [ARCHITECTURE_QUIRKS.md](docs/ARCHITECTURE_QUIRKS.md).
|
|
166
|
+
|
|
155
167
|
## Development / Contributing
|
|
156
168
|
|
|
157
169
|
Activate the shared git hooks once per clone — they format staged Python, rebuild the generated files, and run CI's static checks before a push. Details in [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
@@ -29,6 +29,7 @@ This repo contains:
|
|
|
29
29
|
|
|
30
30
|
1. [`validator/`](validator/), which compares/validates it against TransformerLens, and nnsight/nnterp on real architectures.
|
|
31
31
|
2. [`visualizer-web/`](visualizer-web/), a "cheat sheet" hosted at [interp-engine.org](https://interp-engine.org) of each 'point' (eg `resid_post.16`), standardized across architectures.
|
|
32
|
+
3. [`gpu-sizer/`](gpu-sizer/), which finds the GPU/config you need to fit an interp-engine model (and what performance you'll get), to avoid OOMing while working. [docs](https://interp-engine.org/docs/gpu-sizer) | [API](https://interp-engine.org/docs/gpu-sizer-api)
|
|
32
33
|
|
|
33
34
|
## Installation
|
|
34
35
|
|
|
@@ -108,12 +109,15 @@ We verify correctness in two main ways:
|
|
|
108
109
|
1. A test suite that checks results across several models - what each check is designed to catch is in [INTERNALS.md](docs/INTERNALS.md#correctness).
|
|
109
110
|
2. A full `validator` comparison engine that checks most hook points across 50+ models, at early, middle and late layers - fully reproducible, with detailed results saved in the git repo at [`validator/`](validator/).
|
|
110
111
|
|
|
111
|
-
##
|
|
112
|
+
## GPU-Sizer
|
|
112
113
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
114
|
+
<p align="center">
|
|
115
|
+
<img src="https://neuronpedia.s3.amazonaws.com/site-assets/gpu-sizer.gif" alt="interp-engine demo gif" width="100%">
|
|
116
|
+
</p>
|
|
117
|
+
|
|
118
|
+
[docs](https://interp-engine.org/docs/gpu-sizer) | [API](https://interp-engine.org/docs/gpu-sizer-api)
|
|
119
|
+
|
|
120
|
+
Never OOM again - `interp-engine` includes gpu-sizer, an intuitive UI which tells you what GPU(s) and configs you need to get the best performance out of your selected model. For example, [interp-engine.org/sizer/Qwen/Qwen3.6-27B](https://interp-engine.org/sizer/Qwen/Qwen3.6-27B) shows that you can run `Qwen3.6-27B` with interp-engine's vllm-static backend for max speed while keeping it in a single 80GB A100, and have ~40k tokens for the KV Cache.
|
|
117
121
|
|
|
118
122
|
## Why use an Interpretability Engine instead of building from scratch?
|
|
119
123
|
|
|
@@ -121,6 +125,14 @@ We verify correctness in two main ways:
|
|
|
121
125
|
2. **Standardization + Verification**: Eliminate ambiguity when referring to points, plus a full test suite included.
|
|
122
126
|
3. **Faster Dev / Fewer Tokens Used**: You could spend ten million tokens and have your AI write, test, and make production-ready an interpretability engine. Or you could just `pip install interp-engine[vllm]`.
|
|
123
127
|
|
|
128
|
+
## Caveats
|
|
129
|
+
|
|
130
|
+
- **Gemma 4 requires transformers 5.14.1** because 5.15 moved `head_dim` into `per_layer_config` and vLLM's config read dies before a weight loads ([vllm#51744](https://github.com/vllm-project/vllm/issues/51744)).
|
|
131
|
+
- **DeepSeek-V2 on transformers older than 5.15.0** captures a wrong attention temperature — the engine warns at load, and upgrading is the fix ([COMPATIBILITY.md](docs/COMPATIBILITY.md)).
|
|
132
|
+
- **MXFP4 checkpoints (gpt-oss) need `interp-engine[quant]`**, which the `[vllm]` extra does not include; without it transformers dequantizes them to bf16 at roughly 3x the weights, which can turn a model that fits into one that does not.
|
|
133
|
+
|
|
134
|
+
Per-architecture structural quirks — which points a family serves and why — are not caveats but facts about the architecture, and live in [ARCHITECTURE_QUIRKS.md](docs/ARCHITECTURE_QUIRKS.md).
|
|
135
|
+
|
|
124
136
|
## Development / Contributing
|
|
125
137
|
|
|
126
138
|
Activate the shared git hooks once per clone — they format staged Python, rebuild the generated files, and run CI's static checks before a push. Details in [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
@@ -41,10 +41,14 @@ class EnvStamp:
|
|
|
41
41
|
#: rather than where it runs. ``VLLM_DEEP_GEMM_WARMUP=skip`` is set by ``run_bench`` on every sweep
|
|
42
42
|
#: (see ``skip_broken_deepgemm_warmup``) and moves DeepGEMM's first compile out of startup and into
|
|
43
43
|
#: the first forward, which is a real difference in ``warmup_s`` on the FP8 rows.
|
|
44
|
+
#:
|
|
45
|
+
#: Only variables the installed vLLM still reads belong here. ``VLLM_ATTENTION_BACKEND`` and
|
|
46
|
+
#: ``VLLM_USE_V1`` were dropped from vLLM (the backend moved to the ``attention_config`` engine
|
|
47
|
+
#: argument, and V0 is gone), and neither name appears anywhere in 0.28.0. Stamping one annotated a
|
|
48
|
+
#: run with a setting that had no effect -- the one reading somebody chasing a discrepancy would
|
|
49
|
+
#: trust, and the worst kind to be wrong.
|
|
44
50
|
_RECORDED_ENV: tuple[str, ...] = (
|
|
45
51
|
"VLLM_DEEP_GEMM_WARMUP",
|
|
46
|
-
"VLLM_ATTENTION_BACKEND",
|
|
47
|
-
"VLLM_USE_V1",
|
|
48
52
|
"CUDA_VISIBLE_DEVICES",
|
|
49
53
|
)
|
|
50
54
|
|