15
模型部署:ONNX / FastAPI / Docker
Model Deployment
模型训好只是开始,要让业务能调用才算完事。这一章讲把模型变成 API 的最短路径。
ONNX:跨框架推理
# 1. 从 PyTorch 导出 ONNX
dummy = torch.randn(1, 3, 224, 224)
torch.onnx.export(model, dummy, "model.onnx",
input_names=["input"], output_names=["output"])
# 2. 用 ONNX Runtime 推理(比 PyTorch 快)
import onnxruntime as ort
sess = ort.InferenceSession("model.onnx")
out = sess.run(["output"], {"input": dummy.numpy()})
FastAPI 封装 API
# main.py
from fastapi import FastAPI
from pydantic import BaseModel
import torch
app = FastAPI()
model = load_model() # 启动时加载一次
model.eval()
class Req(BaseModel):
features: list[float]
@app.post("/predict")
def predict(req: Req):
x = torch.tensor(req.features).float()
with torch.no_grad():
out = model(x)
return {"pred": out.argmax().item()}
# 启动:uvicorn main:app --host 0.0.0.0 --port 8000
Dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
API 测试
# 启动后用 curl 测试
curl -X POST http://localhost:8000/predict \
-H "Content-Type: application/json" \
-d '{"features": [5.1, 3.5, 1.4, 0.2]}'
# 返回
# {"pred": 0}
# 浏览器打开 http://localhost:8000/docs 有自动生成的 Swagger 文档
移动端 / 推理加速
| 方案 | 场景 |
|---|---|
| TensorRT | NVIDIA GPU 上极致推理加速。 |
| ONNX Runtime | 跨平台 CPU/GPU 通用。 |
| TFLite | 移动端 Android/iOS。 |
| CoreML | 苹果设备。 |
| TorchServe / Triton | 生产级模型服务。 |
上线后要监控什么
| 监控项 | 说明 |
|---|---|
| 数据漂移 | 线上输入分布和训练时不一样(比如用户突然换了)。定期跑 KS 检验 / PSI。 |
| 概念漂移 | 标签分布变了(比如欺诈手法变了)。模型会慢慢失效,要定期重训。 |
| 推理延迟 | p99 延迟,超阈值要扩容或优化。 |
| 模型版本 | 每次上线记录版本号,出问题能回滚。 |
| 业务指标 | 准确率只是技术指标,最终要看业务指标(转化率、GMV、留存)。 |