Open5

Stable Diffusion 覚書き

kazuphkazuph

Lsmith環境を構築

環境

  • Windows 11
  • RAM16G
  • Ubuntu on WSL with Docker for Desktop
  • RTX3070(VRAM8G)

実行

sudo apt update && sudo apt install -y htop nvtop

git clone https://github.com/kazuph/Lsmith.git -b improvement-docker
cd Lsmith
git submodule update --init --recursive
docker compose up --build

ckptやsafetensorsからDiffusers形式に変換

基本的には以下。
https://note.com/mayu_hiraizumi/n/nf143ea048568

実際に試してみる。

# condaのインストール
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
sh Miniconda3-latest-Linux-x86_64.sh

yes | conda create --name work python=3.9
conda activate work

# 変換スクリプトのダウンロード
git clone https://github.com/kohya-ss/sd-scripts.git
cd sd-scripts

pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
pip install --upgrade -r requirements.txt

python tools/convert_diffusers20_original_sd.py ../stable-diffusion-webui/models/Stable-diffusion/SukiyakiMix-fp16.ckpt ~/SukiyakiMix --reference_model CompVis/stable-diffusion-v1-4 --v1

LsmithでTensorRT形式に変換(docker版)

上記の続きとして書く。

version: '3.9'
services:
  lsmith:
    build:
      context: .
      dockerfile: ./docker/Dockerfile.lite
    ports:
      - 8000:8000
    volumes:
      - ./docker-data/diffusers:/app/diffusers # ←これを追加
      - ./docker-data/models:/app/models
      - ./docker-data/outputs:/app/outputs
cd Lsmith
mv ~/SukiyakiMix docker-data/diffusers/

起動

docker compose up [--build]

LsmithのUIで Model ID に直接のパスを書く

/app/diffusers/SukiyakiMix

kazuphkazuph

Windowsのローカル環境の構築

後々詰むのでメモリ割り当てを増やしておく

またlocalhostで接続したい場合の設定も追加。

cat .\.wslconfig

[wsl2]
memory=12GB
swap=10GB
processors=4
localhostForwarding=true
kernel = C:\\Users\\kazuh\\wsl_kernel

Ubuntuにsshできるようにする

sudo apt install openssh-server
mkdir .ssh
chmod 700 .ssh
cd .ssh
wget https://github.com/kazuph.keys -O authorized_keys
chmod 600 authorized_keys

sudo ssh-keygen -A
sudo service ssh restart

Windowsに外部からsshできるようにする

https://mulberrytassel.com/wsl-ssh1/

この記事を見ればいけます、がしばらくして接続できなくなりました。
Microsoft Defendedr ファイアウォールというのが自動で塞いだ可能性があり、一度オフにしたら接続できました。その後すぐにオンにしても再接続できてます。謎。

また小技ですが、WSLのIPそのものを指定するとWSLを起動する度に転送設定をやり直さねばなりませんが、そこはlocalhostにしておけばずっと同じで大丈夫です(wslconfigでlocalhostForwardingを設定しているなら)。

netsh interface portproxy add v4tov4 listenaddress=<WindowsのIPアドレス> listenport=22 connectaddress=localhost connectport=22

SSHのポートの変更

Portが22だとWindows自体にOpenSSHを入れている場合に競合しているのか、つながらなくなることが多かったので、ずらしたportにしました。

sudo vi /etc/ssh/sshd_config
# Port XXXXX ← 好きな番号

以下Power Shellの管理権限

# ポートプロキシの設定
netsh interface portproxy add v4tov4 listenaddress=<Windows自体のIP> listenport=XXXX connectaddress=localhost connectport=XXXX

# ファイヤーウォールの設定
netsh advfirewall firewall add rule name="sshd" dir=in action=allow protocol=TCP localport=XXXX

wget https://raw.githubusercontent.com/kazuph/dotfiles/master/.gitconfig