CPUで1111生成

Last-modified: 2024-02-24 (土) 22:04:40

GPUがないならCPUで動かせばいいじゃない

AIでの画像生成といえば猫も杓子もGPUだが、AIが動作するためには並行計算がないと困る→その計算はGPUが得意、というだけの話であり、
並行計算を利用しなくてもよいのならCPUで動作させることは理論上は可能。で、各種ツール上でも普通にできる。

以下諸問題

遅い

  • 「100個の演算装置に一気に処理させて1秒」の処理を「1個の演算装置」に任す、といった感じなので、単純に100倍くらいかかる
  • CPUでのマルチコア処理自体はしてくれるが速くなった感はない。処理中ずっとCPUが天井なので、通常利用にも支障が出る
  • CPU生成してる人100人に脳内で聞きましたところ全員が生成中はサブPCかスマホでネットしていた。そんなもんである

重い

  • 処理待ち中のデータが全部メモリに乗るので、メインメモリを圧迫する。8GBではスワップが発生して無理。16GBどうしても要る
  • 今後主流になると思われるXLは初期読み込み時間だけでカップ麺が食べられる(16GBではスワップ)。処理中はおかわりもできるぞ!

辛い

  • GPUユーザーにとっての1分は「テスト画像の束が得られる時間」だが、CPUユーザーには「テスト画像1枚の進捗が10%進む時間」である
  • 皆がテスト結果をぺらぺらめくって「なるほど…」とか「じゃあこの画像使おう」とかしている間、お茶を飲むことしかできない
  • 画像生成において「黄金のプロンプトを使えば1回で完璧な画像が作れる」は虚像であり、設定理解も含め何十回もの試行が必要

まあそれでも手元で画像生成が動作するメリットは計り知れない。
世間が煽る画像生成とはいささか異なるが、設定と動作を分かったうえでなら小さいテスト画像の束を得ることはできる(そこからの修正は実時間長いので愛で)。
思ったほどでなければアンインストールすればいいので、一度試してみてもいいのではないか。なんだったらいいお茶とかも紹介しよう。

なおメモリ8GBは素直に増設。ノートは諦めてWebサービスを。HDDのみもちょっと無理。ControlNetで手足修正?いやあ厳しいっすねえ

AUTOMATIC1111版・CPUで画像生成させるための設定

932無題Name名無し 23/05/13(土)21:49:35No.3319No.3319 ng+

>グラフィックボードが乗ってない普通のパソコンに入れてみたら起動すら出来ないのね。
いや、できるよ。
(うちの環境が現在そう。1枚10分近くかかる激重だけど)

①「webui-user.bat」を編集。
「set COMMANDLINE_ARGS=」の行にcpuを使うためのコマンドを記載。

set COMMANDLINE_ARGS=--use-cpu all --no-half --no-half-vae --skip-torch-cuda-test

②「launch.py」を編集。
torch_command = os.environ.get('TORCH_COMMAND」と記載されている所を探して以下に書き換え

torch_command = os.environ.get('TORCH_COMMAND', "pip install torch torchvision torchaudio")

※新しい1111(V1.3.1)では②のファイルは「stable-diffusion-webui\modules\launch_utils.py」に変更になって
222行目にある

torch_index_url = os.environ.get('TORCH_INDEX_URL', "https://download.pytorch.org/whl/cu118")

を以下に書き換え

torch_index_url = os.environ.get('TORCH_INDEX_URL', "https://download.pytorch.org/whl/cpu")

NMKD版・CPUで画像生成させるための設定

題名に1111って書いてあって明らかに場違いだと思うが、一応残しておく。
そしてCPUに切り替える設定は1111よりとても簡単。コマンド書き換えなどいらない。
①まず右上の設定を開く。
②CUDA Deviceが、「Automatic」になっていると思います。
そこの欄を選択して「CPU(Experimental, may not work at all)」を選択してください。
以上で終わり。

最後に

当然だけど、CPUで生成するとなるとめちゃくちゃ時間がかかる。
そしてCPUが常時100%になるのでまともに何もできないと思う。
そこだけ気を付けて!!!(ほかにもあると思うけど)

 

 

よくある質問の体の備忘録

途中で処理が遅くなることがある・気がつくとCPU使用率が下がっている

よくある注意ポイントは2点。

1. OS側で、CPUの高使用率継続稼働を許可する設定になっていない

Windowsのコントロールパネルからの電源オプションで「高パフォーマンス」にする。

  • 上記高パフォーマンスモードの詳細な電源設定で「プロセッサの電源管理」を開く
  • で、高パフォーマンスモードの「最小のプロセッサの状態」「最大のプロセッサの状態」的な項目が100%なのを確認
    • OSで操作違うので「電源オプションを高パフォーマンスにする」とかで適当に調べて
    • これでだいたいタスクマネージャ表示で70%くらいは行くはず

なお、連続使用によってCPUがやばい温度にならないようにCPU処理速度を下げる安全処理(サーマルスロットリング)は制御できない。水冷CPUクーラーをつけるか、新しいパソコン(GPUつき!!)を買うかしてくれ。

2. 「有人操作中」判定による高CPU使用率カット処理を、極力人力で避ける

要は、「ぱそこんをつかってるひとがいる」と判断されると、その人を優先し、バックグラウンド処理に割くCPU処理率を下げるという処理がある(パソコンの前でブラウザ操作などをする人のためにCPUを「空ける」)。
これに引っかかると通常の2~3倍くらいは時間がかかってしまう。

  • 画像生成をしているマシンでネット閲覧などは極力しない
    • または、生成がかなり遅くなることを覚悟して使う
  • WebUIのブラウザ画面を開きっぱなしも通常該当する。最低でも最小化したい
  • 理屈上はPython処理側のOS優先度を高くすればいいんだが、その状態でまともに動くように作ってあるアプリはたぶんないので全くお勧めできない

メモリを32GBに増設したら少しは速くなりますか

デュアルチャンネルの16GBx2=32GBにしてメインメモリの速度測定値が2倍近くになると生成に影響があるかの例:

  • Core i7-12700での512x512の生成のStep1周の速度が2秒減った。全体で15-20%くらい高速化してる気がする
  • 512x512をHires.fixで縦横2倍にするのがスワップ発生を気にせず行えて精神衛生上たいへんよい(速くなるとは言ってない)
  • XLモデルは読み込み完了の時点でメモリ30GBくらいいってる
  • この状態で1024x1024の生成を指定するとCore i7-12700では1stepあたり1分くらいで一応動く。一応…