使用 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 套件轉換的 tokenizer。

模型優化與量化

為了降低資源受限裝置的延遲與記憶體占用,建議使用僅權重量化。Optimum-Intel 利用神經網路壓縮框架(NNCF)提供多種優化技術:

  • Default Quantization:在匯出時,參數超過十億的模型預設會量化為 INT8。
  • Advanced Quantization:4 位元整數僅權重量化提供更佳的精度與效能平衡。對於 Llama-3.1-8B 等模型,建議的技術包括堆疊 AWQ(Activation-aware Weight Quantization)、量化比例估計,以及使用校準資料集的混合精度 INT4/INT8 量化。

量化對精度的影響

量化通常會導致精度略有下降。以 Wikitext 資料集上的字詞困惑度(PPL)指標衡量,對 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