開発環境

  • gpu: 4090 GTX (vram:24GB)
  • os: archlinux

OS 側の設定

system 側の CUDA とか極力いじらずにいく方針

docker 用意されていたら積極的に使うし、システム側の CUDA 使いそうなら避けて代替を探す。pytorch サイドで全部やってくれ。 python のバージョン指定があれば、 pyenv install X.X.X && pyenv local X.X.X, 絶対に venv すること。

ドライバは普通にパッケージマネージャ経由から入れる。

pacman -S nvidia

色々入れる

pacman -S docker docker-compose nvidia-container-toolkit pyenv

いちいち sudo docker したくないから

usermod -aG docker yasushi

comfy-ui

https://github.com/comfyanonymous/ComfyUI https://github.com/ltdrdata/ComfyUI-Manager https://github.com/Fannovel16/comfyui_controlnet_aux

色々入れない。これだけ

モデルは、 base: https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/sd_xl_base_1.0_0.9vae.safetensors

refiner: https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/blob/main/sd_xl_refiner_1.0_0.9vae.safetensors

upscaler: https://civitai.com/models/141491?modelVersionId=156841

この data は comfyui の setting 変えて、api 用の workflow.json を入れれば ok

import json
from urllib import request
import time
import random

with open('template.json') as f:
    temp_str = f.read()

template = json.loads(temp_str)

url = 'http://localhost:8188'
api_url = f'{url}/prompt'


def prompt(p):
    data = json.dumps({'prompt': p}).encode('utf-8')
    req = request.Request(api_url, data=data)
    req.add_header('Content-Type', 'application/json')
    request.urlopen(req)

# positive prompt
positive = 'dog'
# the node ids will be different
prompt['12']['inputs']['text'] = positive
prompt['6']['inputs']['text'] = positive

# change base image for controlNet
base_image = 'base_image.jpg'
prompt['52']['inputs']['image'] = base_image

# output
img_name = f'out-dog'
prompt['19']['inputs']['filename_prefix'] = img_name

prompt(template)

ssh -L でトンネルして、これを改造すれば量産できる

LORA

kohya-ss

1024x1024 の画像を用意する。

ちょっといじって強制的に --no-half-vae になるようにした。

docker-compose を使う

https://github.com/bmaltais/kohya_ss

dataset/loraName/n_loraName/image に画像とキャプションを入れておく

dataset/loraName/n_loraName/models dataset/loraName/n_loraName/logs

にそれぞれ保存しておく

正直このパラメータは何がいいのかさっぱりでやっている

https://github.com/bmaltais/kohya_ss/wiki/LoRA-training-parameters

https://gist.githubusercontent.com/Poiuytrezay1/14d146290a08afedc8ea07d7c79f2049/raw/06ffed6ed9ad75864f4e80d4560fd25d9c4815ac/base.json

https://medium.com/@dreamsarereal/understanding-lora-training-part-1-learning-rate-schedulers-network-dimension-and-alpha-c88a8658beb7

なんかフーンって感じでやった。

パラメータ

<2024-04-22 Mon> epoch: 30 cache latents: true LR Optimizer: AdamW LR Scheduler: constant Learning Rate: 0.00006 LR warmup: 0 Max resolution: 1024,1024 Enable buckets: false Text Encoding learning rate: 0.00005 Unet learning rate: 0.00005 Network Rank: 32 Network Alpha: 32 (–no half VAE)

<2024-04-23 Tue> 上だと強すぎたので少し学習率を落とす epoch: 30 cache latents: true LR Optimizer: AdamW LR Scheduler: constant Learning Rate: 0.00002 LR warmup: 0 Max resolution: 1024,1024 Enable buckets: false Text Encoding learning rate: 0.00001 Unet learning rate: 0.00001 Network Rank: 32 Network Alpha: 32 (–no half VAE)

これで大体 17GB 使う。画像は 50 枚で、全部 1024 x 1024

<2024-05-02 Thu> もうちょっと幅が欲しいので刻んでいく epoch: 40 cache latents: true LR Optimizer: AdamW LR Scheduler: constant Learning Rate: 0.000015 LR warmup: 0 Max resolution: 1024,1024 Enable buckets: false Text Encoding learning rate: 0.00001 Unet learning rate: 0.00001 Network Rank: 32 Network Alpha: 32 (–no half VAE)

画像を 11 枚追加した。5枚は、新しいモグリン、6枚は noisy_background とラベリングしたから、それを negative prompt に当てるつもり。

numimage * iterations * epoch = maxiterations

docker-compose up -d --build
docker-compose logs kohya-ss-gui -f #ログを垂れ流し確認する
docker-compose down

comfy 走らせながらだと、vram 足りなくなった。 nvtop 便利だった。

Date: 2023-06-07 Wed 19:23