Google 开源 XSE,AI 排序模型怎样减少服务端开销
2026 年 11 月 5 日,Google 宣布开源 XLA Serving Engine,简称 XSE,将 Python 中开发的模型导出后,交给 C++ 运行时提供推理服务。对维护推荐、排序和视觉编码模型的团队,这多了一条精简请求路径的部署选择。本文从一次排序请求出发,拆解它省在哪些环节、官方提速数据对应什么条件,以及第一轮试用应该测什么。Google 官方公告

[配图建议:模型材料变成可交付方块,经过运行底座输出排序结果 + 纸雕与陶瓷质感的科技编辑插画。]
一、模型训练完成,线上服务还要接住哪些工作
把一个模型放到线上,需要围绕计算本身处理很多事情。请求怎样进入、输入怎样变成张量、几个请求何时合批、结果怎样返回,都可能占用 CPU、内存和用户等待时间。
XSE 以 Apache 2.0 许可证开放,提供模型打包工具和 C++ 推理运行时。当前仓库将推荐与排序、视觉和多模态编码器、编码式语言模型列为适用负载。已经使用 JAX 的团队,可以先从一次模型前向计算的部署开始评估。 项目仓库
导出产物称为 XLA SavedModel。它把计算表示、权重与服务接口放进目录,计算采用 StableHLO 表示,权重使用 Orbax checkpoint 保存。上线时,运行时读取这份产物并执行模型,团队需要明确约定输入名称、形状和数据类型。模型导出指南
对应用团队而言,这改变了模型交付时要准备的材料。算法同事交出的计算和参数,需要与服务端接收的字段一一对应。少了这层约定,服务即使启动成功,真实请求也可能因张量形状或字段名称不符而失败。
仓库也提供通过 torchax 导出 PyTorch 模型的路径,当前导出指南有对应示例。使用这条路径的团队,应围绕自己的算子和输入先验证转换结果,再安排服务性能测试。PyTorch 导出示例与约定
[配图建议:开发端交出计算、权重、输入约定三份材料,汇入一个模型目录 + 清晰的拆解式信息图。]
二、短请求为什么更容易受服务开销影响
设想一个内容推荐场景。用户打开页面,系统给候选内容计算分数,再按分数决定展示顺序。这个例子用于解释请求链路,具体输入和模型由各团队决定。
如果单次模型计算很短,围绕它发生的调度、数据处理和进程通信,就可能占据更明显的时间比例。为了提高并发,团队还可能增加工作进程,同时承担额外的内存占用和管理成本。
XSE 的独立服务把 gRPC、动态请求合批、主机侧前后处理以及设备执行整合在一个 C++ 进程中。它通过 PJRT/IFRT 与设备执行衔接。对适配的模型,开发者可以把精力放到同一条请求路径上观察开销。运行时与服务结构说明
先找出请求耗时落在哪里,再决定迁移是否值得。 如果大部分时间在读取外部特征,优化服务进程只能影响其中一段。如果模型计算本身很长,运行时开销所占比例也会随之变化。
排序还有一个容易影响判断的因素。上游可以每次提交一个候选,也可以把一批候选一起交给模型。后者会摊薄部分固定开销,同时改变请求体积、排队和内存需求。因此,比较新旧服务时,应沿用同一批量和同一延迟要求。
例如,页面必须等全部候选分数回来才能展示,验收就要观察整次排序完成的时间。某个内部调用变快,只有传导到这条完整链路,才会形成用户能感受到的改善。
[配图建议:一次排序请求依次经过输入处理、排队合批、模型计算和结果返回,突出各段耗时位置 + 横向工作流示意图,不使用虚构成绩。]
三、官方的 2—5 倍,要和请求大小一起读
官方基准使用同一个 DLRM-DCNv2 推荐模型,在单台 Cloud TPU v6e-1 虚拟机上比较 XSE 与 Python 服务,各服务固定使用 8 个主机 CPU 核。下表中的吞吐单位是每秒完成的预测项数,结果要求请求的 p99 延迟不超过 20 毫秒,并取三次 30 秒运行的中位数。官方基准与复现代码说明
| 每个请求包含的预测项 | XSE 每秒预测项数 | 最佳 Python 配置每秒预测项数 | XSE 吞吐倍数 |
|---|---|---|---|
| 1 | 30,100 | 6,100 | 5.0 倍 |
| 16 | 83,400 | 42,400 | 2.0 倍 |
| 128 | 92,400 | 81,000 | 1.14 倍 |
其中,“最佳 Python 配置”包含多进程和动态合批等优化。随着一次请求携带的预测项增多,两者差距缩小。基准作者将其中一部分原因归于固定请求开销被摊薄。测试方法与结果
这组数据给选型带来的启发很具体。经常接收小请求的在线服务,可以重点检查请求管理与主机处理。上游已经充分合批的服务,则应把模型计算、特征处理和部署成本一起纳入判断。
每秒预测项数、每秒请求数和单次响应时间,应分别记录。 一次请求里装入更多候选,吞吐统计可能更好看,用户等待却仍取决于整次请求什么时候完成。阅读基准时,把单位和延迟门槛写在数字旁边,比较会清楚很多。
项目对长上下文、自回归长文本生成给出的选型指引是 vLLM、SGLang 等采用专门内存管理的引擎。团队可以按实际负载,把排序与编码服务和持续生成服务分别评估。项目负载范围
[配图建议:并排展示每请求 1、16、128 项三种输入规模,旁边标注官方吞吐倍数与测试门槛 + 数据编辑图表,明确标注“官方基准”。]
四、先完成一次导出核对,再测自己的请求
官方 Quickstart 使用一个小型 Flax 分类模型,依次完成导出、检查目录、进程内验证、容器服务和 gRPC 查询。文档要求 Python 3.12+ 与 Docker,入门模型可以在 CPU 上走通。官方 Quickstart
第一轮可以沿用这个小例子熟悉链路,再换成团队自己的模型。下面四步适合作为一份试点记录。
- 核对产物。 按官方完整示例导出模型后,用
xsm-cli show /tmp/classifier查看内容,再用--details serving_default检查输入输出约定。记录导出版本、权重来源和目标平台。 - 固定输入比较结果。 准备一组相同的特征,分别调用原模型与导出产物,检查输出差异。排序模型还应比较候选顺序,业务可接受的数值误差需要提前约定。
- 沿用真实请求批量压测。 记录吞吐、p50/p99、错误率、主机 CPU 与内存,同时保留冷启动和首次请求时间。将结果与同等资源下的原服务比较。
- 核算迁移成本。 把特征处理调整、接口适配、发布和排障所需工作写下来,结合请求规模决定下一步投入。
导出时还要显式指定目标平台。当前指南列出 cpu、cuda 和 tpu,省略平台参数会默认采用 TPU,对其他运行环境的部署会产生影响。先核对导出目录,再启动目标容器,可以更早发现这类配置问题。目标平台约定
如果你正在维护 JAX 排序服务,最小试点可以只覆盖一个模型和一种常见请求批量。这样,性能变化、数值变化和接口改造都有明确的观察对象,也更容易估算后续维护量。
[配图建议:一页试点记录依次填写导出检查、输出核对、请求压测和迁移工作量 + 工程实验笔记风格插画。]
今天先拆开一条排序请求
XSE 为推荐、排序和编码模型提供了从导出产物到 C++ 服务的路径。已有相应模型和在线负载的团队,可以选一条请求,把特征读取、主机处理、排队和模型计算的时间分别记下来,再决定从哪里开始试用。
你当前的排序服务,最耗时的是准备输入、等待合批,还是模型计算?带着这份记录去读官方基准,更容易判断它能改善自己的哪一段。
[配图建议:工程师在请求时间轴上圈出最值得优化的一段 + 简洁的科技专栏收尾插画。]
资料核查于 2026 年 11 月 8 日,时区 Asia/Shanghai。文中性能数据来自项目官方基准,本站尚未进行性能实测。场景和试点流程为作者分析建议,封面为内置图像生成工具创作的概念插画。