使用 🤗 Optimum Intel 在 Xeon 上加速 SetFit 推論

TL;DR

Hugging Face 已示範,透過 🤗 Optimum Intel 函式庫的後訓練靜態量化,SetFit 模型在 Intel Xeon CPU 上的推論吞吐量最高可提升 7.8 倍的推論吞吐量提升。此最佳化使得少樣本學習模型能以最小的精度影響,進行生產等級的部署。

SetFit:高效少樣本學習

SetFit 是一個專為少樣本微調 Sentence Transformers 而設計的框架,特別針對標記訓練資料有限的挑戰。它相較於大型語言模型(LLM)為基礎的方法,提供兩項主要優勢:

  • 消除提示:與需要脆弱、手工設計提示的 LLM 內文學習不同,SetFit 直接從少量標記範例產生嵌入。
  • 訓練效率:SetFit 的訓練與推論速度通常比 GPT-3.5 或 Llama 2 等 LLM 快上數個量級。

在效能方面,SetFit 已證明在使用 5 次樣本時,於 Banking 77 金融意圖資料集上,3-shot 提示的表現優於 GPT-3.5,且在 3-shot GPT-4 上也表現更佳。

使用 🤗 Optimum Intel 加速推論

為了在 Intel CPU 上加速 SetFit 推論,Hugging Face 使用 Optimum Intel,這是一個開源函式庫,利用 Intel Advanced Vector Extensions 512(AVX-512)、向量神經網路指令(VNNI)以及先進矩陣擴充(AMX)。這些硬體加速在每個核心中都內建 BFloat16(bf16)和 int8 GEMM 加速器。

後訓練靜態量化 (PTQ)

使用的核心最佳化技術是透過 Intel Neural Compressor(INC)的 Post-Training Static Quantization (PTQ)。量化會減少用於表示權重與激活的位元數(例如,將高精度數值轉換為 INT8),從而降低記憶體佔用並提升計算速度。

PTQ 特別有效,因為它在不需要額外訓練的情況下即可降低延遲與記憶體使用量,只需一小批未標記的校準資料集(通常約 100 筆樣本)即可代表未見資料的分佈。

基準測試與效能結果

效能使用 bge-small 模型在 sst2 資料集上進行評估,將原始 PyTorch/Transformers fp32 實作與 IPEX-bfloat16 版本以及量化的 Optimum-int8 版本進行比較。

延遲與模型大小

在 batch size 為 1 時,最佳化的 Optimum-int8 模型顯示出顯著的提升:

  • 延遲降低:延遲降低 3.45 倍(4.55 ms 對比 fp32 模型的 15.69 ms)。
  • 模型大小縮減:模型大小縮小 2.85 倍(44.65 MB 對比 127.32 MB)。
  • 精度保持:精度幾乎未變,從 88.4%(fp32)下降至 88.1%(int8)。

吞吐量提升

雖然延遲的改善已相當可觀,但最顯著的提升出現在吞吐量上。比較不同 batch size 下可達到的最高吞吐量時,Optimum-int8 模型的速度是原始 transformers fp32 模型的 7.8 倍

指標 bge-small (transformers) bge-small (ipex-bfloat16) bge-small (optimum-int8)
模型大小 127.32 MB 63.74 MB 44.65 MB
精度(測試集) 88.4% 88.4% 88.1%
延遲(bs=1) 15.69 +/- 0.57 ms 5.67 +/- 0.66 ms 4.55 +/- 0.25 ms

實作工作流程

要實作這些最佳化,流程分為兩個主要步驟:

  1. 量化:使用 optimum.intel 中的 INCQuantizer,並將 PostTrainingQuantConfig 設為「static」方式與「ipex」後端。
  2. 部署:使用 IPEXModel 包裝量化後的模型本體,並將其整合至 SetFit 模型結構以供推論。

Sources