MacPro mid 2012でStable Diffusionを色々いじってCPU処理化した話
Diffusion Beeをいじっていて気がついたのだけど、処理中に画面がカクついて他の作業がやりにくい。まぁ、GPUリソースを最大限に使っているのだから当たり前です。であれば、多少時間がかかろうともデュアルCPUを活用したほうが快適になるのでは?
ということで、Stable DiffusionをCPUモードで動かすことを考えました(本当はDiffusion BeeをCPUモードで動かせないかとかも考えた)。多分、すでに試行されている方がいるだろうと思って検索したらいらっしゃいました。ということで、これらを参考に MacPro mid 2012 でCPUモードでStable Diffusionを実行する環境を整えてみました。
まず、当方の環境はこんな感じ。
DiffusionBeeを動作させるためにMontereyを苦労して導入した話は前回書きました。
この後必要なこと
・Stable Diffusionのインストール
・HomeBrewのインストール
・condaコマンドとrustを導入して環境設定
・Stable Diffusion環境構築
・CPUモードで動くようにコードを改造
・ターミナルからの実行
すべてターミナルでの作業になります。
・HomeBrewのインストール
こちらのサイトを参考に、インストールしました。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
ターミナルから上記スクリプトを実行します。
インストール中にパスワードを聞かれるので、入力します。
インストールには少し時間がかかります。
・condaコマンドとrustを導入して環境設定
これはこちらのサイトを参考に設定しました。
brew install anaconda miniconda rust
conda init シェル名
これだけです。この後、ターミナルを新しく立ち上げて、続きの作業はそちらで行います。
・Stable Diffusion環境構築
・CPUモードで動かすようにコードを修正
これはこちらのサイトを参考にしました。
こちらのサイトを参考に、コードの修正を行いました。
ちなみに、環境構築でのテストトレーニングの時間比較は以下のようになりました。
CPUの場合(抜粋):
(ldm) % python pytorch_m1_macbook.py --device cpu
Epoch 1 / 5: time = 372.56[s], loss = 171.24
Epoch 2 / 5: time = 751.03[s], loss = 138.33
Epoch 3 / 5: time = 1136.31[s], loss = 124.63
Epoch 4 / 5: time = 1523.92[s], loss = 114.96
Epoch 5 / 5: time = 1907.73[s], loss = 106.29
Train time on cpu: 1907.73[s] (Train loss = 106.29)
Test time on cpu: 78.94[s](Test loss = 21.02)
CPUリソースを見てると49%辺りで張り付いているので1CPUしか使っていなさそう。
GPUの場合(抜粋):
(ldm) % python pytorch_m1_macbook.py --device mps
Epoch 1 / 5: time = 235.74[s], loss = 169.60
Epoch 2 / 5: time = 449.02[s], loss = 136.42
Epoch 3 / 5: time = 662.23[s], loss = 121.84
Epoch 4 / 5: time = 875.09[s], loss = 113.18
Epoch 5 / 5: time = 1085.33[s], loss = 105.58
Train time on mps: 1085.33[s] (Train loss = 105.58)
Test time on mps: 79.45[s](Test loss = 20.86)
CPU使用率は5%前後。まぁ、GPUの方が倍ぐらい速いかな。
・ターミナルからの実行
そして実行。サンプルとして下記のプロンプトで試しました。
python scripts/txt2img.py --prompt "two cats sleeping together" --plms --precision full
CPUリソースは40〜60%をフラフラしています。そして、画面のチラツキやウィンドウ移動の遅延などは感じられません。なかなかいい感じ。そして待つこと2時間ぐらいでしょうか。イラストが生成されてきました。
生成された画像は、
outputs/txt2img-samples
フォルダに格納されます。
なんか一部怖い画像もありますが、まぁこんなものなのでしょう。
実際やってみるとそれほど引っかかるところはなく、condaの実行時に新たなターミナルを立ち上げないと環境が反映されないところで悩んだくらいでした。
これでCPUベースでStable Diffusionが使えるようになったわけですが、正直、CUIベースで呪文をちまちま打ち込んでいくのか、GUIベースでキーワードを打ち込んでいくのか、どっちが良いのか分からないです。(前者は呪文を考えるのが面倒な代わりに、処理中も作業ができる。後者は処理中は他の作業ができないが、キーワードで打ち込んでいけばいいので楽。)
まぁ、とりあえず実行環境を用意した段階なので、色々勉強していこうと思います。
参考サイト集
・Homebrewのインストール
・condaコマンドとrustの導入
・Intel MacでStable diffusionを動かす
・model ダウンロード
<おわり>
この記事が気に入ったらサポートをしてみませんか?