PEFT 文档
torch.compile
加入 Hugging Face 社区
并获得增强的文档体验
开始使用
torch.compile
在 PEFT 中,torch.compile 适用于某些功能,但并非所有功能都适用。它并非总是有效的原因是 PEFT 在某些地方(例如,加载和在多个适配器之间切换)是高度动态的,这可能会给 torch.compile
带来麻烦。在其他地方,torch.compile
可能会工作,但由于图中断,其速度可能不如预期。
如果您没有看到错误,这并不一定意味着 torch.compile
工作正常。它可能会给您一个输出,但输出是不正确的。本指南描述了哪些功能适用于 torch.compile
,哪些功能不适用。对于您自己的测试,我们建议使用最新的 PyTorch 版本,因为 torch.compile
正在不断改进。
除非另有说明,否则使用了默认的 torch.compile
设置。
使用 torch.compile 进行训练和推理
以下功能与 torch.compile
兼容。下面列出的所有内容都已使用因果语言模型进行了测试
- 使用 🤗 transformers 中的
Trainer
进行训练 - 使用自定义 PyTorch 循环进行训练
- 推理
- 生成
以下适配器已成功测试
- AdaLoRA
- BOFT
- Bone
- IA³
- Layer Norm Tuning
- 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
加载多个适配器);为此,仅在加载所有适配器后调用torch.compile
一般来说,我们可以预期,如果某个功能在 LoRA 中可以正常工作,并且也受到其他适配器类型的支持,那么它也应该适用于该适配器类型。
测试用例
上面列出的所有用例都在 peft/tests/test_torch_compile.py
内部进行了测试。如果您想更详细地了解我们如何测试某个功能,请转到该文件并查看与您的用例相对应的测试。
如果您有另一个用例,您知道 torch.compile
在 PEFT 中是否有效,请通过告知我们或打开 PR 将此用例添加到涵盖的测试用例中来做出贡献。