« 「AI」のダメな使い方 | トップページ | Google Pixel 6aを使って一週間 »

2022年9月17日 (土)

話題の画像生成AI「Stable Diffusion」を自分PCのCPU環境で実行する方法

このブログでも紹介した単語から画像を生成するAI「Stable Diffusion」を、NVIDIA製GPU+CUDAの環境がなくても実行できる方法を見つけましたので、紹介します。

きっかけは、以下のツイート。

ここをたどった先にあるリンク

[ONNX] Stable Diffusion exporter and pipeline by anton-l · Pull Request #399 · huggingface/diffusers · GitHub

を参考に進めます。

なお、ここでは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

するとここで、以下のような文章が出てきます。

Stablediffushion01

一番下にあるチェックを入れて、”Access repository”ボタンをクリック。

その後に右上にある丸いアイコンをクリックして、以下のようなメニューを出します。

Stablediffushion01a

その中の「Settings」をクリックし、現れるメニューの中から「Access Tokens」をクリック。

Stablediffushion01b

この画面で横の「Show」というボタンをクリックして文字列を表示させて、出てきたトークンをテキストファイルにでも貼り付けておきます。

これは後ほど、使います。

(2) ONNX版Stable Diffusionモデル変換

まずWindows PowerShellを開き、必要なライブラリを入れておきます。

> pip install torch torchvision torchaudio

> pip install diffusers matplotlib

> pip install onnxruntime

最低限、この辺りを入れておけば動くものと思われます。

続いて以下のサイトに行き、コードをダウンロードします。

GitHub - huggingface/diffusers: 🤗 Diffusers: State-of-the-art diffusion models for image and audio generation in PyTorch

右上の方の緑色の「Code」の中の「Download ZIP」をクリックしてダウンロードしておきます。

落ちてきたZIPファイルを展開し、それをどこか適当なところに置きます。

(「diffusers-main」というフォルダが現れてるはずです)

で、まずこの「diffusers-main」フォルダの下にある「scripts」フォルダの中から「convert_stable_diffusion_checkpoint_to_onnx.py」というコードがあるので、これをエディタで開きます。

で、こいつの69行目付近に、

def convert_models(model_path: str, output_path: str, opset: int):
    pipeline = StableDiffusionPipeline.from_pretrained(model_path, use_auth_token=True)
    output_path = Path(output_path)

というのがあるので、これの「user_auth_token=True」の「True」の部分を、先ほどのトークンに入れ替えます。

def convert_models(model_path: str, output_path: str, opset: int):
    pipeline = StableDiffusionPipeline.from_pretrained(model_path, use_auth_token="自分のトークン")
    output_path = Path(output_path)

で、この後、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”とします)

from torch import autocast
from diffusers import StableDiffusionOnnxPipeline
import matplotlib.pyplot as plt
import datetime
now = datetime.datetime.now()
model = StableDiffusionOnnxPipeline.from_pretrained("./sd_onnx", provider="CPUExecutionProvider")
prompt = "a scene of the movie that Hiace running at full speed in the desert , realistic photo, taken with Canon 5D Mk4"
num = 3
for i in range(num):
    image = model(prompt)["sample"][0]
    image.save("test_" + now.strftime('%Y%m%d_%H%M%S') + "_" + str(i) + ".png")

for i in range(num):
    plt.imshow(plt.imread("test_" + now.strftime('%Y%m%d_%H%M%S') + "_" + str(i) + ".png"))
    plt.axis('off')
    plt.show()

なお、プロンプトのところに入っている”呪文”は、「砂漠を爆走するハイエース」です。

で、これを実行。

> python onnx_stable_diff.py

Stable_diffusion_cpu00

こんな具合に、バーが進行し始めたら成功。

しばらくほっとくと、3枚の画像が生成されて、1枚目から順次、表示されます。

Stable_diffusion_cpu01

こんな画像が出てくるはずです。

なお、フォルダ内に「test_日付_時刻_0.png」というファイル名の画像で保存されていきます。

画像をいちいちポップアップしたくない場合は、コードの最後の4行をコメントアウトしてください。

で、できた画像ですが、こんな具合。

Test_20220916_181817_0

Test_20220916_183849_1

うーん、砂漠をハイエースっぽい何かが走ってますね。

我が家の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を使って一週間 »

数値解析系」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« 「AI」のダメな使い方 | トップページ | Google Pixel 6aを使って一週間 »

当ブログ内検索

スポンサード リンク

ブログ村

無料ブログはココログ