使用 Optimum-Intel 和 OpenVINO GenAI 优化与部署 Hugging Face 模型

Hugging Face 与 Intel 推出了使用 Optimum-Intel 和 OpenVINO GenAI 的工作流,以在 Intel 硬件上优化并部署 Transformers 模型。该方法使开发者能够将模型从基于 Python 的训练环境迁移到边缘的高性能 C++ 或 Python 推理,并且依赖最小化。

通过 OpenVINO 实现高效的边缘部署

OpenVINO 被设计为 C++ AI 推理解决方案,特别适用于需要最小化软件依赖的边缘和客户端部署。GenAI API 的引入进一步简化了大型语言模型(LLM)在应用中的集成,提升性能并降低在 Python 可能不理想的环境中的部署复杂度。

将 Transformers 模型导出为 OpenVINO IR

通过 Optimum-Intel 项目,Hugging Face Transformers 模型可以导出为 OpenVINO 中间表示(IR)格式。此过程使用包装器(例如 OVModelForCausalLM),其行为与 🤗 Transformers API 相同。

开发者可以使用两种主要方式导出模型:

  • Python API:使用带有 export=True.from_pretrained() 方法。
  • Command Line Interface (CLI):使用 optimum-cli export openvino 命令。

导出模型后会生成一个目录,包含 .xml.bin IR 模型文件、配置文件,以及为 openvino-tokenizers 库转换的分词器。

模型优化与量化

为降低资源受限设备上的延迟和内存占用,推荐使用仅权重量化。Optimum-Intel 利用神经网络压缩框架(NNCF)提供多种优化技术:

  • Default Quantization:在导出时,参数量超过十亿的模型默认量化为 INT8。
  • Advanced Quantization:4 位整数仅权重量化提供更好的精度‑性能平衡。对于 Llama-3.1-8B 等模型,推荐的技术包括堆叠 AWQ(激活感知权重量化)、量化尺度估计,以及使用校准数据集的混合精度 INT4/INT8 量化。

量化对精度的影响

量化通常会导致一定的精度下降。使用 Word Perplexity(PPL)指标在 Wikitext 数据集上评估,对 meta-llama/Meta-Llama-3.1-8B 的影响如下:

模型 PPL PyTorch FP32 OpenVINO INT8 OpenVINO INT4
Meta-Llama-3.1-8B 7.3366 7.3463 7.8288

使用 OpenVINO GenAI API 部署

模型转换并优化后,OpenVINO GenAI 中的 LLMPipeline 类可在 Python 和 C++ 中实现最小依赖的部署。

Python 部署

在 Python 中部署仅需 openvino-genai 包。LLMPipeline 通过 GenerationConfig 对象处理模型加载和文本生成,可控制诸如 max_new_tokens 等参数。

C++ 部署

C++ API 旨在实现从 🤗 Transformers API 的无缝迁移。它允许开发者指定硬件设备(例如 “CPU” 或 “GPU”),并使用 ov::genai::LLMPipeline 进行生成。

高级生成特性

LLMPipeline 支持多项高级特性,以提升用户体验和性能:

  • Custom Decoding:支持 Beam Search 等解码算法。
  • Interactive Chatstart_chat()finish_chat() 方法支持交互式场景。这些方法利用先前聊天历史的 KV 缓存,以减少提示处理时间。
  • Streaming:可以实现流式函数,在生成 token 时即时打印,而不是等待完整序列。

技术要求

实现时需使用以下软件包版本:

  • transformers: 4.44
  • openvino: 24.3
  • openvino-tokenizers: 24.3
  • optimum-intel: 1.20
  • lm-eval: 0.4.3
  • openvino-genai: 24.3

Sources