ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;display: table;padding: 0.5em 1em;color: rgb(63, 63, 63);text-shadow: rgba(0, 0, 0, 0.1) 2px 2px 4px;">前言ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">继上次结合K8s、SGLang、LWS 等技术栈,完成分布式 DeepSeek-r1 推理集群的部署后,经过几天的实际使用,发现当并发数达到一定阈值时,性能出现下降。为进一步评估和优化集群性能,现对已部署的 DeepSeek-r1 推理集群进行深入的性能压测。ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: inherit;color: rgb(0, 152, 116);">选型LLM 性能压测工具ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">经过调研,选择 推理引擎 SGLang 自带的ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">sglang.bench_serving基准测试工具,以及ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">Locust和ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">EvalScope两款成熟的性能测试工具,进行全面的性能评估。ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;">测试环境ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;color: rgb(63, 63, 63);" class="list-paddingleft-1">• CPU:INTEL(R) XEON(R) PLATINUM 8558 * 2 (192核/台)• GPU:NVIDIA H100 80GB HBM3 * 2台(共计16卡,显存:1280GB)软件环境 SGLang Bench:~# python3 -m sglang.bench_one_batch_server --model None --base-url http://127.0.0.1:8000 --batch-size 1 --input-len 128 --output-len 128 INFO 02-1818:10:16__init__.py:190] Automatically detected platform cuda. batch size:16 latency:2.46s output throughput:104.01token/s (input+ output) throughput:6760.66token/s batch size:1 latency:4.64s output throughput:27.61token/s (input+ output) throughput:55.22token/s
:~# python3 -m sglang.bench_one_batch_server --model None --base-url http://127.0.0.1:8000 --batch-size 10 --input-len 1280 --output-len 1280 INFO 02-1818:10:55__init__.py:190] Automatically detected platform cuda. batch size:16 latency:2.50s output throughput:102.31token/s (input+ output) throughput:6650.28token/s batch size:10 latency:58.57s output throughput:218.54token/s (input+ output) throughput:437.07token/s
Locust1. 简介官网地址:https://locust.io Locust 是一款开源的性能和负载测试工具,主要用于测试 HTTP 和其他协议的性能。它的最大优势是,用户可以用简单的 Python 代码来定义测试,灵活且易于使用,并且提供Web UI界面,在测试过程中,可以实时查看吞吐量、响应时间和错误情况,或者将数据导出以供后续分析。
2. 安装~# pip3 install locust
~# locust--version locust2.32.9from/usr/local/lib/python3.10/dist-packages/locust (Python3.10.12)
3. 编写 Locust 压测脚本fromlocustimportHttpUser,task, between importjson classLLMUser(HttpUser): wait_time = between(1,2) # 每个用户请求间隔1s @task defgenerate_text(self): headers = {"Content-Type":"application/json"} data = { "model":"deepseek-r1", "text":"你好,请介绍一下自己", "stream":False } self.client.post("/generate", headers=headers, json=data, timeout=60)
4. 启动 Locust Web UI# locust-f locustfile.py--host http://10.0.x.x:32169
# 日志如下: [2025-02-1717:35:34,204] mgmt-ser-14-128/INFO/locust.main: Starting Locust2.32.9 [2025-02-1717:35:34,204] mgmt-ser-14-128/INFO/locust.main: Starting web interfaceathttp://0.0.0.0:8089
5. 开启压测配置模拟的总用户数和每秒需创建的用户(默认每秒1个)。 先看下测试结论,仅供参考~,目前暂未进行任何优化措施。
| | | | Generation Throughput (Token/s) Mean | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
5.1 并发数 5   5.2 并发数 10 查看压测过程及报告   5.3 并发数 20,每秒创建1个用户,执行时长10m   5.4 并发数 30,每秒创建1个用户,执行时长10m   5.5 并发数 50,每秒创建1个用户,执行时长10m   EvalScope1. 简介官网:https://evalscope.readthedocs.io EvalScope是魔搭社区官方推出的模型评测与性能基准测试框架,内置多个常用测试基准和评测指标,如MMLU、CMMLU、C-Eval、GSM8K、ARC、HellaSwag、TruthfulQA、MATH和HumanEval等;支持多种类型的模型评测,包括LLM、多模态LLM、embedding模型和reranker模型。EvalScope还适用于多种评测场景,如端到端RAG评测、竞技场模式和模型推理性能压测等。
 2. 安装~# pip3 install evalscope-i http://mirrors.aliyun.com/pypi/simple/--trusted-host mirrors.aliyun.com
