news 2026/10/22 1:30:13

如何给LLM推理服务装上仪表盘:TTFT、ITL、吞吐量与队列深度实时监控,Prometheus+Grafana搭建教程(time-to-first-token 第3周)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何给LLM推理服务装上仪表盘:TTFT、ITL、吞吐量与队列深度实时监控,Prometheus+Grafana搭建教程(time-to-first-token 第3周)

【免费下载链接】time-to-first-token

A 10-week, 30-minutes-a-day roadmap for LLM inference serving and optimization. vLLM, SGLang, quantization, speculative decoding, benchmarking.

项目地址:https://gitcode.com/gh_mirrors/ti/time-to-first-token
点击查看免费下载

本教程来自 time-to-first-token 学习路线的第3周(Measurement infrastructure),教你用 Prometheus + Grafana 为 LLM 推理服务搭建实时监控仪表盘,覆盖 TTFT、ITL、吞吐量与队列深度四大核心指标。先搭好"测量透镜",后面的量化、投机解码等所有优化才能被验证。

为什么第3周就要搭监控?

大多数人的错误是:先跑通服务,再优化,最后才想起来看指标——结果调参全靠猜。

time-to-first-token 路线刻意把测量基础设施放在优化之前(第6周才讲量化、第7周才讲投机解码),原因很直接:

没有监控,后面所有优化都不可验证;一份可信的公开 benchmark,本质上就是一个可靠的测量工具加上一个模型。

路线原文的表述是:"Everything after this week is only legible because of this week."(这一周之后的所有内容,都因为这一周才变得可读。)

核心指标速查表:TTFT、ITL、吞吐量、队列深度

在动手之前,先搞清楚仪表盘上的每个面板到底在量什么。这是第3周周一的功课,对应 vLLM 的 metrics 设计文档中定义的核心指标:

指标含义为什么重要
TTFT(Time To First Token)请求发出到收到第一个 token 的耗时主要由 prefill 阶段决定,用户"等回复"的体感延迟
ITL(Inter-Token Latency)两个 token 之间的间隔决定流式输出的流畅度,属于 decode 阶段
吞吐量tokens/s 或 requests/s服务能力的上限,受 KV cache 大小约束
队列深度num_requests_waiting等待中的请求数持续上升 = 服务正在抢占(preempt),性能开始崩塌的前兆
num_requests_running正在运行批处理中的请求数与队列深度配合判断负载水位

⚠️一个关键纪律:TTFT 和 ITL 必须分开记录。把 prefill 和 decode 合并成一个数字,会直接毁掉你的发现——路线在发布前的检查清单中明确要求这一点(见 README.md 的 "Before you publish a benchmark" 一节)。

一键安装步骤:Docker 拉起 Prometheus 和 Grafana

第3周周二的目标是让监控栈跑起来。整个技术栈只需两个容器:

  • Prometheus:负责定时抓取(scrape)你的推理服务暴露的/metrics端点
  • Grafana:负责把抓到的时序数据画成面板(panel)

按官方 Prometheus/Grafana 示例文档操作,用 Docker 部署,把 Prometheus 的抓取目标指向你的 vLLM 服务地址(第2周你已经跑好了一个 OpenAI 兼容的推理端点)。

这里有一个容易踩的坑,路线特别点名提醒:

现在就修 scrape 配置,而不是等到第5周顶着 1000 并发请求时再修。

抓不到指标时,最常见的三个原因:目标地址写错、端口没暴露、服务没开/metrics端点。花 5 分钟在低负载下确认每个面板有数据流,比高负载时排障省事得多。

导入 Grafana 仪表盘:确认面板动起来

周三的动手环节:

  1. 导入现成的 dashboard JSON(vLLM 官方提供了配套的仪表盘模板)
  2. 向服务灌一点"涓流负载"(trickle of load),比如几个并发请求
  3. 肉眼确认每个面板的曲线随负载实时变化——静态数字不算通过

通过标准很简单:加载请求时num_requests_waiting上升、TTFT 曲线波动,松开请求后面板回落。

