SuperAPI AI 工具集

nnsight-remote-interpretability

智能体与模型

查看项目

更新于 10-15 20:21

技能介绍

用途

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

主要能力

  • 支持任意 PyTorch 架构,包括 Transformers(GPT-2、LLaMA、Mistral 等)、状态空间模型(Mamba)、视觉模型(ViT、CLIP)以及自定义 nn.Module。
  • 通过 trace 上下文管理器实现延迟执行,操作被收集为计算图。
  • 使用代理对象(Proxy)记录对模块输出的操作,并通过 .save() 保存值供上下文外访问。
  • 支持激活分析、激活修补、跨提示激活共享、多 token 生成干预以及基于梯度的分析。
  • 通过 NDIF 远程执行,可在无本地 GPU 的情况下访问大模型内部。

使用方式

安装:

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

远程 NDIF 执行需在 login.ndif.us 注册获取 API 密钥,并设置环境变量或通过 CONFIG 配置。

基本用法示例:

from nnsight import LanguageModel

model = LanguageModel("openai-community/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()

适用场景

  • 在本地 GPU 无法容纳的大模型(70B、405B)上运行解释性实验。
  • 对任意 PyTorch 架构进行内部访问,无需重新实现模型。
  • 执行多 token 生成干预。
  • 在不同提示之间共享激活。

限制

  • 梯度访问不支持 vLLM 或远程执行。
  • 不同模型的模块路径不同(如 GPT-2 为 model.transformer.h[i],LLaMA 为 model.model.layers[i]),需确认模型结构。
  • 在 trace 上下文外访问未调用 .save() 的值会出错。
  • 远程执行可能超时,可通过 timeout 参数调整。
  • 保存大量激活会占用较多内存,建议只保存需要的层。
  • 若需要跨模型一致的 API,可考虑 TransformerLens;若需要声明式、可共享的干预,可考虑 pyvene;若训练 SAE,可考虑 SAELens。

参考

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