首页 > 其他分享 >vLLM 推理引擎性能分析基准测试

vLLM 推理引擎性能分析基准测试

时间:2024-10-16 15:46:50浏览次数:10  
标签:vllm num -- data 引擎 max model vLLM 推理

文章目录

本篇为 vLLM 性能测试分析篇,vLLM 调研文档请看 vLLM 调研文档

分析步骤

  1. 通过设置环境变量 VLLM_TORCH_PROFILER_DIR 到你想要保存追踪文件的目录来启用追踪,例如:VLLM_TORCH_PROFILER_DIR=/mnt/traces/。OpenAI 服务也需要在设置了VLLM_TORCH_PROFILER_DIR环境变量的情况下启动

    docker run --runtime nvidia --gpus all \
        -v /data1/data_vllm:/data \
        -p 8001:8000 \
        -e VLLM_TORCH_PROFILER_DIR=/data/mnt/traces/ \
        --name qwen_llm_3 \
        --ipc=host \
        swr.cn-east-3.myhuaweicloud.com/kubesre/docker.io/vllm/vllm-openai \
        --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 \
        --max-model-len 102400
    
  2. 使用benchmarks/benchmark_serving.py脚本进行性能测试,输出测试数据集请求情况,以及内存跟踪日志:

    /usr/bin/python3 vllm/benchmarks/benchmark_serving.py --backend vllm --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 --dataset ShareGPT_V3_unfiltered_cleaned_split.json --profile
    
    --dataset ShareGPT_V3_unfiltered_cleaned_split.json:这个参数指定了用于测试的数据集
    --profile:启用性能分析。意味着在运行测试时会收集性能相关的数据,如 GPU 和内存使用情况以及处理请求所需的时间。
    
  3. 上传跟踪日志到 https://ui.perfetto.dev/ 可以进行内存占用可视化分析

案例

案例描述

本案例将分析 --enable-chunked-prefill 的启用/禁用以及 --max-num-batched-tokens 参数的调整对性能的影响情况。
参数描述请参考官方文档:https://docs.vllm.ai/en/stable/models/performance.html#chunked-prefill

测试数据集

线上拉取:https://github.com/vllm-project/vllm/blob/main/benchmarks/README.md

原始数据

〇轮测试(enable-64)

  • 启动参数
docker run --runtime nvidia --gpus all \
    -v /data1/data_vllm:/data \
    -p 8001:8000 \
    -e VLLM_TORCH_PROFILER_DIR=/data/mnt/traces/ \
    --name qwen_llm_3 \
    --ipc=host \
    swr.cn-east-3.myhuaweicloud.com/kubesre/docker.io/vllm/vllm-openai \
    --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 \
    --max-model-len 102000 \
    --max-num-batched-tokens 64 \
    --max-num-seqs 64
    
python3 vllm/benchmarks/benchmark_serving.py --backend vllm --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 --dataset ShareGPT_V3_unfiltered_cleaned_split.json --profile
  • 测试结果
Starting profiler...
Traffic request rate: inf
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [07:38<00:00,  1.63s/it]Stopping profiler...
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [07:38<00:00,  2.18it/s]
============ Serving Benchmark Result ============
Successful requests:                     1000      
Benchmark duration (s):                  458.11    
Total input tokens:                      217393    
Total generated tokens:                  198783    
Request throughput (req/s):              2.18      
Output token throughput (tok/s):         433.92    
Total Token throughput (tok/s):          908.47    
---------------Time to First Token----------------
Mean TTFT (ms):                          220088.62 
Median TTFT (ms):                        221079.64 
P99 TTFT (ms):                           435865.23 
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          67.91     
Median TPOT (ms):                        68.32     
P99 TPOT (ms):                           72.16     
---------------Inter-token Latency----------------
Mean ITL (ms):                           68.05     
Median ITL (ms):                         68.24     
P99 ITL (ms):                            72.45     
==================================================

一轮测试(enable-128)

  • 启动参数
