ERNIE-4.5-300B-A47B
一、环境准备
1.1 支持情况
ERNIE-4.5-300B-A47B各量化精度,在下列硬件上部署所需要的最小卡数如下:
WINT8 | WINT4 | FP8 | WINT2 | W4A8 | |
---|---|---|---|---|---|
H800 80GB | 8 | 4 | 8 | 2 | 4 |
A800 80GB | 8 | 4 | / | 2 | 4 |
注:
1. 在启动命令后指定--tensor-parallel-size 4
即可修改部署卡数
2. 由于仅提供4卡量化scale,W4A8模型需部署在4卡
3. 表格中未列出的硬件,可根据显存大小进行预估是否可以部署
1.2 安装fastdeploy
-
安装,请参考Fastdeploy Installation完成安装。
-
模型下载,请参考支持模型列表。请注意使用Fastdeploy部署需要Paddle后缀的模型
二、如何使用
2.1 基础:启动服务
通过下列命令启动服务
python -m fastdeploy.entrypoints.openai.api_server \
--model baidu/ERNIE-4.5-300B-A47B-Paddle \
--tensor-parallel-size 8 \
--quantization wint4 \
--max-model-len 32768 \
--kv-cache-ratio 0.75 \
--max-num-seqs 128
其中:
- --quantization
: 表示模型采用的量化策略。不同量化策略,模型的性能和精度也会不同。可选值包括:wint8
/ wint4
/ block_wise_fp8
(需要Hopper架构)。
- --max-model-len
:表示当前部署的服务所支持的最长Token数量。设置得越大,模型可支持的上下文长度也越大,但相应占用的显存也越多,可能影响并发数。
更多的参数含义与默认设置,请参见FastDeploy参数说明。
2.2 进阶:如何获取更优性能
2.2.1 评估应用场景,正确设置参数
结合应用场景,评估平均输入长度、平均输出长度、最大上下文长度
- 根据最大上下文长度,设置max-model-len
。例如,平均输入长度为1000,输出长度为30000,那么建议设置为 32768
- 启用服务管理全局 Block
export ENABLE_V1_KVCACHE_SCHEDULER=1
2.2.2 Prefix Caching
原理: Prefix Caching的核心思想是通过缓存输入序列的中间计算结果(KV Cache),避免重复计算,从而加速具有相同前缀的多个请求的响应速度。具体参考prefix-cache
启用方式:
在启动参数下增加下列两行,其中--enable-prefix-caching
表示启用前缀缓存,--swap-space
表示在GPU缓存的基础上,额外开启CPU缓存,大小为GB,应根据机器实际情况调整。
--enable-prefix-caching
--swap-space 50
2.2.3 Chunked Prefill
原理: 采用分块策略,将预填充(Prefill)阶段请求拆解为小规模子任务,与解码(Decode)请求混合批处理执行。可以更好地平衡计算密集型(Prefill)和访存密集型(Decode)操作,优化GPU资源利用率,减少单次Prefill的计算量和显存占用,从而降低显存峰值,避免显存不足的问题。 具体请参考Chunked Prefill
启用方式: 在启动参数下增加即可
--enable-chunked-prefill
2.2.4 MTP (Multi-Token Prediction)
原理: 通过一次性预测多个Token,减少解码步数,以显著加快生成速度,同时通过一定策略保持生成质量。具体请参考投机解码。
启用方式: 在启动参数下增加即可
--speculative-config '{"method": "mtp", "num_speculative_tokens": 1, "model": "${path_to_mtp_model}"}'
2.2.5 W4A8C8量化
原理: 量化可以实现模型的压缩,减少显存占用并加快推理计算速度。对模型MOE部分权重使用per-channel对称4比特量化,激活使用静态per-tensor对称8比特量化,KVCache使用静态per-channel对称8比特量化。以实现更优的推理效果。
启用方式:
需要在启动命令中指定对应的模型名称,baidu/ERNIE-4.5-300B-A47B-W4A8C8-TP4-Paddle
--model baidu/ERNIE-4.5-300B-A47B-W4A8C8-TP4-Paddle
2.2.6 拒绝采样
原理: 拒绝采样即从一个易于采样的提议分布(proposal distribution)中生成样本,避免显式排序从而达到提升采样速度的效果,对小尺寸的模型有较明显的提升。
启用方式: 启动前增加下列环境变量
export FD_SAMPLING_CLASS=rejection
2.2.7 分离式部署
原理: 分离式部署的核心思想是将Prefill 和 Decode 分开部署,在一定场景下可以提高硬件利用率,有效提高吞吐,降低整句时延。具体请参考分离式部署
启用方式: 以单机8GPU,1P1D(各4GPU)部署为例,与默认的混合式部署方式相比, 需要--splitwise-role
指定节点的角色。并通过环境变量FD_LOG_DIR
和CUDA_VISIBLE_DEVICES
将两个节点的GPU 和日志隔离开
export FD_LOG_DIR="log_prefill"
export CUDA_VISIBLE_DEVICES=0,1,2,3
python -m fastdeploy.entrypoints.openai.api_server \
--model baidu/ERNIE-4.5-300B-A47B-Paddle \
--port 8180 --metrics-port 8181 \
--engine-worker-queue-port 8182 \
--cache-queue-port 8183 \
--tensor-parallel-size 4 \
--quantization wint4 \
--splitwise-role "prefill"
export FD_LOG_DIR="log_decode"
export CUDA_VISIBLE_DEVICES=4,5,6,7
# 注意innode-prefill-ports指定为Prefill服务的engine-worker-queue-port
python -m fastdeploy.entrypoints.openai.api_server \
--model baidu/ERNIE-4.5-300B-A47B-Paddle\
--port 8184 --metrics-port 8185 \
--engine-worker-queue-port 8186 \
--cache-queue-port 8187 \
--tensor-parallel-size 4 \
--quantization wint4 \
--innode-prefill-ports 8182 \
--splitwise-role "decode"
三、常见问题FAQ
如果您在使用过程中遇到问题,可以在FAQ中查阅。