飞桨框架3.0推理升级:支持多款主流大模型、DeepSeek-R1满血版实现单机部署,吞吐提升一倍!

2025-03-13 阅读量 (622)

飞桨新一代框架3.0全面升级了大模型推理能力,依托高扩展性的中间表示(PIR)从模型压缩、推理计算、服务部署、多硬件推理全方位深度优化,能够支持众多开源大模型进行高性能推理,并在DeepSeek V3/R1上取得了突出的性能表现。飞桨框架3.0支持了DeepSeek V3/R1满血版及其系列蒸馏版模型的FP8推理,并且提供INT8量化功能,破除了Hopper架构的限制。此外,还引入了4比特量化推理,使得用户可以单机部署,降低成本的同时显著提升系统吞吐一倍,提供了更为高效、经济的部署方案。

在性能优化方面,我们对MLA算子进行多级流水线编排、精细的寄存器及共享内存分配优化,性能相比FlashMLA最高可提升23%。综合FP8矩阵计算调优及动态量化算子优化等基于飞桨框架3.0的DeepSeek R1 FP8推理,单机每秒输出token数超1000;若采用4比特单机部署方案,每秒输出token数可达2000以上!推理性能显著领先其他开源方案。此外,还支持了MTP投机解码,突破大批次推理加速,在解码速度保持不变的情况下,吞吐提升144%;吞吐接近的情况下,解码速度提升42%。针对长序列Prefill阶段,通过注意力计算动态量化,首token推理速度提升37%。


· H800上256并发不含MTP测试,实验复现请参考文档: 

https://paddlenlp.readthedocs.io/zh/latest/llm/docs/predict/deepseek.html


4比特量化单机高速推理部署


除了支持DeepSeek V3/R1满血版及其系列蒸馏版模型在Hopper架构GPU上部署,飞桨框架3.0 还实现了Weight Only INT8量化,支持在A800部署;此外,还通过Weight Only INT4量化,支持单机部署;相比2机部署方案,大大节省了跨机通信耗时,相同并发下可加速101%~128%。


· H800上不含MTP测试,实验复现请参考文档: 

https://paddlenlp.readthedocs.io/zh/latest/llm/docs/predict/deepseek.html


MLA优化性能大幅领先


结合Hopper架构的特性,我们通过多级流水线编排、精细的寄存器及共享内存分配,深度调优MLA算子性能相比业内最优方案FlashMLA,性能领先4%~23%。下面将详细介绍我们的优化方案。



首先,使用3个Warp Group (WG),WG0作为Producer,进行2阶段的数据搬运操作;WG1与WG2作为Consumer,其中WG1负责计算QK GEMM以及Softmax操作,并将结果存储到共享内存中;而后WG1与WG2共同计算PV GEMM以缓解寄存器压力;这种方式下,我们每次处理64长度的KV,最终占用了225KB的共享内存。



其次,为了将CPV与UPRS操作进行overlap,在上述的基础上,将WG0的流水线增加到四阶段,将PV GEMM与Softmax操作进行overlap。为了节省寄存器与共享内存,我们每次处理32长度的KV,该套实现建议在CUDA12.8版本下使用。



最后,为了进一步对不同操作进行overlap,使用4个Warp Group,其中WG0作为Producer进行4阶段的数据搬运,WG1作为Consumer进行2阶段的QK Gemm与Softmax操作,WG2与WG3负责PV GEMM计算;在使用4个Warp Group后,单线程最大寄存器占用为128个,每次处理32长度的KV;WG0与WG1占用寄存器数量小于72个;WG2与WG3寄存器占用数量约184个;因此,理论上通过更精细化的寄存器划分该方案可行,该方案当前暂开源一套低精度累加实现,后续将持续优化。通过上述一系列的优化,在 Hopper 架构上,MLA 算子速度相较于FlashMLA取得了4%~23%的明显提升。


测试说明:H800 CUDA12.8环境下NCU锁频统计Kernel耗时


MTP高效推理实现大批次加速


