OpenVINO を使用して Intel CPU で SmolVLM を 3 ステップで実行する
TL;DR
Hugging Face は、SmolVLM ビジョン‑ラングエッジモデルを任意の Intel CPU 上で 3 つのシンプルな手順(OpenVINO IR への変換、オプションの INT8 量子化、推論)でデプロイできることを示し、元の PyTorch バージョンと比較して 最初のトークンまでの時間(TTFT)を最大 12 倍短縮、デコードスループットを最大 65 倍向上させます。
1. Optimum‑Intel でモデルをデプロイする
要点: optimum-intel[openvino] と transformers をインストールすると、OpenVINO のエクスポートとランタイム実行を自動的に処理する統一 CLI と Python API が提供されます。
pip install optimum-intel[openvino] transformers==4.52.*
optimum パッケージは低レベルの OpenVINO 詳細を抽象化し、モデルの変換と量子化に集中できるようにします。
2. ステップバイステップガイド
2.1 OpenVINO IR への変換
要点: モデルは Intel ハードウェア上で量子化または実行できるようになる前に、OpenVINO の中間表現(IR)に変換する必要があります。
- CLI 変換
optimum-cli export openvino -m HuggingFaceTB/SmolVLM2-256M-Video-Instruct smolvlm_ov/ - Python on‑the‑fly 変換
from optimum.intel import OVModelForVisualCausalLM model_id = "HuggingFaceTB/SmolVLM2-256M-Video-Instruct" model = OVModelForVisualCausalLM.from_pretrained(model_id) model.save_pretrained("smolvlm_ov")
両方の方法で同じ OpenVINO IR ファイル(.xml と .bin)が生成されます。
2.2 量子化オプション
要点: ポストトレーニング量子化はモデルサイズとレイテンシを削減します。Weight‑Only Quantization(WOQ)はリスクが低い最初のステップであり、Static Quantization はビジョンエンコーダをさらに高速化しますが、若干の精度トレードオフが伴います。
オプション 1 – 重みのみ量子化 (WOQ)
- 重みだけを INT8 に量子化し、アクティベーションは FP32 のままにします。
- 精度への影響は最小で、速度向上は控えめです。
- OpenVINO 2024.3 以降、重みが INT8 の場合、ランタイムでのアクティベーション量子化が自動的に適用され、さらなる速度向上が得られます。
from optimum.intel import OVModelForVisualCausalLM, OVWeightQuantizationConfig
q_config = OVWeightQuantizationConfig(bits=8)
q_model = OVModelForVisualCausalLM.from_pretrained(model_id, quantization_config=q_config)
q_model.save_pretrained("smolvlm_int8")
CLI で実行する場合:
optimum-cli export openvino -m HuggingFaceTB/SmolVLM2-256M-Video-Instruct \
--weight-format int8 smolvlm_int8/
オプション 2 – 静的量子化 (Mixed)
- 代表的なデータセット(例: contextual データセットから 50 サンプル)でキャリブレーションを行った後、重みとアクティベーションの両方を量子化します。
- ビジョンエンコーダに静的 INT8 を適用し、言語モデルの重みは WOQ 精度のままにします。
- マルチイメージや短文回答シナリオで最大のレイテンシ削減を実現します。
from optimum.intel import (
OVModelForVisualCausalLM,
OVPipelineQuantizationConfig,
OVQuantizationConfig,
OVWeightQuantizationConfig,
)
q_config = OVPipelineQuantizationConfig(
quantization_configs={
"lm_model": OVWeightQuantizationConfig(bits=8),
"text_embeddings_model": OVWeightQuantizationConfig(bits=8),
"vision_embeddings_model": OVQuantizationConfig(bits=8),
},
dataset=dataset,
num_samples=num_samples,
)
q_model = OVModelForVisualCausalLM.from_pretrained(model_id, quantization_config=q_config)
q_model.save_pretrained("smolvlm_static_int8")
2.3 推論の実行
要点: 変換(およびオプションの量子化)後は、generate 呼び出し一つで推論が完了します。device="gpu" を追加すると、利用可能な場合に Intel GPU 加速が有効になります。
generated_ids = q_model.generate(**inputs, max_new_tokens=100)
generated_texts = processor.batch_decode(generated_ids, skip_special_tokens=True)
print(generated_texts[0])
GPU の場合:
model = OVModelForVisualCausalLM.from_pretrained(model_id, device="gpu")
公開されている Hugging Face Space では、元のモデル、WOQ、Mixed‑Quantized の各バージョンを第 4 世代 Intel Xeon(Sapphire Rapids)システム上で試すことができます。
3. パフォーマンス評価
要点: OpenVINO への変換だけで、最初のトークンまでの時間(TTFT)を 5.15 s から 0.42 s(約 12 倍高速)に短縮し、デコードスループットを 0.72 tokens / s から 47 tokens / s(約 65 倍)に向上させます。8‑bit WOQ を加えると TTFT がさらに 0.247 s に減少し、スループットは 63.9 tokens / s に上がります。
| 構成 | TTFT (秒) | TPOT (秒) | エンドツーエンドレイテンシ (秒) | スループット (tokens/秒) |
|---|---|---|---|---|
| PyTorch | 5.150 | 1.385 | 25.927 | 0.722 |
| OpenVINO | 0.420 | 0.021 | 0.738 | 47.237 |
| OpenVINO 8‑bit WOQ | 0.247 | 0.016 | 0.482 | 63.928 |
ベンチマークは、Intel Core Ultra 7 265K(20 スレッド、64 GB DDR5)上で単一画像入力を使用し、Ubuntu 24.10 と OpenVINO 2025.2.0 で実行しました。
プラットフォーム構成(抜粋): Intel Core Ultra 7 265K、20 スレッド、64 GB DDR5 @ 6400 MHz、OpenVINO 2025.2.0、optimum‑intel 1.25.2、transformers 4.53.3。
4. リソース
- ノートブック: https://github.com/huggingface/optimum-intel/blob/main/notebooks/openvino/vision_language_quantization.ipynb
- インタラクティブスペース: https://huggingface.co/spaces/echarlaix/vision-langage-openvino
- ウェビナー録画: https://web.cvent.com/event/d550a2a7-04f2-4a28-b641-3af228e318ca/regProcessStep1?utm_campaign=speakers4&utm_medium=organic&utm_source=Community
- Optimum‑Intel OpenVINO ドキュメント: https://huggingface.co/docs/optimum-intel/en/openvino/inference
免責事項: パフォーマンスは構成やワークロードにより変動します。結果は上記ハードウェア・ソフトウェア バージョンに基づくもので、将来のすべての更新を保証するものではありません。