Model Serving
模型服务会通过网络 API 托管已训练模型,使应用能够发送输入并接收预测结果,同时支持批处理、扩缩容和运行状况检查。
模型服务是指将训练好的机器学习模型托管在网络端点(通常使用 HTTP 或 gRPC)后面,让应用程序可以发送输入并接收预测结果。服务系统会加载一次权重,将其保存在CPU或GPU内存中,接收多个并发请求,将请求组成批次,随流量变化增减副本,切换模型版本,并报告自身健康状况。Google 于 2016 年 2 月开源了 TensorFlow Serving,用于在生产环境中运行 TensorFlow 模型。如今,模型服务是机器学习运维(MLOps)中负责运行时的部分,位于模型打包与预测结果监控之间。
服务系统如何处理请求#
每个请求都会依次经过验证、预处理(例如解码和调整图像尺寸)、队列、模型本身,以及输出为JSON等响应格式的后处理。大多数服务决策都发生在队列中。动态批处理会暂存请求几毫秒,让加速器在一次前向传递中处理多个输入,从而提升吞吐量,只会轻微增加推理延迟。队列已满时,服务器会返回 HTTP 429,拒绝新请求,让客户端退避重试。
服务团队会跟踪 p95 和 p99 等延迟百分位数、每秒请求数等吞吐量指标、加速器利用率、错误率,以及冷启动时间——即副本从零扩容后能够开始响应所需的延迟。版本会逐步上线:金丝雀发布会将一小部分流量发送到新模型;影子部署则会将线上请求的副本发送给新模型,但不会返回新模型的答案。
这个 FastAPI应用会在启动时加载一次YOLO26,并以 JSON 格式返回检测结果。FastAPI 的 TestClient 会在同一进程中让一个请求经过完整的 HTTP 处理流程,因此无需启动服务器即可运行此示例:
from fastapi import FastAPI
from fastapi.testclient import TestClient
from ultralytics import YOLO
app = FastAPI()
model = YOLO("yolo26n.pt") # 服务器启动时加载一次权重
@app.get("/predict")
async def predict(url: str):
"""Detect objects in the image at `url` and return them as JSON."""
results = model(url)
return results[0].summary()
client = TestClient(app)
response = client.get("/predict", params={"url": "https://ultralytics.com/images/bus.jpg"})
print(response.status_code, response.json()[0])输出显示状态码 200,且第一个检测结果是一个字典,其中包含类别名称、置信度和框坐标;summary() 会为每个检测到的对象生成这种结构。由于处理程序是 async def,FastAPI 会在单个事件循环上运行它,因此共享模型不会同时处理两个请求。需要并行处理的服务器会运行多个工作进程,每个进程都加载自己的模型。
服务模式与软件#
模型的服务方式取决于何时需要获得结果,从摄像头画面的实时推理到隔夜批处理任务都有:
- 在线服务: 调用方等待期间,每个请求都会立即得到结果,通过 REST 或 gRPC 提供服务,常见于面向用户的应用和实时摄像头画面。
- 批量服务: 定时任务离线处理大型数据集并进行评分,例如每晚处理一天的图像,优先优化吞吐量而非延迟。
- 流式服务: 随着视频帧或传感器读数到达,持续推送结果。
- 边缘 AI: 模型直接在设备上运行,通常会先导出为优化格式,无需网络往返。
通用服务软件包括 NVIDIA Dynamo-Triton(前身为Triton Inference Server),以及 TensorFlow Serving、Ray Serve、BentoML 和运行在Kubernetes上的 KServe。PyTorch 的 TorchServe 目前仅进行有限维护,且没有进一步更新计划。vLLM、SGLang 和 TensorRT-LLM 等 LLM 服务器增加了连续批处理和分页式KV 缓存管理,用于逐 token 生成。大多数这类系统都在容器中运行,以便将模型、运行时和依赖项打包成一个镜像。
模型服务、部署与推理引擎的区别#
模型服务与几个相近术语密切相关。模型部署是将模型投入生产环境的整体流程,包括打包、基础设施和逐步上线;而服务是模型上线后负责响应请求的部分。推理引擎(例如 TensorRT、ONNX Runtime或 OpenVINO)负责执行模型计算;服务系统则通过网络、排队和扩缩容来封装一个或多个推理引擎。
Ultralytics Platform通过专用端点提供 YOLO 模型服务;每个端点都是部署在 42 个区域之一的单租户服务,包含 /predict、/health 和自动生成的 /docs 路由。默认规格在空闲时会缩容至零,启动最多可能需要约一分钟;替换模型时,端点 URL 保持不变,并且在新模型准备就绪前,旧模型会继续提供服务。