# 安装额外依赖 ~# pip install evalscope[perf]-U -i http://mirrors.aliyun.com/pypi/simple/--trusted-host mirrors.aliyun.com
3. 启动模型推理性能压测3.1 通过evalscope命令行测试:#!/usr/bin/env bash
evalscope perf \ --parallel 1 \ --url http://10.233.57.205:8000/v1/completions \ --model deepseek-r1 \ --log-every-n-query 5 \ --connect-timeout 6000 \ --read-timeout 6000 \ --max-tokens 2048 \ --min-tokens 2048 \ --api openai \ --dataset speed_benchmark \ --debug
注: speed_benchmark: 测试[1, 6144, 14336, 30720]长度的prompt,固定输出2048个token。 并发数:1
   并发数:10    3.2 通过Python脚本测试:#!/usr/bin/env python
fromevalscope.perf.mainimportrun_perf_benchmark
task_cfg = {"url":"http://10.233.57.205:8000/v1/chat/completions", "parallel":1, "model":"deepseek-r1", "number":15, "api":"openai", "dataset":"openqa", "stream":True} run_perf_benchmark(task_cfg) 并发数:1,请求数:15
  并发数:1 ,请求数:100   并发数:4 ,请求数:20   | 指标 | 说明 | | Time taken for tests (s) | | | Number of concurrency | | | Total requests | | | Succeed requests | | | Failed requests | | | Throughput(average tokens/s) | | | Average QPS | 平均每秒请求数(Queries Per Second) | | Average latency (s) | | | Average time to first token (s) | | | Average time per output token (s) | | | Average input tokens per request | | | Average output tokens per request | | | Average package latency (s) | | | Average package per request | | | Expected number of requests | | | Result DB path | | | Percentile | 数据被分为100个相等部分,第n百分位表示n%的数据点在此值之下 | | TTFT (s) | Time to First Token,首次生成token的时间 | | TPOT (s) | Time Per Output Token,生成每个输出token的时间 | | Latency (s) | | | Input tokens | | | Output tokens | | | Throughput (tokens/s) | |
性能指标通常把评估大模型服务的指标分为两类。一类是和系统级别的指标,包括input token per sec,output token per sec;另一类是请求级别的指标,TPOT,TTFT。 系统级别指标用于衡量整个大模型服务的整体性能和吞吐能力,通常是从全局视角评估系统的效率。 InputToken Per Sec(输入 Token 吞吐量):系统每秒能够处理的输入 token 数量。 OutputToken Per Sec(输出 Token 吞吐量) :系统每秒能够生成的输出 token 数量。大家通常说的 TPS(Token Per Sec)一般都是指 Output TPS。 Concurrency(并发数) :系统在同一时间正在处理的请求数量。 请求级别指标用于衡量单个请求的性能和响应效率,通常是从用户视角评估系统的 SLA。 TTFT (Time to First Token,首 Token 延迟) 从发送请求到系统生成第一个输出 token 的时间。衡量系统对单个请求的响应速度,TTFT 越低,用户体验越好。 TPOT (Time Per OutputToken,单 Token 生成时间) :系统生成每个输出 token 所需的时间。TPOT 越低,模型生成文本的速度越快。 一般 TPOT 需要在 50ms 以内,否则会跟不上人眼的阅读速度,影响阅读体验。 吞吐量直接反映成本。同样的时间能吐的字越多,单个 token 的成本越低。 TPOT 和 TTFT 直接反映服务质量(SLA),更低的 TTFT 和 TPOT 会带来更好的体验。更低的价格和更高的服务质量,二者常常不可得兼。他们之间的桥梁是Concurrency。max-concurrency可以近似看成 decode 阶段的 batch size ,一个过大的 max-concurrency 会提升 GPU 利用率带来更高吞吐更低的成本,但是很多 request 打包在一起导致每个 request 都很高的 TPOT 。 |