1. 背景
1.1 大模型算力需求
大模型因其參數規模巨大、結構復雜,通常需要強大的計算資源來支持其推理過程,這使得算力成為大模型應用的關鍵要素。信通院的數據資料顯示云端推理的市場潛力很大,AI大模型落地應用數量正在不斷增加,市場對大模型推理算力的需求也呈現爆發式增長態勢。
近年來,CPU制程和架構的提升以及英特爾AMX指令集的面世帶來了算力的快速提升。英特爾對大模型推理等多個AI領域持續深入研究,提供全方位的AI軟件支持,兼容主流AI軟件且提供多種軟件方式提升CPU的AI性能。目前,已有充分的數據顯示CPU可以用于大模型推理。
1.2 CPU算力用于大模型推理的適用場景
CPU適用于以下大模型推理場景,
場景1: 大模型推理需要的內存超過了單塊GPU的顯存容量,需要多塊或更高配GPU卡,采用CPU方案,可以降低成本;
場景2: 應用請求量小,GPU利用率低,采用CPU推理,資源劃分的粒度更小,可有效降低起建成本;
場景3: GPU資源緊缺,CPU更容易獲取,且可以勝任大模型推理。
2. 英特爾 AI推理加速技術
2.1 英特爾 AI硬件基礎
第三代英特爾? 至強? 可擴展處理器(Ice Lake ) :
最大支持40個物理核,最大支持內存頻率3200MT/s,最大支持64條PCIe 4.0。
搭載英特爾? 高級矢量擴展 512(英特爾? AVX-512)技術。
可用:天翼云第七代云主機(s7/c7/m7)。
第四代英特爾? 至強? 可擴展處理器(Sapphire Rapids ) :
最大支持60個物理核,最大支持內存頻率4800MT/s,最大支持80條PCIe 5.0。
搭載英特爾? 高級矩陣擴展 (Advanced Matrix eXtensions)技術。
AMX 支持BF16和INT8,通過加速矩陣乘法運算,極大提升AI應用的性能。
可用:天翼云第八代云主機(s8r)。
第五代英特爾? 至強? 可擴展處理器(Emerald Rapids ) :
最大支持64個物理核,最大支持內存頻率5600MT/s,L3 cache高達5MB/core,最大支持80條PCIe 5.0。
搭載英特爾? 高級矩陣擴展 (Advanced Matrix eXtensions)技術。
AMX 支持BF16和INT8,通過加速矩陣乘法運算,極大提升AI應用的性能。
相較于第四代處理器,第五代處理器具有更大的帶寬,在大語言模型推理領域可帶來最高1.5倍的性能提升。
可用:天翼云第八代云主機(c8e)。
2.2 英特爾 AI軟件工具
英特爾提供三個層面的AI軟件支持:
2.2.1 Intel? Extension for PyTorch*
Intel? Extension for PyTorch*(舊稱Intel PyTorch Extension, IPEX)能夠優化AI推理任務在英特爾硬件上的性能,支持AVX-512與AMX。
2.2.2 xFasterTransformer
xFasterTransformer(xFT)是由英特爾官方開源的AI推理框架,為大語言模型(LLM)在英特爾?至強?硬件平臺上提供了一種深度優化的解決方案。xFT支持AVX-512與AMX,并可在AMX上獲得極致的推理性能。xFT目前支持的接口與模型如下:
(更新時間:2024-04-09)
xFT還可支持多種數據類型,滿足用戶對不同精度的需求。xFT目前支持的數據類型包括:
FP16 / BF16 / INT8 / W8A8 / INT4 / NF4 /
BF16_FP16 / BF16_INT8 / BF16_W8A8 / BF16_INT4 / BF16_NF4 / W8A8_INT8 /
W8A8_INT4 / W8A8_NF4(更新時間:2024-04-09)
xFT部署簡便,您只需要一鍵安裝插件,并在程序中加入幾行代碼,即可使用xFT對您的模型進行加速。具體實踐可參考本文第3節的內容。
3. 英特爾 AI軟件工具在天翼云主機上的應用實踐
本節內容主要介紹基于Intel? Extension for PyTorch*與xFasterTransformer,能夠在天翼云主機上取得的性能指標,以及具體實施方法。
3.1 AI推理性能指標
3.1.1 LLaMA2性能指標
基本參數
- vcpu數:32
- 內存:64GB
- 硬盤:通用型SSD
- 模型:Llama-2-7b-chat
- 輸入token個數:128
- 輸出token個數:128
- batch size:1
- 數據類型:torch2.0(BF16),xFT(FP16)
- 測試機型:c7.8xlarge.2 | 32核 | 64G (numa node 1),s8r.8xlarge.2 | 32核 | 64G (numa node 2)
性能數據
xFT在推理總時延(Inference Latency)和生成token時延(Next Token Latency)上都有明顯的優化。
3.1.2 StableDiffusion性能指標
基本參數
- vcpu數:32
- 內存:64GB
- 硬盤:通用型SSD
- 模型:stable-diffusion-2-1
- 輸入token個數:6
- 輸出圖片尺寸:512 x 512
- 推理Steps:20
- batch size:1
- 數據類型:torch2.0(FP32),IPEX(FP32)
性能數據
IPEX在推理總時延上有一定的性能提升。
3.1.3 EMR云主機LLM性能指標
注意在天翼云EMR云主機正式上線后,我們更新性能指標如下。
基本參數
- vcpu數:16
- 內存:64GB
- 硬盤:通用型SSD
- 輸入token個數:128
- 輸出token個數:128
- batch size:1
- 數據類型:torch2.0(BF16),xFT(BF16)
性能數據
xFT在生成token時延(Next Token Latency)上有明顯的優化,在16vcpu的機型上能使用主流3B規格模型達到低于80ms/token的生成速度,足以滿足業界需求。
3.1.4 EMR云主機StableDiffusion性能指標
注意在天翼云EMR云主機正式上線后,我們更新性能指標如下。
基本參數
- vcpu數:16
- 內存:64GB
- 硬盤:通用型SSD
- 模型:stable-diffusion-2-1
- 輸入token個數:<16
- 推理Steps:20
- batch size:1
- 數據類型:torch(FP32),IPEX(FP32)
性能數據

