2. 性能基准与监控:性能基准测试方法、关键监控指标与常用工具

性能调优的第一步是建立可量化的基准。没有基准,优化就失去了方向和验证手段。本章聚焦于如何科学地进行压力测试、生成负载,并解读关键的监控指标,同时介绍业界主流的监控工具栈。

2.1 性能基准测试方法

基准测试的核心目标是模拟真实或预期的生产负载,测量系统在稳态下的表现。错误的测试方法会导致误导性的结论。

2.1.1 压力测试与负载生成

压力测试通常分为两种模式:

  • 负载递增测试(Ramp-up Test):从低并发开始,逐步增加请求速率(QPS),观察系统性能曲线的拐点。用于找到系统的最大吞吐量和饱和点。
  • 持续压力测试(Sustained Load Test):在目标 QPS 下持续运行较长时间(如 30 分钟以上),用于检测内存泄漏、GPU 显存溢出或模型推理的长尾延迟。

负载生成工具需要能够模拟真实的请求分布(如请求大小、输入文本长度)。常用的负载生成策略包括:

策略 描述 适用场景
固定速率 以恒定 QPS 发送请求 验证系统在稳定负载下的表现
泊松分布 请求间隔符合泊松分布,模拟真实用户到达 更接近线上真实流量模式
突发流量 短时间内 QPS 急剧上升 测试系统的弹性伸缩和限流能力
实践建议: 在开始大规模压测前,先进行单次请求的延迟测试(Latency Test),确保模型本身没有异常。压测时务必记录客户端和服务端的双向时间戳,以排除网络抖动干扰。

2.1.2 基准测试流程

  1. 定义目标:明确本次测试是找最大 QPS、P99 延迟上限,还是验证特定并发下的稳定性。
  2. 准备环境:确保 GPU 型号、驱动版本、CUDA 版本、模型版本与生产环境一致。
  3. 预热(Warm-up):发送数百个请求,让 GPU 达到工作温度,并触发 JIT 编译和缓存填充。
  4. 执行测试:按预设的负载策略运行测试,持续记录指标。
  5. 收集与分析:汇总 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 状态(利用率、显存、温度、功耗)。适合快速诊断。

下图展示了这三者之间的协作关系:

Model Serving 监控工具栈架构 Model Serving 进程 (暴露 /metrics 端点) NVIDIA DCGM Exporter (GPU 指标采集器) Prometheus Server (指标存储 & 查询) Grafana 仪表盘 nvidia-smi (命令行实时查看) 快速诊断工具

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%)。