在 GCP 上使用第 5 代至強處理器對語言模型效能進行基準測試
TL;DR: 我們在兩個基於 Google Cloud Compute Engine Xeon 的 CPU 例項(N2 和 C4)上,對兩種代表性的代理 AI 工作負載元件(文字嵌入和文字生成)進行了基準測試。結果一致表明,在文字嵌入方面,C4 的吞吐量比 N2 高 10 到 24 倍;在文字生成方面,C4 的吞吐量比 N2 高 2.3 到 3.6 倍。考慮到價格,C4 的每小時價格約為 N2 的 1.3 倍,從這個意義上講,在文字嵌入方面,C4 在總擁有成本 (TCO) 上比 N2 具有 7 到 19 倍的優勢,在文字生成方面具有 1.7 到 2.9 倍的 TCO 優勢。結果表明,可以將輕量級代理 AI 解決方案完全部署在 CPU 上。
引言
人們相信人工智慧的下一個前沿是代理 AI。這種新正規化使用 感知-推理-行動
管道,將 LLM 複雜的推理和迭代規劃能力與強大的上下文理解增強功能相結合。上下文理解能力由向量資料庫和感測器輸入等工具提供,以建立更具上下文感知能力的 AI 系統,這些系統可以自主解決複雜的多步驟問題。此外,LLM 的函式呼叫能力使得 AI 代理能夠直接採取行動,遠遠超出了聊天機器人提供的聊天功能。代理 AI 為提高各行業的生產力和運營帶來了令人興奮的前景。

