話題の画像生成AI「Stable Diffusion」を自分PCのCPU環境で実行する方法
このブログでも紹介した単語から画像を生成するAI「Stable Diffusion」を、NVIDIA製GPU+CUDAの環境がなくても実行できる方法を見つけましたので、紹介します。
きっかけは、以下のツイート。
Stable Diffusion の ONNX エクスポートがマージされる音が聞こえた。https://t.co/nt6QFZ1Xu7
— Super PINTO (@PINTO03091) September 8, 2022
ここをたどった先にあるリンク
を参考に進めます。
なお、ここではWindows 10/11とWindows版Python(我が家のPythonのバージョンは3.7.9)で使うことを想定してます。
(1) 前準備
前回の記事(高精度な画像生成AI「Stable Diffusion」を自分のPCで動かす方法(+ google colab): EeePCの軌跡)にも載せた内容と重複しますが、まず以下のサイトに入ってHuggingFaceのアカウントを作成。
Hugging Face – The AI community building the future.
確認メールのやり取りなどが発生しますが、その辺りは順次実行します。
アカウント作成後、ログインしつつ以下のページにアクセス。
CompVis/stable-diffusion-v1-4 · Hugging Face
するとここで、以下のような文章が出てきます。
一番下にあるチェックを入れて、”Access repository”ボタンをクリック。
その後に右上にある丸いアイコンをクリックして、以下のようなメニューを出します。
その中の「Settings」をクリックし、現れるメニューの中から「Access Tokens」をクリック。
この画面で横の「Show」というボタンをクリックして文字列を表示させて、出てきたトークンをテキストファイルにでも貼り付けておきます。
これは後ほど、使います。
(2) ONNX版Stable Diffusionモデル変換
まずWindows PowerShellを開き、必要なライブラリを入れておきます。
> pip install torch torchvision torchaudio
> pip install diffusers matplotlib
> pip install onnxruntime
最低限、この辺りを入れておけば動くものと思われます。
続いて以下のサイトに行き、コードをダウンロードします。
右上の方の緑色の「Code」の中の「Download ZIP」をクリックしてダウンロードしておきます。
落ちてきたZIPファイルを展開し、それをどこか適当なところに置きます。
(「diffusers-main」というフォルダが現れてるはずです)
で、まずこの「diffusers-main」フォルダの下にある「scripts」フォルダの中から「convert_stable_diffusion_checkpoint_to_onnx.py」というコードがあるので、これをエディタで開きます。
で、こいつの69行目付近に、
というのがあるので、これの「user_auth_token=True」の「True」の部分を、先ほどのトークンに入れ替えます。
で、この後、Windows PowerShellで「diffusers-main」に入り
(cドライブのmlというフォルダの下にdiffusers-mainがある場合は、「cd c:\ml\diffusers-main」と打ち込んでEnter)
そこで、以下のコマンド
> python scripts/convert_stable_diffusion_checkpoint_to_onnx.py --model_path="CompVis/stable-diffusion-v1-4" --output_path="./sd_onnx"
を実行。
すると、stable diffusionのモデルダウンロードと、CPU環境で動かせるONNXモデルへの変換が始まります。
だいたい5GB程度のモデルがダウンロードされます。
で、上のフォルダに「sd_onnx」という謎の(?)フォルダが生成されているはずです。
(3) Stable Diffusionの実行
準備完了。では、コードを実行してみましょう。
以下のコードを「diffusers-main」フォルダに置きます。
(ここでは”onnx_stable_diff.py”とします)
なお、プロンプトのところに入っている”呪文”は、「砂漠を爆走するハイエース」です。
で、これを実行。
> python onnx_stable_diff.py
こんな具合に、バーが進行し始めたら成功。
しばらくほっとくと、3枚の画像が生成されて、1枚目から順次、表示されます。
こんな画像が出てくるはずです。
なお、フォルダ内に「test_日付_時刻_0.png」というファイル名の画像で保存されていきます。
画像をいちいちポップアップしたくない場合は、コードの最後の4行をコメントアウトしてください。
で、できた画像ですが、こんな具合。
うーん、砂漠をハイエースっぽい何かが走ってますね。
我が家のPCは、メモリー16GBを搭載したRYZEN 5 4600H(6コア)のノートPC。
で、大体8秒/イタレーションで、51イタレーションごとに一枚。つまり、1枚当たり大体6分かかります。
Google Colaboratoryの無料版でも、イタレーション辺り1.8秒なので、4倍くらいかかる計算。そう考えると遅いですが、自身のPC環境で動かせるというのは大きなメリットです。
が、メモリーは大体14GBほど消費されていたので、16GB以上のメモリーを搭載したPCでないと無理そう。そこはご注意を。
決してハードルが低くなったとは言い難いですが、どうにかローカルPCで画像生成AIを動かせる環境を手に入れることができました。
今後、いろいろと作ってみようかと思ってます。会社のPCにも導入したいです。
マイクロソフト Surface Laptop 4 13.5インチ/ Office H&B 2021 搭載 / Core i5 / 16GB / 512GB / プラチナ 5AI-00086 |
« 「AI」のダメな使い方 | トップページ | Google Pixel 6aを使って一週間 »
「数値解析系」カテゴリの記事
- Tanuki-8Bの4ビット量子化ggufモデルでRAGをやってみました(2024.09.14)
- 純日本産なローカルLLM「Tanuki-8B」を試してみた(2024.09.02)
- 東京のセールスフォースに行ってきました(2024.07.24)
- ローカルLLM「Llama-3-ELYZA-JP-8B」にいろいろ聞いてみた(2024.07.01)
- ElyzaのLlama3ベースの言語モデル「Llama-3-ELYZA-JP-8B」のRAGが予想以上に賢かった件(2024.06.27)
コメント