PEFT documentation

torch.compile

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

torch.compile

PEFTでは、torch.compileはすべての機能ではなく、一部の機能でのみ動作します。常に動作しない理由は、PEFTが特定の箇所(例えば、複数のアダプターの読み込みや切り替えなど)で非常に動的であり、これがtorch.compileに問題を引き起こす可能性があるためです。その他の箇所では、torch.compileは動作する場合がありますが、グラフの中断(graph breaks)により、期待されるほど高速にはなりません。

エラーが表示されない場合でも、torch.compileが正しく動作したとは限りません。出力は得られるものの、その内容が正しくない可能性があります。このガイドでは、torch.compileで動作するものと動作しないものを説明します。ご自身のテストには、torch.compileが絶えず改善されているため、最新のPyTorchバージョンの使用を推奨します。

特に指定がない限り、デフォルトのtorch.compile設定が使用されました。

torch.compileによる学習と推論

これらの機能はtorch.compileと動作します。以下に列挙した内容はすべて、causal LMでテストされました:

  • 🤗 transformers の Trainer による学習
  • カスタムPyTorchループでの学習
  • 推論
  • 生成

以下のアダプターが正常にテストされました:

  • AdaLoRA
  • BOFT
  • IA³
  • Layer Normのチューニング
  • LoHa
  • LoKr
  • LoRA
  • LoRA + DoRA
  • 埋め込み層に適用されたLoRA
  • OFT
  • VeRA
  • HRA

torch.compileによる高度なPEFT機能

以下は、動作するより高度なPEFT機能の一部です。これらはすべてLoRAでテストされました。

  • modules_to_save (i.e. config = LoraConfig(..., modules_to_save=...))
  • アダプター(1つまたは複数)のマージ
  • 複数のアダプターを1つのアダプターにマージする(つまり、model.add_weighted_adapter(...)を呼び出す)
  • bitsandbytes による量子化と PEFT アダプターの使用
  • アダプターの無効化(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 を開いていただくことで、貢献していただけます。

Update on GitHub