Command R 08-2024在vLLM下的并发性能测试:TP=8/4/2多输入长度与QPS的TTFT/TPOT/ITL实测

vLLM 推理框架—Command R 08-2024 并发性能

硬件条件:8卡A100的80G显存机器
img_01

示例说明

执行脚本示例
bash cohere_performance.sh \<input_len\> \<output_len\> \<tag\> \<model_path\> \<gpus\> \<qps\>
bash cohere_performance.sh 1024 128 c4ai_32b /models/c4ai-command-r-08-2024/ "0,1,2,3,4,5,6,7" "1 2 4 8 16 32"
常用指标缩写

  • TTFT为首个token 响应时长 (Time to first token)
  • TPOT为每个 token 输出时长 (Time per output token)
  • ITL为跨 token 延迟 (Inter-token latency)
  • QPS为每秒请求数(Queries Per Second)
    ITL是衡量服务器每次处理请求并返回一定数量token所需的时间,而TPOT是衡量服务器处理单个token所需的时间。

    参数说明

    img_02
  • -backend vllm:使用 vLLM 作为后端。
  • -model c4ai-command-r-08-2024:使用指定的模型。
  • -dataset-path \$dataset_path:数据集路径。
  • -sonnet-input-len 1024:每个请求的输入长度。
  • -sonnet-output-len 128:每个请求的输出长度。
  • -num-prompts 200:处理的提示数量。
  • -port 8996:服务端口。
  • -save-result:保存结果。
  • -result-dir \$results_folder:结果目录。
  • -result-filename \$result_filename:结果文件名。
  • -request-rate 8:请求速率,即 QPS(Queries Per Second)。

请求发送机制
请求发送机制取决于如何设置请求速率(QPS)。设置了 --request-rate 8,这意味着每秒发送 8 个请求。这是通过控制请求发送的频率来实现的,而不是等待所有请求处理完毕后再发送新的请求。这种发送机制有助于模拟真实的负载情况,其中请求是连续且均匀地到达的。
img_03

结果解释

根据您提供的运行结果,以下是对关键指标的解释:

  1. Successful requests: 成功处理的请求数量,这里是 200。
  2. Benchmark duration (s): 基准测试持续时间,这里是 57.93 秒。
  3. Total input tokens: 总输入标记数,这里是 202386。
  4. Total generated tokens: 总生成标记数,这里是 25596。
  5. Request throughput (req/s): 请求吞吐量,这里是 3.45 req/s,这表明每秒处理的请求数。
  6. Output token throughput (tok/s): 输出标记吞吐量,这里是 441.87 tok/s,这表明每秒生成的标记数。
  7. Total Token throughput (tok/s): 总标记吞吐量,这里是 3935.70 tok/s,这表明每秒处理的总标记数。

时间到第一个标记(Time to First Token, TTFT)

  • Mean TTFT (ms): 平均时间到第一个标记,这里是 11016.46 毫秒。
  • Median TTFT (ms): 中位数时间到第一个标记,这里是 11005.07 毫秒。
  • P99 TTFT (ms): 第 99 百分位时间到第一个标记,这里是 20009.43 毫秒。

每个输出标记的时间(Time per Output Token, TPOT)

  • Mean TPOT (ms): 平均每个输出标记的时间,这里是 271.92 毫秒。
  • Median TPOT (ms): 中位数每个输出标记的时间,这里是 276.67 毫秒。
  • P99 TPOT (ms): 第 99 百分位每个输出标记的时间,这里是 447.46 毫秒。

标记间延迟(Inter-token Latency, ITL)

  • Mean ITL (ms): 平均标记间延迟,这里是 270.92 毫秒。
  • Median ITL (ms): 中位数标记间延迟,这里是 112.14 毫秒。
  • P99 ITL (ms): 第 99 百分位标记间延迟,这里是 355.09 毫秒。

常用指标缩写

  • TTFT为首个token 响应时长 (Time to first token)
  • TPOT为每个 token 输出时长 (Time per output token)
  • ITL为跨 token 延迟 (Inter-token latency)
  • QPS为每秒请求数(Queries Per Second)
    ITL是衡量服务器每次处理请求并返回一定数量token所需的时间,而TPOT是衡量服务器处理单个token所需的时间。

    c4ai-command-r-08-2024(TP=8)

    input=1024, output=128

    默认条件:vllm=0.6.0,gpu-memory-utilization=0.8,max_model_len=10000,tp=8;
    默认情况:input_tokens=1024,output_tokens=128;

结论:input=1024, output=128情况下,并发约等于4(首token在5秒以内的并发数),每秒tokens生成个数为441.99(GPU计算100%时)
测试条件:200个请求,QPS=1,默认情况,平均首token为0.361s,平均每秒生成128.02个token
img_04
img_05

测试条件:200个请求,QPS=2,默认情况,平均首token为0.505s,平均每秒生成249.92个token
img_06
img_07

测试条件:200个请求,QPS=4,默认情况,平均首token为1.363s,平均每秒生成416.25个token
img_08
img_09

