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倍的性能提升。
可用:天翼云即将上线。
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.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 | 即将上线 | 即将上线 |
注意镜像内置的是天翼云七代主机(s7/c7/m7)特殊编译版本的xfastertransformer,如果您使用的是天翼云八代机(s8r),请在xFT环境下手动更新安装新版本,否则版本不兼容,可参考下方的示例代码。
conda activate xFT
pip install xfastertransformer==1.4.0 -i https://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版本下载安装: https://repo.anaconda.com/miniconda/
wget https://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 https://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 https://download.pytorch.org/whl/cpu
pip install transformers==4.36.0 sentencepiece protobuf accelerate datasets cmake -i https://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 https://pypi.tuna.tsinghua.edu.cn/simple
# 从huggingface下载llama-2-7b-chat模型
########## Intel® Extension for PyTorch* ##########
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
pip install intel-extension-for-pytorch
pip install oneccl_bind_pt --extra-index-url https://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 https://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下载来自https://github.com/huggingface/diffusers/blob/main/examples/community/stable_diffusion_ipex.py