docker run --runtime nvidia --gpus all \
    -v /data1/data_vllm:/data \
    -p 8001:8000 \
    -e VLLM_TORCH_PROFILER_DIR=/data/mnt/traces/ \
    --name qwen_llm_3 \
    --ipc=host \
    swr.cn-east-3.myhuaweicloud.com/kubesre/docker.io/vllm/vllm-openai \
    --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 \
    --max-model-len 102000 \
    --max-num-batched-tokens 128 \
    --max-num-seqs 128
    
python3 vllm/benchmarks/benchmark_serving.py --backend vllm --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 --dataset ShareGPT_V3_unfiltered_cleaned_split.json --profile
  • 测试结果
Starting profiler...
Traffic request rate: inf
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [06:47<00:00,  1.66it/s]Stopping profiler...
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [06:47<00:00,  2.46it/s]
============ Serving Benchmark Result ============
Successful requests:                     1000      
Benchmark duration (s):                  407.00    
Total input tokens:                      217393    
Total generated tokens:                  198440    
Request throughput (req/s):              2.46      
Output token throughput (tok/s):         487.56    
Total Token throughput (tok/s):          1021.69   
---------------Time to First Token----------------
Mean TTFT (ms):                          189093.46 
Median TTFT (ms):                        186896.79 
P99 TTFT (ms):                           377978.23 
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          119.23    
Median TPOT (ms):                        121.42    
P99 TPOT (ms):                           133.46    
---------------Inter-token Latency----------------
Mean ITL (ms):                           118.04    
Median ITL (ms):                         120.48    
P99 ITL (ms):                            127.46    
==================================================

二轮测试(enable-256)

  • 启动参数
docker run --runtime nvidia --gpus all \
    -v /data1/data_vllm:/data \
    -p 8001:8000 \
    -e VLLM_TORCH_PROFILER_DIR=/data/mnt/traces/ \
    --name qwen_llm_3 \
    --ipc=host \
    swr.cn-east-3.myhuaweicloud.com/kubesre/docker.io/vllm/vllm-openai \
    --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 \
    --max-model-len 102000 \
    --max-num-batched-tokens 256
    
python3 vllm/benchmarks/benchmark_serving.py --backend vllm --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 --dataset ShareGPT_V3_unfiltered_cleaned_split.json --profile
  • 测试结果
Starting profiler...
Traffic request rate: inf
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [06:30<00:00,  1.54it/s]Stopping profiler...
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [06:30<00:00,  2.56it/s]
============ Serving Benchmark Result ============
Successful requests:                     1000      
Benchmark duration (s):                  390.70    
Total input tokens:                      217393    
Total generated tokens:                  198786    
Request throughput (req/s):              2.56      
Output token throughput (tok/s):         508.80    
Total Token throughput (tok/s):          1065.22   
---------------Time to First Token----------------
Mean TTFT (ms):                          165589.63 
Median TTFT (ms):                        163038.00 
P99 TTFT (ms):                           349869.23 
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          222.05    
Median TPOT (ms):                        230.34    
P99 TPOT (ms):                           253.39    
---------------Inter-token Latency----------------
Mean ITL (ms):                           216.90    
Median ITL (ms):                         225.01    
P99 ITL (ms):                            454.54    
==================================================

三轮测试(enable-512)

  • 启动参数
docker run --runtime nvidia --gpus all \
    -v /data1/data_vllm:/data \
    -p 8001:8000 \
    -e VLLM_TORCH_PROFILER_DIR=/data/mnt/traces/ \
    --name qwen_llm_3 \
    --ipc=host \
    swr.cn-east-3.myhuaweicloud.com/kubesre/docker.io/vllm/vllm-openai \
    --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 \
    --max-model-len 102000 \
    --max-num-batched-tokens 512
    
python3 vllm/benchmarks/benchmark_serving.py --backend vllm --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 --dataset ShareGPT_V3_unfiltered_cleaned_split.json --profile
  • 测试结果
