工事現場備忘録

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

stable-diffusionをwindowsかつNvidia製GPU無しの環境でGUI付きで動かしたい

※追記 こっちでやったほうが楽かもしれない.

koji-genba.hateblo.jp ただAUTOMATIC1111版を使うやり方はすごくVRAM食うからこっちのやり方のほうがいい時もある.両方使うこともできるし好きに選べばいい.
==追記ここまで==

先駆者が無限にいるのにこれ書く必要ある?
novelAIではない

環境

windows11 22H2
Radeon RX6800XT
※wslではない

理屈上ではintelGPUでもGPU無し環境でも動くとは思うけど未確認.

準備

python3.10.8
git
をインストール
適当な作業ディレクトリを用意して github.com をgit cloneする

Hugging Face – The AI community building the future.
にアカウント作成

OnnxDiffusersのセットアップ

適当に作業用のディレクトリを用意して さっきcloneしたやつのsetup.batを実行.仮想環境作成とかパッケージのインストールとか走るからしばらく待つ.
終わったら

.\virtualenv\Scripts\activate

ターミナルの最初に(virtualenv)って出ればおk

ort-nightly-directmlインストール

ちょくちょくアプデされるからなるたけ新しいバージョンのやつ使ってください.
https://aiinfra.visualstudio.com/PublicPackages/_artifacts/feed/ORT-Nightly/PyPI/ort-nightly-directml/overview/1.15.0.dev20230126004
から
ort_nightly_directml-1.15.0.dev20230126004-cp310-cp310-win_amd64
をDLして

pip install ".\ort_nightly_directml-1.15.0.dev20230126004-cp310-cp310-win_amd64.whl" --force-reinstall

する.

huggingfaceログイン

https://huggingface.co/でSetting>Access TokensからToken作る.
そしたらターミナルで

huggingface-cli.exe login

してさっき作ったTokenを貼る.git credintialはnでいい.Login succesfulになればおk.

モデル用意

python convert_stable_diffusion_checkpoint_to_onnx.py --model_path="Linaqruf/anything-v3.0" --output_path="model/anything-v3.0_onnx"
python convert_stable_diffusion_checkpoint_to_onnx.py --model_path="CompVis/stable-diffusion-v1-4" --output_path="model/stable-diffusion-v1-4_onnx"
python convert_stable_diffusion_checkpoint_to_onnx.py --model_path="runwayml/stable-diffusion-v1-5" --output_path="model/stable_diffusion-v1-5_onnx"

全部やる必要はない.使いたいモデルだけでいい.ほかに使いたいモデルあるならそっちでいいし.
huggingfaceにあるモデルならおk.外の世界のモデルは知らん.
huggingface外のckptもonnxコンバートはできるはずだけど未確認.
モデルダウンロードしてckptからonnxコンバートするから非常に時間がかかる.昼飯でも食いながらゆっくり待つ.

テスト実行

txt2img_onnx.pyの29行目

    "--model", dest="model_path", default="model/stable_diffusion_onnx", help="path to the model directory")

    "--model", dest="model_path", default="model/anything-v3.0_onnx", help="path to the model directory")

みたいにさっき用意したモデルに合わせて書き換える.
そしたら

python txt2img_onnx.py --prompt="tire swing hanging from a tree" --height=512 --width=512

とかして適当に画像生成してみる.分かると思うけどpromptが生成内容指定プロンプト,heightとwidthが画像サイズ
初回はモデルデータの読み込みがあるため時間がかかる.outputフォルダにそれっぽい画像が出力されればおk.されなかったらどっかおかしいから頑張って何とかする.

GUI

python onnxUI.py

して表示されたURLをブラウザから開く.
あとは好きにやってください.

終わったらターミナルでCtrl+Cして終了.

2回目以降

#作業用フォルダの中でターミナル開いて#
.\virtualenv\Scripts\activate
python onnxUI.py

これだけ

その他

CPUonly

python txt2img_onnx.py --cpu-only --prompt="tire swing hanging from a tree" --height=512 --width=512

でCPUのみで実行.遅い.

アプデ

github.comからsetup.batだけDLして上書きして

.\setup.bat -update

でなんかアップデートできるらしいです.

wsl2でtensorflow-directmlでkerasするやつ

次いつ使うか知らんけど一応やったからメモ
今はDirectML Plugin for TensorFlow 2があるけどこれはtensorflow1.15相当のtensorflow-directmlのやつ

環境

windows11 22H2
wsl2 Ubuntu20.04
GPUはRX6800XTで動作確認済み

いつもの

sudo apt update -y && sudo apt upgrade -y && sudo apt autoremove

インスコ

