OpenVINO™ を使用してインテル® GPU で Stable Diffusion を実行する方法

この記事は、medium.com に公開されている「How to run Stable Diffusion on Intel GPUs with OpenVINO」https://medium.com/openvino-toolkit/how-to-run-stable-diffusion-on-intel-gpus-with-openvino-840714f122b4 の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊

この記事のPDF版は下記からご利用になれます。
https://www.isus.jp/wp-content/uploads/pdf/openvino_01_how-to-run-stable-diffusion-on-intel-gpus-with-openvino.pdf
※この方法は CPU 上でも実行できます。

OpenVINO™ ノートブックには、いくつかの AI サンプルが用意されています。では、Stable Diffusion を実行してモデルを OpenVINO™ 中間表現 (IR) 形式に変換し、CPU や GPU で効率的に実行できることはご存知ですか? FP32 モデルを FP16 に圧縮することにより、モデルのサイズがほぼ半分に減り、実行に必要な RAM/VRAM の量も大幅に減ります。最も重要なのは、インテル® Xe マトリクス・エクステンション (インテル® XMX – シストリック・アレイ (英語)https://www.anandtech.com/show/16895/a-sneak-peek-at-intels-xe-hpg-gpu-architecture) が有効になると、GPU 処理が大幅に高速化されることです。

以下に、ノートブックを実行して得られた結果をいくつか示します。インテル® Arc™ A770m では、(デバッグモードなしで) 1 秒あたり約 6.0 回の反復を実行できます。以下のような高品質のイメージを生成するのに、通常は約 10 秒もかかりません。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/f668b134-4452-d303-0fbc-985c8b84976b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/5912e9fb-3aad-6901-6a5d-37ad09375ae8.png)

まず、OpenVINO™ ノートブックのリポジトリー (英語)https://github.com/openvinotoolkit/openvino_notebooks/tree/main/notebooks にアクセスします。このリポジトリーに、このデモを完了するために必要なものがすべて含まれています。
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/20d2d23a-56ea-3298-70d1-215f37ddaf3f.png)

このフォルダーには、有名な Text-to-image パイプラインだけでなく、Image-to-Image 生成パイプラインも含まれています。では、実際にパイプラインを実行してみましょう。
![図4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/192e856f-13ef-167a-2b36-4e4f93428599.png)

インストール方法
最初に、OpenVINO™ ノートブックをインストールします。Windows* を使用している場合は、https://github.com/openvinotoolkit/openvino_notebooks/wiki/Windows (英語) の手順に従ってください。

Linux* を使用している場合は、https://github.com/openvinotoolkit/openvino_notebooks/wiki/Ubuntu (英語) の手順に従ってください。

具体的に説明します。

Python* 3.10.x (またはそれ以前) をインストールして仮想環境を作成します。

python3 -m venv openvino_env
source openvino_env/bin/activate #for linux
git clone コマンドを実行してリポジトリーのクローンを作成します。

git clone --depth=1 https://github.com/openvinotoolkit/openvino_notebooks.git
cd openvino_notebooks
すべてのライブラリーと依存ファイルをインストールします。

pip install -r requirements.txt
Jupyter* Notebook を実行します。

jupyter lab notebooks
![図5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/9b05ba63-7763-2f91-c173-3f9c0713c1a8.png)

コードを見てみましょう。ここでは、PyTorch* パイプラインを実際に最適化し、OpenVINO™ を使用してコードを実行します。
![図6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/819622dc-2294-46d0-b574-58b85c23837d.png)

初回のダウンロードと変換には少し時間がかかります。完了すると、IR ファイルのセットが得られます。事前トレーニング済みの、最適化されたモデルを huggingface (英語) から入手することもできます。
![図7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/f8aca1a0-3000-11a1-b3e4-b38d2d0396b3.png)

インテル® Arc™ GPU を利用可能な場合は、コードを「GPU」に変更できます。デフォルトは「AUTO」で、GPU を検出すると自動的に GPU に切り替わります。
![図8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/5d4a6682-4835-1415-8d95-671880806613.png)

ここでは、ステップを 30 に設定しました。見栄えの良い結果を得るには 50 に設定します。ここで入力テキストを変更すると、さまざまなシーンを生成できます。とてもクールな、素晴らしいイメージを生成したい場合は、コミュニティーがまとめたプロンプトをいくつか試してみてください。https://mpost.io/best-100-stable-diffusion-prompts-the-most-beautiful-ai-text-to-image-prompts/ (英語)
![図9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/c41e9949-4e48-f70b-bc11-f1125ab6d18e.png)

最後に、各ステップで何が起こったかを視覚化する GIF ファイルも生成しました。
![図10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/ae4b91be-86b7-b322-abaa-874171439c0f.png)
![openvino_01_figure15.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/77e0bc73-242f-49fe-8a48-228db6ba433e.gif)

Image-to-Image パイプライン
ノートブックで作業を続けると、プロンプトを使用して最終イメージの外観に「影響を与える」こともできることがわかります。ここでは写真を水彩画に変換する例を示しました。
![図11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/ff7a8fc8-2d0d-6d87-27fd-dbec5444010b.png)
![図12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/ae91636c-b593-6cad-77de-782e03dee1c5.png)

最新情報: Stable Diffusion v2 が OpenVINO™ ノートブックで利用できるようになりました (英語)。https://github.com/openvinotoolkit/openvino_notebooks/tree/main/notebooks/236-stable-diffusion-v2

まとめ
Stable Diffusion の動作を確認したい場合、およびインテルのハードウェアにおけるハードウェア・アクセラレーションの動作を確認したい場合は、OpenVINO™ ノートブックを使用するのが最適です。質問がある場合や、得られた結果を披露したい場合は、GitHub* のディスカッション・ボード (英語) https://github.com/openvinotoolkit/openvino_notebooks/discussionsにコメントしてください。コーディングを楽しみましょう!

OpenVINO™ ツールキットとは

AI を加速する無償のツールである OpenVINO™ ツールキットは、インテルが無償で提供しているインテル製の CPU や GPU、VPU、FPGA などのパフォーマンスを最大限に活用して、コンピューター・ビジョン、画像関係をはじめ、自然言語処理や音声処理など、幅広いディープラーニング・モデルで推論を最適化し高速化する推論エンジン / ツールスイートです。

OpenVINO™ ツールキットページでは、ツールの概要、利用方法、導入事例、トレーニング、ツール・ダウンロードまで様々な情報を提供しています。ぜひ特設サイトにアクセスしてみてください。

https://www.intel.co.jp/content/www/jp/ja/internet-of-things/openvino-toolkit.html

法務上の注意書き

インテルのテクノロジーを使用するには、対応したハードウェア、ソフトウェア、またはサービスの有効化が必要となる場合があります。

絶対的なセキュリティーを提供できる製品またはコンポーネントはありません。

実際の費用と結果は異なる場合があります。

インテルは、サードパーティーのデータについて管理や監査を行っていません。ほかの情報も参考にして、正確かどうかを評価してください。

インテルは、明示されているか否かにかかわらず、いかなる保証もいたしません。ここにいう保証には、商品適格性、特定目的への適合性、および非侵害性の黙示の保証、ならびに履行の過程、取引の過程、または取引での使用から生じるあらゆる保証を含みますが、これらに限定されるわけではありません。

本資料は、(明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず) いかなる知的財産権のライセンスも許諾するものではありません。

© Intel Corporation. Intel、インテル、Intel ロゴ、その他のインテルの名称やロゴは、Intel Corporation またはその子会社の商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。