人們正在將越來越多的工具引入代理 AI 系統,其中大多數工具現在都在 CPU 上執行,這帶來了一個擔憂,即在這種正規化中,主機-加速器之間的流量開銷將不可忽略。與此同時,模型構建者和供應商正在構建更小但功能強大的小型語言模型 (SLM),最新的例子是 Meta 的 1B 和 3B llama3.2 模型,它們具有先進的多語言文字生成和工具呼叫能力。此外,CPU 正在發展並開始提供更多的 AI 支援,英特爾在其第四代至強 CPU 中引入了新的 AI 張量加速器——英特爾高階矩陣擴充套件 (AMX)。將這三條線索結合起來,看看 CPU 承載整個代理 AI 系統(尤其是當它使用 SLM 時)的潛力將是很有趣的。
在這篇文章中,我們將對代理 AI 的兩個代表性元件進行基準測試:文字嵌入和文字生成,並比較 CPU 在這兩個元件上的代際效能提升。我們選擇了 Google Cloud Compute Engine C4 例項和 N2 例項進行比較。其背後的邏輯是:C4 採用 第 5 代英特爾至強處理器(代號 Emerald Rapids),這是 Google Cloud 上可用的最新一代至強 CPU,它集成了英特爾 AMX 以提升 AI 效能;而 N2 採用 第 3 代英特爾至強處理器(代號 Ice Lake),這是 Google Cloud 上上一代至強 CPU,它只有 AVX-512 而沒有 AMX。我們將展示 AMX 的優勢。
我們將使用 Hugging Face 的統一基準測試庫 optimum-benchmark
來測量效能,該庫支援多後端和多裝置。基準測試在 optimum-intel
後端執行。optimum-intel
是 Hugging Face 的加速庫,用於加速英特爾架構(CPU、GPU)上的端到端管道。我們的基準測試用例如下:
- 對於文字嵌入,我們使用
WhereIsAI/UAE-Large-V1
模型,輸入序列長度為 128,批次大小從 1 掃到 128 - 對於文字生成,我們使用
meta-llama/Llama-3.2-3
模型,輸入序列長度為 256,輸出序列長度為 32,批次大小從 1 掃到 64
建立例項
N2
訪問 Google Cloud 控制檯,並在您的專案下點選 建立虛擬機器
。然後,按照以下步驟建立一個 96 核的例項,它對應一個英特爾 Ice Lake CPU 插槽。
- 在
機器配置
選項卡中選擇 N2,並將機器型別
指定為n2-standard-96
。然後您需要按以下圖片設定CPU 平臺
: - 將
作業系統和儲存
選項卡配置如下: - 其他配置保持預設
- 點選
建立
按鈕
現在,您擁有一個 N2 例項。
C4
按照以下步驟建立一個 96 核的例項,它對應一個英特爾 Emerald Rapids 插槽。請注意,本文中我們使用 C4 和 N2 相同的 CPU 核心數,以確保進行同核數基準測試。
- 在
機器配置
選項卡中選擇 C4,並將機器型別
指定為c4-standard-96
。您還可以設定CPU 平臺
並開啟全核睿頻以使效能更穩定: - 將
作業系統和儲存
配置與 N2 相同 - 其他配置保持預設
- 點選
建立
按鈕
現在,您擁有一個 C4 例項。
設定環境
請按照以下步驟輕鬆設定環境。為確保可復現性,我們列出了命令中使用的版本和提交。
- SSH 連線到例項
$ git clone https://github.com/huggingface/optimum-benchmark.git
$ cd ./optimum-benchmark
$ git checkout d58bb2582b872c25ab476fece19d4fa78e190673
$ cd ./docker/cpu
$ sudo docker build . -t <your_docker_image_tag>
$ sudo docker run -it --rm --privileged -v /home/<your_home_folder>:/workspace <your_docker_image_tag> /bin/bash
現在我們進入容器,執行以下步驟
$ pip install "optimum-intel[ipex]"@git+https://github.com/huggingface/optimum-intel.git@6a3b1ba5924b0b017b0b0f5de5b10adb77095b
$ pip install torch==2.3.1 torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
$ python -m pip install intel-extension-for-pytorch==2.3.10
$ cd /workspace/optimum-benchmark
$ pip install .[ipex]
$ export OMP_NUM_THREADS=48
$ export KMP_AFFINITY=granularity=fine,compact,1,0
$ export KMP_BLOCKTIME=1
$ pip install huggingface-hub
$ huggingface-cli login
,然後輸入您的 Hugging Face token 以訪問 llama 模型
基準測試
文字嵌入
您需要將 optimum-benchmark
目錄中的 examples/ipex_bert.yaml
更新如下,以基準測試 WhereIsAI/UAE-Large-V1
。我們將 numa 繫結更改為 0,1
,因為 N2 和 C4 每個插槽都有 2 個 NUMA 域,您可以使用 lscpu
再次檢查。
--- a/examples/ipex_bert.yaml
+++ b/examples/ipex_bert.yaml
@@ -11,8 +11,8 @@ name: ipex_bert
launcher:
numactl: true
numactl_kwargs:
- cpunodebind: 0
- membind: 0
+ cpunodebind: 0,1
+ membind: 0,1
scenario:
latency: true
@@ -26,4 +26,4 @@ backend:
no_weights: false
export: true
torch_dtype: bfloat16
- model: bert-base-uncased
+ model: WhereIsAI/UAE-Large-V1
然後,執行基準測試:$ optimum-benchmark --config-dir examples/ --config-name ipex_bert
文字生成
您可以按如下所示更新 examples/ipex_llama.yaml
以對 meta-llama/Llama-3.2-3
進行基準測試。
--- a/examples/ipex_llama.yaml
+++ b/examples/ipex_llama.yaml
@@ -11,8 +11,8 @@ name: ipex_llama
launcher:
numactl: true
numactl_kwargs:
- cpunodebind: 0
- membind: 0
+ cpunodebind: 0,1
+ membind: 0,1
scenario:
latency: true
@@ -34,4 +34,4 @@ backend:
export: true
no_weights: false
torch_dtype: bfloat16
- model: TinyLlama/TinyLlama-1.1B-Chat-v1.0
+ model: meta-llama/Llama-3.2-3B
然後,執行基準測試:$ optimum-benchmark --config-dir examples/ --config-name ipex_llama
結果與結論
文字嵌入結果
在文字嵌入基準測試案例中,GCP C4 例項的吞吐量比 N2 高約 10 倍至 24 倍。
文字生成結果
C4 例項在文字生成基準測試中始終表現出比 N2 高約 2.3 倍至 3.6 倍的吞吐量。在批次大小為 1 到 16 的情況下,吞吐量提高了 13 倍,而延遲沒有顯著降低。這使得併發查詢服務成為可能,而無需犧牲使用者體驗。
結論
在這篇文章中,我們對 Google Cloud Compute Engine CPU 例項(C4 和 N2)上的兩個代表性代理 AI 工作負載進行了基準測試。結果顯示,得益於 Intel Xeon CPU 上 AMX 和記憶體能力的改進,效能得到了顯著提升。Intel 在一個月前釋出了 帶有 P 核的 Xeon 6 處理器(代號 Granite Rapids),它在 Llama 3 中提供了約 2 倍的效能提升。我們相信,有了新的 Granite Rapids CPU,我們可以探索將輕量級代理 AI 解決方案完全部署在 CPU 上,以避免密集的宿主-加速器流量開銷。一旦 Google Cloud Compute Engine 提供 Granite Rapids 例項,我們將對其進行基準測試並報告結果。
感謝閱讀!