公開日: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