工事現場備忘録

私の備忘録を私がどう書こうが私の自由であるとの信念に基づき自由に書いています

AUTOMATIC1111版stable-diffusion-webuiをwindowsかつRadeon環境で動かしたい

いちいちonnxにコンバートするのめんどいしckpt使いたくね?

※追々記
AUTOMATIC1111版をdirectl-mlでやるブランチが生まれていたようです.
私の環境だとうまく起動できなかったし無理やり動かしてもうまくGPU掴んでくれないので今後に期待かな?
github.com

==追々記ここまで==

※追記 いや面倒くさくないしonnx使いたいとかVRAM足らん過ぎてやばいとかckptとかどうでもいいって人はこっちのほうがいい可能性もあります. koji-genba.hateblo.jp

ckpt使えないとか設定できる項目が少ないとかって制約はあるけどVRAMの使用量はこっちのほうが少ない.両方使うこともできるし好きに選べばいい.
==追記ここまで==

環境

windows11 22H2
Radeon RX6800XT
※wsl不使用 Python3.10.8

作業

AUTOMATIC1111版stable-diffusion-webuiを用意してwebui-user.batを編集.
COMMANDLINE_ARGSに--skip-torch-cuda-test --precision full --no-half --no-half-vae --medvramを追加する.medvramないと6800XTでもVRAM使い切る(16GBオーバー).

@echo off

set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS= --skip-torch-cuda-test --precision full --no-half --no-half-vae --medvram

call webui.bat

こうなればおk.
そしたら一度webui-user.batを起動する.
また色々とパッケージのインストールが始まるのでほっとく.
しばらくすると

Can't run without a checkpoint. Find and place a .ckpt file into any of those locations. The program will exit.
続行するには何かキーを押してください . . .

になるはず.なったら素直に適当なキー押して閉じる.
そしたらstable-diffusion-webuiフォルダでターミナル開いて

 .\venv\Scripts\activate
pip install torch torchvision torch_directml

一応CPU用にtorch入れといてradeon用にtorch-directml入れる.

modules/devices.pyを開いて

if has_mps():
    return torch.device("mps")

return cpu

if has_mps():
    return torch.device("mps")
try:
    import torch_directml
    return torch_directml.device()
except ImportError as e:
    return cpu

にする.
repositories\k-diffusion\k_diffusion\external.pyを開いて

if quantize:
    return dists.abs().argmin(dim=0).view(sigma.shape)
low_idx = dists.ge(0).cumsum(dim=0).argmax(dim=0).clamp(max=self.log_sigmas.shape[0] - 2)
high_idx = low_idx + 1

if quantize:
    return dists.abs().argmin(dim=0).view(sigma.shape)
low_idx = dists.ge(0).to(torch.int32).cumsum(dim=0).argmax(dim=0).clamp(max=self.log_sigmas.shape[0] - 2)
high_idx = low_idx + 1

にする.
あとは普通にAUTOMATIC1111版stable-diffusion-webuiを使う時と同じ.
なおnovelAI完全再現は出来ない模様,ckptロードはできるし描かせることも出来るけど違う結果が出てくる.