2023/05/22(月)Debian 12(bookworm) に Stable Diffusion Web UIを入れる

随時加筆予定。

マシン構成

  • Core i5-3570K / RAM 8GB
  • GIGABYTE GeForce RTX 4070 WINDFORCE OC 12

低消費電力サーバです。アイドル時20Wぐらいなんですが、RTX 4070を挿したら、Video出力未使用でも13Wぐらい消費電力が増えた*1のでそこだけが悲しみ。

*1 : ワットチェッカーで13W。nvidia-smiの表示では4W

CUDAのインストール

NVIDIAのプロプライエタリなドライバをインストールし、CUDAを使用可能にします。

/etc/apt/sources.list に次の行を追加します(接続サーバは自由に)。

# nonfree
deb     http://ftp.jp.debian.org/debian/        bookworm contrib non-free non-free-firmware
deb-src http://ftp.jp.debian.org/debian/        bookworm contrib non-free non-free-firmware

Debian 12からnon-free-firmwareが増えているので注意してください。またcontribも必須です。

設定を終えたらドライバをインストールします。グラフィックドライバは使用しないのでCUDAだけ入れました。

sudo apt update
sudo apt upgrade
sudo apt install nvidia-cuda-toolkit nvidia-cuda-dev

インストールが終わると、nvidia-smi というコマンドが使用可能になっています。またドライバをインストールすることで、GPUがアイドル状態になり(未使用時の)消費電力が減ります。

nvidia-smi -q

nvidia-smiを使用すると電力リミットなど色々設定できますが、ここでは割愛します。ちなみに、ドライバアンロード(nvidia-smi -pm 0)は消費電力が増えて(+20W)何もいいことはないのでやめた方が良いです。

Web UIのインストール

Debian 12(最近の?)のPythonでは、venv環境を使う前提になっているみたいですので、それに従います。

sudo apt install python3-venv google-perftools

# 開発系ツールを入れてない人は以下も
sudo apt install curl gnupg2 git

最後の「google-perftools」はなくても使えますが、「Cannot locate TCMalloc (improves CPU memory usage)」という警告がうるさいので入れています。

Pythonの環境を初期化します。

python -m venv ~/.venv
. ~/.venv/bin/activate

インストール作業中に /tmp が10GBとか必要になるので、足りない人はTMPDIRを指定します。

export TMPDIR=~/tmp

Gitからソースをクローンして初期設定作業を行います。

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
cd stable-diffusion-webui
PATH=$PATH:/usr/sbin python launch.py

結構時間がかかります。「Running on local URL: http://127.0.0.1:7860」とか表示されれば、とりあえず成功です。このまま試しても構いませんが、とりあえず一度終了します(Ctrl-C)。

ちなみに、執筆時点のバージョンはv1.2.1でした。

起動スクリプトのカスタム

stable-diffusion-webui/webui-user.sh に設定項目があります。

# TCMalloc のために設定追加
PATH=$PATH:/usr/sbin

# venv環境を指定
venv_dir="$HOME/.venv"

# 起動時引数を設定
export COMMANDLINE_ARGS="--listen --lowram --opt-sdp-attention"
  • listen: 存在するネットワークインターフェース(IPv4)をBindしてくれるので、リモートから接続できるようになります。
    • その代わり、listenを付けるとWebインターフェイス経由で拡張機能等のインストールができなくなります。
  • lowram: 実メモリ(VRAMではない)が16GB無いとき。
  • opt-sdp-attention: 生成を高速化するらしい。xformersの代わり。

実メモリが足りないのか、モデルは ckpt より safetensors のほうが(読み込みが)安定する。

起動方法

ここまで終われば、起動方法は stable-diffusion-webui内の webui.sh を実行するだけです。

cd stable-diffusion-webui
./webui.sh

カレントディレクトがstable-diffusion-webuiでないと、webui-user.shを読み込んでくれないので注意しましょう。

「Running on local URL」が表示されたらブラウザでアクセスし使用します。

画像生成すると220Wまで消費電力が跳ね上がるので、ちゃんとGPUを使えてるみたいです。

省電力関係

一度GPUを使用すると、nvidia-smiの表示で「アイドル時4W」が「アイドル時11W」に増加します。これは root でリセットをかけると解消しました。

nvidia-smi --gpu-reset

使用中はリセットが無効になりますので(副作用がないので)、rootのcrontabで回すようにしておきました。

ReverseProxy設定

Apache で /stable-d/ のパスに割り付ける場合。

ProxyPass	/stable-d/	http://localhost:7860/
ProxyPass	/queue/		ws://localhost:7860/queue/

RewriteEngine	on
RewriteCond	%{REQUEST_FILENAME}	!-f
RewriteRule	^(.*)$			http://localhost:7860/$1	[P,L]

ReverseProxyを想定してないので細工が必要。当然ながら、セキュリティ上の問題があるので一般公開すべきではない。

色々

  • TCmallocのエラーが出る
    • google-perftools パッケージをaptでインストールする。
    • /usr/sbin に PATH を通す。
  • Extensions(拡張機能)のインストールでエラーになる。
    • 起動オプションの --listen を消す。

参考文献・関連リンク