在 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. 資源

免責聲明: 效能會因配置與工作負載而異。結果僅反映上述硬體與軟體版本,未必代表未來所有更新的情況。

Sources