飞桨框架3.0在大模型推理方面设计了一套全新的投机解码通用机制,解耦基础模型与投机解码方法,统一了基于草稿模型(Draft Model)、多头投机解码(MTP/Eagle)、参考文献匹配等多种投机解码范式,仅少量代码,即可适配新的投机解码方法。为了极致的性能,我们还化了注意力机制的实现,支持在解码阶段输入的token长度大于1,在草稿token验证阶段,保持批次大小不变的情况下,可一次性完成对所有草稿token的推理验证,解决了大批次下投机解码劣化推理性能的问题。传统的草稿token验证,批次大小一般会膨胀草稿token数量的倍数,我们高效的注意力机制则可以保持原始批次大小,减少计算量,如下图所示:


草稿token验证阶段注意力计算优化


基于DeepSeekV3/R1提供的MTP权重,我们在多个数据集上统计,第二个token的接受率达到80%~90%,达到DeepSeekV3论文效果。基于飞桨框架3.0的高性能优化:

· 基于实验1与实验4,保持解码速度不劣化(此示例中解码速度提升25%),QPS提升144%

· 基于实验2与实验3,保持QPS不劣化(此示例中QPS提升8%),解码速度提升42%

· 基于实验2与实验4,保持批次大小不变,在批处理大小为128较大的时候,依然可以保持QPS提升32%,解码速度提升32%



长序列注意力机制量化加速


长序列推理,由于Attention计算量与序列长度的平方成正比,量化和稀疏都能取得非常好的加速。飞桨框架3.0大模型推理在基于Hopper架构GPU上,集成了Attention动态量化方案SageAttention,并优化了DeepSeek模型中Head Dim为192的情况,在精度近乎无损的基础上,实现了长序列输入Prefill阶段的高性能注意力计算实现,64K长文输入首token推理速度提升37.4%。



SageAttention通过动态的将Q、K矩阵量化为INT8,V矩阵量化为FP8来重新组织Attention计算各阶段的数据类型;在softmax阶段先将INT32的Q*K转换为FP32,之后进行Q*K的反量化,再采用online softmax加速计算;将结果P量化为FP8,与经过FP8量化的V矩阵相乘,之后在进行对V的反量化,得到Attention的计算结果O。上述两次量化和反量化过程在保证精度的前提下,大幅度提升了注意力计算的性能。



一键式脚本快速启动推理


我们提供了一键式脚本,可以帮助开发者们基于飞桨框架3.0快速启动DeepSeek-R1服务,并进行推理请求。为了方便测试性能,在文档【1】(见文末)中我们提供了benchmark脚本进行性能测试,下面我们将给出示例。 为了避免模型过大导致的下载时间过长问题,我们直接提供了自动下载的脚本,支持下载后再启动服务进行推理。进入容器后根据单机或多机模型参考文档【2】(见文末)进行静态图下载。


· 两机推理

以1台H800为例,部署单机4比特量化推理服务。

· 设置变量model_name声明需要下载的模型,具体支持的静态图模型详见文档【3】(见文末)。

· 设置模型存储路径MODEL_PATH,默认挂载至容器内/models路径下(请确认对存储路径MODEL_PATH具有写权限)





export MODEL_PATH=${MODEL_PATH:-$PWD}export model_name="deepseek-ai/DeepSeek-R1/weight_only_int4"docker run --gpus all --shm-size 32G --network=host --privileged --cap-add=SYS_PTRACE \-v $MODEL_PATH:/models \-e "model_name=${model_name}" \-e "MP_NUM=8" \-e "CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7" \-dit ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddlenlp:llm-serving-cuda124-cudnn9-v2.1 /bin/bash \-c -ex 'start_server $model_name && tail -f /dev/null'&& docker logs -f $(docker ps -lq)

· 两机推理

以2台H800机器为例,介绍如何基于PaddlePaddle启动多机DeepSeek-R1服务,首先需要保证2台机器互通,下面均以伪IP为例。


