PEFT 文档

torch.compile

Hugging Face's logo
加入 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_adaptermodel.load_adapter 加载多个适配器);为此,仅在加载所有适配器调用 torch.compile

一般来说,我们可以预期,如果某个功能在 LoRA 中可以正常工作,并且也受到其他适配器类型的支持,那么它也应该适用于该适配器类型。

测试用例

上面列出的所有用例都在 peft/tests/test_torch_compile.py 内部进行了测试。如果您想更详细地了解我们如何测试某个功能,请转到该文件并查看与您的用例相对应的测试。

如果您有另一个用例,您知道 torch.compile 在 PEFT 中是否有效,请通过告知我们或打开 PR 将此用例添加到涵盖的测试用例中来做出贡献。

< > 在 GitHub 上更新