在 GCP 上使用第 5 代至強處理器對語言模型效能進行基準測試

釋出於 2024 年 12 月 17 日
在 GitHub 上更新

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 插槽。

  1. 機器配置 選項卡中選擇 N2,並將 機器型別 指定為 n2-standard-96。然後您需要按以下圖片設定 CPU 平臺替代文字
  2. 作業系統和儲存 選項卡配置如下:alt text
  3. 其他配置保持預設
  4. 點選 建立 按鈕

現在,您擁有一個 N2 例項。

C4

按照以下步驟建立一個 96 核的例項,它對應一個英特爾 Emerald Rapids 插槽。請注意,本文中我們使用 C4 和 N2 相同的 CPU 核心數,以確保進行同核數基準測試。

  1. 機器配置 選項卡中選擇 C4,並將 機器型別 指定為 c4-standard-96。您還可以設定 CPU 平臺 並開啟全核睿頻以使效能更穩定:替代文字
  2. 作業系統和儲存 配置與 N2 相同
  3. 其他配置保持預設
  4. 點選 建立 按鈕

現在,您擁有一個 C4 例項。

設定環境

請按照以下步驟輕鬆設定環境。為確保可復現性,我們列出了命令中使用的版本和提交。

  1. SSH 連線到例項
  2. $ git clone https://github.com/huggingface/optimum-benchmark.git
  3. $ cd ./optimum-benchmark
  4. $ git checkout d58bb2582b872c25ab476fece19d4fa78e190673
  5. $ cd ./docker/cpu
  6. $ sudo docker build . -t <your_docker_image_tag>
  7. $ sudo docker run -it --rm --privileged -v /home/<your_home_folder>:/workspace <your_docker_image_tag> /bin/bash

現在我們進入容器,執行以下步驟

  1. $ pip install "optimum-intel[ipex]"@git+https://github.com/huggingface/optimum-intel.git@6a3b1ba5924b0b017b0b0f5de5b10adb77095b
  2. $ pip install torch==2.3.1 torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
  3. $ python -m pip install intel-extension-for-pytorch==2.3.10
  4. $ cd /workspace/optimum-benchmark
  5. $ pip install .[ipex]
  6. $ export OMP_NUM_THREADS=48
  7. $ export KMP_AFFINITY=granularity=fine,compact,1,0
  8. $ export KMP_BLOCKTIME=1
  9. $ pip install huggingface-hub
  10. $ 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 例項,我們將對其進行基準測試並報告結果。

感謝閱讀!

社群

註冊登入 發表評論

© . This site is unofficial and not affiliated with Hugging Face, Inc.