いわゆる「AI」をPCで運用するには、GPUとVRAMをはじめとする潤沢な計算リソースが求められる。Intel OpenVINO*1を利用する"bes-dev/stable_diffusion.openvino"*2が登場し、普及機レベルのPCでも画像生成AIを動作させることができるようになった。
さらに"intel/openvino-ai-plugins-gimp"が登場し、GIMPプラグインのGUIを介して、Stable Diffusionを操作できるようになった。Stable Diffusionを含む、5つの独自プラグインが用意されている。
github.com
この投稿では、GPUを搭載していない、ごく一般的なRAM=8GBのWindows PCで"intel/openvino-ai-plugins-gimp"をインストールし、動作させるまでの手順を紹介する。
コンテナやWSLも用いない。RAM=8GBという、非常に制約のある環境においては、それらを用いるよりも直接動作させた方が良い。直接プログラムを動かすことで、RAM=8GBという制約のある環境においても、SDOVを安定して動作させることができる。
コンテナやWSLを用いる場合、それらに対する計算リソースの割り当てをWindows OSがコントロールする。結果として発生するのがOOM Kill、つまりメモリ不足に伴うプロセスの強制終了だ。RAM割当を管理したり、OOM Killを抑制したり、対処法はあるのだが推奨される方法ではない。
コンテナに対して --oom-kill-disable を指定したりするようなことはやめてください。
メモリ、CPU、GPU に対する実行時オプション — Docker-docs-ja 19.03 ドキュメント
この投稿では、Microsoft Surface Pro 4を使用している。次のスペックを有しており、これでも画像1枚を10~12分程度で出力できる。
OS | Windows 11 Pro 22H2 |
CPU | Intel Core i7-6650U |
RAM | 8GB |
Storage | SSD: 256GB SD card: 32GB |
ツール
作業を始めるに際し、GIMPを含め次のツールを利用する。この投稿で使用しているバージョンを、"version"に示している。
version | |
---|---|
GIMP | 2.99.14 |
Visual Studio 2022 | 17.5.1 |
Python | 3.10.11 |
GitHub Desktop Git command |
3.2.0 |
GIMP
GIMPは一般向けリリースではなく、開発版を利用すること。この投稿時点での最新バージョンは2.99.14だ。一般向けリリースの最新版は2.10.34だが、これでは動作しない。
既に一般向けリリースがインストールされていたとしても、開発版と並行利用することができる。開発版のインストールが一般向けリリースを上書きすることはない。
Visual Studio、C++ build tools
Pythonパッケージのインストールに際し、C++ビルドツールが必要となる。このツールはVisual Studio、あるいは"Build Tools for Visual Studio"に収録されている。作業を開始する前に、いずれかを適切なオプションとともにインストールしておく。
Visual Studioの場合、次のようにアクセスして「C++によるデスクトップ開発」をインストールする。オプションはデフォルトで良い。
Tools > Get Tools and Features...
Python
PythonはMicrosoft Storeからダウンロード、インストールすることができる。バージョン「3.10」をインストールする。
最新版は「3.11」だが、これは使用できない。Intel OpenVINO*3がまだ対応していないのだ。次期バージョンで対応するということだ。
Python 3.11 is in progress and will be available in 2023.0 release.
GitHub Desktop、あるいはGit command
プログラムとモデルのダウンロードにGitを用いる必要がある。Gitコマンドが利用できないのであれば、GitHub Desktopをダウンロード、インストールすると良い。
desktop.github.com
フォルダ
"intel/openvino-ai-plugins-gimp"の実態はPython仮想環境だが、GIMPプラグインとして機能するため、永続的に運用する前提でフォルダ構成を決める。
このプログラムはインストール用のbatファイル(install.bat)を用意しており、Python仮想環境名、パッケージの導入が定義されているのだが、さらに後続するPythonスクリプト中でもパッケージ導入、フォルダ作成などが定義されており、下手にユーザー独自の設定を介在させない方が良い。
この投稿では作業フォルダを除き、デフォルト構成を踏襲している。
path | |
---|---|
作業フォルダ | c:\myapp |
git cloneしたフォルダ インストール・フォルダ |
c:\myapp\openvino-ai-plugins-gimp |
Python仮想環境 | c:\myapp\openvino-ai-plugins-gimp\gimpenv3 |
weightを保存 | %userprofile%\openvino-ai-plugins-gimp\weights\ |
モデルを保存 | %userprofile%\openvino-ai-plugins-gimp\weights\stable-diffusion-ov\stable-diffusion-1.4 |
プラグインの場所 | C:\myapp\openvino-ai-plugins-gimp\gimpopenvino\plugins |
"intel/openvino-ai-plugins-gimp"
プログラムのダウンロード
作業フォルダに移動し、GitHub Desktopあるは、Gitコマンドでプログラムをダウンロードする。
git clone git clone https://github.com/intel/openvino-ai-plugins-gimp.git
"install.bat"の編集と実行
インストール・フォルダ内の"install.bat"について、次の記述に含まれるパスを、インストール・フォルダの絶対パスへ書き直す。
🔎書き直し前
gimpenv3\Scripts\python.exe -m pip install openvino-ai-plugins-gimp\.
🔎書き直し後
gimpenv3\Scripts\python.exe -m pip install C:\myapp\openvino-ai-plugins-gimp.
相対パスを指定した場合、"install.bat"の実行場所次第では、本来意図されていない場所で導入作業が実施されることになる。そのような事態を避けるため、導入場所を明示している。
編集したbatファイルを実行する。
![]() |
![]() |
weights情報のコピー
batファイルの一連の作業が終了したら、次の「コピー元」配下にある全データを、「コピー先」配下へコピーする。
🔎コピー元
C:\myapp\openvino-ai-plugins-gimp\weights\
🔎コピー先
%userprofile%\openvino-ai-plugins-gimp\weights\
GitHubではWindows環境変数である「%userprofile%」を含む引数を指定したxcopyコマンドを実行しているが、これは注意したほうが良い。コマンドプロンプトで実行するには問題ないが、PowerShellで実行する場合、環境変数の記述「$env:userprofile」のように変更しなければならない。
フォルダ中の全データをコピー&ペーストするだけなのだから、File Explorer上の手作業で済ませればよい。
Stable-Diffusion-1.4モデルのダウンロード、コピー
適当なフォルダに移動し、GitHub Desktopあるは、Gitコマンドでプログラムをダウンロードする。
git clone https://huggingface.co/bes-dev/stable-diffusion-v1-4-openvino/tree/main
ダウンロードした全ファイルを、次のフォルダへコピーする。
%userprofile%\openvino-ai-plugins-gimp\weights\stable-diffusion-ov\stable-diffusion-1.4
Stable Diffusionの実行
Stable Diffusion設定画面の主要項目は以下の通りだ。
Enter text to generate imge | いわゆるプロンプト 求める画像の説明を指定する |
Negative Prompt | いわゆるプロンプト 求める画像に反映したくない要素を指定する |
Number of Inherence steps | 推論回数 回数が多いほど、画像出力までの時間が長くなる |
Seed | 乱数シード 乱数生成の再現を担保する |
この投稿で使用しているSurface Pro 4の様なスペックの環境を前提としたとき、画像出力までに要する時間、推論回数は以下の通りだ。
推論回数 | 出力時間 |
---|---|
8 | 3分 |
16 | 6分 |
32 | 10分 |
50 | 15分 |
なるべく少ない推論回数で試行錯誤し、方向性が定まったら、その時のSeedを引き継いで推論回数だけを増やすと、効率よく画像出力できる。次の画像は、推論回数=8, 16, 32, 50と変化させて出力したものだ。
prompt | Cleopatra, art of Mucha and Utamaro, in style of movie |
negtive prompt | ugly, deformed |
![]() |
![]() |
![]() |
ミュシャ+歌麿風にクレオパトラを描写させるべく推論させた。推論回数が進むほどに、ラフから詳細化していくかのように、
- 背景、装飾→よりミュシャ的に
- 顔立ち→よりハーフ的に
特定部位の特徴が鮮明になっていくのが理解できる。より顔のアップが描写されるようプロンプトを微調整し、推論回数=50で仕上げたのが冒頭の画像だ。