用途
本技能提供使用 pyvene 对 PyTorch 模型进行因果干预的指导。pyvene 是 Stanford NLP 的库,通过声明式、基于字典的框架实现激活修补、因果追踪和交换干预训练,使干预实验可复现和可分享。
主要能力
- 支持多种干预类型:VanillaIntervention(交换激活)、AdditionIntervention(相加)、SubtractionIntervention(相减)、ZeroIntervention(置零)、RotatedSpaceIntervention(可训练 DAS)、CollectIntervention(收集激活)。
- 可干预的组件包括 block_input、block_output、mlp_input、mlp_output、mlp_activation、attention_input、attention_output、attention_value_output、query_output、key_output、value_output、head_attention_value_output 等。
- 核心类:IntervenableModel(主包装器)、IntervenableConfig(配置容器)、RepresentationConfig(单个干预规格)。
- 支持保存到本地、从本地加载,以及通过 HuggingFace 保存和加载干预。
- 支持 LoRA 作为干预(pyvene v0.1.8+)。
- 已在 GPT-2、LLaMA/LLaMA-2、Pythia、Mistral/Mixtral、OPT、BLIP、ESM、Mamba 等模型上测试,理论上适用于任何 PyTorch 模型。
使用方式
安装:pip install pyvene;导入:import pyvene as pv。
基本流程:加载基础模型 → 定义 IntervenableConfig(指定 layer、component、intervention_type 等)→ 创建 IntervenableModel → 调用时传入 base 和 sources 及可选的 unit_locations 执行干预。
技能资料中给出了四个工作流示例:
- 因果追踪(ROME 风格):通过破坏输入并恢复特定层和位置的干净激活,扫描层×位置热图定位事实关联存储位置。
- 激活修补用于电路分析:在 IOI 任务中逐层修补 attention_output,计算 logit 差异。
- 交换干预训练(IIT):使用 RotatedSpaceIntervention 训练可训练干预,通过低秩旋转发现因果子空间,并包含 DAS(Distributed Alignment Search)示例。
- 模型引导(Honest LLaMA):加载预训练干预,在生成时应用引导。
保存与分享:intervenable.save("./my_intervention")、pv.IntervenableModel.load(...)、intervenable.save_intervention("username/my-intervention")。
适用场景
- 因果追踪(ROME 风格定位)
- 激活修补实验
- 交换干预训练(IIT)
- 测试关于模型组件的因果假设
- 通过 HuggingFace 分享/复现干预实验
- 处理任意 PyTorch 架构(不仅限于 transformers)
限制与替代方案
- 如需探索性激活分析,建议使用 TransformerLens。
- 如需训练/分析 SAE,建议使用 SAELens。
- 如需在超大模型上远程执行或更低层控制,建议使用 nnsight。
- 常见问题包括干预位置错误(组件名需精确)、维度不匹配(需确保 source 和 base 形状兼容,必要时指定 unit 和 max_number_of_units 及 unit_locations)、大模型内存问题(可使用梯度检查点或减少干预组件)、LoRA 集成需 v0.1.8+。
参考资料
技能资料提及 references/ 文件夹包含 README.md、api.md、tutorials.md,以及外部教程和论文(如 ROME、ITI、IOI 等),但具体内容暂未提供。