使用 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 Chat:
start_chat()與finish_chat()方法允許互動式情境。這些方法利用先前聊天記錄的 KV 快取,以減少提示處理時間。 - Streaming:可實作串流函式,即時列印產生的 token,而非等待完整序列。
技術需求
實作時,需指定以下套件版本:
transformers: 4.44openvino: 24.3openvino-tokenizers: 24.3optimum-intel: 1.20lm-eval: 0.4.3openvino-genai: 24.3