Starting profiler...
Traffic request rate: inf
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [06:33<00:00,  1.20it/s]Stopping profiler...
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [06:33<00:00,  2.54it/s]
============ Serving Benchmark Result ============
Successful requests:                     1000      
Benchmark duration (s):                  393.35    
Total input tokens:                      217393    
Total generated tokens:                  198794    
Request throughput (req/s):              2.54      
Output token throughput (tok/s):         505.39    
Total Token throughput (tok/s):          1058.05   
---------------Time to First Token----------------
Mean TTFT (ms):                          145934.18 
Median TTFT (ms):                        130854.88 
P99 TTFT (ms):                           331526.83 
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          413.37    
Median TPOT (ms):                        435.94    
P99 TPOT (ms):                           485.53    
---------------Inter-token Latency----------------
Mean ITL (ms):                           387.35    
Median ITL (ms):                         437.46    
P99 ITL (ms):                            712.21    
==================================================

四轮测试(enable-2048)

  • 启动参数
docker run --runtime nvidia --gpus all \
    -v /data1/data_vllm:/data \
    -p 8001:8000 \
    -e VLLM_TORCH_PROFILER_DIR=/data/mnt/traces/ \
    --name qwen_llm_3 \
    --ipc=host \
    swr.cn-east-3.myhuaweicloud.com/kubesre/docker.io/vllm/vllm-openai \
    --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 \
    --max-model-len 102000 \
    --max-num-batched-tokens 2048
    
python3 vllm/benchmarks/benchmark_serving.py --backend vllm --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 --dataset ShareGPT_V3_unfiltered_cleaned_split.json --profile
  • 测试结果
Starting profiler...
Traffic request rate: inf
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [06:44<00:00,  1.52it/s]Stopping profiler...
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [06:44<00:00,  2.47it/s]
============ Serving Benchmark Result ============
Successful requests:                     1000      
Benchmark duration (s):                  404.65    
Total input tokens:                      217393    
Total generated tokens:                  198641    
Request throughput (req/s):              2.47      
Output token throughput (tok/s):         490.90    
Total Token throughput (tok/s):          1028.13   
---------------Time to First Token----------------
Mean TTFT (ms):                          145587.94 
Median TTFT (ms):                        136750.66 
P99 TTFT (ms):                           333788.49 
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          546.50    
Median TPOT (ms):                        481.48    
P99 TPOT (ms):                           1553.99   
---------------Inter-token Latency----------------
Mean ITL (ms):                           440.14    
Median ITL (ms):                         293.70    
P99 ITL (ms):                            1557.57   
==================================================

五轮测试(enable-4096)

  • 启动参数
docker run --runtime nvidia --gpus all \
    -v /data1/data_vllm:/data \
    -p 8001:8000 \
    -e VLLM_TORCH_PROFILER_DIR=/data/mnt/traces/ \
    --name qwen_llm_3 \
    --ipc=host \
    swr.cn-east-3.myhuaweicloud.com/kubesre/docker.io/vllm/vllm-openai \
    --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 \
    --max-model-len 100928 \
    --max-num-batched-tokens 4096
    
python3 vllm/benchmarks/benchmark_serving.py --backend vllm --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 --dataset ShareGPT_V3_unfiltered_cleaned_split.json --profile
  • 测试结果
Starting profiler...
Traffic request rate: inf
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [06:43<00:00,  1.17it/s]Stopping profiler...
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [06:43<00:00,  2.48it/s]
============ Serving Benchmark Result ============
Successful requests:                     1000      
Benchmark duration (s):                  403.73    
Total input tokens:                      217393    
Total generated tokens:                  198567    
Request throughput (req/s):              2.48      
Output token throughput (tok/s):         491.83    
Total Token throughput (tok/s):          1030.30   
---------------Time to First Token----------------
Mean TTFT (ms):                          145208.34 
Median TTFT (ms):                        135880.49 
P99 TTFT (ms):                           333073.43 
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          576.98    
Median TPOT (ms):                        480.20    
P99 TPOT (ms):                           3010.28   
---------------Inter-token Latency----------------
Mean ITL (ms):                           440.17    
Median ITL (ms):                         291.82    
P99 ITL (ms):                            2020.04   
==================================================

六轮测试(enable-8192)

  • 启动参数
