AI Infra实战10:AI服务可观测性——推理SLO设计
AI Infra实战10AI服务可观测性——推理SLO设计本篇目标为AI推理服务设计完整的可观测性方案定义SLO、采集关键指标、搭建Grafana面板、配置告警规则。学完本篇你将掌握推理服务 vs 普通微服务的监控差异推理服务的关键指标延迟/吞吐量/队列/GPUSLI/SLO的定义方法Prometheus指标采集配置Grafana推理监控面板设计Error Budget告警策略推理服务 vs 普通微服务的监控差异你已经在监控普通微服务了推理服务有什么不同维度普通微服务AI推理服务延迟通常 100ms通常 500ms-5s模型推理本身就慢资源瓶颈CPU/内存GPU显存和算力流量特征相对均匀突发性强一个长请求占住GPU失败模式崩溃/超时OOM、GPU错误、队列堆积关键指标QPS/延迟/错误率首Token时间、Token生成速度、GPU利用率推理服务的关键指标第一层请求级指标SLI候选指标含义为什么重要Request Latency从请求发出到完整响应的时间用户体感最直接Time to First Token (TTFT)首个token返回的时间流式输出场景用户等的就是这个Tokens Per Second (TPS)每秒生成的token数衡量打字速度Request Success Rate请求成功率可用性Queue Depth等待处理的请求数队列堆积说明GPU忙不过来第二层资源级指标指标含义告警阈值建议GPU UtilizationGPU算力使用率95%持续5分钟 → 需要扩容GPU Memory Used显存使用量90% → 有OOM风险GPU TemperatureGPU温度85°C → 散热异常KV Cache UsageKV Cache占用率95% → 新请求会被拒绝第三层业务级指标指标含义来源并发用户数同时在用的人数应用层统计对话轮次平均每次对话多少轮应用层统计Token消耗每日总token使用量vLLM metricsSLO定义什么是SLI/SLO/Error BudgetSLIService Level Indicator 怎么衡量服务质量 例P99延迟、成功率 SLOService Level Objective 服务质量的目标值 例P99延迟 3秒、成功率 99.9% Error Budget错误预算 允许的不达标额度 例99.9%可用性 → 每月允许43分钟不可用推理服务的SLO示例SLISLO目标衡量窗口说明请求延迟P99 3000ms滚动7天99%的请求3秒内响应首Token延迟P99 1000ms滚动7天流式输出1秒内开始返回请求成功率 99.5%滚动30天允许0.5%失败GPU OOM次数 5次/天每天OOM说明资源配置不合理Error Budget计算SLO 99.5%成功率 每月总请求100万 Error Budget 100万 × 0.5% 5000次失败/月 当前消耗 本月已失败 3000 次 → 已用60%预算 剩余预算2000次 如果消耗速度不变 → 月底前会耗尽 → 触发告警vLLM自带的Prometheus指标vLLM启动时加--enable-metrics或访问/metrics端点# vLLM启动已自带metrics端点vllm serve model--host0.0.0.0--port8000# 查看指标curlhttp://localhost:8000/metricsvLLM暴露的关键指标Prometheus指标名含义vllm:request_duration_seconds请求处理时间vllm:request_success_total成功请求总数vllm:request_failure_total失败请求总数vllm:num_requests_running当前正在处理的请求数vllm:num_requests_waiting队列中等待的请求数vllm:gpu_cache_usage_percKV Cache使用率vllm:prompt_tokens_total输入token总数vllm:generation_tokens_total生成token总数Prometheus采集配置# prometheus.ymlscrape_configs:-job_name:vllm-inferencescrape_interval:15sstatic_configs:-targets:[vllm-service:8000]metrics_path:/metrics-job_name:dcgm-gpuscrape_interval:15sstatic_configs:-targets:[dcgm-exporter:9400]GPU指标DCGM Exporter指标名含义DCGM_FI_DEV_GPU_UTILGPU利用率(%)DCGM_FI_DEV_FB_USED已用显存(MB)DCGM_FI_DEV_FB_FREE空闲显存(MB)DCGM_FI_DEV_GPU_TEMPGPU温度(°C)DCGM_FI_DEV_POWER_USAGE功耗(W)Grafana面板设计面板1推理服务概览PanelPromQL可视化请求QPSrate(vllm:request_success_total[5m])时序图请求延迟P99histogram_quantile(0.99, rate(vllm:request_duration_seconds_bucket[5m]))时序图成功率rate(vllm:request_success_total[5m]) / (rate(vllm:request_success_total[5m]) rate(vllm:request_failure_total[5m]))单值(Stat)队列深度vllm:num_requests_waiting时序图面板2GPU资源PanelPromQL可视化GPU利用率DCGM_FI_DEV_GPU_UTILGauge显存使用率DCGM_FI_DEV_FB_USED / (DCGM_FI_DEV_FB_USED DCGM_FI_DEV_FB_FREE) * 100GaugeGPU温度DCGM_FI_DEV_GPU_TEMP时序图KV Cache使用率vllm:gpu_cache_usage_percGauge面板3SLO达成率PanelPromQL可视化SLO达成率延迟sum(rate(vllm:request_duration_seconds_bucket{le3}[7d])) / sum(rate(vllm:request_duration_seconds_count[7d]))Stat(绿/红)Error Budget剩余自定义计算GaugeSLO趋势按天聚合时序图告警规则# alerting_rules.ymlgroups:-name:vllm-inference-alertsrules:# 延迟告警-alert:InferenceLatencyHighexpr:histogram_quantile(0.99,rate(vllm:request_duration_seconds_bucket[5m]))3for:5mlabels:severity:warningannotations:summary:推理P99延迟超过3秒description:当前P99延迟: {{ $value }}s# 队列堆积告警-alert:InferenceQueueBacklogexpr:vllm:num_requests_waiting10for:2mlabels:severity:warningannotations:summary:推理队列堆积超过10个请求# GPU显存告警-alert:GPUMemoryHighexpr:DCGM_FI_DEV_FB_USED / (DCGM_FI_DEV_FB_USED DCGM_FI_DEV_FB_FREE) * 10090for:5mlabels:severity:criticalannotations:summary:GPU显存使用率超过90%有OOM风险# KV Cache满告警-alert:KVCacheFullexpr:vllm:gpu_cache_usage_perc95for:1mlabels:severity:criticalannotations:summary:KV Cache使用率95%新请求可能被拒绝# 错误率告警-alert:InferenceErrorRateHighexpr:rate(vllm:request_failure_total[5m]) / (rate(vllm:request_success_total[5m]) rate(vllm:request_failure_total[5m]))0.01for:5mlabels:severity:criticalannotations:summary:推理错误率超过1%# Error Budget消耗告警-alert:ErrorBudgetBurnRateHighexpr:|1 - (sum(rate(vllm:request_success_total[1h])) / sum(rate(vllm:request_success_total[1h]) rate(vllm:request_failure_total[1h]))) 14.4 * (1 - 0.995)for:5mlabels:severity:criticalannotations:summary:Error Budget消耗过快按当前速度月底前会耗尽SLO看板设计思路┌─────────────────────────────────────────────────────────┐ │ AI推理服务 SLO 看板 │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │成功率 │ │P99延迟 │ │Error Budget│ │ │ │ 99.7% ✅ │ │ 2.1s ✅ │ │ 剩余62% ⚠️│ │ │ │目标:99.5% │ │目标:3s │ │本月预算 │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ 请求延迟分布P50/P90/P99 │ │ │ │ 时序图 │ │ │ └─────────────────────────────────────────────────┘ │ │ │ │ ┌────────────────────┐ ┌──────────────────────┐ │ │ │ GPU利用率 │ │ 队列深度 │ │ │ │ 72% │ │ 当前:3 / 最大:15 │ │ │ └────────────────────┘ └──────────────────────┘ │ └─────────────────────────────────────────────────────────┘与你工作的关系你现在已经在用PrometheusGrafana监控微服务。推理服务的监控只是你已有的推理服务额外需要的HTTP请求延迟/QPS 首Token延迟、Token生成速度CPU/内存监控 GPU利用率、显存、温度服务可用性 KV Cache使用率、队列深度普通SLO 推理专用SLO延迟3s而不是100ms本质没变——还是Prometheus采指标、Grafana看面板、AlertManager发告警。只是指标变了。费用说明本篇纯设计和配置费用为0。小结本篇核心收获推理服务的指标比微服务多了GPU层和Token层SLO要比微服务宽松——推理延迟天然就高秒级而非毫秒级vLLM自带/metrics端点——直接接Prometheus不需要额外开发三层监控请求级延迟/QPS 资源级GPU/显存 业务级Token消耗Error Budget告警比固定阈值告警更科学——关注剩余预算而非单次波动下一篇预告AI Infra实战11模型部署Pipeline——CI/CD自动化下一篇我们将学习模型CI/CD与代码CI/CD的区别完整的模型发布Pipeline设计模型质量门禁灰度发布和回滚策略参考链接vLLM Metrics文档DCGM ExporterGoogle SRE: SLOPrometheus告警规则Grafana Dashboard最佳实践