IPEX在推理總時延上有一定的提升,在本示例16vcpu和20steps配置下能夠將256x256大小圖片生成時延壓縮到10秒內,512x512大小圖片生成時延壓縮到35秒內,具有一定的實用價值。
3.2 AI軟件工具實施方法(基于一鍵部署鏡像)
為了方便您進行性能測試,天翼云聯合英特爾制作了一鍵部署的云主機鏡像,內置torch2.0環境,Intel? Extension for PyTorch*與xFasterTransformer軟件,以及Llama-2-7b-chat與stable-diffusion-2-1模型。您可直接開通云主機并選擇對應鏡像進行體驗。
鏡像支持的云主機規格與資源池信息如下表:
注意內存需在32G及以上。
| 云主機規格 | 資源池 | |
|---|---|---|
| 英特爾第三代至強可擴展處理器AVX-512 | s7 / c7 / m7 | 西南-西南1 華東-華東1 |
| 英特爾第四代至強可擴展處理器AMX | s8r | 華東-華東1 -可用區2 |
| 英特爾第五代至強可擴展處理器AMX | c8e | 華東-華東1 -可用區2 |
注意鏡像內置的是天翼云七代主機(s7/c7/m7)特殊編譯版本的xfastertransformer,如果您使用的是天翼云八代機(s8r),請在xFT環境下手動更新安裝新版本,否則版本不兼容,可參考下方的示例代碼。
conda activate xFT
pip install xfastertransformer==1.4.0 -i //pypi.tuna.tsinghua.edu.cn/simple
鏡像名稱:應用鏡像 - ubuntu - Intel-AI推理加速,如圖所示:
3.2.1 xFasterTransformer (xFT)實施方法
3.2.1.1 模型轉換為xFT格式
在使用xFT框架前,需要對模型進行格式轉換。xFT提供了轉換命令,您可修改和執行/root/tools/xft_trans.py腳本。
import xfastertransformer as xft
# 輸入huggingface模型路徑
HF_DIR ="/root/models/Llama-2-7b-chat-hf"
# 輸出xft模型路徑
XFT_DIR ="/root/models/Llama-2-7b-chat-xft"
xft.LlamaConvert().convert(HF_DIR, XFT_DIR)
在執行前, 需要進入conda運行環境(執行過一次即可)
conda activate xFT
python xft_trans.py
3.2.1.2 查看numa節點分布
numactl -H
以下輸出代表32個vcpu均在同一個numa node下:
以下輸出代表vcpu0-15分布在numa node0, vcpu16-31分布在numa node1:
3.2.1.3 檢查測試參數
性能測試所需的參數均在、root/tools/llama_benchmark.py中,您可按需進行修改,對比開啟和關閉xFT的效果,以及不同token長度的效果等。
3.2.1.4 單進程執行
注意如果您的云主機存在不止一個numa node,直接使用單進程方式執行腳本會出現大幅性能波動,您可參考單核和多核的不同實施方法。
在單進程情況下,您可直接執行python腳本:
# 在執行前, 需要進入conda運行環境(執行過一次即可)
conda activate xFT
cd /root/tools
# 綁定cpu核, 性能更穩定
# OMP線程數和綁定的cpu核數保持一致
# 天翼云主機開啟了cpu超線程, 0-1/ 2-3號vcpu分別在同一個物理核上, 只需要使用其中一個核即可
# vcpu與物理核的對應關系可在/proc/cpuinfo查看每個processor的physical id
OMP_THREAD_NUM=16 numactl --all -C 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30 python llama_benchmark.py
您將會得到以下輸出(本示例采用天翼云c7.8xlarge.2 | 32核 | 64G云主機):
如果想要和加速前的性能進行對比,您可以修改腳本內的USE_XFT=False,然后再次執行。
您也可使用測試腳本查看模型生成的結果:
# 在執行前, 需要進入conda運行環境(執行過一次即可)
conda activate xFT
cd /root/tools
# 修改prompt后執行
python llama_run.py
3.2.1.5 多進程執行
在多numa node場景下, 推薦使用多進程獲得更好的性能指標。您需要根據上文3.2.1.2節 numactl -H查到的信息,調整/root/tools/llama_benchmark_multirank.sh腳本中的相關內容。具體信息在腳本中均有詳細注釋。
注意當前多進程腳本只支持USE_XFT=True的模式,關閉xFT加速時無法利用多進程。
# 在執行前, 需要進入conda運行環境(執行過一次即可)
conda activate xFT
cd /root/tools
bash llama_benchmark_multirank.sh
在numa node分配正確的情況下, 天翼云s8r.8xlarge.2 | 32核 | 64G云主機可達到如下指標:
對比來看,如果此時堅持使用單進程模式,帶來了跨numa node的性能損耗,則只能達到如下指標:
可以明顯看到性能下降。
3.2.2 Intel? Extension for PyTorch*(IPEX)實施方法
OPEX的應用和性能測試可直接按單進程執行:
# 在執行前, 需要進入conda運行環境(執行過一次即可)
conda activate ipex
python sd_benchmmark.py
您將會得到如下輸出:
如果想要和加速前性能進行對比,可以修改腳本內的USE_IPEX=False然后再次執行。
4. 附錄:一鍵部署的鏡像環境制作
########## base environment ##########
# 選擇一個miniconda版本下載安裝: //repo.anaconda.com/miniconda/
wget //repo.anaconda.com/miniconda/Miniconda3-py310_24.1.2-0-Linux-x86_64.sh
bash Miniconda3-py310_24.1.2-0-Linux-x86_64.sh
source ~/.bashrc
# 安裝numactl工具
apt install numactl
# 安裝git lfs
curl -s //packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
apt-get install git-lfs
git lfs install
########## xFasterTransformer ##########
conda create -n xFT python=3.10
conda activate xFT
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url //download.pytorch.org/whl/cpu
pip install transformers==4.36.0 sentencepiece protobuf accelerate datasets cmake -i //pypi.tuna.tsinghua.edu.cn/simple
# icelake AVX-512架構 (特殊編譯版本)
pip install xfastertransformer-1.3.1.icx-py3-none-any.whl
# spr/emr AMX架構 (當前最新版本為1.4.0)
pip install xfastertransformer==1.4.0 -i //pypi.tuna.tsinghua.edu.cn/simple
# 從huggingface下載llama-2-7b-chat模型
########## Intel? Extension for PyTorch* ##########
pip install torch torchvision torchaudio --index-url //download.pytorch.org/whl/cpu
pip install intel-extension-for-pytorch
pip install oneccl_bind_pt --extra-index-url //pytorch-extension.intel.com/release-whl/stable/cpu/us/
pip install transformers accelerate diffusers
# 從huggingface下載stable-diffusion-2-1模型
# 注意sd模型倉庫內放了太多不同版本的模型,實際只需要下載其中一版即可。
# 只下載小文件
GIT_LFS_SKIP_SMUDGE=1 git clone //huggingface.co/stabilityai/stable-diffusion-2-1
# 然后根據需要下載所需文件
cd stable-diffusion-2-1
git lfs pull --include=”pytorch_model.bin”
git lfs pull --include=”diffusion_pytorch_model.bin”
# /root/tools/stable_diffusion_ipex/pipeline.py下載來自//github.com/huggingface/diffusers/blob/main/examples/community/stable_diffusion_ipex.py