docker run --runtime nvidia --gpus all \
    -v /data1/data_vllm:/data \
    -p 8001:8000 \
    -e VLLM_TORCH_PROFILER_DIR=/data/mnt/traces/ \
    --name qwen_llm_3 \
    --ipc=host \
    swr.cn-east-3.myhuaweicloud.com/kubesre/docker.io/vllm/vllm-openai \
    --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 \
    --max-model-len 98832 \
    --max-num-batched-tokens 8192
    
python3 vllm/benchmarks/benchmark_serving.py --backend vllm --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 --dataset ShareGPT_V3_unfiltered_cleaned_split.json --profile
  • 测试结果
Starting profiler...
Traffic request rate: inf
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [06:43<00:00,  1.58it/s]Stopping profiler...
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [06:43<00:00,  2.48it/s]
============ Serving Benchmark Result ============
Successful requests:                     1000      
Benchmark duration (s):                  403.80    
Total input tokens:                      217393    
Total generated tokens:                  198695    
Request throughput (req/s):              2.48      
Output token throughput (tok/s):         492.07    
Total Token throughput (tok/s):          1030.44   
---------------Time to First Token----------------
Mean TTFT (ms):                          145191.92 
Median TTFT (ms):                        137176.88 
P99 TTFT (ms):                           333630.23 
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          590.15    
Median TPOT (ms):                        482.05    
P99 TPOT (ms):                           3091.14   
---------------Inter-token Latency----------------
Mean ITL (ms):                           439.71    
Median ITL (ms):                         290.74    
P99 ITL (ms):                            1798.01   
==================================================

在启用 chunked-prefill 的情况下,max-num-batched-tokens 越小,TTFT 越长,ITL 越短;max-num-batched-tokens 越大,TTFT 越短,ITL 越长。

七轮测试(disable-256)

  • 启动参数
docker run --runtime nvidia --gpus all \
    -v /data1/data_vllm:/data \
    -p 8001:8000 \
    -e VLLM_TORCH_PROFILER_DIR=/data/mnt/traces/ \
    --name qwen_llm_3 \
    --ipc=host \
    swr.cn-east-3.myhuaweicloud.com/kubesre/docker.io/vllm/vllm-openai \
    --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 \
    --max-model-len 256 \
    --max-num-batched-tokens 256 \
    --enable-chunked-prefill false
    
python3 vllm/benchmarks/benchmark_serving.py --backend vllm --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 --dataset ShareGPT_V3_unfiltered_cleaned_split.json --profile
  • 测试结果
Starting profiler...
Traffic request rate: inf
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌| 998/1000 [00:48<00:00, 15.69it/s]Stopping profiler...
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [00:48<00:00, 20.63it/s]
============ Serving Benchmark Result ============
Successful requests:                     296       
Benchmark duration (s):                  48.48     
Total input tokens:                      14909     
Total generated tokens:                  29120     
Request throughput (req/s):              6.11      
Output token throughput (tok/s):         600.72    
Total Token throughput (tok/s):          908.27    
---------------Time to First Token----------------
Mean TTFT (ms):                          8354.34   
Median TTFT (ms):                        7792.90   
P99 TTFT (ms):                           18643.59  
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          409.28    
Median TPOT (ms):                        272.91    
P99 TPOT (ms):                           1815.86   
---------------Inter-token Latency----------------
Mean ITL (ms):                           246.95    
Median ITL (ms):                         175.46    
P99 ITL (ms):                            580.31    
==================================================

八轮测试(disable-512)

  • 启动参数
docker run --runtime nvidia --gpus all \
    -v /data1/data_vllm:/data \
    -p 8001:8000 \
    -e VLLM_TORCH_PROFILER_DIR=/data/mnt/traces/ \
    --name qwen_llm_3 \
    --ipc=host \
    swr.cn-east-3.myhuaweicloud.com/kubesre/docker.io/vllm/vllm-openai \
    --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 \
    --max-model-len 512 \
    --max-num-batched-tokens 512 \
    --enable-chunked-prefill false
    
python3 vllm/benchmarks/benchmark_serving.py --backend vllm --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 --dataset ShareGPT_V3_unfiltered_cleaned_split.json --profile
  • 测试结果
