SuperAPI AI 工具集

nnsight-remote-interpretability

智能体与模型

查看项目

更新于 10-30 06:45

技能介绍

用途

nnsight 面向神经网络可解释性研究,允许用户以统一代码访问、检查和修改任意 PyTorch 模型的内部激活。其核心特点是通过 NDIF 远程执行,在本地无法承载的大模型(如 70B、405B)上运行同一份解释性实验代码。

主要能力

  • 支持任意 PyTorch 架构,包括 Transformer 类模型(GPT-2、LLaMA、Mistral)、状态空间模型(Mamba)、视觉模型(ViT、CLIP)及自定义 nn.Module。
  • 通过 LanguageModel 封装加载 HuggingFace 模型。
  • trace 上下文延迟执行:trace 内的操作被记录为计算图,退出后统一执行。
  • Proxy 对象记录模块访问与运算;调用 .save() 可在 trace 外部读取结果。
  • 可读取或赋值修改任意模块输出、注意力权重,实现激活置零、激活修补(activation patching)等干预。
  • 支持 tracer.invoke() 在同一 trace 内处理多个提示,实现跨提示激活共享。
  • 支持 model.generate() 在生成过程中进行干预。
  • 支持梯度分析(retain_grad 与 backward),但 vLLM 和远程执行不支持梯度。
  • 远程执行通过 remote=True 切换,使用 NDIF 平台运行大模型。

使用方式

安装:

pip install nnsight

vLLM 支持:

pip install "nnsight[vllm]"

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

典型本地流程:

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()
    model.transformer.h[8].output[0][:] = 0
    logits = model.output.save()

远程执行仅在 trace 中增加 remote=True,其余代码保持一致。

适用场景

  • 在本地 GPU 无法容纳的大模型上做可解释性实验。
  • 对任意 PyTorch 架构进行激活分析、注意力模式提取和梯度分析。
  • 多 token 生成过程中的干预实验。
  • 跨提示的激活注入与比较。
  • 系统性激活修补扫描。

限制

  • 不具备跨模型一致的 API;不同模型需自行确认模块路径(如 GPT-2 的 transformer.h 与 LLaMA 的 model.layers)。
  • 梯度访问不支持 vLLM 和远程执行。
  • 远程执行可能超时,需要显式设置 timeout。
  • 保存大量激活会占用较多内存,需按需保存。
  • 远程执行依赖 NDIF 平台及其可用模型列表(官方提到 Llama-3.1 系列、DeepSeek-R1 等,具体以 ndif.us 为准)。
  • 不支持声明式、可分享的干预配置。

与替代工具的比较

  • TransformerLens:API 跨模型一致,但仅支持 Transformer 且无远程执行。
  • pyvene:支持声明式可分享干预,但无远程执行与延迟执行。

官方提供 references/ 目录下的 README、api.md、tutorials.md 文档,以及 NDIF 社区论坛和 ICLR 2025 论文。