生成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