更新时间:2025-07-29 GMT+08:00
分享

PD分离性能调优工具使用说明

PD分离性能调优工具包括两个脚本工具: 性能测试脚本与数据可视化脚本。 PD分离调优时需要使用性能测试脚本分别跑出混推与PD分离的性能数据, 并使用数据可视化工具将两个场景的数据绘制在一起,进行对比分析收益。

PD混合推理性能评测

PD混合推理性能测试执行脚本如下所示:

cd ./llm_tools/PD_separate/ 

sh pd_benchmark_fixed_length.sh 0p0d4m tp2 0.5,1,1.5 openai 127.0.0.1,127.0.0.1,127.0.0.1,127.0.0.1 8088,8089,8090,8091 300 ./model/Qwen2.5-32B-Instruct/ qwen 1024 512 ./benchmark_result 1 901 true

传入的参数共15个,需要一一对应。

其中pd_benchmark_fixed_length.sh如下:

pd_scale=${1:-"1p3d"}
tp_num=${2:-"tp2"}
request_rate_array_str=${3:-"1,2,3,4,5"}
backend=${4:-"openai"}
host=${5:-"127.0.0.1"}
port=${6:-"8080"}
request_num=${7:-"800"}
model_path=${8:-"./models/Qwen2.5-32B-Instruct/"}
served_model_name=${9:-"qwen"}
input_len=${10:-"1024"}
output_len=${11:-"512"}
save_root=${12:-"./result"}
epochs=${13:-"1"}
ascend_version=${14:-"901"}
use_pd_separate=${15:-"true"}


IFS=',' read -r -a request_rate_array <<< "$request_rate_array_str"
save_path=${save_root}/${input_len}-${output_len}/${pd_scale}-${served_model_name}-${tp_num}-${ascend_version}

if [ ! -d "$save_path" ]; then
    mkdir -p "$save_path"
    echo "save_path created: $save_path"
else
    echo "save_path already exists: $save_path"
fi

echo "start"
for request_rate in "${request_rate_array[@]}"; do
    result_name=${save_path}/${input_len}-${output_len}-${request_num}-${request_rate}.csv
    echo "pd_scale: $pd_scale"
    echo "tp_num: $tp_num"
    echo "request_rate: $request_rate"
    echo "backend: $backend"
    echo "host: $host"
    echo "port: $port"
    echo "request_num: $request_num"
    echo "model_path: $model_path"
    echo "served_model_name: $served_model_name"
    echo "input_len: $input_len"
    echo "output_len: $output_len"
    echo "save_root: $save_root"
    echo "save_path: $save_path"
    echo "result_name: $result_name"
    echo "use_pd_separate: $use_pd_separate"
    python ../llm_evaluation/benchmark_tools/benchmark_parallel.py \
        --backend=$backend \
        --host=$host \
        --port=$port \
        --tokenizer=$model_path \
        --served-model-name=$served_model_name \
        --epochs=$epochs \
        --parallel-num=$request_num \
        --request-rate=$request_rate \
        --prompt-tokens=$input_len \
        --output-tokens=$output_len \
        --benchmark-csv=$result_name \
        --use-pd-separate=$use_pd_separate
    wait
    sleep 5s
done
echo "done"

需要自定义的参数如下:

  • pd_scale服务类型,"0p0d4m"表示4个混部实例,用于生成输出结果的路径名,不影响运行
  • tp_num 每个实例使用的显卡数,"tp2"表示2张卡
  • request_rate_array 发送请求的速率列表,"1,2,3,4,5"表示for循环依
  • 次运行1-5的请求速率,用逗号隔开
  • backend 后台服务名称,"openai"表示是vllm的openai服务
  • host 各个实例的ip,"127.0.0.1,127.0.0.1,127.0.0.1,127.0.0.1"表示4个实例的ip均为127.0.0.1,ip的个数需要与port端口个数相同
  • port 各个实例的端口,"8088,8089,8090,8091"分别表示4个实例的端口
  • request_num 总请求数量
  • model_path 模型权重路径
  • served_model_name 启动服务时设置的模型名称
  • input_len 输入长度
  • output_len 输出长度
  • save_root 输出结果的根目录
  • epochs 测试轮数
  • ascend_version 昇腾版本号,仅用于生成输出结果的文件名,可以自定义字符串,不影响运行
  • use_pd_separate 分离部署相关的SLO指标统计开关

根据不同场景,需要调整以上参数,其中request_rate变化较大,刚开始测试时可以只设置单个值,且request_num设置较小,查看输出结果与SLO要求相差多少;到达一定范围后再设置多个值。

运行后的结果打屏如下所示:

运行后会生成csv结果文件,文件路径由传入的参数save_root、input_len、output_len、pd_scale、served_model_name、tp_num、ascend_version组成

PD分离推理性能评测

PD分离参数基本同上,需要修改服务类型名称pd_scale,并且部分参数需要根据服务部署信息稍加修改,如host、port、served_model_name。

sh pd_benchmark_fixed_length.sh 1p3d tp2 0.5,1,1.5 openai 127.0.0.1 8087 300 ./model/Qwen2.5-32B-Instruct/ qwen 1024 512 ./benchmark_result 1 901 true

数据可视化

获取到性能测试结果csv文件后,执行数据可视化脚本:

cd ./llm_tools/PD_separate

python draw_picture_4graph_p90.py \
--ttft-threshold 2000 \
--tpot-threshold 50 \
--requests-num 300 \
--data-root ./benchmark_result/1024-512 \
--data-paths 0p0d4m-qwen-tp2-901 1p3d-qwen-tp2-901
  • ttft-threshold (SLO 要求)首字返回时间,单位是ms
  • tpot-threshold (SLO 要求)平均每个decode返回时间,单位是ms/token
  • requests-num 总请求数
  • data-root 性能数据的根目录
  • data-paths 性能数据根目录下的子目录,仅支持最多两个子目录,用空格隔开;若传入两个子目录,则每个子图会画出两条线;若只有一个子目录,则只有一条线

执行脚本即可获得指定性能数据可视化图片,如下所示:

相关文档