Otama's Playground

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

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

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

SDXL-Turboとは

ChatGPTに要約してもらいました。

huggingface.co huggingface.co

項目 SD-Turbo SDXL-Turbo
モデルの概要 SDXL 1.0の蒸留バージョンを使用した高速なtxt2imgモデル。リアルタイム合成に最適化。 大規模な基礎画像拡散モデルを使用したtxt2imgモデル。高い画像忠実度を維持。
評価 1ステップでの評価で他のモデルに対して優れた画像品質とプロンプト追従性を示す。 複数ステップでの生成で高品質な画像を生成し、他のモデルよりも高く評価される。
使用目的 リアルタイムアプリケーション、生成モデルの研究、アートワーク生成、教育ツールなど。 同様にリアルタイムアプリケーション、生成モデルの研究、アートワーク生成、教育ツールなど。
制限 画像解像度が固定(512x512ピクセル)、フォトリアリズムの達成が困難、文字や顔の生成が不正確。 同様に画像解像度が固定、フォトリアリズムの達成が困難、文字や顔の生成が不正確。

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

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

必要なもの

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

作業内容

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

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

```Dockerfile:Dockerfile
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ステップだけにしては希望に近い結果になってるかなという感想。

Appendix

蒸留とは(量子化とかと合わせて覚えておくと嬉しい)

大規模で複雑なAIモデルを、元の性能をほぼ維持しながら小さく効率的なモデルに圧縮する技術です。これにより、スマホやタブレットなどのリソースが限られたデバイスでも高性能なAIを利用できるようになります。

イメージとしては、大きくて重い百科事典をポケットサイズの参考書にまとめるようなものです。百科事典にはたくさんの情報が詰まっていますが、それを持ち歩くのは大変ですよね。しかし、重要な情報だけを抜き出して小さな参考書にまとめれば、どこでも手軽に使えるようになります。それでも、重要な情報は失われず、必要な時に役立ちます。

AIの蒸留もこれと似ています。大きくて計算量が多いAIモデルを、そのままではスマホや他の小さなデバイスで使うのは難しいです。しかし、重要な部分だけを抽出してコンパクトなモデルにすることで、どこでも使えるようにします。それでも、元のモデルの性能をほとんど失わずに活用できます。