sudo apt install build-essential libbz2-dev libdb-dev libreadline-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libsqlite3-dev libssl-dev zlib1g-dev uuid-dev tk-dev
wget https://www.python.org/ftp/python/3.7.16/Python-3.7.16.tar.xz
tar xJf Python-3.7.16.tar.xz
cd Python-3.7.16
./configure
make
sudo make altinstall

direct-mlはpython3.5,3.6,3.7がサポート対象,他verでも動くかもだけど従っておくのが無難ってことで3.7.16
システム側のpythonを上書きするのは嫌だからaltinstallにする

仮想環境作って動かす

python3.7 -m venv venv
python3.7 -m pip install tensorflow-directml
python3.7 -m pip install keras==2.3.1
python3.7 -m pip install scikit-learn

venvはよくないとか言われてるのを見たこともあるけど"まぁええやろ"の精神で.
tensorflow-directmlのインストール自体はpipで突っ込むだけ.kerasはtensorflow1.15に合わせて2.3.1を指定.scikit-learnは私が使いたかったから入れただけ
あとは普通にtensorflowとかkeras使うようにやれば動く.wsl2ならGPUも動く.

windowsをdismとsfcで修復するやつ

忘れたころに使うからメモ
管理者権限powershellで実行すればよし

DISM.exe /Online /Cleanup-image /Restorehealth
sfc /scannow

powershellセミコロンで区切れば複数コマンド流せるから

DISM.exe /Online /Cleanup-image /Restorehealth ; sfc /scannow

で放置できて気持ちいい.
dismでシステムイメージをチェックして破損あればwindows updateからファイルを取得
sfcで保護下の全てのシステムファイルをチェックして破損あればwindows updateのキャッシュから復元
キャッシュの場所はC:\Windows\System32\dllcache

====追記====
スクリプトにしたやつ
これps1にして実行,管理者権限問われるから許可

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Administrators")) { Start-Process powershell.exe "-File `"$PSCommandPath`"" -Verb RunAs; exit }
DISM.exe /Online /Cleanup-image /Restorehealth
sfc /scannow

valgrindのmassifでプログラムのメモリ使用量を測定して表示する

タイトル通り

インストール

sudo apt install valgrind  
sudo apt install massif-visualizer  

massif-visualizerは無くてもいいけどあるほうが捗る.でもGUI環境が無いと使えない.

使う

まずmassifでメモリ使用量を測定し結果をファイルに吐かせる.

valgrind --tool=massif --stacks=yes --heap=no (実行コマンド)

#例
valgrind --tool=massif --stacks=yes --heap=no ./testprogram

実行するとカレントディレクトリに"massif.out.(プロセスID)"って名称のファイルが生成される.
stacksでスタックを測定するか否か,heapでヒープを測定するか.
例えばCだったら変数はstacksに含まれるし,mallocした分はヒープになる(はず).
細かいことは以下ページ参照.

access.redhat.com

結果を吐かせたら表示する

ms_print (さっき生成されたファイル)
massif-visualizer (さっき生成されたファイル)

#例
ms_print massif.out.13969
massif-visualizer massif.out.13969

ms_printはコマンドプロンプト上にAAで表示してくれる.
こんな感じ.GUI環境が無いときはこれ.
massif_visualizerはいい感じにグラフにして表示してくれる. こんな感じ.使えるならこっちのほうがよさそう.
valgrindは他にもメモリリークのチェックとか色々できる強力なツールだからうまく付き合おう.
ここにメモリ使用量測定でしか使っていないバカモノが

Ryzenのあれ

PPT

消費電力の上限

TDC

電流の平均での上限

EDC

電流の短期での上限

基本PPTで縛って,枠足りない時だけTDCとかEDCも盛ればよさげ.ただマザボVRM温度に注意.
でもどうせワッパ優先で5900XのPPT110W運用.この記事の存在意義がクライシス.

愚痴

・OracleCloudの無料枠が強いと聞いたので使おうとした
→クレカ認証が何故か通らない(決済できてる)
→個人情報ぜ~んぶ正確に入れる
→やっぱり認証通らない
→問い合わせるかぁ
→「クレカ認証通らないよ!VISAもマスカもJCBもだめだったよ!140円の決済もあったよ!情報に誤りもないよ!なんでダメなの!?」

Oracle神からの返答
ねえええええええええええええ!!!!!!!「私たちはそれを解決することができません.それがあなたに教えられる情報の全てです」って!!!!!ねぇ!!!!!!!

なんで?と思ったけどどうやらOracleCloud無料枠のクレカ認証は通らないことで有名らしい.そんなもので有名になるな
素直に諦めてWebARENAに金払った.安くグローバルIPが欲しい…