Optimum-Intel OpenVINO と複数インテルのハードウェアを使用した Stable Diffusion v2.1#
この Jupyter ノートブックは、ローカルへのインストール後にのみ起動できます。
このノートブックは、さまざまなハードウェアのさまざまな精度モデルでパフォーマンスを確認する方法を示します。このノートブックは、Optimum-Intel-OpenVINO の使用例を説明するために作成されたものであり、複数回実行するようには最適化されていません。
目次:
Optimum Intel は、インテル® アーキテクチャー上のエンドツーエンドのパイプラインを高速化するため、トランスフォーマーおよび Diffuser ライブラリーと、インテルが提供するさまざまなツールとライブラリー間のインターフェイスです。詳細については、このリポジトリーをご覧ください。
注: 別の環境を作成し、そこで次のインストール・コマンドを実行することを推奨します。
%pip install -q "optimum-intel[openvino,diffusers]@git+https://github.com/huggingface/optimum-intel.git" "ipywidgets" "transformers>=4.33.0" "torch>=2.1" --extra-index-url https://download.pytorch.org/whl/cpu
Stable Diffusion パイプラインは、トークナイザーを備えたテキスト・エンコーダー・モデル、スケジューラーを備えた UNet モデル、およびデコーダーモデルとエンコーダー・モデルを備えたオート・エンコーダーの 6 つの要素を統合する必要があります。
画像#
この例で使用される基本モデルは、stabilityai/stable-diffusion-2-1-base です。このモデルは、OpenVINO を Optimum に統合することで CPU またはインテル GPU での推論を高速化するために、OpenVINO 形式に変換されました。
import warnings
warnings.filterwarnings("ignore")
利用可能なデバイスの情報を表示#
available_devices
プロパティーには、システム内で使用可能なデバイスが表示されます。ie.get_property()
の “FULL_DEVICE_NAME” オプションはデバイスの名前を表示します。個別 GPU の ID 名を確認します。統合 GPU (iGPU) と専用 GPU (dGPU) がある場合、iGPU の場合は device_name="GPU.0"
、dGPU の場合は device_name="GPU.1"
と表示されます。"GPU"
に割り当てられる iGPU または dGPU のいずれかのみがある場合。
import openvino as ov
core = ov.Core()
devices = core.available_devices
for device in devices:
device_name = core.get_property(device, "FULL_DEVICE_NAME")
print(f"{device}: {device_name}")
CPU: Intel(R) Core(TM) Ultra 7 155H
GPU: Intel(R) Arc(TM) Graphics (iGPU)
NPU: Intel(R) AI Boost
推論パイプラインの構成#
OpenVINO を使用して推論を実行するデバイスをドロップダウン・リストから選択します。
import ipywidgets as widgets
device = widgets.Dropdown(
options=core.available_devices + ["AUTO"],
value="CPU",
description="Device:",
disabled=False,
)
device
Dropdown(description='Device:', index=1, options=('CPU', 'GPU', 'NPU', 'AUTO'), value='GPU')
OVStableDiffusionPipeline
を使用した選択デバイスでの完全精度モデルの使用#
from optimum.intel.openvino import OVStableDiffusionPipeline
# Hugging Face Hub から変換済みの SD v2.1 モデルをダウンロード
name = "helenai/stabilityai-stable-diffusion-2-1-base-ov"
ov_pipe = OVStableDiffusionPipeline.from_pretrained(name, compile=False)
ov_pipe.reshape(batch_size=1, height=512, width=512, num_images_per_prompt=1)
ov_pipe.to(device.value)
ov_pipe.compile()
import gc
# 画像を生成
prompt = "red car in snowy forest, epic vista, beautiful landscape, 4k, 8k"
output_ov = ov_pipe(prompt, num_inference_steps=17, output_type="pil").images[0]
output_ov.save("image.png") output_ov
0%| | 0/18 [00:00<?, ?it/s]

del ov_pipe
gc.collect()