在 Intel CPU 上使用 OpenVINO 以 3 步驟執行 SmolVLM
TL;DR
Hugging Face 示範,SmolVLM 視覺語言模型可在任何 Intel CPU 上透過三個簡單步驟部署──轉換為 OpenVINO IR、可選的 INT8 量化,以及推論──相較於原始 PyTorch 版本,可將首次產生 token 的時間縮短至約 12 倍,並將解碼吞吐量提升至約 65 倍。
1. 使用 Optimum‑Intel 部署模型
要點: 安裝 optimum-intel[openvino] 和 transformers 提供統一的 CLI 與 Python API,會自動處理 OpenVINO 匯出與執行時執行。
pip install optimum-intel[openvino] transformers==4.52.*
optimum 套件抽象化低階 OpenVINO 細節,讓您專注於模型轉換與量化。
2. 步驟說明
2.1 轉換為 OpenVINO IR
要點: 模型必須先轉換為 OpenVINO 的中介表示 (IR),才能進行量化或在 Intel 硬體上執行。
- CLI 轉換
optimum-cli export openvino -m HuggingFaceTB/SmolVLM2-256M-Video-Instruct smolvlm_ov/ - Python 即時轉換
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 量化選項
要點: 後訓練量化可減少模型大小與延遲;權重量化 (WOQ) 是低風險的第一步,而靜態量化則可進一步加速視覺編碼器,代價是略微的精度損失。
選項 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")
Or via CLI:
optimum-cli export openvino -m HuggingFaceTB/SmolVLM2-256M-Video-Instruct \
--weight-format int8 smolvlm_int8/
選項 2 – 靜態量化(混合)
- 在代表性資料集(例如 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 讓您在第 4 代 Intel Xeon(Sapphire Rapids)系統上試驗原始、WOQ 與混合量化模型。
3. 效能評估
要點: 僅 OpenVINO 轉換即可將首次產生 token 的時間(TTFT)從 5.15 秒縮短至 0.42 秒(≈12 倍),解碼吞吐量從 0.72 tokens / s 提升至 47 tokens / s(≈65 倍)。再加入 8 位元 WOQ 可進一步將 TTFT 降至 0.247 秒,吞吐量提升至 63.9 tokens / s。
| 配置 | TTFT (秒) | TPOT (秒) | 端到端延遲 (秒) | 吞吐量 (tokens/s) |
|---|---|---|---|---|
| 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
- 互動 Space: 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
免責聲明: 效能會因配置與工作負載而異。結果僅反映上述硬體與軟體版本,未必代表未來所有更新的情況。