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 性能数据根目录下的子目录,仅支持最多两个子目录,用空格隔开;若传入两个子目录,则每个子图会画出两条线;若只有一个子目录,则只有一条线
执行脚本即可获得指定性能数据可视化图片,如下所示: