あけましておめでとうございます!
本年もよろしくお願いいたします。
335bytes
WSL2 1.0 (リリース版)をインストール
tag: wsl2, windows10, windows11
ウチの環境(Windows 11 Pro)で試すと以下のような表示になるが、これが正式リリース版のwsl2の表示。
PS george@VERMEER C:\Users\george > wsl --version WSL バージョン: 1.0.3.0 カーネル バージョン: 5.15.79.1 WSLg バージョン: 1.0.47 MSRDC バージョン: 1.2.3575 Direct3D バージョン: 1.606.4 DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp Windowsバージョン: 10.0.22621.963 PS george@VERMEER C:\Users\george >
ひとつ前のwsl2だと、wsl --version とすると、オプションが無いエラーになる。
ウチの旧マシン側(Windows 10 Pro)の方は、wsl --update コマンドを使って WSL2 1.0 に上げておいた。
初日の出 06:46 ごろの模様
折角深夜まで起きているので初日の出見たら寝ようw
しかしだんだん眠くなってきたゾ
朝チュンが聞こえる時間になると眠くなる現象に名前を付けたい
初日の出見物できた
すごい人数が見物に来ててワロタw
雲も無く風も無くいい見物日和だった。
Windows 11 Pro + Radeon RX 6600XT 環境にて runwayml/stable-diffusion-v1-5 動いた
tag: stable-diffusion, stable-diffusion-v1-5, diffusers, AIイラスト
手順の元ネタは以下のサイト。
上の手順は diffusers >= 0.6.0 向け。 現在の diffusers==0.11.1付近なので、この間のバージョンならこれで動くはず。
参考までにウチのpip freezeの結果を以下に示す。今日ビルドしたらこうなった。
numpyは1.24系だとnp.floatが無くなったので1.23.3を明示的に指定する必要アリ。
blis==0.7.9 catalogue==2.0.8 certifi==2022.12.7 charset-normalizer==2.1.1 click==8.1.3 colorama==0.4.6 coloredlogs==15.0.1 confection==0.0.3 cymem==2.0.7 diffusers @ git+https://github.com/huggingface/diffusers.git@21bbc633c4d7b9bb7f74caf4b248c6a4079a85c6 filelock==3.9.0 flatbuffers==22.12.6 ftfy==6.1.1 huggingface-hub==0.11.1 humanfriendly==10.0 idna==3.4 importlib-metadata==6.0.0 Jinja2==3.1.2 langcodes==3.3.0 MarkupSafe==2.1.1 mpmath==1.2.1 murmurhash==1.0.9 numpy==1.23.3 onnx==1.13.0 onnxruntime==1.13.1 onnxruntime-directml==1.13.1 packaging==22.0 pathy==0.10.1 Pillow==9.4.0 preshed==3.0.8 protobuf==3.20.2 pydantic==1.10.4 pyreadline3==3.4.1 PyYAML==6.0 regex==2022.10.31 requests==2.28.1 scipy==1.9.3 smart-open==6.3.0 spacy==3.4.4 spacy-legacy==3.0.11 spacy-loggers==1.0.4 srsly==2.4.5 sympy==1.11.1 thinc==8.1.6 tokenizers==0.13.2 torch==1.13.1 tqdm==4.64.1 transformers @ git+https://github.com/huggingface/transformers.git@375801d5e65457d2ef86e6b269703c5f9ad67252 typer==0.7.0 typing_extensions==4.4.0 urllib3==1.26.13 wasabi==0.10.1 wcwidth==0.2.5 zipp==3.11.0
上の内容をテキストファイルrequirements.txtに書き込んで python -m venv venv ; . ./venv/Scripts/Activate.ps1 ; python -m pip install -r requirements.txt すれば、同じバージョンの環境ができるはず。
情報元の手順では以下のコマンドで環境を作成している。
# python 仮想環境作成 python -m venv venv # python 仮想環境を有効化 . ./venv/Scripts/Activate.ps1 python -m pip install --upgrade pip pip install git+https://github.com/huggingface/diffusers.git pip install git+https://github.com/huggingface/transformers.git pip install onnxruntime onnx torch ftfy spacy scipy pip install onnxruntime-directml --force-reinstall pip install protobuf==3.20.2 pip install numpy==1.23.3 # 仮想環境のライブラリ一覧をrequirements.txtに出力する python -m pip freeze > requirements.txt # 仮想環境のライブラリ一覧 requirements.txt にしたがってインストールする場合はこちら # python -m pip install -r requirements.txt # 変換スクリプト取得 https://github.com/huggingface/diffusers/ Invoke-WebRequest -Uri https://raw.githubusercontent.com/huggingface/diffusers/main/scripts/convert_original_stable_diffusion_to_diffusers.py -Outfile convert_original_stable_diffusion_to_diffusers.py Invoke-WebRequest -Uri https://raw.githubusercontent.com/huggingface/diffusers/main/scripts/convert_stable_diffusion_checkpoint_to_onnx.py -Outfile convert_stable_diffusion_checkpoint_to_onnx.py # Huggingface にログイン。API Tokenを入力。 huggingface-cli.exe login # stable-diffusion-v1-5 モデルを取得 (git clone で拾うとついつい git checkout とかやりたくなるので封印) # git clone https://huggingface.co/runwayml/stable-diffusion-v1-5 --branch onnx --single-branch stable_diffusion_onnx # git clone https://huggingface.co/runwayml/stable-diffusion-inpainting --branch onnx --single-branch stable_diffusion_onnx_inpainting # stable-diffusion-v1-5 モデルを取得 python convert_stable_diffusion_checkpoint_to_onnx.py --model_path="runwayml/stable-diffusion-v1-5" --output_path="./stable_diffusion_onnx" python convert_stable_diffusion_checkpoint_to_onnx.py --model_path="runwayml/stable-diffusion-inpainting" --output_path="./stable_diffusion_onnx_inpainting"
Radeon向けのStable Diffusion構築の手順をぐぐると diffusers==0.3.0指定のものがたくさんヒットするのだが現在は動かない。
上の動画は diffusers==0.3.0 指定の頃のWindows Radeon向けStable Diffusion 設定手順動画。
Winodws上でDirectX 12についてくるDirectMLを呼び出すライブラリであるonnxを使用するパッチがdiffusersにマージされたのは 2022/10/18だったらしいのだが、2.5か月後にはもう動かないとは変化の激しいことよ。
当時の手順で使われていたモデルは CompVis/stable-diffusion-v1-4 だが、このモデルは現在公開停止になっている模様。
■Stable Diffusionを自宅で実行してみた感想
タスクマネージャーから見てGPUがこんなに動いている姿は初めて見たw
以前からStable Diffusionは気になってはいたのだが、ついに動かせて満足w
■生成時間
ウチのRadeonでは1枚画像を生成するのに5分弱かかる。時々CPUに負けることもあるw
意外に、Onnx経由で CPU を使った方が、生のStableDiffusionより高速になっている。 onnxを入れた構成だと pytorch 独自の高速化が効かなくなるのが原因かしら。
■グラボのメモリ量について
ウチのグラボは一番安いエントリーモデルのヤツなのでGRAMは8GBしかなく、512x512ピクセルの画像を作るとタスクマネージャー読みでGPUメモリ量は9.7GBになる。 グラボのメモリ8GBからあふれたぶんは本体のメモリをGPUからPCIe経由で使っていることになる。 これじゃ遅くても仕方ないね。
384x384ピクセルで計算させてもグラボのメモリから溢れるのでGRAM 8GBでは色々キビシイ。
256x256ピクセルで計算させると全部がグラボのメモリに乗るようで、タスクマネージャーから見たGPUの負荷のグラフが一直線になる。(グラボのメモリから溢れている場合は、GPUの負荷のグラフがギザギザになる)
■ドライバについて
nVIDIA GeForceのドライバーはCUDA , AMD RadeonのドライバーはROCm とのこと。
nVIDIA の CUDAドライバ提供は力が入っている。 Windows WSL2 用の CUDAドライバなんてものがあるくらい。
AMD Radeon の ROCm は Windows 用のドライバは無いので、 Windows上で動かす場合は DirectX 12 についてくる DirectML 経由で使うことになると思うが、ML(Machine Lerning)は普通Linux上で動かすモノなので DirectML 対応は進まない予感がする。Linux コンテナイメージ焼いて Direct ML 存在前提ってのも何かオカシイしw
■モデルデータについて
Radeon向け手順のモデルとして runwayml/stable-diffusion-v1-5 (以前は CompVis/stable-diffusion-v1-4 )が使われている理由は、Stable Diffusion がdiffusersのリファレンス実装になっているからっぽい。
onnxから使うにはモデルデータのコンバートが必要になるケースがある。 たとえばLinaqruf/anything-v3.0モデルはonnxからは使えない形式なのでコンバートする必要がある。 (上の情報元のページの下の方にコンバート手順も載っている)
■余談
RaspBerry Pi 4B (4GBモデル) でStable Diffusionを動かした猛者が居るらしいw 画像生成に1時間かかるとか。
■onnx runtimeについて
Microsoftがどこでも何の言語からでもMachine Learning学習済みモデルを呼び出せるようにするためのランタイムとライブラリを整備しようとしているらしい。
ターゲットはCPU, GPU, Windows, Linux, Mac, スマホ, ブラウザ からも呼べるようにする気らしい。
onnxの場合、モデルデータの構造をonnx側で規定しているようなので、pytorch上で作った独自構造モデルをonnx形式に変換するのが普通っぽい。
Radeonユーザーとしてはコレがうまく行くことをを応援しているゾ。
モデルのトレーニングは Linux 上の pytorch を使うっぽいね。
tag: stable-diffusion, stable-diffusion-v1-5, AIイラスト
CPUのみ用Stable Diffusionを作るdockerコンテナ(docker-composeで一気に起動)
手順としては以下。
git clone https://github.com/AbdBarho/stable-diffusion-webui-docker cd stable-diffusion-webui-docker docker-compose --profile download up --build docker-compose --profile auto-cpu up --build
ビルドに1時間くらいかかったが、web ui 付きのCPU構成のstable diffusion v1-5 が起動する。
ウチで試した環境は Docker Desktop for Windows 4.15。 コンテナが起動したら http://host.docker.internal:7860/ にブラウザでアクセスする。
ウチのグラボの場合、CPUで計算するのと大差ないことがわかったので(笑)、安心してCPUモードで構築できる。
512x512, Sampling Step = 20 で5分から10分ほどで生成。onnxよりはちょっと遅いかな。
こちらがdocker-composeの元ネタ。マジ簡単にstable diffusion環境を作れる。
stable-diffusion-webui-docker の作者さん程の剛の者でもRadeon対応パッチを募集中らしい。 おそるべしRadeon対応。
CUDAの場合は、Windows上のWSL2でもDocker Desktop for WindowsでもLinuxでもCUDAドライバを入れろで良いけど、ROCmはWindows版ドライバ無いからなぁ。 何かの間違いで Direct ML がLinuxにも提供されてドライバとして熟成していないと前提にできない。
p.s.
何個かプロンプト試してみたけど、これ、普通に絵の練習した方が早くねーか?(挫折気味)
p.p.s.
上のweb-uiで使われている AUTOMATIC1111 は現在元のGitHubのページが無くなってる。
開発元が消えているモノはあまり使わない方が良いかも。
p.p.p.s.
AUTOMATIC1111はココ。 https://github.com/AUTOMATIC1111/stable-diffusion-webui
tag: stable-diffusion, anything-v3.0, diffusers, AIイラスト
Windows 11 Pro + Radeon RX 6600XT 環境で anything-v3モデルをonnxで使用してみた。
以下の手順だと今日の時点のスクリプトを取得しているので、安定的には動かない予感。上のonnx環境構築と同じ日に実施しないといけない。
# 変換スクリプト取得 https://github.com/huggingface/diffusers/ Invoke-WebRequest -Uri https://raw.githubusercontent.com/huggingface/diffusers/main/scripts/convert_original_stable_diffusion_to_diffusers.py -Outfile convert_original_stable_diffusion_to_diffusers.py Invoke-WebRequest -Uri https://raw.githubusercontent.com/huggingface/diffusers/main/scripts/convert_stable_diffusion_checkpoint_to_onnx.py -Outfile convert_stable_diffusion_checkpoint_to_onnx.py # Huggingface にログイン huggingface-cli.exe login # anything-v3を取得してonnxモデルにコンバート python convert_stable_diffusion_checkpoint_to_onnx.py --model_path="Linaqruf/anything-v3.0" --output_path="./anything-v3.0_onnx"
変換1回で済んでいるのは、https://huggingface.co/Linaqruf/anything-v3.0 側のファイルにdiffusersブランチができていて変換済みのモデルファイルが入っており、convert_original_stable_diffusion_to_diffusers.py 変換は不要となったためだろう。
メイン処理にて、使うモデルをローカルディスク上の./anything-v3.0_onnxとして指定する。
from diffusers import OnnxStableDiffusionPipeline height=512 width=512 num_inference_steps=50 guidance_scale=7.5 prompt = "a photo of an astronaut riding a horse on mars" negative_prompt="bad hands, blurry" pipe = OnnxStableDiffusionPipeline.from_pretrained("./anything-v3.0_onnx", provider="DmlExecutionProvider", safety_checker=None) image = pipe(prompt, height, width, num_inference_steps, guidance_scale, negative_prompt).images[0] image.save("astronaut_rides_horse.png")
出力された絵を見てワロタw stable-diffusion-v1-5とは絵の系統が違うww
523,786bytes
p.s. 1/4
anything-v3-0 on onnx の場合、512x768 画像の生成に 21GB の GPUメモリを使用している。
これ16GB搭載グラボ買ってもダメじゃんw onnx がメモリ食うのかもしれんけど。
AIイラストで768x1152とかで生成されているのを見るとガクブルする。どんだけメモリ使ったんだ...。(画像のpixel数増加はまた別のAIを使うらしいけど)(試しに768x960画像生成してみたけど、メインメモリ64GB搭載マシンでメモリスワップはじめたゾ...最終的にはページ圧縮モードに切り替わったのか25GBほどのメモリ消費になったけど。)
まあでも絵が生成されてくるのは楽しいね。効果的なプロンプトを入れると絵が変わる実感あるし、何が出てくるのかわからないガチャっぽい雰囲気もあるしw
たぶん、まともな英文でプロンプト入れたらもっと効率よく動くんだろうなぁという気はする。人物描写、服装描写、どこで何をしているかの描写、カメラワーク描写の英語のキーワードが全然浮かんでこないのでプロンプト書けないwww
あとモデル選びは重要。ここはモチベーションに関わるww たいしたプロンプト入れてなくても結構な絵が出てくるのとても重要。
どんな系統の絵が欲しいのかは人それぞれなので、stable diffusion みたいな汎用モデルも良いけど、ジャンル別に特化したモデルがあって遊べるの大切。
沼に落ちると自分で学習モデルの修正始めてしまうんだろうな...。
p.p.s. 1/7
上のサイト無料で生成してみた。2時間待ちの行列だったけど 512x768 画像が4秒で生成されていて草。 ウチだと12分くらいかかるのに。。。惨敗だ。。。
p.p.p.s. 1/10
anything-v3-0 モデルの場合、negative prompt に「flat color, flat shading」と記載するとマットな仕上がりになるのでオススメ。
anaconda 環境における stable diffusion の使い方 (CPUモード)
tag: stable-diffusion, diffusers, anaconda
手順動画を見つけたのでメモ。anaconda公式動画らしい。
動画内ではstable-diffusion-v1-5を使っているので割と新しい手順。 diffusersも使っている。
デフォルトサイズの画像作成に5分ちょいかかっているので、ウチのonnx環境とあまり変わらない様子。
pytorchのnightly版 (去年の12/25-12/30) にセキュリティ侵害があったらしい (torchtriton)
tag: pytorch
とのこと。pytorch nightly版は使っていないので今回はセーフ。
stable diffusion は pytorch を使用しているのでちょっと危なかったかな?
iPad Pro 10.5 (2017) Wi-Fi 不調その後。APを追加購入して強制的に解決
tag: ipad, wifi, aterm-wx5400hp
Wi-Fi を ON にしていると、無限リトライして iPad の電池が 12時間ほどでなくなる事態は断続的に発生。
結局 Wi-Fi を OFF にする感じで逃げる。
一応、Windows 10 PC を Wi-Fi アクセスポイントにする方法(モバイル ホットスポット)への接続設定も試してみたんだけど、iPad サスペンド後はWi-Fi接続がダメになる傾向は変わらず。
うーん。このマシンはそろそろ退役ですかな。
p.s. 1/22
Aterm WX5400HP の Wi-Fi基本設定から「メッシュWi-Fi」を「OFF」に設定。
メッシュWi-Fi機能については以下を参照。 自動で最適なルートを構築してくれるモノらしい。2.4GHz / 5GHz も混ぜて一つの SSID になる点が一番目立つ違いかな。
しばらく様子を見る。
p.p.s. 1/24
やっぱダメだった。。iPad Pro 10.5 (2017) の電池爆減してた。
p.p.p.s. 1/26
メッシュWi-Fiをoffにして、2.4GHzのSSIDを5GHzとは別の単独のものにする。 そのうえで iPad Pro 10.5 (2017)を 2.4GHz に接続するようにすると、電池の激減は無くなった。
今度は iPhone 8 Plus (2017) の電池が減るようになったんだがw これって要するにWi-FiのAP取り合って負けた端末の電池が激減しているだけなんじゃ...。
p.p.p.p.s. 1/28
ついに最終奥義パワープレイを発動。 Aterm WX5400HPをもう1台購入して有線接続。メッシュWi-Fiの子機APとすることでAPの取り合いを軽減させる。
特に指定はしていないのだが追加購入したAterm WX5400HPの方に自分のiPhone/iPad/Android一族が接続しに行くの面白いな。 距離の検出とかしてるのかな? 親機と数メートルしか違わない気がするが。
というか以前の親機APとの通信経路が良くないのか。 5GHzは特に直線で見通しが可能でないとダメやね。
p.p.p.p.p.s. 2/1
数日経過してもWi-Fiのつかみは順調。 iPad/iPhoneの電池の異常な減りも無い。 一応解決。
Windows 11 Pro + Radeon RX 6600XT 環境で anything-v3-better-vaeモデルをonnxで使用してみた。
tag: stable-diffusion, anything-v3-better-vae, diffusers, AIイラスト
onnx環境だとconvert_stable_diffusion_checkpoint_to_onnx.py一発でVAEがちゃんと効いて派手な絵が出るのはanything-v3-better-vaeモデルだったので紹介。
取得の操作はanything-v3とほぼ同じ。
# 変換スクリプト取得 https://github.com/huggingface/diffusers/ Invoke-WebRequest -Uri https://raw.githubusercontent.com/huggingface/diffusers/main/scripts/convert_original_stable_diffusion_to_diffusers.py -Outfile convert_original_stable_diffusion_to_diffusers.py Invoke-WebRequest -Uri https://raw.githubusercontent.com/huggingface/diffusers/main/scripts/convert_stable_diffusion_checkpoint_to_onnx.py -Outfile convert_stable_diffusion_checkpoint_to_onnx.py # Huggingface にログイン huggingface-cli.exe login # anything-v3-vetter-vae モデルを取得 https://huggingface.co/Linaqruf/anything-v3-better-vae python convert_stable_diffusion_checkpoint_to_onnx.py --model_path="Linaqruf/anything-v3-better-vae" --output_path="./models/anything-v3-better-vae_onnx"
メインプログラムは以下。
from diffusers import OnnxStableDiffusionPipeline height=512 width=512 num_inference_steps=50 guidance_scale=7.5 prompt = "a photo of an astronaut riding a horse on mars" negative_prompt="bad hands, blurry" pipe = OnnxStableDiffusionPipeline.from_pretrained("./models/anything-v3-better-vae_onnx", provider="DmlExecutionProvider", safety_checker=None) image = pipe(prompt, height, width, num_inference_steps, guidance_scale, negative_prompt).images[0] image.save("astronaut_rides_horse.png")
モデルを作ってくれる人がdiffusersかonnx向けのファイル形式で公開してくれていないといろいろキビシイ。
モデル本体ファイルもそうなんだけど、VAEのファイルも重要。絵の色彩がだいぶ異なる。
VAE入れ替え効果と、pt形式のVAEファイルをdiffusers形式に変換する方法は以下のサイトにある。
今日明日は東京にも寒波が来るらしい
Windy(ECMWF)で見ると 火曜日の夜あたりから気温がマイナスに転じる予想。
ウェザーニュースの気温予測だと火曜日の夜あたりから気温がマイナスに転じる予想。
当日になってだいぶマイルドな予想になってきた。
iPhone / iPad 向け Stable Diffusion アプリ Draw Things があるらしい
tag: stable-diffusion, draw-things
画像1枚生成に70秒らしい。 ウチのCPUより速いww
モデルデータが1.6GBにスリム化されていたりfp16を使っていたりいろいろ工夫がある様子。