测试条件:200个请求,QPS=8,默认情况,平均首token为11.016s,平均每秒生成441.87个token
img_02
img_03

测试条件:200个请求,QPS=16,默认情况,平均首token为17.655s,平均每秒生成442.59个token
img_10
img_11

测试条件:200个请求,QPS=32,默认情况,平均首token为21.024s,平均每秒生成441.99个token
img_12
img_13

input=8192, output=128

默认条件:vllm=0.6.0,gpu-memory-utilization=0.8,max_model_len=10000,tp=8;
默认情况:input_tokens=8192,output_tokens=128;
结论:input=8192, output=128情况下,并发小于1(首token在5秒以内的并发数),每秒tokens生成个数为67.31(GPU计算100%时)
测试条件:200个请求,QPS=1,默认情况,平均首token为80.999s,平均每秒生成67.42个token
img_14
img_15

测试条件:200个请求,QPS=2,默认情况,平均首token为130.893s,平均每秒生成67.31个token
img_16
img_17

测试条件:200个请求,QPS=4,默认情况,平均首token为155.893s,平均每秒生成67.31个token
img_18
img_19

测试条件:200个请求,QPS=8,默认情况,平均首token为168.318s,平均每秒生成67.25个token
img_20
img_21

测试条件:200个请求,QPS=16,默认情况,平均首token为174.566s,平均每秒生成67.32个token
img_22
img_23

测试条件:200个请求,QPS=32,默认情况,平均首token为177.576s,平均每秒生成67.35个token
img_24
img_25

input=2048, output=128

默认条件:vllm=0.6.0,gpu-memory-utilization=0.8,max_model_len=10000,tp=8;
默认情况:input_tokens=8192,output_tokens=128;
结论:input=8192, output=128情况下,并发约等于2(首token在5秒以内的并发数),每秒tokens生成个数为246.94(GPU计算100%时)
测试条件:200个请求,QPS=1,默认情况,平均首token为0.955s,平均每秒生成127.34个token
img_26
img_27

测试条件:200个请求,QPS=2,默认情况,平均首token为2.542s,平均每秒生成231.27个token
img_28
img_29

测试条件:200个请求,QPS=4,默认情况,平均首token为20.797s,平均每秒生成246.89个token
img_30
img_31

测试条件:200个请求,QPS=8,默认情况,平均首token为33.542s,平均每秒生成246.76个token
img_32
img_33

测试条件:200个请求,QPS=16,默认情况,平均首token为39.907s,平均每秒生成246.93个token
img_34
img_35

测试条件:200个请求,QPS=32,默认情况,平均首token为43.091s,平均每秒生成246.94个token
img_36
img_37

c4ai-command-r-08-2024(TP=4)

input=1024, output=128

默认条件:vllm=0.6.0,gpu-memory-utilization=0.8,max_model_len=10000,tp=4;
默认情况:input_tokens=1024,output_tokens=128;
结论:input=1024, output=128情况下,并发约等于6(首token在5秒以内的并发数),每秒tokens生成个数为530.96(GPU计算100%时)
测试条件:200个请求,QPS=1,默认情况,平均首token为0.290s,平均每秒生成128.11个token
img_38
img_39

测试条件:200个请求,QPS=2,默认情况,平均首token为0.374s,平均每秒生成250.70个token
img_40
img_41

测试条件:200个请求,QPS=4,默认情况,平均首token为0.705s,平均每秒生成458.69个token
img_42
img_43

测试条件:200个请求,QPS=8,默认情况,平均首token为5.945s,平均每秒生成530.33个token
img_44
img_45

测试条件:200个请求,QPS=16,默认情况,平均首token为12.621s,平均每秒生成530.21个token
img_46
img_47

测试条件:200个请求,QPS=32,默认情况,平均首token为15.941s,平均每秒生成530.96个token
img_48
img_49

c4ai-command-r-08-2024(TP=2)

input=1024, output=128

默认条件:vllm=0.6.0,gpu-memory-utilization=0.8,max_model_len=10000,tp=4;
默认情况:input_tokens=1024,output_tokens=128;
结论:input=1024, output=128情况下,并发约等于4(首token在5秒以内的并发数),每秒tokens生成个数为417.52(GPU计算100%时)
测试条件:200个请求,QPS=1,默认情况,平均首token为0.404s,平均每秒生成127.35个token
img_50
img_51

测试条件:200个请求,QPS=2,默认情况,平均首token为0.566s,平均每秒生成247.25个token
img_52
img_53

测试条件:200个请求,QPS=4,默认情况,平均首token为1.771s,平均每秒生成398.80个token
img_54
img_55

测试条件:200个请求,QPS=8,默认情况,平均首token为12.593s,平均每秒生成416.81个token
img_56
img_57

测试条件:200个请求,QPS=16,默认情况,平均首token为19.214s,平均每秒生成417.68个token
img_58
img_59

测试条件:200个请求,QPS=32,默认情况,平均首token为22.490s,平均每秒生成417.52个token
img_60
img_61

本文结束 感谢您的阅读