训练一个模型是批处理任务。拿一大摞GPU,跑上一段时间,最后要么得到一个检查点,要么得到一张账单。它贵、它烦,但本质上是一次排好期的、有终点的、失败还能忍的操作。跑到第40个小时崩了,重启就是,顶多骂两句。
![]()
服务一个模型不一样。它是一个活着的系统,有延迟预算、有成本上限,还有会当场发现的用户。这是另一类问题,几乎所有上线AI功能的团队,都会在发布六周后以最难受的方式撞上它。
"不就是调个API"这句话烧掉的钱,比任何一次宕机都多。
它就是一个队列,只是失败模式很怪
把品牌名去掉。一个推理端点就是GPU池前面的一个队列:请求进来、被批处理、被计算、被返回。就这样。你建过这种东西,它就是一个后端很贵的Web服务。
怪的地方在方差。普通API的单请求成本大致可预测——哈希一个字符串、命中一次缓存、跑一条查询。推理不是这样。一个请求的成本取决于输入多少token、输出多少token,而输出是逐token生成的,所以一个看起来很小的请求,如果模型决定啰嗦,能跑上三十秒。
这意味着你的容量规划默认就是错的。你按每秒请求数做的预留,实际拿到的是一个受token吞吐量限制的系统,一条糟糕的提示词能吃掉五十条正常请求的容量。
解法很无聊,也没人爱听:必须限制输出。max_tokens不是可选项,是承重墙。还必须流式输出,因为一个20秒的非流式响应会在负载均衡器那里超时,然后你去排查一个超时,而它其实只是生成太慢。
钱在批处理里
这个数字才关键。GPU推理在批大小为1时效率低得离谱。硬件是为搬运矩阵设计的,一次只处理一个请求,大部分硅片都在闲着。
连续批处理——服务器在槽位空出时动态把请求塞进正在跑的批次——是单位token成本上最大的一根杠杆。从朴素服务方式切走,吞吐量能提升5到10倍。不是因为换了更好的模型,是因为换了更好的队列。
账单涨了,所有人都去换更大的模型。几乎没人检查自己是不是在用批大小4跑服务。
智能体让这件事真正变难
把上面所有东西再乘上一个智能体循环。智能体不是一次推理调用,它是一个循环:调模型、拿到工具调用、执行工具、喂回结果、重复。你的延迟不是一次生成,是N次生成加上工具耗时,而整件事必须塞进用户的耐心之内。
每次都有三样东西出问题:
- 重试会级联。工具调用失败,模型重试,以另一种方式失败,再重试,于是一个用户动作烧掉了十二次推理调用和十万token。没有硬性的步数预算和工具调用去重检查,你会从账单上发现这件事。
- 上下文成本按平方增长。每一轮都重发全部历史,第20轮的输入token是第1轮的20倍。截断、摘要、缓存都得下狠手。前缀缓存只要可用就不是优化项,是入场券。
- 状态放错了地方。循环跑在请求处理器里,一次部署就会把所有在跑的智能体中途杀掉。智能体需要持久化状态,最好是工作流引擎,让循环能活过进程。
没人做预算的可观测性缺口
传统APM会告诉你端点240毫秒返回200 OK。它不会告诉你智能体循环了九次,其中一次工具调用被执行了两遍。
每次推理调用要记四样东西:输入输出token数、模型、首token延迟、总延迟。每次智能体运行再记:步数、带参数哈希的工具调用、终止状态。没有这些,成本和质量的账你都在猜,而在一个成本可变的backend上猜成本,就是产品从赚钱滑向不赚钱的方式。
那到底该建什么
能缓存的全缓存。限制输出。流式输出。服务端做批处理。给智能体设步数预算。从第一天起就按调用记录token。任何带循环的东西都上持久化工作流。
没有一条是新的。这只是把普通的后端纪律,用在一个行为比平常更糟的后端上。卡住的团队不缺ML人才,缺的是一个在生产环境里跑过队列的人。
说到底,一切都是分层。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.