大模型基准测试

python3 benchmark_serving.py --help
usage: benchmark_serving.py [-h] [--backend {tgi,vllm,lmdeploy,deepspeed-mii,openai,openai-chat,tensorrt-llm,scalellm,sglang}]
                            [--base-url BASE_URL] [--host HOST] [--port PORT] [--endpoint ENDPOINT]
                            [--dataset-name {sharegpt,burstgpt,sonnet,random,hf}] [--dataset-path DATASET_PATH]
                            [--max-concurrency MAX_CONCURRENCY] --model MODEL [--tokenizer TOKENIZER] [--best-of BEST_OF]
                            [--use-beam-search] [--num-prompts NUM_PROMPTS] [--logprobs LOGPROBS] [--request-rate REQUEST_RATE]
                            [--burstiness BURSTINESS] [--seed SEED] [--trust-remote-code] [--disable-tqdm] [--profile] [--save-result]
                            [--metadata [KEY=VALUE ...]] [--result-dir RESULT_DIR] [--result-filename RESULT_FILENAME] [--ignore-eos]
                            [--percentile-metrics PERCENTILE_METRICS] [--metric-percentiles METRIC_PERCENTILES]
                            [--goodput GOODPUT [GOODPUT ...]] [--sonnet-input-len SONNET_INPUT_LEN]
                            [--sonnet-output-len SONNET_OUTPUT_LEN] [--sonnet-prefix-len SONNET_PREFIX_LEN]
                            [--sharegpt-output-len SHAREGPT_OUTPUT_LEN] [--random-input-len RANDOM_INPUT_LEN]
                            [--random-output-len RANDOM_OUTPUT_LEN] [--random-range-ratio RANDOM_RANGE_RATIO]
                            [--random-prefix-len RANDOM_PREFIX_LEN] [--hf-subset HF_SUBSET] [--hf-split HF_SPLIT]
                            [--hf-output-len HF_OUTPUT_LEN] [--tokenizer-mode {auto,slow,mistral,custom}]
                            [--served-model-name SERVED_MODEL_NAME] [--lora-modules LORA_MODULES [LORA_MODULES ...]]

# Benchmark the online serving throughput.   # 这是说明,脚本是用来评测模型在线推理吞吐量的。

options:
  -h, --help            show this help message and exit   # 显示帮助信息并退出
  --backend {tgi,vllm,lmdeploy,deepspeed-mii,openai,openai-chat,tensorrt-llm,scalellm,sglang}  
                        # 指定后端框架或服务类型,例如 vllm、tgi 等
  --base-url BASE_URL   Server or API base url if not using http host and port.  # 如果不指定 host/port,用这个 URL
  --host HOST           # 服务 host
  --port PORT           # 服务端口
  --endpoint ENDPOINT   API endpoint.  # API 接口路径
  --dataset-name {sharegpt,burstgpt,sonnet,random,hf}  
                        # 要用来 benchmark 的数据集类型
  --dataset-path DATASET_PATH
                        # 数据集路径,或者 HuggingFace 数据集 ID
  --max-concurrency MAX_CONCURRENCY
                        # 最大并发请求数,用于限制同时发送的请求数量
  --model MODEL         Name of the model.  # 模型名称或路径
  --tokenizer TOKENIZER
                        # 指定分词器,默认用模型自带
  --best-of BEST_OF     Generates `best_of` sequences per prompt and returns the best one.  # 每个 prompt 生成多条序列,取最佳
  --use-beam-search     # 使用 beam search 解码
  --num-prompts NUM_PROMPTS
                        # 要处理的 prompt 数量
  --logprobs LOGPROBS   Number of logprobs-per-token to compute & return as part of the request.  
                        # 每个 token 返回的 logprob 数量
  --request-rate REQUEST_RATE
                        # 每秒发送请求数
  --burstiness BURSTINESS
                        # 请求突发性系数,控制请求时间间隔分布
  --seed SEED           # 随机种子
  --trust-remote-code   Trust remote code from huggingface  # 信任 HuggingFace 远程代码
  --disable-tqdm        Specify to disable tqdm progress bar.  # 禁用进度条
  --profile             Use Torch Profiler. The endpoint must be launched with VLLM_TORCH_PROFILER_DIR to enable profiler.  
                        # 使用 Torch Profiler 分析性能
  --save-result         Specify to save benchmark results to a json file  # 保存结果到 JSON
  --metadata [KEY=VALUE ...]
                        # 为本次 benchmark 添加元信息
  --result-dir RESULT_DIR
                        # JSON 保存目录
  --result-filename RESULT_FILENAME
                        # JSON 文件名
  --ignore-eos          Set ignore_eos flag when sending the benchmark request. Warning: ignore_eos is not supported in deepspeed_mii and tgi.  
                        # 忽略 EOS token
  --percentile-metrics PERCENTILE_METRICS
                        # 指定要计算百分位数的指标,例如 ttft、tpot、itl、e2el
  --metric-percentiles METRIC_PERCENTILES
                        # 指定百分位数列表,例如 "25,50,75"
  --goodput GOODPUT [GOODPUT ...]
                        # 服务级别指标设置,如 ttft:1000(单位 ms)
  --tokenizer-mode {auto,slow,mistral,custom}
                        # 分词器模式:auto/slow/mistral/custom
  --served-model-name SERVED_MODEL_NAME
                        # API 中使用的模型名称
  --lora-modules LORA_MODULES [LORA_MODULES ...]
                        # 指定 LoRA 模块子集,每次请求随机选择一个

