为了让飞桨开发者们掌握第一手技术动态、让企业落地更加高效,飞桨官方在7月至10月特设《飞桨框架3.0全面解析》系列技术稿件及直播课程。技术解析加代码实战,带大家掌握包括核心框架、分布式计算、产业级大模型套件及低代码工具、前沿科学计算技术案例等多个方面的框架技术及大模型训推优化经验。本文是该系列第六篇技术解读,文末附对应直播课程详情。
大模型时代是人工智能领域的一个重要发展阶段,推理部署的重要性随之愈发凸显。它关乎到模型在产业应用中的性能表现、运行效率、成本控制以及用户体验的优劣, 是将大模型研究成果转化为实际应用的重要桥梁,对于充分发挥大模型的潜力,推动人工智能技术的广泛应用具有重要意义。
飞桨框架3.0的核心组件之一——飞桨推理引擎,本次也迎来了全面革新。此次升级
依托于高扩展性的中间表示(PIR)以及灵活易用的 PASS 机制,显著增强了推理部署的优化效率和性能。同时,新版本的推理引擎还引入了一键转静使用 Paddle Inference 推理接口,极大地简化了从动态图到静态图的推理流程,为用户提供了更加便捷和高效的推理体验
。
针对大模型在产业上部署的严苛需求,飞桨框架3.0在从大模型压缩到推理加速,再到服务化部署全流程部署能力上进行了深度优化。特别在飞桨的两大重要套件—— PaddleNLP 大语言模型开发套件与 PaddleMIX 多模态大模型开发套件中,我们精心准备了详尽的全流程部署教程文档,旨在
帮助用户轻松上手,快速实现从模型训练到实际部署的无缝对接
。
在硬件支持方面,飞桨推理引擎展现出了强大的兼容性和灵活性。它不仅完美支持英伟达GPU的多机多卡高效部署,还积极拥抱国产及国际领先的AI芯片生态,包括昆仑 XPU 、昇腾 NPU、海光 DCU 、燧原 GCU 以及英特尔 CPU 等多种硬件的推理支持。这一举措确保了飞桨能够
覆盖更广泛的部署场景,满足不同用户的多样化需求,推动大模型推理技术在更多实际业务中的应用与落地。
特点一 大语言模型无损量化压缩方案
基于PaddleSlim提供的多种大语言模型 Post Training Quantization (PTQ)训练后量化技术,提供 WAC(权重/激活/KV缓存)灵活可配的量化能力,支持 INT8、FP8 4Bit 量化能力。
针对大模型激活数值分布的特点,创新的提出并实现了分段激活平滑(Piece-wise Smooth Search,PSS)算法,相比业界常用的 SmoothQuant,有更好的平滑效果,量化损失更小。
在生成式语言大模型中,激活的数值分布非常不平滑,导致量化损失较大。相比激活,权重的数值分布相对平滑,对量化更友好。如下图所示,(a) 和(b)分别为 Llama 7B 其中一个 FFN2 层输入激活和权重的数值分布。为了优化激活数值分布,可以将激活的异常值迁移到权重,使激活和权重整体的量化损失更小。业界常用的方法是 SmoothQuant,在激活通道维度上乘以一个平滑系数向量 ,同时在对应的权重上除以相同的平滑系数向量。通道 i 对应的平滑系数
其中 x
i
和 w
i
分别是激活和权重的第 i 个通道,
α
是控制平滑力度的一个超参。
在实践中,我们发现不同通道对量化的敏感度不一样。对于激活,量化损失主要取决于数值最大的几个通道,其它通道对量化损失贡献较少。对于权重,不同通道的重要性不同,部分通道能承受迁移自激活的异常值,另一部分通道不能承受迁移自激活的异常值。SmoothQuant 忽略了上述的通道间的差异性,仅用一个超参
α
控制各个通道的平滑力度。基于上述观察,我们提出的PSS算法,对激活各个通道分而治之。首先,使用聚类算法将激活的各个通道划分成若干段,第 k 段内的通道共用一个平滑超参
α
k
。然后,对于模型中的每一层,我们通过自动搜索算法得到
α
k
,使当前层在量化前后输出的 MSE loss 最小。
在 PaddleSlim 中实现了此方案,并在 PaddleNLP 中提供了基于 Llama 3.1 等模型的完整
压缩教程
。实验表明,我们提出的 PSS 算法处理后的激活和权重的数值分布均更加平滑,量化精度更高,可以看下图(a),量化后的精度优于SmoothQuant。下图(b)给出了激活、权重、KV Cache 通过INT8、FP8 量化后的精度值与浮点模型对比情况,可以看到
无论是基于INT8的W8A8 (C8) ,还是基于FP8的W8A8 (C8) 精度均接近无损。
特点二 大语言模型高性能推理优化
本次更新中,我们基于 PaddleInference
构建了大模型高性能推理方案,支持Llama 3.0、Llama 3.1、Mixtral等一系列大语言模型推理
。支持 Weight Only INT8 及 INT4 推理,支持权重、激活、Cache KV 进行 INT8、FP8量化 的推理,注意力机制支持 PageAttention、FlashDecoding 等优化,支持基于 TensorCore 深度优化。
FastDeploy 基于英伟达 Triton 框架专为服务器场景的大模型服务化部署设计了解决方案。提供了支持 gRPC、HTTP 协议的服务接口。后端推理引擎采用 PaddleInference ,服务与推理协同优化,支持流式输出、异步调度,支持连续批处理( continuous batching ),对 Prefill 与 Decode 的计算混合调度,减少对解码时延的影响。
在集群化服务部署上,FastDeploy 可灵活控制连续批处理插入的新请求数量,支持请求动态拉取的方案,实现各实例更好地负载均衡,带来更低的首Token时延和更佳的用户体验
。
Llama 3.1 于7月份刚开源,其中 Llama 3.1 405B 是开源社区中最大的模型,飞桨推理部署也快速支持了此模型,支持 INT8、INT4、FP8 的高性能部署,下面是在 PaddleNLP 大语言模型套件中的推理流程。
cd PaddleNLP
python setup.py install
# 按照教程预先下载模型
# 导出模型 (可设置paddle.set_device("cpu"),通过内存导出模型)
python -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" predict/export_model.py --model_name_or_path meta-llama/Meta-Llama-3.1-405B-Instruct --output_path /path/to/a8w8c8_tp8 --inference_model 1 --block_attn 1 --dtype bfloat16 --quant_type a8w8 --cachekv_int8_type static --use_fake_parameter 1
# 推理
python -m paddle.distributed.launch --gpus "0,1,2,3,4,5,6,7" predict/predictor.py --model_name_or_path /path/to/a8w8c8_tp8 --mode static --inference_model 1 --block_attn 1 --dtype bfloat16 --quant_type a8w8 --cachekv_int8_type static
更详细的内容和最佳实践可以可以参考文档教程
https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/docs/predict/inference.md
特点三 跨模态模型一键转静推理
DiT扩散模型性能领先
一键转静使用 Paddle Inference 推理接口
飞桨框架的设计上遵循动静统一的理念,静态图的图优化有助于提升推理性能,以往为了使用Paddle Inference的静态图推理,用户需要先导出模型、再编写推理代码,为了更方便用户直接进行静态图推理、或动静混合方式推理,推出了
paddle.incubate.jit.inference()接口可一键转静推理
,并且支持使用 Paddle TensorRT 后端进行推理,具体使用示例如下,可以看到增加一行代码即可。在多模态模型的高性能推理加速中,我们也用此功能,通过静态图 PASS 优化能力获得加速。
import paddle
class ExampleLayer(paddle.nn.Layer):
def __init__(self, hidd):
super().__init__()
self.fc0 = paddle.nn.Linear(hidd, 4 * hidd, bias_attr=True)
self.fc1 = paddle.nn.Linear(4 * hidd, hidd, bias_attr=True)
def forward(self, x):
x = self.fc0(x)
x = paddle.nn.functional.gelu(x)
x = self.fc1(x)
return x
x = paddle.rand([4096, 1536], dtype="float32")
mylayer = ExampleLayer(1536)
baseline_result = mylayer(x)
mylayer = paddle.incubate.jit.inference(mylayer)
static_result = mylayer(x)
print(static_result - baseline_result)
多模态模型如 Stable Diffusion 及 DiT 结构在文本生成图像/视频领域、LLaVA 在图生文领域应用广泛,飞桨也对这些模型做了高性能推理优化。在LLaVA等图生文模型上我们直接应用了大语言模型优化技术。针对文生图及文生视频扩散类模型,我们
提供了丰富的通用图优化,如 Norm 类融合、矩阵横向融合、 FlashAttention 融合高性能算子
。
以DiT模型优化为例,飞桨框架3.0核心设计 PIR 减少框架调度开销,具备更丰富的图优化PASS,基于这些优化可直接提升推理性能。针对 DiT 模型中多个归一化 Norm 算子与 Elementwise 计算新增了融合优化,此外,还通过矩阵横向融合 PASS 将 GEMM 进行横向融合计算,使原本零散的小 GEMM 操作,融合为大 GEMM 进行统一计算。还折叠了模型组网中公共子表达式,消除模型多层的冗余计算部分。将DiT模型动态图推理从1325.6738ms提升至219ms,性能提升6倍。NVIDIA A100 SXM4 40GB 硬件上测试,与TensorRT-LLM v0.11.0性能相比,
DiT模型推理速度领先10.5%
。此外,与 TensorRT v10.0 性能相比,
SD1.5模型推理速度领先7.9%。
(a)DiT模型推理优化&(b)与TensorRT/TensorRT-LLM性能比较
多硬件大模型推理支持
基于飞桨框架还支持了昆仑 XPU、昇腾 NPU、海光 DCU、燧原 GCU、英特尔 X86 CPU等多种硬件的大模型推理,
不同硬件的推理入口保持统一,仅需修改device即可支持不同硬件推理
。
支持算子级别的融合优化,支持 PageAttention 、 KVCache 等常用大模型优化技术,模型算子粒度 API 对齐 GPU ,使得动转静、推理、服务化部署可以统一支持。
https://github.com/PaddlePaddle/PaddleNLP/tree/develop/llm/xpu
飞桨基于ATB(Ascend Transformer Boost)构建了昇腾NPU推理,ATB推理加速库是面向大模型领域,实现基于 Transformer 结构的神经网络推理加速引擎库,提供昇腾亲和的融合算子、通信算子、内存优化等,作为公共底座为提升大模型训练和推理性能,飞桨在此基础上,还支持了连续批处理等功能实现推理成本的极致压缩。
文档传送门:
https://github.com/PaddlePaddle/PaddleNLP/tree/develop/llm/npu/
飞桨对海光 DCU-K100AI 大模型推理功能完全对齐 GPU ,支持 W8A8C8 等多种量化方法,支持 Llama 系列模型,飞桨也对 K100 AI 芯片进行了性能精调,大幅度提升推理性能。
文档传送门:
https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/docs/dcu_install.md
燧原 GCU 基于飞桨插件式松耦合统一硬件适配方案( CustomDevice )支持大模型推理,算子层面极致融合优化如位置编码、注意力机制、归一化算子等,使得大模型推理性能显著提升。
https://github.com/PaddlePaddle/PaddleNLP/tree/develop/llm/gcu
飞桨 CPU 集成 xFT ( xFasterTransformer )加速引擎,基于xDNN、oneDNN、OMP、x86-SIMD-sort等加速库,结合 AVX512、 AMX 加速指令,提供 x86 架构下高性能推理能力。飞桨 CPU 支持 FP16/BF16、Weight Ony INT8 等精度类型推理,支持使用 HBM 加速大模型推理。
文档传送门:
https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/docs/inference.md