たまに掃除は必要!熱暴走…

イメージ
 そんなに暑くないのに… 本日、午前中にオンラインで打合せをしていると、突然マシンがダウン。 一瞬、停電か?と思ったもののディスプレイの電源は入っている。 あれっ?と思い、すぐさまノートで打合せを継続。 その間に、再度マシンの電源を投入。 問題なく起動する。 でも、CPU温度がたまたま目に入り、95℃を超えて徐々に上昇していく。 105℃あたりで再度マシンダウン。 これは、熱暴走によるダウンの可能性が高い。 以前、CPUをRyzen7→9にした頃は、60℃〜70℃程度だった記憶がある。 本当はGW中にSSDの載せ替えを行う予定だったけれど、忙しくて先延ばしにしていた。 その時やっていれば、多分掃除もしただろうに…。 ということで、午後からマシンを解体し、掃除をすることに。 ケース本体のFANはホコリがかなり溜まっている。 GPUのFANは問題ない。 電源とCPU FANはひどい。 一旦、CPU FANを取り外し、きれいにする。ついでにCPUグリスも塗り直しセット。 動作確認すると、投入直後で40℃台。 そりゃ、熱暴走も起こすわけだ。 せっかくバラしたので、SSDの載せ替えを実施。 OSは500GBで、ユーザ領域(/home)は1TBを使用しているもののAIのmodelをいくつも落としていたり、DockerのImageが多種置いてあるため、結構容量を食っている。 今回、2TBのSSD( Hanye SSD ¥17,800- で入手済)を用意してあるので、 1TB→2TB, 500GB→1TBと玉突きで移動させることを計画していたので実施する。 本当は、ddコマンドで移すつもりだったのだけれど、3月にお客さんのところで使いそうだったので、 ORICOのクローン機能付SSDアダプタ を入手済。 裸族のSSD版ですね…。1万円程度の品です。 これに、新品のSSDとこれまでの1TBのSSDを差し込んでクローン開始。 そこそこ時間はかかるものの、放置でOK。 ただ、HanyeのSSDについているヒートシンクが引っかかるため、一旦取り外してクローン後取り付ける必要があった。 続いて、500GB→先程の1TBに書き込み。 ただ、1TB(samsungの980pro)が、先程のクローンでかなり熱くなっていたため、速度低下が激しい感じ。1TB→2TBよりも時間がかかった感じ。 ...

AIで絵を画くのは面白いけど

StableDiffusionを試す

巷では神絵AIと言われる「Midjourny」が一躍有名になりましたが、OpenSourceで利用可能な新たなAI(学習済みモデルも含めて)が出ましたので、遊んでみました。


名前は、stable-diffusionです。
2022-08-23 に公開されたばかりなので、まだよくわからない箇所も多いですが…


すでに動作がうまく行った人たちの記述を参考に、追試です。


標準のGPUメモリでは不足していてダメそうなので、省メモリ版forkを利用しないとまずそう。
でも、まあ本家から試すことにする。


前提条件

  • CUDAが入っていること
  • anaconda3が入っていること

まずは、READMEを参考に入れていきます。

mkdir ~/temp
cd ~/temp
git clone https://github.com/CompVis/stable-diffusion
cd stable-diffusion
conda env create -f environment.yaml
conda activate ldm

これで、anacondaの仮想環境が用意される。
必要なLibraryなども一式入れてくれるので、これで完了

学習モデルデータは、ユーザー登録が必要なので、以下から先に登録しておく。
メールでの確認が届くので、リンクを踏んで完了。
  • https://huggingface.co/

でもって、

にアクセスして、
「You need to share your contact information to access this model.」項目の最後の「Access repository」を選択。
これでダウンロード可能になる。


参考のURLにしたがって、

cd ~/temp
git clone https://huggingface.co/CompVis/stable-diffusion-v-1-4-original


cloneされた「stable-diffusion-v-1-4-original」を「stable-diffusion-v1」にリネームし、
stable-diffusion/models/ldm以下に移動。

続いて、先のサイトから「sd-v1-4.ckpt」をダウンロード。
(ちなみに4GB強あるのでやや時間がかかる)

これを「model.ckpt」にリネーム。
でもって、「stable-diffusion/model/ldm/stable-diffusion-v1/」内に移動。

最終的には、以下のようになった。

