- 噂になっているお絵かきAI「Stable Diffusion」のデモサイトは順番待ちがあり自由に試せない
- ローカルマシンに導入して、好きなだけ試せる環境を構築する
お絵かきAI「Stable Diffusion」
キーワードを与えると、それに準じた画像を自動生成してくれる凄いヤツ。
無料で試せるデモサイトもある。
デモサイトで少し遊んでいたのだけども、他の利用者と順番待ちがあるらしく、細かくテキストをいじって試すには、中々まだるっこしい。
ということで、ローカルに環境を構築した。
検証環境
- Debian 11.4 (bullseye) amd64
- NVIDIA GeForce RTX 3080 (初代)
- nvidia-cuda-toolkit 11.2.2-3+deb11u3
- nvidia-driver 470.129.06-6~deb11u1
- python 3.9.2
ちなみに、公式ページの記述によると少なくとも VRAM を 10GB 搭載した GPU が必要らしい。自分の RTX 3080 は初代なのでギリギリセーフ。(本当はギリギリアウトだが、後述する回避策で乗り切った)
手順
Anaconda 3 の導入
Anaconda の公式サイトから、インストーラをダウンロードして導入する。
$ wget https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh $ chmod +x Anaconda3-2022.05-Linux-x86_64.sh $ ./Anaconda3-2022.05-Linux-x86_64.sh
自分は普段使いのシェル( zsh
)とは別に fish
を導入して、Anaconda 専用のシェルにした。
$ sudo apt install fish $ ~/anaconda3/bin/conda init fish
Stable Diffusion の導入
$ fish $ git clone https://github.com/CompVis/stable-diffusion.git $ cd stable-diffusion $ conda env create -f environment.yaml $ conda activate ldm $ conda install pytorch torchvision -c pytorch $ pip install transformers==4.19.2 diffusers invisible-watermark $ pip install -e .
モデルを入手する
モデルは、AI 系開発コミュニティの Hugging Face のリポジトリで公開されているため、まずはアカウントを作成する。
アカウントが作成できたら、モデルの公開リポジトリにアクセスする。その後、ライセンス条項を確認し、同意できるならば「Access Repository」を押下する。
リポジトリにアクセスしたら、sd-v1-4.ckpt
のリンクを押下して、モデルをダウンロードする。ダウンロードしたファイルは stable-diffusion の展開先ディレクトリ配下に models/ldm/stable-diffusion-v1/model.ckpt
という名前で格納する。
$ cd stable-diffusion $ mkdir -p models/ldm/stable-diffusion-v1
試す
とりあえず、「女の子と猫」というキーワードで画像生成してみる。
$ python ./scripts/txt2img.py --prompt 'girl and cat' --plms
上記のコマンドだと、自分の場合は、以下のような VRAM 不足のエラーが発生した。初代 GeForce RTX 3080 は要求スペックギリギリなので、仕方ない。
RuntimeError: CUDA out of memory. Tried to allocate 3.00 GiB (GPU 0; 9.78 GiB total capacity; 5.62 GiB already allocated; 2.56 GiB free; 5.74 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
以下のように、積極的にメモリ回収を行うオプションをつけ、一度に生成するサンプルを制限することで実行できた。
$ PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.6,max_split_size_mb:128 \ python scripts/txt2img.py --prompt 'girl and cat' --plms --n_samples 1
出力された画像は以下の通り。確かに、女の子と猫だ!!
なお、生成にかかった時間は、10秒くらい。
余談
自分が Stable Diffusion の存在を知るのが遅すぎて、すでに世の中の人が GPU なしでも使えるものとか、GUI で簡単に扱えるようにしたものとかを色々リリースしているみたい。 CPU だと数秒とはいかないだろうけど、ちょっと試す分にはいいかも。
更に余談
ローカルで遊べるようになったので、みんながやってるみたいにアニメ調の女の子を生成しようと頑張ったけど。このあたりで挫折。
お絵かきAIが、ローカルで使えるようになったので、今度はイラスト調の可愛い女の子を生成しようと遊んでいたけど、この辺で挫折。
— kWatanabe (@WWatchin) 2022年9月3日
なんだろ、そんな指定してないのに、関節とかが何故かドールみたいになっとる。ローゼンメイデン?? https://t.co/AGkWoOQRre pic.twitter.com/FiI5SVKzlu