画像生成AI「Stable Diffusion」をローカル環境で実行する

公開日:2022年8月23日
最終更新日:2023年1月16日

はじめに

最近「DALL-E2」や「Midjourney」など文章から画像を生成するAIが流行っています。

その一つが今回紹介する「Stable Diffusion」です。

「Stable Diffusion」の特徴はオープンソースで公開されていることであり、ローカル環境で実行可能です。

もちろんWeb上で簡単に試すことも可能で、こちらにデモンストレーションが公開されています。
huggingface.co
今回はローカルに実行環境を構築して実際に動かしてみようと思います。

環境構築

公式リポジトリはこちらです。
github.com
公式リポジトリではcondaを使った環境構築が紹介されていますが今回はcondaを使わずpipのみで環境構築しました。


PC環境はこちらです。

Ubuntu 20.04 on WSL2 (Windows 11)
Intel(R) Core(TM) i7-11700
RTX 3080(VRAM 12GB)



使用したPythonはUbuntu 20.04に最初からインストールされている3.8.10をそのまま使いました。

python 3.8.10



まずはCUDA 11.3.1をインストールする必要があります。NVIDA公式通りにやると問題なくできると思います。(cuDNNのインストールは不要です)

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.3.1/local_installers/cuda-repo-wsl-ubuntu-11-3-local_11.3.1-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-11-3-local_11.3.1-1_amd64.deb
sudo apt-key add /var/cuda-repo-wsl-ubuntu-11-3-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda



Python環境はvenvを使った仮想環境を利用しています。
そのために以下をインストールしています(必須ではありません)。

sudo apt install python3.8-venv



Python環境へのライブラリインストールはすべてpipで可能です。
簡単にするために「requirements.txt」にまとめました。自分のGitHubに公開しているのでだれでも利用可能です。

それを使うと以下の2行で環境構築は終了します。

pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 --extra-index-url https://download.pytorch.org/whl/cu113
pip install -r https://raw.githubusercontent.com/dai-ichiro/env4stable-diffusion/main/v1.4/requirements.txt



仮想環境を作って環境構築をするまでの実際の過程はこのようになります。
「diffusionenv」という仮想環境を作ると想定します。
たったの6行です。CUDAをインストールした後、以下を順にコピペするだけでうまくいくと思います。

sudo apt install python3.8-venv
python3.8 -m venv diffusionenv
source diffusionenv/bin/activate
python -m pip install --upgrade pip
pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 --extra-index-url https://download.pytorch.org/whl/cu113
pip install -r https://raw.githubusercontent.com/dai-ichiro/env4stable-diffusion/main/requirements.txt



動作確認できた他の環境は記事の最後に載せておきます。

実行方法

学習済みパラメーター「sd-v1-4.ckpt」のダウンロード

まずは以下から学習済みパラメーター「sd-v1-4.ckpt」をダウンロードする必要があります。その際にはHugging Faceのアカウントが必要です。

huggingface.co
アカウントは無料で名前とメールアドレスのみで簡単に作成できます。



リポジトリのクローン

git clone https://github.com/CompVis/stable-diffusion
cd stable-diffusion

「sd-v1-4.ckpt」の移動

先ほどダウンロードした「sd-v1-4.ckpt」を「stable-diffusion」フォルダ直下に移動させます。

いよいよ実行

python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms --ckpt sd-v1-4.ckpt --n_samples 1



promptで自由な文章を入力します。


n_samplesで作成する画像の枚数を指定します。1を指定していますがなぜか結果は2枚の画像が作成されました。


n_samplesに2以上を指定するとCUDA out of memoryでエラーになりました。
VRAM 12GBあるのですが。


ckptで「sd-v1-4.ckpt」へのパスを指定しています。
デフォルトは「models/ldm/stable-diffusion-v1/model.ckpt」となっているので次の2行を実行するとそれ以降ckptは不要になります。

mkdir -p models/ldm/stable-diffusion-v1/
mv sd-v1-4.ckpt models/ldm/stable-diffusion-v1/model.ckpt
python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms --n_samples 1

結果

ブログ記事の先頭にあるような画像が2枚作成されました。画像は「outputs/txt2img-samples」フォルダに保存されています。

同じコードを実行すると毎回同じ画像が出力されます。

違う画像を出力させたい時にはseedを設定します。デフォルトは42のようです。

適当な数字(int型)を設定して下さい。

python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms --ckpt sd-v1-4.ckpt --n_samples 1 --seed 100

つづき

続きの記事を書きました。良かったら読んで下さい。
touch-sp.hatenablog.com

動作確認できたその他の環境

CUDA 11.3.1

1

Ubuntu 20.04 on WSL2
CUDA 11.3.1
python 3.9.5
torch==1.11.0+cu113
torchvision==0.12.0+cu113

2

Ubuntu 20.04 on WSL2
CUDA 11.3.1
python 3.8.10
torch==1.12.1+cu113
torchvision==0.13.1+cu113
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113
pip install -r https://raw.githubusercontent.com/dai-ichiro/env4stable-diffusion/main/v1.4/requirements.txt

CUDA 11.6.2

1

Ubuntu 20.04 on WSL2
CUDA 11.6.2
python 3.8.10
torch==1.12.1+cu116
torchvision==0.13.1+cu116

2

Ubuntu 20.04 on WSL2
CUDA 11.6.2
python 3.8.10
torch==1.13.1+cu116
torchvision==0.14.1+cu116
pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
pip install -r https://raw.githubusercontent.com/dai-ichiro/env4stable-diffusion/main/v1.4/requirements.txt

VRAM不足に直面したら

少ないVRAMで動作する「Optimized Stable Diffusion」というのが公開されています。
実際使わせて頂いたのでその時の記事を参照して下さい。
touch-sp.hatenablog.com

更新履歴(2022年10月11日)

以下のようにライブラリをバージョンアップしました。
変更はGitHub上で行っています。
この記事のコマンドはそのまま使用可能です。

albumentations==0.4.3→1.3.0
diffusers==0.2.4→0.4.1
pudb==2019.2→2022.1.2
imageio==2.9.0→2.22.1
imageio-ffmpeg==0.4.2→0.4.7
pytorch-lightning==1.4.2→1.7.7
omegaconf==2.1.1→2.2.3
einops==0.3.0→0.5.0
transformers==4.19.2→4.22.2
torchmetrics==0.6.0→0.10.0
kornia==0.6→0.6.7

動作速度がいくらか速くなったような気がします。

バージョン2.1

Stable Diffusion 2.1の記事を書きました。
touch-sp.hatenablog.com