【GPU無しでOK】Intel CPUでStable Diffusionを動かす

この記事の内容

  • Intel CPUに最適化したStable Diffusion環境をDockerで手軽に構築できます
  • GPUが不要で、Intel CPUとある程度のメモリがあれば動作します
  • コマンドを実行するだけでWebアプリが立ち上がる、シンプルな構成です
  • リッチな環境では約2分54秒、一般的なPCでも約3分35秒で画像生成が可能です
  • 夜間バッチ処理での大量生成など、実用的な使い方も紹介しています

概要

Stable Diffusionを試したいけれど、GPUを持っていない——そんな方に向けて、Intel CPUに最適化したStable Diffusion環境を紹介します。既存のリポジトリをフォークし、自分が使いやすい形に少し修正したものです。Intel CPUと十分なメモリがあれば動作するよう構成されており、コマンドをそのまま実行するだけで環境が整います。


前提条件と環境構築

リポジトリに記載されている前提条件を満たした状態で、以下のコマンド群を順に実行します。実行すると、Dockerコンテナが起動し、8501番ポートでWebアプリケーションが立ち上がります。

# リポジトリに記載のコマンド群を実行する(詳細はリポジトリのREADMEを参照)
# 最終的に以下のような形でコンテナが起動する
docker run ... # 8501番ポートでWebアプリが起動

別のホストからアクセスする場合は、以下の形式でブラウザからアクセスします。

http://<IP>:8501

WebUIの使い方

ブラウザでアクセスすると、以下の要素が表示されます。

  • プロンプト入力欄 — 生成したい画像の説明を入力します
  • 参照画像の入力欄 — img2imgを行う場合に使用します
  • パラメーター調整 — ステップ数などの設定を変更できます

プロンプトはWeb上で見つけたものを参考にしながら試行錯誤するとよいでしょう。「Generate」を実行すると、CPU処理が走り画像が生成されます。


生成速度の実測値

サーバー環境(多コア・大容量メモリ)

Lenovoからお借りしたサーバー環境での計測結果です。CPUのコア数が豊富で、メモリも潤沢な構成です。

項目結果
1イテレーションあたりの時間約5.64秒
ステップ数32〜33ステップ
1枚あたりの生成時間約2分53〜54秒

一般的なメインマシン(Intel CPU)

手元のメインマシンでの計測結果です。

項目結果
1イテレーションあたりの時間約6.54秒
1枚あたりの生成時間約3分35秒

サーバーと比べると若干遅くはなりますが、約40秒程度の差に収まっています。


実用的な使い方

この環境では、まずWebUIでプロンプトを試行錯誤しながら最適な設定を見つけることができます。「このプロンプトで行こう」と決まったら、夜間に大量生成を走らせておくという使い方が現実的です。3〜4分程度の待ち時間であれば、夜中に回しておけば翌朝には結果が揃っているため、十分実用に耐えます。


コマンドラインでの実行について

現在の構成はWebサーバーを立ち上げる形がデフォルトになっています。コマンドラインで直接実行したい場合は、demo.py を使う方法もありますが、現状ではそのままでは対応していません。その場合はDockerfileの該当部分を書き換えることで対応できます。

Dockerfiledemo.py

まとめ

Intel CPUとメモリさえあれば、GPUなしでStable Diffusionを動かせる環境を手軽に構築できます。コマンドをそのまま実行するだけでWebアプリが起動し、プロンプトを入力してすぐに画像生成を試せます。生成速度は1枚あたり3〜4分程度で、夜間バッチ処理との組み合わせであれば十分実用的です。

まずはこの環境でプロンプトの試行錯誤を行い、慣れてきたらGPU環境へのステップアップも視野に入れてみてください。