PEFT 文档
torch.compile
并获得增强的文档体验
开始使用
torch.compile
在 PEFT 中,torch.compile 适用于部分而非全部功能。它并非总是有效的原因是 PEFT 在某些地方是高度动态的(例如加载和切换多个适配器),这可能会给 `torch.compile` 带来麻烦。在其他地方,`torch.compile` 可能可以工作,但由于图中断(graph breaks)而不会像预期那样快。
如果你没有看到错误,并不一定意味着 `torch.compile` 正确工作了。它可能会给你一个输出,但输出是不正确的。本指南描述了哪些功能可以与 `torch.compile` 一起使用,哪些不可以。对于你自己的测试,我们建议使用最新的 PyTorch 版本,因为 `torch.compile` 正在不断改进。
除非另有说明,否则均使用默认的 `torch.compile` 设置。
使用 torch.compile 进行训练和推理
这些功能 **可以** 与 `torch.compile` 一起使用。下面列出的所有功能都已通过因果语言模型(causal LM)进行了测试。
- 使用 🤗 Transformers 的 `Trainer` 进行训练
- 使用自定义的 PyTorch 循环进行训练
- 推理
- 生成
以下适配器已成功测试:
- AdaLoRA
- BOFT
- Bone
- IA³
- Layer Norm 调优
- LoHa
- LoKr
- LoRA
- LoRA + DoRA
- 应用于嵌入层的 LoRA
- OFT
- VeRA
- HRA
使用 torch.compile 的高级 PEFT 功能
以下是一些 **可以** 工作的更高级的 PEFT 功能。它们都已通过 LoRA 进行了测试。
modules_to_save
(即config = LoraConfig(..., modules_to_save=...)
)- 合并适配器(单个或多个)
- 将多个适配器合并为一个适配器(即调用
model.add_weighted_adapter(...)
) - 将 PEFT 适配器与量化(bitsandbytes)结合使用
- 禁用适配器(即使用
with model.disable_adapter()
) - 卸载(即调用
model.merge_and_unload()
) - 混合适配器批次(即调用
model(batch, adapter_names=["__base__", "default", "other", ...])
) - 使用多个适配器进行推理(即使用
model.add_adapter
或model.load_adapter
加载超过 1 个适配器);为此,请仅在加载所有适配器 **之后** 调用 `torch.compile`。
总的来说,我们可以预期,如果一个功能与 LoRA 正常工作,并且也受到其他适配器类型的支持,那么它也应该适用于该适配器类型。
测试用例
上面列出的所有用例都在 peft/tests/test_torch_compile.py
文件中进行了测试。如果你想更详细地了解我们是如何测试某个特定功能的,请转到该文件并检查与你的用例相对应的测试。
如果你有其他 `torch.compile` 与 PEFT 可以或不可以正常工作的用例,请通过告知我们或提交一个 PR 将该用例添加到已覆盖的测试用例中来做出贡献。