Starting profiler...
Traffic request rate: inf
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [03:14<00:00,  1.15it/s]Stopping profiler...
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [03:14<00:00,  5.15it/s]
============ Serving Benchmark Result ============
Successful requests:                     700       
Benchmark duration (s):                  194.36    
Total input tokens:                      82224     
Total generated tokens:                  108536    
Request throughput (req/s):              3.60      
Output token throughput (tok/s):         558.42    
Total Token throughput (tok/s):          981.47    
---------------Time to First Token----------------
Mean TTFT (ms):                          59907.26  
Median TTFT (ms):                        43205.72  
P99 TTFT (ms):                           149116.64 
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          527.19    
Median TPOT (ms):                        401.10    
P99 TPOT (ms):                           2689.25   
---------------Inter-token Latency----------------
Mean ITL (ms):                           372.15    
Median ITL (ms):                         290.96    
P99 ITL (ms):                            987.35    
==================================================

九轮测试(disable-2048)

  • 启动参数
docker run --runtime nvidia --gpus all \
    -v /data1/data_vllm:/data \
    -p 8001:8000 \
    -e VLLM_TORCH_PROFILER_DIR=/data/mnt/traces/ \
    --name qwen_llm_3 \
    --ipc=host \
    swr.cn-east-3.myhuaweicloud.com/kubesre/docker.io/vllm/vllm-openai \
    --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 \
    --max-model-len 2048 \
    --max-num-batched-tokens 2048 \
    --enable-chunked-prefill false
    
python3 vllm/benchmarks/benchmark_serving.py --backend vllm --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 --dataset ShareGPT_V3_unfiltered_cleaned_split.json --profile
  • 测试结果
Starting profiler...
Traffic request rate: inf
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [06:43<00:00,  2.38it/s]Stopping profiler...
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [06:43<00:00,  2.48it/s]
============ Serving Benchmark Result ============
Successful requests:                     1000      
Benchmark duration (s):                  403.04    
Total input tokens:                      217393    
Total generated tokens:                  198690    
Request throughput (req/s):              2.48      
Output token throughput (tok/s):         492.98    
Total Token throughput (tok/s):          1032.36   
---------------Time to First Token----------------
Mean TTFT (ms):                          142571.62 
Median TTFT (ms):                        135323.01 
P99 TTFT (ms):                           333148.28 
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          668.80    
Median TPOT (ms):                        472.08    
P99 TPOT (ms):                           5647.73   
---------------Inter-token Latency----------------
Mean ITL (ms):                           446.03    
Median ITL (ms):                         305.97    
P99 ITL (ms):                            1420.74   
==================================================

十轮测试(disable-4096)

  • 启动参数
docker run --runtime nvidia --gpus all \
    -v /data1/data_vllm:/data \
    -p 8001:8000 \
    -e VLLM_TORCH_PROFILER_DIR=/data/mnt/traces/ \
    --name qwen_llm_3 \
    --ipc=host \
    swr.cn-east-3.myhuaweicloud.com/kubesre/docker.io/vllm/vllm-openai \
    --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 \
    --max-model-len 4096 \
    --max-num-batched-tokens 4096 \
    --enable-chunked-prefill false
    
python3 vllm/benchmarks/benchmark_serving.py --backend vllm --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 --dataset ShareGPT_V3_unfiltered_cleaned_split.json --profile
  • 测试结果
Starting profiler...
Traffic request rate: inf
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [06:44<00:00,  1.62it/s]Stopping profiler...
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [06:44<00:00,  2.47it/s]
============ Serving Benchmark Result ============
Successful requests:                     1000      
Benchmark duration (s):                  404.60    
Total input tokens:                      217393    
Total generated tokens:                  198856    
Request throughput (req/s):              2.47      
Output token throughput (tok/s):         491.48    
Total Token throughput (tok/s):          1028.78   
---------------Time to First Token----------------
Mean TTFT (ms):                          145568.89 
Median TTFT (ms):                        138366.82 
P99 TTFT (ms):                           333544.04 
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          612.43    
Median TPOT (ms):                        478.76    
P99 TPOT (ms):                           3506.11   
---------------Inter-token Latency----------------
Mean ITL (ms):                           444.17    
Median ITL (ms):                         305.46    
P99 ITL (ms):                            1451.10   
==================================================