../stable-diffusion/
├── LICENSE
├── README.md
├── Stable_Diffusion_v1_Model_Card.md
├── assets
├── configs
├── data
├── environment.yaml
├── latent_diffusion.egg-info
├── ldm
├── main.py
├── models
│   ├── first_stage_models
│   └── ldm
│       ├── bsr_sr
│       ├── celeba256
│       ├── cin256
│       ├── ffhq256
│       ├── inpainting_big
│       ├── layout2img-openimages256
│       ├── lsun_beds256
│       ├── lsun_churches256
│       ├── semantic_synthesis256
│       ├── semantic_synthesis512
│       ├── stable-diffusion-v1
│       │   ├── README.md
│       │   └── model.ckpt
│       └── text2img256
├── notebook_helpers.py
├── scripts
├── setup.py
└── src


実行してみる

READMEと同じコマンドを試す

conda activate ldm
python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms 

正しくクローンしていれば、動作し始めるが、予想通りGPUのメモリ不足でエラーを吐いてくる。

まさか、こんな使い方をするとは思っていなかったので、試し程度で購入した「GeForce GTX 1650」は4GBしかメモリを載んでいない。

あちこちの情報を漁ると10GB未満の場合は、うまく行かないことが多いらしい。
はぁ…。ちと環境が厳しいか!




省メモリで動作させる

forkにメモリが少なくても動作できるようにしたものが出ている。


僕は、cloneした後、optimaizedSDフォルダを先にcloneした本家に移動させました。

../stable-diffusion/
├── LICENSE
├── README.md
├── Stable_Diffusion_v1_Model_Card.md
├── assets
├── configs
├── data
├── environment.yaml
├── latent_diffusion.egg-info
├── ldm
├── main.py
├── models
│   ├── first_stage_models
│   └── ldm
│       ├── bsr_sr
│       ├── celeba256
│       ├── cin256
│       ├── ffhq256
│       ├── inpainting_big
│       ├── layout2img-openimages256
│       ├── lsun_beds256
│       ├── lsun_churches256
│       ├── semantic_synthesis256
│       ├── semantic_synthesis512
│       ├── stable-diffusion-v1
│       │   ├── README.md
│       │   └── model.ckpt
│       └── text2img256
├── notebook_helpers.py
├── optimizedSD
├── outputs
├── scripts
├── setup.py
└── src

これで準備完了

いざ再度実行!

こんどは、optimizedSD/optimized_txt2img.pyを使用する。

python optimizedSD/optimized_txt2img.py --prompt "Cyberpunk style Tokyo landscape" --H 512 --W 512 --seed 27 --n_iter 2 --n_samples 10 --ddim_steps 50

この条件だと、やはりCUDA out of memoryが出力される。

パラメータを変更する。

どうもバッチサイズを小さくするか、画像サイズを小さくしろと書かれている。

python optimizedSD/optimized_txt2img.py --prompt "Cyberpunk style Tokyo landscape" --H 256 --W 256 --seed 27 --n_iter 1 --n_samples 1 --ddim_steps 50

無事に通った!
ところが、outputフォルダを確認すると、緑色の正方形が出力されるのみ…


どうも、「--precision full」付けると良いよ〜ということなので、付加してみる。

すると、またメモリ不足と言ってきた。
どうやら精度を上げると更にメモリを喰うらしいので、さらに画像サイズを小さくする。

python optimizedSD/optimized_txt2img.py --prompt "Cyberpunk style Tokyo landscape" --H 128 --W 128 --seed 27 --n_iter 1 --n_samples 1 --ddim_steps 50 --precision full

今度は、無事に画像が生成された。



どうみても「Cyberpunk style Tokyo landscape」とは思えない…。
なんじゃこりゃ…。

もう少し、キーワードとサイズを変更したりして試してみる。

こいつは「sleeping golden retriever」で描かせた中で最もまともだった奴。


これは、それなりに見えるが…。ひどい奴は絵にもなっていない。単なるノイズっぽいものや、出鱈目なパターンのようなものも存在する。



今度は「cute chihuahua」で…。

悪夢のような…。
犬と言われれば、ギリギリそうかもというレベル。
チワワとは思えない。




もう、落書きレベルだけどもう少しやってみる。
「very cute and soothing cat」で。




犬よりも猫の方がキュートな出力な気はする。

あまりにメモリ不足が出まくって、パラメータの幅が狭いので画質向上が難しいでし。

これは、大容量のメモリを積んだGPUがないと遊ぶに遊べないですな _| ̄|○



と、自前のマシンで試せるのが面白いし、気楽に何度でも描かせるけど、ハードウェアの要求が厳しいです。



多分、これくらいを入手しないとだめかなぁ。
これで12GBメモリとGeForce RTX 3060



もう少し上だと、RTX 3080で10GB…。¥140,000弱って、普通に使うPCなら買えちゃうわけで…。


コメント

このブログの人気の投稿

Ubuntu24.04 でGUIが死んだ

VirtualBoxが異常

MEGAにも弱点があった?