2. 性能基准与监控:性能基准测试方法、关键监控指标与常用工具
性能调优的第一步是建立可量化的基准。没有基准,优化就失去了方向和验证手段。本章聚焦于如何科学地进行压力测试、生成负载,并解读关键的监控指标,同时介绍业界主流的监控工具栈。
2.1 性能基准测试方法
基准测试的核心目标是模拟真实或预期的生产负载,测量系统在稳态下的表现。错误的测试方法会导致误导性的结论。
2.1.1 压力测试与负载生成
压力测试通常分为两种模式:
- 负载递增测试(Ramp-up Test):从低并发开始,逐步增加请求速率(QPS),观察系统性能曲线的拐点。用于找到系统的最大吞吐量和饱和点。
- 持续压力测试(Sustained Load Test):在目标 QPS 下持续运行较长时间(如 30 分钟以上),用于检测内存泄漏、GPU 显存溢出或模型推理的长尾延迟。
负载生成工具需要能够模拟真实的请求分布(如请求大小、输入文本长度)。常用的负载生成策略包括:
| 策略 | 描述 | 适用场景 |
|---|---|---|
| 固定速率 | 以恒定 QPS 发送请求 | 验证系统在稳定负载下的表现 |
| 泊松分布 | 请求间隔符合泊松分布,模拟真实用户到达 | 更接近线上真实流量模式 |
| 突发流量 | 短时间内 QPS 急剧上升 | 测试系统的弹性伸缩和限流能力 |
实践建议: 在开始大规模压测前,先进行单次请求的延迟测试(Latency Test),确保模型本身没有异常。压测时务必记录客户端和服务端的双向时间戳,以排除网络抖动干扰。
2.1.2 基准测试流程
- 定义目标:明确本次测试是找最大 QPS、P99 延迟上限,还是验证特定并发下的稳定性。
- 准备环境:确保 GPU 型号、驱动版本、CUDA 版本、模型版本与生产环境一致。
- 预热(Warm-up):发送数百个请求,让 GPU 达到工作温度,并触发 JIT 编译和缓存填充。
- 执行测试:按预设的负载策略运行测试,持续记录指标。
- 收集与分析:汇总 QPS、延迟分布、GPU 利用率等数据,绘制性能曲线。
2.2 关键监控指标
监控指标是性能调优的“仪表盘”。错误的指标组合会导致误判。以下是 Model Serving 场景下最核心的四类指标:
| 指标类别 | 指标名称 | 说明 | 健康阈值参考 |
|---|---|---|---|
| 吞吐量 | QPS(Queries Per Second) | 每秒处理的请求数。衡量系统处理能力的核心指标。 | 根据业务 SLA 定义 |
| 延迟 | P99 延迟 | 99% 的请求在此时间内完成。反映长尾延迟,直接影响用户体验。 | < 500ms(在线推理) |
| 计算资源 | GPU 利用率 | GPU 计算核心的繁忙程度。过高(>95%)可能意味着计算瓶颈;过低(<30%)可能意味着 I/O 或 CPU 瓶颈。 | 70% - 95% |
| 内存带宽 | GPU 内存带宽利用率 | 显存带宽的实际使用率。Transformer 模型推理通常受限于内存带宽而非计算。 | 通常 > 60% 为高效 |
常见误区: 不要只看 GPU 利用率。当模型为计算密集型(如大卷积)时,GPU 利用率高是好事;但当模型为内存密集型(如大语言模型的自回归解码)时,GPU 利用率可能不高,但内存带宽利用率已饱和,此时优化方向应是减少显存访问(如使用 FlashAttention)。
2.3 常用监控工具
一个完整的监控体系需要覆盖指标采集、存储、可视化和告警。以下是业界最常用的工具组合:
2.3.1 工具栈概览
- Prometheus:开源的指标采集与存储系统。通过拉取(Pull)模式收集指标,支持强大的 PromQL 查询语言。
- Grafana:可视化仪表盘工具。支持 Prometheus 作为数据源,可以创建动态、交互式的监控面板。
- NVIDIA-smi:NVIDIA 提供的命令行工具,用于实时查看 GPU 状态(利用率、显存、温度、功耗)。适合快速诊断。
下图展示了这三者之间的协作关系:
2.3.2 关键命令与配置示例
1. 使用 nvidia-smi 快速查看 GPU 状态
# 实时监控 GPU 利用率、显存、温度
nvidia-smi --query-gpu=index,timestamp,utilization.gpu,memory.used,memory.total,temperature.gpu --format=csv -l 1
2. Prometheus 配置示例(scrape_configs)
scrape_configs:
- job_name: 'model_serving'
static_configs:
- targets: ['localhost:8000'] # 模型服务暴露的 metrics 端口
- job_name: 'nvidia_dcgm'
static_configs:
- targets: ['localhost:9400'] # DCGM Exporter 默认端口
3. Grafana 面板关键查询(PromQL)
# GPU 利用率(取平均值)
avg(rate(DCGM_FI_DEV_GPU_UTIL{job="nvidia_dcgm"}[1m]))
# P99 延迟(假设服务暴露了 histogram 指标)
histogram_quantile(0.99, sum(rate(model_request_duration_seconds_bucket[1m])) by (le))
2.4 性能基准与监控的联动
基准测试和监控不是孤立的。在压测过程中,应实时观察 Grafana 面板上的指标变化。当 QPS 上升时,如果 P99 延迟急剧恶化,同时 GPU 利用率未饱和,说明系统可能存在锁竞争或 CPU 瓶颈;如果 GPU 利用率已接近 100% 但 QPS 不再增长,说明计算资源已耗尽,需要横向扩展。
核心原则: 先建立监控,再开始调优。没有监控的优化是盲目的。建议在项目初期就部署 Prometheus + Grafana + DCGM Exporter 组合,并配置好关键指标的告警规则(如 P99 延迟超过 1s 或 GPU 内存不足 10%)。