十一轮测试(disable-8192)

  • 启动参数
docker run --runtime nvidia --gpus all \
    -v /data1/data_vllm:/data \
    -p 8001:8000 \
    -e VLLM_TORCH_PROFILER_DIR=/data/mnt/traces/ \
    --name qwen_llm_3 \
    --ipc=host \
    swr.cn-east-3.myhuaweicloud.com/kubesre/docker.io/vllm/vllm-openai \
    --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 \
    --max-model-len 8192 \
    --max-num-batched-tokens 8192 \
    --enable-chunked-prefill false
    
python3 vllm/benchmarks/benchmark_serving.py --backend vllm --model /data/Qwen2.5-72B-Instruct-GPTQ-Int4 --dataset ShareGPT_V3_unfiltered_cleaned_split.json --profile
  • 测试结果
Starting profiler...
Traffic request rate: inf
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [06:44<00:00,  1.20it/s]Stopping profiler...
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [06:44<00:00,  2.47it/s]
============ Serving Benchmark Result ============
Successful requests:                     1000      
Benchmark duration (s):                  404.37    
Total input tokens:                      217393    
Total generated tokens:                  198400    
Request throughput (req/s):              2.47      
Output token throughput (tok/s):         490.64    
Total Token throughput (tok/s):          1028.26   
---------------Time to First Token----------------
Mean TTFT (ms):                          145157.15 
Median TTFT (ms):                        138322.92 
P99 TTFT (ms):                           331883.14 
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          609.64    
Median TPOT (ms):                        477.62    
P99 TPOT (ms):                           3823.35   
---------------Inter-token Latency----------------
Mean ITL (ms):                           443.97    
Median ITL (ms):                         303.46    
P99 ITL (ms):                            1575.09   
==================================================

在不启用 chunked-prefill 的情况下,七八轮显示部分失败了,失败原因是超过上下文限制

数据可视化

数据汇总说明

说明1:横轴命名规则为 [序号]-[–enable-chunked-prefill]-[–max-num-batched-tokens],其中序号便于排序,例如:0-enable-64 表示第 0 轮测试,启用 chunked-prefill,max-num-batched-tokens 设置为 64
说明2:以下数据分析均基于本次测试数据集,场景更多类似于日常对话,本次的调优分析并不适合直播数据分析场景
说明3:第七、八轮数据存在因上下文长度超出最大设置长度导致请求失败的情况,数据失真,不在以下仪表板呈现

总览-耗时&吞吐量

1

这里包含了整个测试集的总耗时,输出 token 吞吐量,总(输出+输入) token 吞吐量
除了开启 --enable-chunked-prefill 且 --max-num-batched-tokens 设置较小时会影响总耗时,其他情况几乎无差别,–max-num-batched-tokens 设置越小,触发 chunked-prefill 情况越多,prefill 耗时大于 decode 阶段带来的耗时收益,导致总耗时变长

TTFT(Time To First Token)

2
该指标表示的是第一个 token 生成时间,也即 prefill 阶段的总耗时

  • 启用 --enable-chunked-prefill
    • –max-num-batched-tokens < 512 时,值越大,prefill 耗时越长
    • –max-num-batched-tokens >= 512 之后,prefill 耗时相差不大,应该和测试数据集有关系,长文本的请求较少,触发chunked-prefill 的序列就少
  • 不启用 --enable-chunked-prefill
    • 设置的 --max-num-batched-tokens <= 512 时,数值越小失败请求越多,失败原因是上下文长度超过设置的最大上下文长度(折线图未体现,看原始数据)
    • 设置的 --max-num-batched-tokens >= 2048 时,prefill 耗时几乎一致

TPOT(Time per Output Token)

3
该指标反映的是 decode 阶段输出每个 token 的时间,它衡量的是模型生成 token 的整体速度,不考虑 token 生成的顺序

  • 启用 --enable-chunked-prefill
    • 可以看到这个指标基本上和 TTFT 相反,–max-num-batched-tokens 越短,就越快将序列送去 decode,耗时就越短

