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のでそこだけが悲しみ。
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 を消す。