4. 性能度量体系

在金融推理系统中,平均延迟几乎不具备决策价值。一笔交易撮合请求的P99从80ms恶化到300ms,均值可能只从35ms升到42ms,但业务侧已经出现大量超时拒单。因此,本章建立一套可落地的性能度量体系:用延迟直方图刻画分布,用分位数锁定尾部,用吞吐量、并发度、错误率和资源利用率描述系统状态,最后用端到端追踪把指标串成因果链。

核心原理:为什么必须看分布而非均值

延迟是典型的右偏分布。多数请求很快,少数请求极慢,均值会被大量快请求“稀释”,掩盖尾部风险。金融场景中,P95/P99/P999才是SLA与风控的核心。分位数计算的关键在于:必须基于直方图桶或精确采样,而非仅保留均值。常用两种方式:

  • 固定桶直方图:如Prometheus的le桶,内存小、可聚合,但桶边界外精度有限。
  • 指数桶/对数桶:适合跨数量级延迟,如1ms~10s,金融推理常用。
  • HDR Histogram:高精度、可合并,适合单机精细分析。

分位数不可直接对多实例的P99求平均,正确做法是合并直方图后重新计算,或使用支持聚合的摘要结构。

方法流程:七类指标的采集与关联

建议按以下顺序建立度量闭环:

  1. 埋点:在请求入口、模型推理前后、下游调用处打时间戳。
  2. 直方图:按接口、模型版本、租户维度记录延迟桶。
  3. 分位数:定时从直方图计算P50/P95/P99/P999。
  4. 吞吐与并发:QPS、在途请求数、队列深度。
  5. 错误率:区分超时、限流、模型异常、下游失败。
  6. 资源利用率:GPU利用率、显存、CPU、网络、批处理大小。
  7. 端到端追踪:用TraceID串联网关、预处理、推理、后处理。

关键原则:分位数回答“多慢”,吞吐量回答“多少”,并发度回答“堵在哪”,错误率回答“坏没坏”,资源利用率回答“为什么”,追踪回答“哪一段”。六者缺一不可。

案例场景:推理服务P99劣化的定位

某量化推理服务P99从120ms升至450ms,但GPU利用率仅55%。按体系排查:

指标观测值判断
P50延迟45ms正常
P99延迟450ms尾部劣化
QPS稳定非流量突增
并发度从20升至80排队加剧
GPU利用率55%未饱和,存在等待
错误率0.3%超时已影响业务

进一步用端到端追踪发现:预处理阶段因Python GIL争用耗时从5ms升至90ms,导致请求在推理前排队。GPU并非瓶颈,真正瓶颈在CPU侧预处理。若只看GPU利用率,会误判为“资源充足”。

trace_id=abc123
gateway      2ms
preprocess  90ms  <-- 异常
queue_wait  210ms <-- 异常
inference   40ms
postprocess  8ms
total       350ms

误区与复盘

误区一:用均值做容量规划。容量必须按P99或P999反推,否则高峰期必然超时。

误区二:跨实例平均分位数。P99不可算术平均,必须合并直方图。

误区三:只看GPU利用率。金融推理链路长,CPU预处理、序列化、网络都可能成为尾部瓶颈。

误区四:错误率与延迟割裂。超时既是错误也是延迟,需统一口径。

复盘结论:建立“直方图—分位数—吞吐/并发—错误—资源—追踪”六层度量,并固定每层的最小可观测字段。只有把P99的劣化定位到具体Span,容量优化才有依据。

金融推理性能度量体系与端到端追踪 延迟直方图 桶/指数/HDR 分位数 P50/P95/P99/P999 吞吐量 / 并发度 QPS / 在途 / 队列 错误率 超时/限流/异常 资源利用率 GPU/显存/CPU/网络 端到端追踪 TraceID / Span 端到端链路示例(TraceID 串联) 网关 2ms 预处理 90ms 排队 210ms 推理 40ms 后处理 8ms

把上述六类指标固化到监控看板与告警规则中,并确保每个P99异常都能下钻到具体Span,是金融推理容量优化的起点。