ITL(Inter-token Latency)

4
该指标反映的是 decode 阶段 token 连续输出的耗时,它专注于衡量模型生成 token 的流式特性,即一个 token 生成后,下一个 Token 生成前的等待时间。

  • 都是 decode 阶段,它和 TPOT 走势是一致的

结论

  1. 首先声明,测试数据集对测试情况影响会比较大,该测试集为官方提供的 1000 例无长文本(上下文基本在 512内)的测试集,生产调优需要根据场景进行重新分析
  2. –enable-chunked-prefill 如果开启,–max-num-batched-tokens 的大小设置会影响总耗时和吞吐量
    • 如果设置的过小,比如 --max-num-batched-tokens < 256 时,该值越小耗时越长
    • 如果设置 --max-num-batched-tokens >= 256 时,耗时和吞吐量几乎无影响
  3. 相比总耗时和吞吐量,–enable-chunked-prefill 如果开启,–max-num-batched-tokens 的大小设置对 prefill 和 decode 两阶段耗时影响较大
    • –max-num-batched-tokens设置越大 prefill 阶段耗时越短,decode 阶段耗时越长;相反值越小,decode 阶段耗时越短,prefill 阶段耗时越长
    • 但 --max-num-batched-tokens 超过一定值时(本测试集超过 2048 时),两者几乎无波动
  4. –enable-chunked-prefill 如果未开启,请求上下文长度会受限于 --max-num-batched-tokens 的设置,如果值设置的较小,则上下文大于该值的请求将会请求失败
  5. 测试过程中其他结论
    • –max-num-batched-tokens 设置的值需要大于模型上下文长度–max-model-len
    • –max-num-batched-tokens 需要大于 batched 的序列(请求)数量–max-num-seqs
    • –max-num-batched-tokens 的设置还会受到机器可用显存(乘以 --gpu-memory-utilization)限制,因为 KV-Cache 大概需要占用的最大显存大小公式如下:
    KV_cache_size = 2 * n_layers * n_heads * seq_length * d_head * precision * batch_size
    
    这个公式是用来估算 Transformer 模型中 KV 缓存大小的。下面是公式中每个参数的详细解释:
    
    2:这个系数是因为每个注意力头都有两个张量需要被缓存:键(Key)和值(Value)张量。所以,对于每个头,我们都需要存储两个张量的内存。
    n_layers:模型中注意力层的总数。在 Transformer 模型中,每个编码器或解码器块通常包含一个自注意力层,所以这个数字通常等于模型的块数。
    n_heads:每个注意力层中注意力头的数量。在多头自注意力(Multi-Head Attention)机制中,模型会将注意力机制分割成多个“头”,每个头学习序列的不同部分。
    seq_length:序列的最大长度。这是模型在单次推理中可以处理的输入序列的最大长度,包括提示(prompt)和生成的补全部分(completion)。
    d_head:每个注意力头的隐藏维度。这是每个头中键和值张量的维度大小。
    precision:数据的精度,它决定了每个参数需要多少字节来存储。常见的精度包括:
    - FP32(单精度浮点数):4字节/参数
    - FP16(半精度浮点数):2字节/参数
    - INT8(8位整数):1字节/参数
    batch_size:批处理大小,即模型一次推理中同时处理的序列数量。
    
  6. 以上涉及到各参数描述
    • –max-model-len:默认无值,会取模型配置文件里的最大上下文配置
    • –enable-chunked-prefill:默认不开启,当 --max-model-len > 30k 时,自动开启
    • –max-num-batched-tokens:默认值 512
    • –max-num-seqs:默认值 256
    • –gpu-memory-utilization:默认 0.9;这个参数指定了模型在启动时应该预分配多少百分比的 GPU 内存。增加这个值可以提供更多的内存给模型的 KV 缓存(关键值缓存),有助于提高模型处理大型输入或批量请求的能力。

标签:vllm,num,--,data,引擎,max,model,vLLM,推理
From: https://blog.csdn.net/qq_36221788/article/details/142982659

