PEFT 文档

torch.compile

Hugging Face's logo
加入 Hugging Face 社区

并获得增强型文档体验

入门

torch.compile

在 PEFT 中,torch.compile 对某些功能有效,但对其他功能无效。它并非总是有效的原因是,PEFT 在某些地方具有高度动态性(例如,加载和切换多个适配器),这可能会导致 torch.compile 出现问题。在其他地方,torch.compile 可能有效,但由于图中断,速度不会如预期那样快。

如果你没有看到错误,并不一定意味着 torch.compile 正确运行。它可能会给你一个输出,但输出不正确。本指南描述了 torch.compile 有效和无效的地方。

除非另有说明,否则使用默认 torch.compile 设置。

使用 torch.compile 进行训练和推理

这些功能与 torch.compile 兼容。以下列出的所有内容均已使用因果语言模型进行测试。

  • 使用 🤗 transformers 的 Trainer 进行训练
  • 使用自定义 PyTorch 循环进行训练
  • 推理
  • 生成

以下适配器已成功测试

  • AdaLoRA
  • BOFT
  • IA³
  • 层归一化调优
  • LoHa
  • LoRA
  • LoRA + DoRA
  • OFT
  • VeRA
  • HRA

以下适配器在使用 torch.compile 进行训练或推理时无法正常工作

  • LoKr
  • 针对嵌入层的 LoRA

使用 torch.compile 的高级 PEFT 功能

以下是与 torch.compile 兼容的一些更高级的 PEFT 功能。它们都已使用 LoRA 进行测试。

  • modules_to_save(例如 config = LoraConfig(..., modules_to_save=...)
  • 合并适配器(一个或多个)
  • 将多个适配器合并为一个适配器(例如调用 model.add_weighted_adapter(...)

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

以下更高级的 PEFT 功能与 torch.compile 不兼容。测试使用 LoRA 进行。

  • 将 PEFT 适配器与量化(bitsandbytes)一起使用
  • 使用多个适配器进行推理
  • 卸载(例如调用 model.merge_and_unload()
  • 禁用适配器(例如使用 with model.disable_adapter()
  • 混合适配器批次(例如调用 model(batch, adapter_names=["__base__", "default", "other", ...])

测试用例

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

如果您还有其他用例,您知道 torch.compile 是否与 PEFT 兼容,请通过告诉我们或打开 PR 将此用例添加到已覆盖的测试用例中来贡献。

< > 在 GitHub 上更新