サイトアイコン TAKAHIRO today

Ubuntu 22.04.4 LTSで【Stable Diffusion】

生成AIはワクワクするし、少しは知っておかないといけないこともあるしということで、ローカルマシンに導入して経験してみます。

ついで他のPCからも利用できるようにしてみます。

以下を参考にさせていただきました。
第817回 参考書を片手にUbuntuでもStable Diffusion WebUIを動作させ⁠⁠、画像を生成する

必要なライブラリと依存関係のインストール

sudo apt update
sudo apt install python3 python3-venv python3-pip

CUDA Toolkit のインストール

次に、GPU のサポートを使用する場合は、NVIDIA のドライバと CUDA Toolkit をインストールします。これにより、Stable Diffusion を高速化できます。

インストール後、GPU が正しく認識されていることを確認します。

sudo apt install nvidia-cuda-toolkit
nvidia-smi

Stable Diffusion WebUI のインストール

sudo apt install git python3.10-venv libstdc++-12-dev
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

これでひとまずは準備ができました。
実行することでまずは利用することできます。

cd stable-diffusion-webui
bash ./webui.sh --xformers

起動したところ以下のようなメッセージが出力されましたが、これはTCMalloc(Thread-Caching Malloc)と呼ばれるメモリ管理ツールがシステムにインストールされていないことを示していルようです。

Cannot locate TCMalloc. Do you have tcmalloc or google-perftool installed on your system? (improves CPU memory usage)

TCMalloc は、Google の gperftools ライブラリに含まれており、メモリ割り当てのパフォーマンスと効率を向上させ、Stable Diffusion のようなメモリ集約型アプリケーションの CPU メモリ使用量を削減するのに役立つということ。

ひとまずインストールしておきましょうか。

sudo apt install -y google-perftools libtcmalloc-minimal4

自動起動して別PCからも利用させる

別のPCからアクセスできるようにする

外部からのアクセスを許可するためには、ポート 7860 が開いている必要があるので、Ubuntu のファイアウォール(ufw)を使用している場合、次のコマンドでポートを開放する。

sudo ufw allow 7860

デフォルトでは、webui.sh はローカルホスト(127.0.0.1)でのみ起動しますが、外部からアクセスするためには、0.0.0.0 アドレスでリッスンする必要があるため、新しい起動スクリプトを作って、準備します。

vi /path/to/stable-diffusion-webui/start_webui.sh

#!/bin/bash
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4
bash /path/to/stable-diffusion-webui/webui.sh --listen --port 7860 --xformers

実行権を付与します。

chmod +x /path/to/stable-diffusion-webui/start_webui.sh

サービスファイルを作り自動実行準備

systemd サービスファイルを作成します。

sudo vi /etc/systemd/system/stable-diffusion-webui.service

サービスファイルの内容は以下のようにしておきました。

[Unit]
Description=Stable Diffusion Web UI
After=network.target

[Service]
Type=simple
User=ubuntu  # 実行するユーザー名
WorkingDirectory=/path/to/stable-diffusion-webui
Environment="LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4"
ExecStart=/path/to/stable-diffusion-webui/start_webui.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target

サービスを有効化して、正常に動作しているかを確認。

sudo systemctl enable stable-diffusion-webui
sudo systemctl start stable-diffusion-webui
sudo systemctl status stable-diffusion-webui

追記

APIとして外部から利用したかったり、Extensionをインストールしたかったりしたので、起動コマンドにオプション(–api、–enable-insecure-extension-access)を追加した。

vi /path/to/stable-diffusion-webui/start_webui.sh

bash /home/takahiro/stable-diffusion-webui/webui.sh --listen --port 7860 --api --xformers --enable-insecure-extension-access
モバイルバージョンを終了