相关文章

  • 使用博查Web Search API获取搜索引擎的网页链接和文本摘要,给AI/RAG应用增加联网搜索功
    为什么需要WebSearchAPI?各类AINative应用、RAG应用、AIAgent智能体在开发过程都会遇到联网获取互联网网页信息的需求,此时需要得到原始网页链接以及文本摘要,以用于给pipeline中的大模型作为上下文总结使用。但目前仅国外的搜索引擎例如Bing、Google提供此类WebSearch......
  • 火山引擎数智平台 VeDI:A/B 实验互斥域流量分配体系上线
    近日,火山引擎A/B测试平台(DataTester)完成了一次重要升级,推出互斥域流量分配体系,这一功能意味着企业在产品优化策略上有新的突破空间。此次升级的核心亮点是允许企业根据实际需求,灵活地将用户流量分割成多个独立的区块,每个区块都能独立开展一项或多项实验,打破了传统A/B测试中......
  • 到底什么是规则引擎?
            提到规则引擎,很多人都是陌生的,当你打开百度可能会搜到非常多的关于规则引擎的信息。比如有广告、推荐、技术文章等等。随着时代的进步,发展趋势,规则引擎也成为了很大部分低代码平台的核心,甚至你在搜索规则引擎关键字时,都会附带这低代码的字样。这可能说得有点远......
  • java计算机毕业设计工作流引擎在OA办公系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的发展,办公自动化(OA)系统已成为现代企业提升管理效率和决策支持能力的重要工具。工作流引擎作为OA系统的核心组件,负责流程的定义、执行和......
  • Java的引擎效验报错-java.lang.VerifyError
    java包直接修改bytecode,经常会报错java.lang.VerifyError,包含非常多种的检查直接修改引擎dll文件去除效验jvm.dll-X64-V21.0.0.0.text:000000018084438F488D0DDA422100learcx,aVerifyingMetho;"Verifyingmethod%s".text:00000001......
  • ncnn:高性能神经网络推理框架
    ncnn:为移动设备打造的高效神经网络推理引擎ncnn是由腾讯AILab开源的一个高性能神经网络推理计算框架,专为移动平台深度优化。它的设计初衷就是为了在移动设备上高效部署和运行深度学习模型,让AI技术真正走进普通用户的日常生活中。主要特点ncnn具有以下几个突出的特点:高性......
  • 【火山引擎】调用火山大模型的方法 | SDK安装 | 配置 | 客户端初始化 | 设置
    豆包(Doubao)是字节跳动研发的大规模预训练语言模型。目录1安装2配置访问凭证3客户端初始化4设置地域和访问域名5设置超时/重试次数1安装通过pip安装PYTHONSDK。pipinstall'volcengine-python-sdk[ark]'2配置访问凭证获取APIKey访问凭证具体步骤......
  • openvino 大模型qwen2.5推理案例
    参看:https://github.com/openvinotoolkit/openvino.genai/releases/tag/2024.4.0.0https://github.com/TommyZihao/openvino_tonypi/blob/main/OpenVINO-0911/AIPC%E4%BB%A3%E7%A0%81/%E3%80%90B1%E3%80%91%E4%B8%89%E8%A1%8C%E4%BB%A3%E7%A0%81%E5%BC%80%E5%90%AF%E5%A4%......
  • AI 推理能力大“翻车”!苹果最新论文:LLM只是复杂的模式匹配,而不是真正的逻辑推理
    内容提要大语言模型真的可以推理吗?LLM都是“参数匹配大师”?苹果研究员质疑LLM推理能力,称其“不堪一击”!文章正文苹果的研究员MehrdadFarajtabar等人最近发表了一篇论文,对大型语言模型(LLM)的推理能力提出了尖锐的质疑,他认为,LLM的“推理”能力,其实只是复杂的模式匹......
  • 昇思MindSpore进阶教程--模型推理总览
    大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。技术上主攻前端开发、鸿蒙开发和AI算法研究。努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧MindSpore可以基于训练好的模型,在不同的硬件平台上执行推理任务。Atlas200/300/500推理产品是面向......