vLLM 推理框架—Command R 08-2024 并发性能
硬件条件:8卡A100的80G显存机器
示例说明
执行脚本示例
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所需的时间。参数说明

- -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 个请求。这是通过控制请求发送的频率来实现的,而不是等待所有请求处理完毕后再发送新的请求。这种发送机制有助于模拟真实的负载情况,其中请求是连续且均匀地到达的。
结果解释
根据您提供的运行结果,以下是对关键指标的解释:
- Successful requests: 成功处理的请求数量,这里是 200。
- Benchmark duration (s): 基准测试持续时间,这里是 57.93 秒。
- Total input tokens: 总输入标记数,这里是 202386。
- Total generated tokens: 总生成标记数,这里是 25596。
- Request throughput (req/s): 请求吞吐量,这里是 3.45 req/s,这表明每秒处理的请求数。
- Output token throughput (tok/s): 输出标记吞吐量,这里是 441.87 tok/s,这表明每秒生成的标记数。
- 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


