在 Intel CPU 上使用 OpenVINO 运行 SmolVLM 的 3 步骤

TL;DR

Hugging Face 演示了 SmolVLM 视觉语言模型可以通过三个简单步骤在任何 Intel CPU 上部署——转换为 OpenVINO IR、可选的 INT8 量化以及推理——相较于原始 PyTorch 版本,实现最高 12 倍的首 token 时间缩短和 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")

或通过 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 s 降至 0.42 s(约提升 12 倍),并将解码吞吐量从 0.72 tokens / s 提升至 47 tokens / s(约提升 65 倍)。再加入 8 位 WOQ 可进一步将 TTFT 降至 0.247 s,吞吐量提升至 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