ndif-team/nnsight
The nnsight package enables interpreting and manipulating the internals of deep learned models.
nnsight – 窥探并编辑深度学习模型
它是什么nnsight 是一个 Python 库,允许你追踪任何 PyTorch 模型(例如 Hugging Face Transformers、Diffusers、vLLM)的前向传播,并在模型运行时读取或修改中间张量。
它可以在本地运行,或者通过 NDIF 服务在你自己无法托管的大型模型上运行。
它是如何工作的
你用 nnsight 包装一个模型(例如 TransformersModel),并打开一个 with model.trace(...): 块。在块内,你编写普通的 Python 代码来访问层的 .output,使用 .save() 读取值,或覆盖它们。该库会将这些操作注入到真实的前向传播中,因此模型会使用你编辑后的张量进行计算,而无需手动添加钩子。
主要特性
- 读写内部 – 检查隐藏状态、注意力图、梯度;实时替换它们。
- 生成钩子 – 在每个生成步骤进行干预,收集 logits,或运行 logit-lens。
- 批量追踪 – 使用
tracer.invoke在一次传递中处理多个提示。 - 梯度捕获 – 计算相对于任何内部张量的梯度。
- 远程执行 – 设置
remote=True并在 NDIF 托管的模型上运行相同的追踪。 - 支持多种运行时 – 为 Hugging Face、Diffusers、vLLM 提供包装器,以及一个通用的
NNsight包装器,用于任何torch.nn.Module。
典型用法
from nnsight import TransformersModel
model = TransformersModel("openai-community/gpt2", dispatch=True)
with model.trace("The Eiffel Tower is in the city of"):
# 将第一个 transformer 块的输出置零
model.transformer.h[0].output[:] = 0
# 保存网络中更深层的隐藏状态
hidden = model.transformer.h[6].output.save()
# 保留最终的 logits 供以后使用
logits = model.output.logits.save()
print(hidden.shape) # torch.Size([1, 10, 768])
print(logits.argmax(-1)) # 令牌预测
同样的模式适用于生成、梯度提取或远程运行。
谁可能使用它
- 研究人员探测模型内部,进行机制可解释性研究,或构建“logit-lens”可视化。
- 为 LLM 构建调试或编辑工具的开发者。
- 需要对基础模型执行自定义干预的代理(README 甚至列出了将 nnsight 暴露给 Claude、OpenAI Codex 等的方法)。
了解更多
- 完整文档:https://www.nnsight.net
- 设计论文(arXiv 2407.14561)和仓库中的
NNsight.md实现指南。 - README 中链接的交互式 Colab 演练。
安装
pip install nnsight
所有细节均直接取自仓库的 README。
相关
- 项目
- 项目
- 项目
- 项目
- 项目