ジャコ Lab

プログラミング関連のメモ帳的ブログです

LoRA で「PEFT backend is required for this method」にハマった件

/usr/local/lib/python3.10/dist-packages/diffusers/loaders/lora.py in load_lora_weights(self, pretrained_model_name_or_path_or_dict, adapter_name, **kwargs)
    105         """
    106         if not USE_PEFT_BACKEND:
--> 107             raise ValueError("PEFT backend is required for this method.")
    108 
    109         # if a dict is passed, copy it instead of modifying it inplace

ValueError: PEFT backend is required for this method.

ValueError: PEFT backend is required for this method.
LoRA を使おうとして、上記のエラーが出るようになりました。

前(diffusers で Civitai の LoRA(.safetensors) を使ってみる) は、
大丈夫だった気がしたんだけどなぁ...

peft パッケージをインストールすれば解決するかと思いきやハマりましたが、
無事解決できたので、記録を残しておきます。

まぁ結果的に peft で解決するんですが。

前提

環境

Google Colab を使っています

インストールしているパッケージ

pip で以下のパッケージをインストールしています

!pip install -U diffusers["torch"] transformers accelerate controlnet_aux
前3つは、diffusers の installation ページに書かれているやつで、controlnet_aux は ControlNet の OpenPose とかに使うやつ

問題となっているエラー (再掲)

/usr/local/lib/python3.10/dist-packages/diffusers/loaders/lora.py in load_lora_weights(self, pretrained_model_name_or_path_or_dict, adapter_name, **kwargs)
    105         """
    106         if not USE_PEFT_BACKEND:
--> 107             raise ValueError("PEFT backend is required for this method.")
    108 
    109         # if a dict is passed, copy it instead of modifying it inplace

ValueError: PEFT backend is required for this method.

PEFT とは

huggingface.co

PEFT とは Parameter-Efficient Fine-Tuning の略らしいです。

A library for efficiently adapting large pretrained models to various downstream applications without fine-tuning all of a model’s parameters because it is prohibitively costly.

よくわからないですが、 モデルを効率的に適用してくれるライブラリ とのこと。

!pip install -U peft

でインストールをできるらしいです。

結論

diffusers のクラス (StableDiffusionPipeline とか) を使う前にインストールしてください。
エラーが出た後に追加インストールしてもダメでした。

やったこと

【1】エラーが出ることを確認

load_lora_weights() を使うところで ValueError: PEFT backend is required for this method. のエラーになりました。

【2】PEFT パッケージをインストール

エラーが出た後に調べ始めまして、 PEFT パッケージをインストールしました。

!pip install -U peft

【3】再度エラーになるコードを実行

再び load_lora_weights() を使うところで ValueError: PEFT backend is required for this method. のエラーになりました。

うーん、、、USE_PEFT_BACKEND が False だからこのエラーに入るんだよなぁ...どうやったら True になるんだろう...

と思考し始めて、
なにか有効化するメソッド等があるのかもと思い、調べ始めて挫折しました。

【4】挫折後、着手するときにはラインタイムが切断されていたので再度インストールから

ん?通ったぞ?

ということで、ここでサクセスする場合があることに気づきました。

【5】もう一度エラーが出る状態に戻す

・エラーが出ることを確認
・peft をインストール
・やっぱりエラーが出る

???

ここで、もしかして、、、とランタイムを再起動してみました。

通った...

まとめ

いつも最初に実行している pip install に仲間が1人増えました。

2日間に渡るハマりっぷりでした。