风扇响,账可能是空的。
训练任务有开始、有结束。你关心的是这批样本跑了没有、每秒多少条、loss 还在不在降、断了能不能从 checkpoint 续。卡在 90% 利用率上,可能在算,也可能在等数据、等集合通信里最慢的那张卡。利用率高,samples/s 不动,作业在空转。空转一晚,早班发现步数没涨,那一晚的电费买的是热。
推理没有「跑完」。用户每来一句,就是一笔新账。TTFT 是第一下。ITL 是后头每个字之间的间隔。P95 是那条让客服打电话来的尾巴。平均值会骗人。一百个请求里九十五个 0.4 秒,五个 8 秒,平均仍好看。被骂的是那五个。
GPU 利用率两边的大盘都会画。它是温度计。训练可以用它发现有没有卡住。推理也可以用它看有没有余量。它不能替 TTFT 值班。92% 很忙,P95 6 秒,告警如果只绑利用率,夜里没人起来。早班会把「卡在转」三个字丢给你。三个字对训练成立,对这通客服电话不成立。
分账的后果很具体。训练集群抢了推理的卡,samples/s 好看,助手第一下排队。反过来,推理把并发拉满,训练作业的梯度同步被拉成斜线,checkpoint 对不齐。两本账要分队列、分限额、分告警。混在一个「GPU 健康」里,出事时两边都有理由说自己是绿的。告警绑利用率,夜里没人起来;告警绑 P95,六点的客服电话会少一截。
混部更危险。同一条机器上既跑训练又跑推理,samples/s 和 TTFT 会抢同一块 KV 和同一条 PCIe。训练一个 step 卡住 20 秒,推理的 P95 跟着烂。看起来都是 GPU 忙。分账之后你才知道该杀作业还是该拒长请求。
这一坐只做一件事:看见六个数,把它们放回各自的账本。放错了,后面 KV、工作点、回滚都会跟错对象。训练作业结束可以睡觉。推理请求下一秒还来。两本账的值班窗口本来就不一样,硬合成一张「GPU 健康」,是后来那通六秒电话的根。