推理服务¶
部署不是“把模型跑起来”这么简单,更关键的是可观测性与稳定性。
1. 服务化形态¶
- 同步 HTTP:简单易接入,适合低延迟在线推理。
- 异步队列:适合高耗时任务(如长文本生成)。
- 批处理离线:适合日报/周报类周期任务。
2. FastAPI 最小推理服务¶
from fastapi import FastAPI
from pydantic import BaseModel
import torch
app = FastAPI()
model = torch.jit.load("model.ts", map_location="cpu")
model.eval()
class Req(BaseModel):
features: list[float]
@app.post("/predict")
def predict(req: Req):
x = torch.tensor([req.features], dtype=torch.float32)
with torch.no_grad():
y = model(x)
return {"score": float(y.squeeze().item())}
3. 必做工程项¶
- 超时与重试策略:避免请求堆积。
- 模型版本管理:支持灰度与回滚。
- 监控指标:QPS、P95/P99 延迟、错误率、资源占用。
- 输入校验:限制长度、范围、防止脏数据攻击。
4. 常见线上问题¶
- 训练/推理预处理不一致。
- 批大小变化导致延迟突增。
- 热点请求引发 OOM。
- 单机无熔断,故障级联扩散。