🧠

CPUのみの環境でstable-diffusionを動かす
October 20, 2023February 28, 2024
#Machine Learning#develop#stable-diffusion

生成系 AI が盛り上がっているので遊んでみたい。
でもグラボはないという状況でできるところまでやってみた記録

出来上がったもの

00000-1846197223
2girl, master piece , best quality
Negative prompt: (worst quality:2) , (low quality:2) , (normal quality:2) , lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, extra hands, extra finger
Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 1846197223, Size: 512x512, Model hash: 7f96a1a9ca, Model: AnythingV5Ink_v5PrtRE, RNG: CPU, Version: v1.6.0-2-g4afaaf8a

環境

環境構築の前に

stable-diffusion-webui が python3.10 を要求しているためホストサーバーの OS を Ubuntu20.04 から Ubuntu22.04 に上げた。
※既存のソフトの依存関係などはよく調査すること

sudo do-release-upgrade
cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.3 LTS"

python3 -V
Python 3.10.12

LXD で Ubuntu22.04 の環境構築

stable-diffusion 用のコンテナを作る。

lxc launch images:ubuntu/22.04 stable-diffusion

Zero-tier でローカルネット設定

curl -s 'https://raw.githubusercontent.com/zerotier/ZeroTierOne/master/doc/contact%40zerotier.com.gpg' | gpg --import && if z=$(curl -s 'https://install.zerotier.com/' | gpg); then echo "$z" | sudo bash; fi
zerotier-cli  join  xxxxxxxxxx

アップデートと要りそうなパッケージをインストール

apt update
apt upgrade
apt install wget git python3 python3-venv python-is-python3

実行ユーザを作成

root で動かすことを推奨していないので一般ユーザを作成した。

adduser sakakinox

stable-diffusion のセットアップ

ソースコードのダウンロードと必要なモジュールのインストール。

モジュールは CPU 用のものをインストールする。

git clone --depth=1 --branch v1.2.1 https://github.com/AUTOMATIC1111/stable-diffusion-webui
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cpu

web-user.sh の書き換え

CPU 利用のためのオプションなどを追加する。

export COMMANDLINE_ARGS="--listen --skip-torch-cuda-test --upcast-sampling --no-half-vae --use-cpu all controlnet --no-half --enable-insecure-extension-access"
export TORCH_COMMAND="pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cpu"
オプション内容
—listenローカルネットのコンピュータからアクセスできるようになる。
—skip-torch-cuda-testCUDA が正しく動作するかどうかはチェックしません。
—upcast-sampling—no-half といっしょに使うメモリの利用量が減少してパフォーマンスが上がる。
—no-half-vaeビデオメモリ使用量は増大するが黒画像発生率が低減する。(お守り)
—use-cpu all controlnetCPU で動作させる。
—no-half16 ビット浮動小数点演算を利用しない。
—enable-insecure-extension-access他のオプションに関係なく、[拡張機能] タブを有効にします。web-ui から拡張機能を設定することができるようにする。

model のインストール

今回インストールしたのはanythingv5nijimixモデルによっては利用に制限がある場合があるので注意。
配置場所はstable-diffusion-webui/models/Stable-diffusionとなる。

cd stable-diffusion-webui/models/Stable-diffusion
wget https://civitai.com/api/download/models/119438 -O anythingv5nijimixV125.kKh6.safetensors

systemd でサーバー起動時に stable-diffusion を起動させる

/etc/systemd/system/automatic1111.service を作成してコンテナ起動時に stable-diffusion を自動起動させる。
※各 path と User 名などは環境に合わせて調整すること

[Unit]
Description=Stable Diffusion AUTOMATIC1111 Web UI service
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=sakakinox
ExecStart=/usr/bin/env bash /home/sakakinox/stable-diffusion-webui/webui.sh
WorkingDirectory=/home/sakakinox/stable-diffusion-webui
StandardOutput=append:/var/log/sdwebui.log
StandardError=append:/var/log/sdwebui.log

[Install]
WantedBy=multi-user.target

設定の読み込みと動作確認と起動設定

systemctl daemon-reload        #読み込み
systemctl start automatic1111  #起動確認
systemctl stop automatic1111   #停止確認
systemctl enable automatic1111 #自動起動設定

動作所感

画像生成は一通りできる画像サイズは 1024x1024 までならこのスペックでも出力できる。ControlNet や Lora、Refiner なども一通り動いた。
生成に関しては 512x512 で 1 枚 3〜5 分 1024x1024 で 1 枚 40〜50 分ほどでサーバーで実行して放って置く分にはあまり苦にならない。
使えます。
ずっと実行していても、ファイルサーバーや録画サーバーには特に影響はみられず手応えしかありません。
ただ、構図の作り込みやプロンプトの探求は生成時間がネックで難しい現状だ。
また、Animatediff などは永遠に終わらないし、Lora の作成はやる気にもならない。
このあたりは GPU がないと話にならないといった現状だ。
ただ、GPU はパソコンの部品の中でもっとも高額な部品の一つなので投資前に手持ちの環境で stable-diffusion を動作確認できることはすごいアドバンテージだし、大きい計算リソースがなくても程度の差はあれそれなりの画像が出力されるところは機械学習がだいぶ大衆化されてきたのだと実感する。

参考



Ubuntu22.04でCentOS7をLXCコンテナで動かす
August 21, 2023February 19, 2024

LXC のホストを Ubuntu22.0 にアップグレードしたら CentOS7 のコンテナが起動できなくなったので原因を調べた。 前提条件 HOST OS: Ubuntu 22.04 HOST Kernel: 5.15.0-79-generic Container OS: CentOS 7 lxc-start…

Continue reading...
sakakinox

Written by sakakinox
Server enginier

Copyright © sakakinox.net 2021-2024.