最快配置方法:把每个指标都映射到面板

周四的功课是把外部权威文档中定义的每一个性能指标,都映射到仪表盘上的一个具体面板。路线给的规则很狠:

没有定义的面板,直接删掉。

也就是说,面板不是越多越好,而是每个面板都要能回答"这个数字的定义是什么、超出多少说明出问题"。这样到第8周讲 Kubernetes 自动扩缩时,你才能用num_requests_waiting(队列深度)而不是 CPU 作为扩缩信号——CPU 驱动的 GPU 服务自动扩缩是这个阶段要避免的经典错误。

仪表盘怎么用:抢占预警与决策点

搭好后,仪表盘立刻有两个实用场景:

1. 抢占预警。路线的"决策点"里写明:如果第5周压测时TTFT 飙升且num_requests_waiting持续攀升,说明服务正在抢占请求——先停下来调--max-num-seqs、--gpu-memory-utilization和 chunked prefill,而不是继续测。在抢占点测出的数据不可发布(见 README.md 的 Decision points)。

2. 为后续优化提供基线。第6周量化(FP8/INT4)、第7周投机解码的每一次改动,都要回看同一组面板:TTFT 变了多少?ITL 变了多少?队列深度在哪个 QPS 开始堆积?

本周学习路径

星期类型任务
周一阅读理解num_requests_running、num_requests_waiting与延迟直方图的定义
周二动手用 Docker 拉起 Prometheus + Grafana,对接你的服务
周三动手导入仪表盘 JSON,用低负载确认面板实时变化
周四阅读把性能工程的每个指标映射到面板,删掉无定义的面板
周五阅读理解"为什么扫请求速率而不是只测一个点"、为什么饱和点的数据要丢弃

完成每节课后,可以在 progress.md 的 Week 3 清单里勾选打卡;完整路线说明见 README.md。

总结

第3周产出的不是一个玩具仪表盘,而是整个路线的"验证基础设施":

  • ✅ 一块显示TTFT、ITL、吞吐量、队列深度的实时 Grafana 面板
  • ✅ 一份"每个面板都有明确定义"的监控配置
  • ✅ 一套能预警抢占、支撑第5周压测和第6-7周调参的基线

记住这条路线的排序哲学:先装仪表盘,再谈优化——没有透镜的优化,只是碰运气。

【免费下载链接】time-to-first-token

A 10-week, 30-minutes-a-day roadmap for LLM inference serving and optimization. vLLM, SGLang, quantization, speculative decoding, benchmarking.

项目地址:https://gitcode.com/gh_mirrors/ti/time-to-first-token
点击查看免费下载
上一篇:Zeek NTP 协议分析器全解析:从 main.zeek 脚本到 binpac 底层解析与日志输出
下一篇:SourceGit完全指南:10个理由为什么这个开源Git GUI客户端值得尝试

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/22 1:24:40

3 条命令开局:免费玩三国杀网页版,1600 余名武将随你挑

3 条命令开局:免费玩三国杀网页版,1600 余名武将随你挑 【免费下载链接】noname 项目地址: https://gitcode.com/GitHub_Trending/no/noname 无名杀(noname)是一款开源的三国杀网页版,把整副牌搬进了浏览器。项…

作者头像 李华
网站建设 2026/10/22 1:24:37

iloader:免费开源 iOS 侧载工具一键安装 SideStore 完整指南

iloader:免费开源 iOS 侧载工具一键安装 SideStore 完整指南 【免费下载链接】iloader User friendly sideloader 项目地址: https://gitcode.com/GitHub_Trending/iloa/iloader iloader 是一款免费开源(MIT 协议)的 iOS 侧载工具&…

作者头像 李华
网站建设 2026/10/22 1:20:44

树莓派智能小车红外避障实验指导书

1.下载代码 sudo python 红外避障实验.py 代码: from LOBOROBOT import LOBOROBOT # 载入机器人库 from gpiozero import Button from gpiozero import LED from time import sleep import sys clbrobot LOBOROBOT() # 实例化机器人对象SensorRight Button(16,…

作者头像 李华