# 第一个节点(master)ping 192.168.0.1# 第二个节点(slave)ping 192.168.0.2
在2个节点上分别执行下列以下命令,一键启动多机推理镜像。
  • IP 设置:POD_IPS 为两机的IP,POD_0_IP 为第一个节点(master)的IP,两机的POD_0_IP 完全相同。
  • 针对两机模型,默认设置为高吞吐下最优的BATCH_SIZE与BLOCK_BS。关于其他环境变量的说明可以查看文档【4】(见文末)。



export MODEL_PATH=${MODEL_PATH:-$PWD}export model_name="deepseek-ai/DeepSeek-R1-2nodes/weight_only_int8" #可更换FP8模型export MP_NNODE=${MP_NNODE:-2}export MP_NUM=${MP_NUM:-16}export POD_0_IP=${POD_0_IP:-"192.168.0.1"}export POD_IPS=${POD_IPS:-"192.168.0.1,192.168.0.2"}export BATCH_SIZE=${BATCH_SIZE:-128}export BLOCK_BS=${BLOCK_BS:-40}docker run --gpus all --shm-size 32G --network=host --privileged --cap-add=SYS_PTRACE \-v $MODEL_PATH:/models \-e "model_name=${model_name}" \-e "MP_NUM=${MP_NUM}" \-e "MP_NNODE=${MP_NNODE}" \-e "CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7" \-e "POD_0_IP=${POD_0_IP}" \-e "POD_IPS=${POD_IPS}" \-e "BATCH_SIZE=${BATCH_SIZE}" \-e "BLOCK_BS=${BLOCK_BS}" \-dit ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddlenlp:llm-serving-cuda124-cudnn9-v2.1 /bin/bash \-c -ex 'start_server $model_name && tail -f /dev/null'&& docker logs -f $(docker ps -lq)

· 请求推理

curl请求示例




curl 127.0.0.1:9965/v1/chat/completions -H 'Content-Type: application/json' \ -d '{ "model":"default", "text":"Hello, how are you?" }'

API请求示例

镜像已经提供openai的依赖,可以进入容器中进行测试




import openaiclient = openai.Client(base_url=f"http://127.0.0.1:9965/v1/chat/completions", api_key="EMPTY_API_KEY")# 非流式返回response = client.completions.create( model="default", prompt="Hello, how are you?", max_tokens=50, stream=False,)print(response)print("\n") # 流式返回response = client.completions.create( model="default", prompt="Hello, how are you?", max_tokens=100, stream=True,)for chunk in response: if chunk.choices[0] is not None: print(chunk.choices[0].text, end='')

以上就是本次推理升级中单机和两机部署DeepSeek-R1服务的示例,请见具体文档【5】(见文末)。

下周一我们还将开展直播课程及实测活动,进一步帮助大家轻松上手体验DeepSeek系列及更多热门大模型的高性能推理部署。


总结


飞桨框架3.0 具备模型压缩工具、高性能推理引擎、服务化部署全栈工具,除了支持DeepSeek、Qwen、Llama、Mixtral等众多热门大模型之外,还提供自研的精度无损的量化压缩方法,支持INT8、FP8、INT4多种精度类型的量化算法,包含TensorCore优化的高性能算子、上下文缓存能力,以及KV Cache 8比特及4比特量化推理等。除英伟达GPU之外,还支持在昆仑芯、昇腾、海光、燧原、太初、Intel CPU等多种硬件上进行大模型推理,欢迎前往多硬件部署文档【6】(见文末)实际体验。未来,飞桨将不断优化推理部署性能,持续为大家提供高水平的技术服务。


文档【1】:

https://github.com/PaddlePaddle/PaddleNLP/tree/develop/llm/benchmark/serving

文档【2】:

https://github.com/PaddlePaddle/PaddleNLP/blob/develop/llm/server/docs/deploy_usage_tutorial.md

文档【3】:

https://paddlenlp.readthedocs.io/zh/latest/llm/docs/predict/deepseek.html

文档【4】:

https://paddlenlp.readthedocs.io/zh/latest/llm/server/docs/deploy_usage_tutorial.html

文档【5】:

https://paddlenlp.readthedocs.io/zh/latest/llm/docs/predict/deepseek.html

文档【6】:

https://paddlenlp.readthedocs.io/zh/latest/llm/docs/predict/devices.html#