kWatanabe 記事一覧へ

kWatanabe の 技術帖

某企業でOSや仮想化の研究をやっているインフラ系エンジニア。オンプレとクラウドのコラボレーションなど、興味ある技術を綴る。

噂のお絵かきAI「Stable Diffusion」をローカルで動かす

  • 噂になっているお絵かきAI「Stable Diffusion」のデモサイトは順番待ちがあり自由に試せない
  • ローカルマシンに導入して、好きなだけ試せる環境を構築する

お絵かきAI「Stable Diffusion」

キーワードを与えると、それに準じた画像を自動生成してくれる凄いヤツ。

github.com

無料で試せるデモサイトもある。

huggingface.co

デモサイトで少し遊んでいたのだけども、他の利用者と順番待ちがあるらしく、細かくテキストをいじって試すには、中々まだるっこしい。

ということで、ローカルに環境を構築した。

検証環境

ちなみに、公式ページの記述によると少なくとも 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 の導入

github からリポジトリをクローンして、導入する。

$ 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 のリポジトリで公開されているため、まずはアカウントを作成する。

huggingface.co

アカウントが作成できたら、モデルの公開リポジトリにアクセスする。その後、ライセンス条項を確認し、同意できるならば「Access Repository」を押下する。

huggingface.co

リポジトリにアクセスしたら、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 だと数秒とはいかないだろうけど、ちょっと試す分にはいいかも。

github.com

nmkd.itch.io

更に余談

ローカルで遊べるようになったので、みんながやってるみたいにアニメ調の女の子を生成しようと頑張ったけど。このあたりで挫折。

まとめ

  • ローカルに GPU を使ってお絵かきAIを実行できる環境を構築した
  • CPU での生成や GUI での操作に対応したものがあるみたいだけど、何度も試行錯誤したいなら GPU の環境があった方がいいかも