# sonnet dataset options:
  --sonnet-input-len SONNET_INPUT_LEN
                        # 每条请求输入 token 数
  --sonnet-output-len SONNET_OUTPUT_LEN
                        # 每条请求输出 token 数
  --sonnet-prefix-len SONNET_PREFIX_LEN
                        # 每条请求前缀 token 数

# sharegpt dataset options:
  --sharegpt-output-len SHAREGPT_OUTPUT_LEN
                        # 每条请求输出长度,覆盖 ShareGPT 数据集自带的长度

# random dataset options:
  --random-input-len RANDOM_INPUT_LEN
                        # 随机生成输入 token 数
  --random-output-len RANDOM_OUTPUT_LEN
                        # 随机生成输出 token 数
  --random-range-ratio RANDOM_RANGE_RATIO
                        # 输入/输出长度采样比例范围
  --random-prefix-len RANDOM_PREFIX_LEN
                        # 随机上下文前缀长度,最终长度 = prefix_len + prefix_len*range_ratio

# hf dataset options:
  --hf-subset HF_SUBSET
                        # HuggingFace 数据集子集
  --hf-split HF_SPLIT   # 数据集拆分(train/test/validation)
  --hf-output-len HF_OUTPUT_LEN
                        # 输出 token 数,覆盖数据集自带长度
============ Serving Benchmark Result ============  
Successful requests:                     100        # 成功返回结果的请求数(共发送了100个请求,全都成功执行)  
Benchmark duration (s):                  21.06      # 整个基准测试持续时间,共耗时21.06秒  
Total input tokens:                      51200      # 所有请求的输入token总数(100条 × 每条输入512个token)  
Total generated tokens:                  51200      # 模型生成的输出token总数(100条 × 每条输出512个token)  
Request throughput (req/s):              4.75       # 每秒平均可处理的请求数(Request Per Second,越高代表吞吐量越好)  
Output token throughput (tok/s):         2430.79    # 每秒输出的token数(仅计算生成部分,体现模型生成速度)  
Total Token throughput (tok/s):          4861.57    # 每秒处理的总token数(输入+输出),衡量整体吞吐能力  
---------------Time to First Token----------------  
Mean TTFT (ms):                          3719.54    # 平均“首个token响应时间”(从发送请求到模型输出第一个token的平均延迟,越低越好)  
Median TTFT (ms):                        3792.08    # 中位数TTFT(排除极端值后中间水平的首token延迟)  
P99 TTFT (ms):                           4955.84    # 第99百分位TTFT(最慢1%请求的首token延迟,表示极端情况下响应时间) 
-----Time per Output Token (excl. 1st token)------  
Mean TPOT (ms):                          33.88      # 平均每个输出token生成耗时(不含首token),体现模型连续生成速度  
Median TPOT (ms):                        33.74      # 中位数TPOT,剔除异常延迟后更稳态的生成速度  
P99 TPOT (ms):                           39.43      # 第99百分位TPOT(最慢1%的token生成耗时)  
---------------Inter-token Latency----------------  
Mean ITL (ms):                           34.42      # 平均token间延迟(首token后每个token之间的时间间隔,越低生成越流畅)  
Median ITL (ms):                         31.91      # 中位数token间延迟  
P99 ITL (ms):                            79.97      # 第99百分位token间延迟,说明在极端情况下,token间最大延迟可达约80ms 
==================================================