「Waifu Diffusionを動かすことができない・・・」
「Waifu Diffusion 1.3になってから動かなくなってしまった・・・」
このような場合には、この記事の内容が参考になります。
この記事では、Waifu Diffusion 1.3が動かない場合の対応方法を解説しています。
本記事の内容
- Waifu Diffusionのバージョンアップ
- Waifu Diffusion 1.3を動かすための対応
- Waifu Diffusion 1.3の動作確認
それでは、上記に沿って解説していきます。
Waifu Diffusionのバージョンアップ
「Waifu Diffusionとは?」という方は、次の記事をご覧ください。
Waifu Diffusionが、2022年10月8日にバージョンアップしました。
バージョンは、1.2から1.3への変更です。
その変更は、単純なモノではありませんでした。
単純に学習データの画像枚数が増えただけではなかったのです。
単純ではない変更は、設定ファイルの変更履歴から確認できます。
https://huggingface.co/hakurei/waifu-diffusion/commit/2dff9dab944d77470b545a1bbe86fffb08d54912
要点をピックアップすると、以下となります。
- Diffusersのバージョンアップ
- Transformersのバージョンアップ
- スケジュール関数の変更
Waifu Diffusion 1.3が動かない原因となる可能性のあるモノを取り上げています。
それぞれを以下で説明します。
Diffusersのバージョンアップ
Diffusersのバージョンの値が変更されています。
2022年10月9日時点のDiffusersの最新バージョンですね。
おそらく、このバージョンでなければ動かないというわけではないでしょう。
実際、Diffusers 0.3.0でもWaifu Diffusion 1.3は動いています。
モデルを生成したDiffusersのバージョンのはずです。
ただ、Diffusersのバージョンが古すぎるとWaifu Diffusion 1.3が動かない可能性はあります。
その場合は、Diffusersのバージョンアップを行いましょう。
もしくは、別のPython仮想環境にStable Diffusionをインストールします。
Diffusersについては、次の記事で解説しています。
Transformersのバージョンアップ
Transformersのバージョンの値が変更されています。
これも同じように、古いとアウトかもしれません。
これは、適当にバージョンアップしても問題ないでしょう。
Transformersについては、次の記事で説明しています。
Transformersのバージョンアップは、以下のコマンドで実施可能です。
pip install -U transformers
スケジュール関数の変更
スケジュール関数については、次のページで詳細が説明されています。
https://huggingface.co/docs/diffusers/api/schedulers
簡単に言うと、Diffusersにおけるモデルの扱いを決める関数です。
そのコアな関数が変更されています。
model_index.jsonでは、次のような変更点があります。
scheduler/scheduler_config.jsonでは、以下の変更となっています。
完全に置き換えています。
まとめ
DiffusersやTransformersに関しては、何も対応をする必要がない可能性も高いです。
ただし、スケジュール関数の変更では対応をする必要があります。
詳細は、後ほど説明します。
以上、Waifu Diffusionのバージョンアップを説明しました。
次は、Waifu Diffusion 1.3を動かすための対応を説明します。
Waifu Diffusion 1.3を動かすための対応
DiffusersやTransformerについては、解決済みとします。
ここでは、スケジュール関数の変更への対応をメインで説明します。
まず、Scipyをインストールしましょう。
Scipyについては、次の記事で説明しています。
新しく採用されたスケジュール関数は、LMSDiscreteSchedulerです。
LMSDiscreteSchedulerは、Scipyに依存しています。
Scipyがインストールされていないと、次のようなエラーが出ることになります。
ImportError: LMSDiscreteScheduler requires the scipy library but it was not found in your environment. You can install it with pip: `pip install scipy`
エラーに書いてある通り、次のコマンドでインストールしましょう。
pip install scipy
次は、コードにおけるスケジュール関数の指定を変更する対応です。
バージョンごとに記載して比較してみましょう。
バージョン 1.2
import
from diffusers import StableDiffusionPipeline, DDIMScheduler
スケジュール関数設定
pipe = StableDiffusionPipeline.from_pretrained( "hakurei/waifu-diffusion", torch_dtype=torch.float16, revision="fp16", scheduler=DDIMScheduler( beta_start=0.00085, beta_end=0.012, beta_schedule="scaled_linear", clip_sample=False, set_alpha_to_one=False, ), ).to('cuda')
バージョン 1.3
import
from diffusers import StableDiffusionPipeline, LMSDiscreteScheduler
スケジュール関数設定
pipe = StableDiffusionPipeline.from_pretrained( "hakurei/waifu-diffusion", torch_dtype=torch.float16, scheduler=LMSDiscreteScheduler( beta_start=0.00085, beta_end=0.012, beta_schedule='scaled_linear', num_train_timesteps=1000 ), ).to('cuda')
以上、Waifu Diffusion 1.3を動かすための対応を説明しました。
最後は、Waifu Diffusion 1.3の動作確認を説明します。
Waifu Diffusion 1.3の動作確認
Waifu Diffusion 1.3が動作するコードは、以下。
import torch from torch import autocast from diffusers import StableDiffusionPipeline, LMSDiscreteScheduler pipe = StableDiffusionPipeline.from_pretrained( "hakurei/waifu-diffusion", torch_dtype=torch.float16, # GPUに余裕があるなら「torch.float32」 scheduler=LMSDiscreteScheduler( beta_start=0.00085, beta_end=0.012, beta_schedule='scaled_linear', num_train_timesteps=1000 ), ).to('cuda') prompt = "1girl, black eyes, black hair, black sweater, blue background, bob cut, closed mouth, glasses, medium hair, red-framed eyewear, simple background, solo, sweater, upper body, wide-eyed" # ====ここから==== def null_safety(images, **kwargs): return images, False pipe.safety_checker = null_safety # ====ここまで==== with autocast("cuda"): image = pipe(prompt, guidance_scale=6)["sample"][0] image.save("test.png")
ポイントになる部分は、すでに説明しています。
プロンプトは、以下のページから適当に拝借しています。
Waifu Diffusion 1.3 Release Notes
https://gist.github.com/harubaru/f727cedacae336d1f7877c4bbe2196e1
あと、このプロンプトがNSFWフィルターに引っかかる確率が高いです。
そのため、NSFWフィルター回避策を仕込んでいます。
上記コードが上手く動けば、次のような画像が生成されます。
以上、Waifu Diffusion 1.3の動作確認を説明しました。