Stable Diffusion をローカル環境で動かす

Stable Diffusion はテキスト入力に基づく画像生成モデルです。

文章を入力するとそれっぽいイメージを作成することができます。流行しているAIによる画像作成ですが、その実装のソースコードと訓練モデルは公開されていたりします。

これを入手するとお使いのデスクトップ PC でも画像生成を試すことが可能となります (ラップトップで動かすのはかなり厳しいです)。

具体的には VRAM 8GB 以上のグラフィックカードなしに運用するのは困難です。公式見解では 16GB 以上の RAM と 4GB 以上の VRAM が必要容量となっていますが、この構成では工夫しないと実行途中に killed という表示を残して終了します。

実行前に構成を確認してください。私の環境は以下のようになります。

ソースコードは以下に公開されていますので、リポジトリをクローンしてくれば良いです。

Python3 実行環境とライブラリのインストールは必要となりますが、Stable Diffusion 自体はインストールせずとも利用できます。


GitHub – CompVis/stable-diffusion: A latent text-to-image diffusion model
https://github.com/CompVis/stable-diffusion


必要なのはソースコードとモデルデータとライブラリです。

モデルデータを非常に大雑把に言い換えると画像の特徴や傾向を表現する関数みたいなものです。一番分かりやすい例は迷惑メールを判別するフィルターでしょう。

膨大の数の画像データから特徴を学習させてモデルを作成します。

Stable Diffusion では こちらに掲載されているファイル群がそれにあたります。

これらのファイルをダウンロードして、実行時に参照できるようにしています。もちろん、余裕があるなら自作しても構いません。

サンプルスクリプトの参照の項に示されている以下のコマンドです。

要するに生成時に使用するモデルとして models/ldm/stable-diffusion-v1/model.ckpt を読み込むので、シンボリックリンクを作成してファイルを参照しています。この過程は必ずしも必要ではありません。

実行時に –ckpt オプションでファイルのパスを指定してやれば同じことができるので、複数のモデルを使い分ける場合には個別に指定したほうが分かりやすいです。

むしろ環境によっては config ファイルを参照できずにプロセスが異常終了することがあるので –config stable-diffusion/configs/stable-diffusion/v2-inference.yaml といった具合に一緒に明示的にパスを引数で渡したほうがトラブルが少ないかもしれません。

ソースコードとモデルの準備が終わりましたら、必要なライブラリのインストールを行います。

やることはこれだけのはずですが、実行するとあれが足りない、これがないと言った具合にエラー表示がたくさん出てきます。

具体的には以下のような例があります。これらは2つ以上の環境で再現されたものです。


File “./scripts/txt2img.py”, line 2, in
import cv2
ModuleNotFoundError: No module named ‘cv2’


File “./scripts/txt2img.py”, line 5, in
from omegaconf import OmegaConf
ModuleNotFoundError: No module named ‘omegaconf’


/scripts/txt2img.py”, line 9, in
from einops import rearrange
ModuleNotFoundError: No module named ‘einops’


/scripts/txt2img.py”, line 10, in
from torchvision.utils import make_grid
ModuleNotFoundError: No module named ‘torchvision’


/scripts/txt2img.py”, line 11, in
from pytorch_lightning import seed_everything
ModuleNotFoundError: No module named ‘pytorch_lightning’


/scripts/txt2img.py”, line 14, in
from imwatermark import WatermarkEncoder
ModuleNotFoundError: No module named ‘imwatermark’


仕方がないのでそれぞれ個別にインストールして、エラー表示の有無を確認します。

ここまで正常にインストールできましたら準備完了です。

サンプルスクリプトにお好きな入力文を入れて生成してみます。

モデルを変更して作成できることを確認します。

ローカル環境が高スペックだと話は簡単です。ほんの数分以内に画像が生成されます。

必要スペックの下限に近いラップトップでは、生成画像のサイズを小さくしたり、GPU を使用せずに CPU だけで実行したり、いろいろ試行錯誤して苦労した挙句にあと一歩のところでうまく行かなかったりします。

その試みは生産的ではないので、素直に生成用のマシンを用意するか、Google Colaboratory に課金しましょう。

Google Drive にモデルデータを置いておいて Colab から参照するのが一番簡単です。

環境構築はローカル環境と変わりませんが、torchmetrics, torchvision, torchtext, torchdata あたりはバージョンを指定して再インストールしてやらないと正常に動作完了しませんでした。

機械学習環境だけあって大体のライブラリは予めインストールされていましたが、相変わらずいくつかのライブラリは不足していたので明示的にインストールする必要がありました。

Leave a Reply

Your email address will not be published. Required fields are marked *

Contact Us