PEFT 文件

torch.compile

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

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_adaptermodel.load_adapter 載入超過 1 個介面卡);為此,請僅在載入所有介面卡 **之後** 呼叫 `torch.compile`。

總的來說,我們可以預期,如果一個功能與 LoRA 正常工作,並且也受到其他介面卡型別的支援,那麼它也應該適用於該介面卡型別。

測試用例

上面列出的所有用例都在 peft/tests/test_torch_compile.py 檔案中進行了測試。如果你想更詳細地瞭解我們是如何測試某個特定功能的,請轉到該檔案並檢查與你的用例相對應的測試。

如果你有其他 `torch.compile` 與 PEFT 可以或不可以正常工作的用例,請透過告知我們或提交一個 PR 將該用例新增到已覆蓋的測試用例中來做出貢獻。

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.