Optimum-Intel OpenVINO と複数インテルのハードウェアを使用した Stable Diffusion v2.1#

この Jupyter ノートブックは、ローカルへのインストール後にのみ起動できます。

GitHub

このノートブックは、さまざまなハードウェアのさまざまな精度モデルでパフォーマンスを確認する方法を示します。このノートブックは、Optimum-Intel-OpenVINO の使用例を説明するために作成されたものであり、複数回実行するようには最適化されていません。

image0

目次:

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 つの要素を統合する必要があります。

image

画像#

この例で使用される基本モデルは、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]
../_images/stable-diffusion-v2-optimum-demo-with-output_11_1.png
del ov_pipe 
gc.collect()