いろんなものをインストールすると管理が面倒なので、コンテナの中で完結したいというモチベーション。
https://yuuyuublog.org/stablediffusion_local/
を少し参考にさせていただきました。
設定ファイル群
"name": "generative",
"build": {
// Sets the run context to one level up instead of the .devcontainer folder.
"context": "..",
// Update the 'dockerFile' property if you aren't using the standard 'Dockerfile' filename.
"dockerfile": "../Dockerfile"
},
"settings":{
"terminal.integrated.shell.linux": "/bin/bash",
"python.pythonPath": "/usr/local/bin/python"
},
"extensions":[
"ms-python.python"
],
//"runArgs":["--gpus","all","--shm-size","8gb"],
"remoteUser": "dev-user",
}
#公式のdockerイメージをベースにする。
FROM nvidia/cuda:11.8.0-devel-ubuntu20.04 as base
#apt-get中にタイムゾーンの設定を聞かれる・・・
ENV EBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Tokyo
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
SHELL ["/bin/bash", "-c"]
RUN apt update && apt upgrade -y
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
bzip2 \
git \
sudo \
wget \
vim \
zip \
zlib1g-dev \
curl \
unzip \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# For CUDA profiling, TensorFlow requires CUPTI.
ARG USERNAME=dev-user
ARG GROUPNAME=dev-user
ARG UID=1000
ARG GID=1000
ARG PASSWORD=dev-user
#追加したユーザでsudoを使えるようにする
RUN groupadd -g $GID $GROUPNAME && \
useradd -m -s /bin/bash -u $UID -g $GID $USERNAME && \
adduser dev-user sudo && \
echo $USERNAME:$PASSWORD | chpasswd && \
echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
#rootのパスワードがわからないのでパスワードを変更
RUN echo "root:root" | chpasswd
RUN pip install --upgrade pip
RUN pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
必要なファイルのダウンロード
https://github.com/AUTOMATIC1111/stable-diffusion-webui/releases/tag/v1.0.0-pre
からソースコードをダウンロードして、.devcontainerフォルダと同じ場所に解凍する。
VSCodeでDockerfileからコンテナビルド。
python3.8 => python3.10.6へアップグレード(ダメな手順)
python3.10.6じゃないとダメなようなので、アップグレードする。
※この手順はうまくいかなかったのでやらない。参考までに残しておく。
https://www.python.org/downloads/release/python-3106/
からソースをダウンロードして解凍。フォルダ移動の後に以下のコマンドを実行。
./configure
make
sudo make install
処理が成功するとsuccessflyとなる。
Looking in links: /tmp/tmpxi26yu7n
Processing /tmp/tmpxi26yu7n/setuptools-63.2.0-py3-none-any.whl
Processing /tmp/tmpxi26yu7n/pip-22.2.1-py3-none-any.whl
Installing collected packages: setuptools, pip
Successfully installed pip-22.2.1 setuptools-63.2.0
これだけだとアップグレードされないので、
alias python3='/usr/local/bin/python3.10'
でpython3コマンドをpython3.10へアタッチする。
web-user.shの編集
以下のブロックを編集。
# Install directory without trailing slash
install_dir="/workspaces/generative/"
# Commandline arguments for webui.py, for example: export COMMANDLINE_ARGS="--medvram --opt-split-attention"
export COMMANDLINE_ARGS="--skip-torch-cuda-test"
//(中略)
# install command for torch
export TORCH_COMMAND="pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118"
ディレクトリ内のwebui.shを「bash webui.sh」で実行するとインストールが走る。
そしてエラー・・・。
SSLが有効になっていない(ダメな手順)
ここからの手順はやっても意味がないのでスキップする。参考のために残しておく。
SSLが有効になっていない。ライブラリを入れてみる。
sudo apt-get update
sudo apt-get install -y libssl-dev
opensslを指定してpython3.10を再インストール。opensslの場所は環境によって異なるので注意。
which openssl
/usr/bin/openssl
./configure --with-openssl=/usr/bin/openssl
make
sudo make install
よくよく見るとmake時に以下のエラーが・・・。
gcc -pthread -fPIC -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -fvisibility=hidden -I./Include/internal -I./Include -I. -I/usr/include/x86_64-linux-gnu -I/usr/local/include -I/workspaces/generative/Python-3.10.6/Include -I/workspaces/generative/Python-3.10.6 -c /workspaces/generative/Python-3.10.6/Modules/_ctypes/_ctypes.c -o build/temp.linux-x86_64-3.10/workspaces/generative/Python-3.10.6/Modules/_ctypes/_ctypes.o -DPy_BUILD_CORE_MODULE
/workspaces/generative/Python-3.10.6/Modules/_ctypes/_ctypes.c:107:10: fatal error: ffi.h: No such file or directory
107 | #include <ffi.h>
| ^~~~~~~
compilation terminated.
The necessary bits to build these optional modules were not found:
_bz2 _curses _curses_panel
_dbm _gdbm _hashlib
_lzma _sqlite3 _ssl
_tkinter _uuid readline
To find the necessary bits, look in setup.py in detect_modules() for the module's name.
ffiモジュールが見つかっていないからビルドに失敗している?ならばインストールだ。
sudo apt-get update
sudo apt-get install -y libffi-dev
make clean
./configure --with-openssl=/usr/bin/openssl
make
sudo make install
しかし、make時に以下のエラーが発生。ビルドが出来ない・・・。
#メッセージ
Could not build the ssl module!
Python requires a OpenSSL 1.1.1 or newer
#インストール
sudo apt-get update
sudo apt-get install build-essential checkinstall zlib1g-dev -y
opensslは1.1.1だけど一応アップグレードをしてみる。
sudo apt-get remove openssl
#ファイルはwgetなどでダウンロードしてくる。
tar -xzvf openssl-1.1.1l.tar.gz
cd openssl-1.1.1l
./config --prefix=/usr/
make
sudo make install
再度pythonをアップグレードするも一考に解決せず。
python3.8 => python3.10.6をコマンドでアップグレード(うまくいった手順)
手動でインストールしようとしているのが間違っているだろう、なのでaptなど駆使してインストールを試みる。
sudo apt update
sudo apt upgrade
sudo apt install curl git
curl https://pyenv.run | bash
echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
source ~/.bashrc
sudo apt install build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python-openssl
pyenv install 3.10.6
pyenv global 3.10.6
pythonはアップグレード出来たので、改めて「bash webui.sh」を実行。
起動したあああああああああ!!
webuiの動作確認
簡単な動作確認
https://civitai.com/から適当にモデルをダウンロード
モデルは大きく2つあって、原モデル(checkpoint)と追加学習モデル(LoRA等)。
TOPの画像にcheckpointか否かが分かるようにかかれている。
サイズがGB単位なのがcheckpoint、MB単位なのが追加学習モデル、と覚えておくと吉かも。
checkpointは「stable-diffusion-webui\models\Stable-diffusion」に置く。
今回は「cetusMix_Whalefall2」をダウンロード。
左上にcheckpointを選択するところがあるので置いたモデルを選択。
「FF7」のtxt2imgで画像生成してみる。
それっぽいのが出来たが、誰だお前。
LoRAを含めたプロンプトの確認
モデルのページにあるプロンプトをまねてみる。
checkpointのみの生成。ちょっと違う。
よく見ると指変だな!
プロンプトとsamplerが違うだけで、こうまで変わるのね。samplerってなんだろね。今度調べてみよう。
追加学習モデルが必要そうなのでダウンロードしてみる。LoRAのフォルダはこんな感じ。
不要なのも入ってるけど、プロンプトで指定してそれぞれのモデルをどれくらい反映するかを決められるっぽいので、余計なものが入っていても影響はないっぽい。
↓のように指定することで、LoRAを使うことが出来る。指定したモデルがないと、VSCodeのほうでエラーを吐くものの、実行は出来てしまうようなので注意。
<lora:yae_miko_offset_9_6:0.7>
すごくいい感じな画像は出来たものの、アップロードされていたものはちゃんとは生成できなかった。
ユーザインタフェースで色々設定できるものの非表示になってるものがあるっぽいので、きっとそれの影響だろう、そうだろう。
まぁ、一旦動いたからよし!
後日、DockerFileとかdevcontainerとか手順の見直しをしてみよう。