AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


【AI-智算】DeepSeek-r1:671b性能压测&H100

发布日期:2025-03-11 22:07:31 浏览次数: 1559 来源:阿程iwiki
推荐语

深入解析AI推理集群性能优化,揭秘DeepSeek-r1在大规模并发下的表现。

核心内容:
1. DeepSeek-r1推理集群在实际使用中遇到的性能挑战
2. 选择的LLM性能压测工具及其特点
3. 测试环境配置及软件环境设置

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家

 

前言

继上次结合K8s、SGLang、LWS 等技术栈,完成分布式 DeepSeek-r1 推理集群的部署后,经过几天的实际使用,发现当并发数达到一定阈值时,性能出现下降。为进一步评估和优化集群性能,现对已部署的 DeepSeek-r1 推理集群进行深入的性能压测。

选型LLM 性能压测工具

经过调研,选择 推理引擎 SGLang 自带的 sglang.bench_serving 基准测试工具,以及 Locust 和 EvalScope 两款成熟的性能测试工具,进行全面的性能评估。

测试环境

  • • CPU:INTEL(R) XEON(R) PLATINUM 8558 * 2 (192核/台)
  • • GPU:NVIDIA H100 80GB HBM3 * 2台(共计16卡,显存:1280GB)
  • • RAM:2.0TB/台
  • • OS:Ubuntu 22.04.5 LTS
  • • RDMA:4 * IB(400 Gb/s)

软件环境

软件 版本 备注
Kubernetes
v1.30.6
容器编排引擎
GPU Operator
v24.9.1
自动化管理配置GPU驱动程序
Volcano
v1.9.0
调度引擎
NVIDIA Driver
560.35.03
GPU驱动
NVIDIA-Fabric Manager
560.35.03
NVSwitch互联
CUDA
12.6

MLNX_OFED
24.10-0.7.0.0
IB驱动
NCCL
2.21.5
GPU多卡通信
SGLang
v0.4.2.post4-cu125
LLM推理引擎
LeaderWorkerSet
v0.5.1
PodGroup Deploy API
Open-WebUI
v0.5.14
AI聊天互动工具

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-18 18:10:16 __init__.py:190] Automatically detected platform cuda.
batch size: 16
latency: 2.46 s
output throughput: 104.01 token/s
(input + output) throughput: 6760.66 token/s
batch size: 1
latency: 4.64 s
output throughput: 27.61 token/s
(input + output) throughput: 55.22 token/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-18 18:10:55 __init__.py:190] Automatically detected platform cuda.
batch size: 16
latency: 2.50 s
output throughput: 102.31 token/s
(input + output) throughput: 6650.28 token/s
batch size: 10
latency: 58.57 s
output throughput: 218.54 token/s
(input + output) throughput: 437.07 token/s

Locust

1. 简介

官网地址:https://locust.io

Locust 是一款开源的性能和负载测试工具,主要用于测试 HTTP 和其他协议的性能。它的最大优势是,用户可以用简单的 Python 代码来定义测试,灵活且易于使用,并且提供Web UI界面,在测试过程中,可以实时查看吞吐量、响应时间和错误情况,或者将数据导出以供后续分析。

2. 安装

~# pip3 install locust

~# locust --version
locust 2.32.9 from /usr/local/lib/python3.10/dist-packages/locust (Python 3.10.12)

3. 编写 Locust 压测脚本

from locust import HttpUser,task, between
import json
class LLMUser(HttpUser):
    wait_time = between(12)  # 每个用户请求间隔1s
    @task
    def generate_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-17 17:35:34,204] mgmt-ser-14-128/INFO/locust.main: Starting Locust 2.32.9
[2025-02-17 17:35:34,204] mgmt-ser-14-128/INFO/locust.main: Starting web interface at http://0.0.0.0:8089

5. 开启压测

配置模拟的总用户数和每秒需创建的用户(默认每秒1个)。

先看下测试结论,仅供参考~,目前暂未进行任何优化措施。

并发数
执行时长
Requests
Request Average (ms)
Generation Throughput (Token/s) Mean
RPS
Response 95%ile (ms)
Fails
5
3m
124
5536.67
65.1
0.7
6100
0
10
3m
207
6834.01
99.6
1.16
7900
0
20
10m
1207
8221.2
276
2.01
9500
0
30
10m
1617
9242.92
390
2.7
11000
0
50
10m
2218
11378.08
449
3.71
14000
0

5.1 并发数 5

5.2 并发数 10

查看压测过程及报告

5.3 并发数 20,每秒创建1个用户,执行时长10m

5.4 并发数 30,每秒创建1个用户,执行时长10m

5.5 并发数 50,每秒创建1个用户,执行时长10m

EvalScope

1. 简介

官网:https://evalscope.readthedocs.io

EvalScope是魔搭社区官方推出的模型评测与性能基准测试框架,内置多个常用测试基准和评测指标,如MMLU、CMMLU、C-Eval、GSM8K、ARC、HellaSwag、TruthfulQA、MATH和HumanEval等;支持多种类型的模型评测,包括LLM、多模态LLM、embedding模型和reranker模型。EvalScope还适用于多种评测场景,如端到端RAG评测、竞技场模式和模型推理性能压测等。

EvalScope 架构图
EvalScope 架构图

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
GPU使用情况通过torch.cuda.max_memory_allocated函数获取,因此此处不展示GPU使用情况
GPU使用情况通过torch.cuda.max_memory_allocated函数获取,因此此处不展示GPU使用情况

并发数:10

3.2 通过Python脚本测试:

 #!/usr/bin/env python

from evalscope.perf.main import run_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)
吞吐量(平均每秒处理的token数)
Average QPS
平均每秒请求数(Queries Per Second)
Average latency (s)
平均延迟时间(秒)
Average time to first token (s)
平均首次token时间(秒)
Average time per output token (s)
平均每个输出token的时间(秒)
Average input tokens per request
每个请求的平均输入token数
Average output tokens per request
每个请求的平均输出token数
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
输入的token数量
Output tokens
输出的token数量
Throughput (tokens/s)
吞吐量,指每秒处理token的数量

性能指标

通常把评估大模型服务的指标分为两类。一类是和系统级别的指标,包括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 。

参考资料

  • • ModelScope:https://modelscope.cn/docs
  • • https://docs.locust.io/en/stable/quickstart.html
  • • https://datacrunch.io/blog/deepseek-v3-llm-nvidia-h200-gpu-inference-benchmarking
  • • https://docs.sglang.ai/references/benchmark_and_profiling.html
  • • https://evalscope.readthedocs.io/zh-cn/latest/user_guides/stress_test/speed_benchmark.html#
  • • https://www.modelscope.cn/datasets/gliang1001/ShareGPT_V3_unfiltered_cleaned_split/files
  • • https://github.com/sgl-project/sglang/tree/main/benchmark/deepseek_v3#example-serving-with-four-a1008-nodes@

 


53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询