在 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. 资源
- 笔记本: 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
免责声明: 性能因配置和工作负载而异。结果基于上述硬件和软件版本,可能不代表所有未来的更新。