Otama's Playground

AIで遊んだ結果などをつらつら載せていきます。

SD-TurboとSDXL-Turboモデルの概要とローカルデモの実行手順

いつも画像はChatGPTに頼んでちゃっちゃと生成してもらってるのですが、今日はローカルで実際にモデルを動かして画像生成してみます。メリットはChatGPT4のやり取りを一回分減らせるくらいで他は特になしです。クレジットがChatGPT4より多いChatGPT4oが使える今となってはメリットはほぼ皆無!でもローカルで試すのはやっぱりロマンなのでやってみようと思います。

SD-Turboとは

stabilityai/sdxl-turbo · Hugging Face

[2311.17042] Adversarial Diffusion Distillation

  • 2023年11月にstability.aiから発表された論文
  • 拡散モデルの生成精度とGANの高速生成を組み合わせたいという思想
  • Adversarial Diffusion Distillationという蒸留方法を用いることで、denoiseの効率を上げている
  • 具体的には、学習済拡散モデルを教師モデルとし、GANの仕組みを利用して生徒拡散モデルにスコア蒸留している
  • このとき生徒モデルの重みも学習済みモデルの重みで初期化する。

さっそく公式デモを試してみる

以前Stable Video Diffusionを試した記事と同じリポジトリのため、手順もほぼ同じ感じです。(Dockerを使用した方法) otama-playground.com

必要なもの

  • Docker(インストールしておく)
  • NVIDIAのGPU(おそらく実行に必要)
  • CUDA(もしかしたら必要)
  • コマンドラインが叩けること

作業内容

  1. dockerイメージを作成する
    • コンテナ作成時にデモが自動で実行されるようにします
  2. コンテナを立ち上げる(デモを実行する)
  3. Webアプリケーションにアクセスする

1. dockerイメージを作成する

FROM python:3.10.14-bookworm

# clone repo
WORKDIR /home
RUN git clone https://github.com/Stability-AI/generative-models.git .

# install requirements
RUN pip install --no-cache-dir -r ./requirements/pt2.txt

# additional requirements explained in repo
RUN pip install streamlit-keyup

# Reinstall OpenCV using apt due to an error with libGL.so.
RUN apt -y update && apt -y upgrade && apt -y install libopencv-dev

# キャッシュ削除
RUN apt-get autoremove -y &&\
    apt-get clean &&\
    rm -rf /usr/local/src/*

# weightのダウンロードと配置
# weight for SDXL-turbo
RUN wget https://huggingface.co/stabilityai/sdxl-turbo/resolve/main/sd_xl_turbo_1.0.safetensors -P ./checkpoints
# weight for SD-turbo
RUN wget https://huggingface.co/stabilityai/sd-turbo/resolve/main/sd_turbo.safetensors -P ./checkpoints

# Variables
ENV PYTHONPATH = .
EXPORT 8501

# 起動コマンド
CMD ["streamlit", "run", "scripts/demo/turbo.py"]

2. コンテナを立ち上げる

以下のコマンドでコンテナを立ち上げてください

docker run --rm -i -p 8501:8501 --gpus all sdxl-image

3. Webアプリケーションにアクセスする

コンテナの立ち上げまで正常に完了していれば、ブラウザでhttp://localhost:8501にアクセスすることででデモにアクセスできるはずです。

demo

最後に

あとはModel Versionを好きな方にしてLoad Modelすればvalueを元に推論を始めてくれます。ステップを増やせば精度が良くなります。

自分の環境ではSDXL-Turboのモデル読み込みができませんでした(モデルのロード中に勝手にプロセスがKillされる)。PCスペックが低い方はSD-Turboのみ試すのが良いかと思います。

実行例

使用してみた所感としては、

  • 蒸留を使用してるモデルなので実行速度は割かし速い印象。低スペックでも数秒で出てくれるのが嬉しい。
  • 精度も3,4ステップだけにしては希望に近い結果になってるかなという感想。

[追記: 20240820] 公式デモは一般にメモリ効率などのパフォーマンスが悪いため、ComfyUIやwebuiなどを使用して実行することを推奨します。