SuperAPI AI 工具集

mechanistic-interpretability-nnsight

智能体与模型

查看项目

更新于 11-04 01:41

技能介绍

用途

nnsight(读作 /ɛn.saɪt/)用于解释和操控任意 PyTorch 模型的内部结构。其核心价值是“写一次,随处运行”:同一份可解释性代码既可在本地小模型(如 GPT-2)上运行,也可通过 NDIF 远程在超大模型(70B、405B)上运行,只需切换 remote=True。

主要能力

  • 支持任意 PyTorch 架构,包括 Transformers(GPT-2、LLaMA、Mistral 等)、状态空间模型(Mamba)、视觉模型(ViT、CLIP)以及自定义 nn.Module。
  • 通过 trace 上下文延迟执行,将操作收集为计算图,可访问任意模块的输出、注意力模式与最终 logits。
  • 可修改激活值(如将某层输出置零)、进行激活修补、跨提示共享激活。
  • 支持多 token 生成干预,可在生成过程中修改内部状态。
  • 支持基于梯度的分析,可保存激活并保留梯度,在反向传播后访问梯度。
  • 通过 NDIF 远程执行,无需本地 GPU 即可访问 70B+ 模型内部。

使用方式

安装:

pip install nnsight
# vLLM 支持
pip install "nnsight[vllm]"

远程 NDIF 执行需在 login.ndif.us 注册获取 API key。

基本用法:使用 LanguageModel 包装模型(底层使用 HuggingFace),在 model.trace(...) 上下文中访问模块输出,对需要后续访问的值调用 .save(),在上下文外读取。

from nnsight import LanguageModel
model = LanguageModel("gpt2", device_map="auto")
with model.trace("The Eiffel Tower is in") as tracer:
    hidden_states = model.transformer.h[5].output[0].save()
    logits = model.output.save()
print(hidden_states.shape)

远程执行只需添加 remote=True:

with model.trace("Hello world", remote=True):
    hidden = model.model.layers[40].output[0].save()

NDIF 配置:

import os
os.environ["NDIF_API_KEY"] = "your_key"
# 或
from nnsight import CONFIG
CONFIG.API_KEY = "your_key"

适用场景

  • 在本地 GPU 无法容纳的大模型(70B、405B)上运行可解释性实验。
  • 对任意 PyTorch 架构进行内部访问,无需重新实现模型。
  • 多 token 生成干预、跨提示激活共享。
  • 激活分析、激活修补、系统性修补扫描、基于梯度的分析。

限制与注意事项

  • 梯度访问不支持 vLLM 或远程执行。
  • 不同模型的模块路径不同(如 GPT-2 为 model.transformer.h[5].output[0],LLaMA 为 model.model.layers[5].output[0]),需先确认模型结构。
  • 忘记调用 .save() 会导致上下文外无法访问值。
  • 远程长操作需增加 timeout;保存大量激活会占用较多内存,建议只保存需要的层。
  • 若需要跨模型一致的 API,可考虑 TransformerLens;需要声明式、可分享的干预可考虑 pyvene;训练 SAE 可考虑 SAELens;仅本地小模型时 TransformerLens 可能更简单。

参考

GitHub: ndif-team/nnsight;论文:NNsight and NDIF: Democratizing Access to Foundation Model Internals (ICLR 2025)。详细 API、教程见项目 references/ 目录及官方文档。