# [Efficient LLM inference on CPUs](https://arxiv.org/abs/2311.00502)
## 1. Introduction
大型語言模型(Large language models, LLMs)在各種任務上都顯示出了優異的性能和巨大的潛力。
但是部署這些模型一直面臨挑戰,因為LLMs參數非常多,這需要大容量的記憶體和很高的記憶體頻寬,所以下面說明一些技術來改善這個問題:
量化(Quantization)是一種減少神經網路的數值精確度以降低推理計算成本的技術。
* INT8量化是最常見的方法,但由於激活值(Activation Value)的極值限制了更廣泛的採用。
:::info
激活(Activation)是神經網路中一個重要的概念:
1. 定義: 激活是神經網路中每個神經元計算後的輸出值。它通過激活函式產生。
2. 作用: 激活負責對神經元的輸入信號做非線性轉換。這可以實現網路從低層到高層的疊加抽象。沒有激活,神經網絡將難以進行有效學習。
3. 常見的激活函式:ReLU、Sigmoid、Tanh等。它們定義了輸入和輸出之間的映射關係。
4. 激活在神經網路中的流動: 每層網路的激活值會作為下一層的輸入,直到最終輸出層產生網路的預測結果。
5. 量化時的考量: 為了保持模型精確度,大多會保持激活高精度,只量化權重參數到低精度。
總結來說,激活值是神經網路中信息從低層到高層流動的核心,其非線性轉換對網路學習能力至關重要。在量化時主要量化權重而非激活以保證精度。
:::
* 權重量化(Weight-only Quantization)僅將低精度(例如4-bit)應用於權重,同時保持激活的高精度(例如16位浮點),從而維持模型精度。
:::success
已有大量關於4位權重量化的工作,證明了其在LLM推理中的有效性。同時一些open-source community也在使用這種低位權重量化(Low-bit weight-only quantization)。但是目前這些實現通常是基於CUDA優化的。
:::
因此解決在CPU上執行高效率LLM推理的挑戰非常重要。這篇Intel團隊的論文提出一個有效的方法來改善CPU上的LLM推理。
Github: [https://github.com/intel/intel-extension-for-transformers](https://github.com/intel/intel-extension-for-transformers)
## 2. Approach
要讓CPU實現有效率的運行LLMs的方法,主要分成兩個部分:
1. Automatic INT4 Quantization Flow
2. Efficient LLM Runtime

### 1. Automatic INT4 Quantization Flow
Automatic INT4 Quantization Flow(自動INT4量化流程)的工作原理可概括為以下步驟:
讓我用更簡單易懂的方式重新說明這個自動 INT4 量化流程:
1. 首先我們有一個原始的FP32語言模型。
2. 然後使用預設的INT4量化參數對模型進行量化,生成INT4量化模型。這個過程就是用4位整數取代原來的32位浮點數表示模型參數。
3. 接著測試量化後的模型精度,和原始FP32模型比較。
4. 如果精確度損失太大不符合要求,我們就調整量化參數,重新量化生成模型,然後再比較精度。
5. 通過這樣的迴圈調整,直到找到一組量化參數,使得INT4量化模型精度可接受為止。
6. 最後輸出此INT4量化模型供後續使用。
這個流程的好處是全自動完成了FP32模型到INT4量化模型的轉換,同時透過迴圈的調整,保證了量化模型精確度。
:::success
總結: 該流程自動找到合適的量化方案,使量化後模型精度控制在可接受的範圍,同時具備部署加速的優點。最大限度減少了人工干預。
:::
### 2. Efficient LLM Runtime
LLM Runtime 是被設計去提供LLMs有效率的運行在CPUs做inference。下面這張圖是LLM Runtime重要的components。

* Component in GREEN 是專門用於優化LLM推理的部分
* Component in BLUE 是構建一般運行時(Runtime)都需要的基礎設施(Operation System)。
:::warning
雖然藍色的部分提供了Runtime的基本機制,但是對於整體優化LLM的推理效率影響不大。反而綠色部分中提出的CPU tensor library和LLM optimizations對提升效率非常關鍵。所以下面只討論綠色組件的部分
:::
#### 1. CPU Tensor Library
CPU Tensor Library 的工作機制可概括為以下幾個方面:
1. 提供高效的線性代數運算子,實現基於張量的計算操作,為神經網路提供計算支撐。
2. 支持主流CPU指令集,如AVX2、AVX512、AMX等。利用特定指令集的並行計算能力進行優化。
3. 實現了 amount 操作自動優化內核生成,為不同的 CPU 指令集生成對應最優化的低階別內核。
4. 支持多種資料格式,如 FP32、FP16、BF16 以及 INT4/INT8 等。可以容易地切換使用這些格式。

5. 針對語言模型推理特性進行優化,例如支援動態量化、KV Cache 預分配加速等。
6. 利用 Tensor Core 單元加速矩陣相乘和轉置等張量操作。
7. 利用 Tensor Core 的混合精度功能同時加速計算和降低記憶體頻寬壓力。
:::success
總結來說,該 Library 為 CPU 提供神經網路基礎的張量優化,並針對語言模型進行額外的改進,使 GPU 張量核心的某些優化能力被帶到 CPU 上。
:::
#### 2. LLM Optimizations
LLM Optimizations 在 LLM Runtime 中的主要工作機制可歸納如下:
1. Transformer解碼器優化
- 根據Transformer的解碼器結構進行解析和優化
- 獲取解碼器任務的並行特性
2. KV Cache優化
- 預分配KV Cache內存,避免動態分配
- 優化查詢流程,提高命中率
- 利用Cache共用機制進一步優化

3. 專家混合層優化
- 解析並優化 Sparse gated mixture-of-experts 層的計算
- 利用心理支配(Predicate Dispatch)技術動態優化
4. 流水線生成
- 構建流水線生產解碼任務的工作序列
- 不同Stage並行執行以提高吞吐
- 充分利用 CPU 平行計算能力
:::success
總結來說,LLM Optimizations通過深入模型結構的方式針對LLM進行了全面優化,是Efficient LLM Runtime能夠實現高效CPU上LLM推理的關鍵。
:::
## 3. Result
### 實驗設定
* 模型:選取多個熱門大模型,參數規模3B-20B不等
* 測試集:使用開源測試集進行性能評測
### 精確度結果
* INT4模型精度和FP32基準相比,損失在1%之內
* 不同量化組大小精度相近

### 性能結果
* 基於4th Generation Intel® Xeon® Scalable Processors
* 每個token生成延遲從20ms到80ms

:::info
上圖表格中的 group size 是指量化過程中使用的量化粒度:
1. 量化時可以對整個網路使用一組全局量化參數,這相當於 group size=1。
2. 也可以對網絡中部分子結構如channel或某個dimension切分成group,對每個group單獨量化。這時的group大小(group size)就是每組包含的dimension大小。
3. 一般來說,group size越大,量化效果越好,因為量化參數可以針對每組分布自己適應調整。但計算複雜度也越高。
4. 所以group size是在量化精度和計算效率之間的可調參數。
5. 文章中給出了group size=32和128兩種情況下的量化效果對比。
總結而言,group size代表量化的粒度,通過調整它可以在精度和效率之間進行權衡。文章比較了不同組大小的影響。
:::
### 其他性能調優討論
* Threads的調度、記憶體優化空間等
:::success
總結而言,該方法可以保證精度的前提下加速LLM在CPU上部署,性價比高,具備實際應用價值。
:::
## 4. Summary and Future Work
### Summary
We presented an end-to-end INT4 LLM inference including an automatic INT4 model quantization and efficient LLM runtime. We demonstrated the generality on a set of popular LLMs and the performance advantage over the open-source solution on CPUs.
### Future Work
1. Plan to further improve the CPU tensor library and extend Hugging Face transformer APIs to support INT4 LLM inference as part of the contributions to the open-source community
2. Plan to exercise our approach on personal computers (PCs) given the broad accessibility of CPUs, to meet the growing demands of AI generated content and empower generative AI on PCs.