TensorFlow Serving — 生产环境模型部署
Google 的生产模型服务器。版本化模型、金丝雀 + A/B 测试、GPU 批处理、gRPC + REST。用 Docker 60 秒部署 SavedModel。
TensorFlow Serving 是 Google 面向生产环境的灵活、高性能机器学习模型服务系统。它承担 ML 的推理侧:接收训练好的模型、管理其生命周期,并通过高性能的引用计数查找表向客户端提供带版本访问的预测。
它解决什么问题#
生产环境中服务 ML 模型比看起来更难:
- 如何不丢请求、不破坏客户端地更新模型?
- 如何在同一 GPU 上运行多个模型 / 版本?
- 如何批处理请求让 GPU 保持忙碌?
- 如何金丝雀 / A-B 安全地测试新模型?
TensorFlow Serving 开箱即用地回答了所有问题。
核心功能#
| 功能 | 作用 |
|---|---|
| 版本化模型 | 同时服务多个版本 |
| 零停机更新 | 无需改动客户端即可部署新版本 |
| 金丝雀 & A/B 测试 | 向实验版本导流 |
| GPU 批处理 | 将请求分组为批次并带延迟控制 |
| gRPC + REST | 两种接口开箱即用 |
| 多 servable | TF 模型、嵌入、词表、特征变换 |
| 低开销 | 给推理增加极小的延迟 |
架构#
- ModelServer —— 服务二进制
- SavedModel —— 它消费的序列化模型格式
- 版本管理器 —— 加载/卸载版本,支持回滚
- 批处理调度器 —— 为 GPU 效率将推理请求分组
REST API 端点#
GET /v1/models/{model} # 状态
GET /v1/models/{model}/versions/{v}/metadata # 元数据
POST /v1/models/{model}:predict # 预测
POST /v1/models/{model}:classify # 分类
POST /v1/models/{model}:regress # 回归text请求为 JSON;二进制数据(图像)用 Base64 编码。
60 秒部署模型#
# 拉取镜像并克隆演示模型
docker pull tensorflow/serving
git clone https://github.com/tensorflow/serving
TESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata"
# 启动服务器
docker run -t --rm -p 8501:8501 \
-v "$TESTDATA/saved_model_half_plus_two_cpu:/models/half_plus_two" \
-e MODEL_NAME=half_plus_two \
tensorflow/servingbash# 预测
curl -d '{"instances": [1.0, 2.0, 5.0]}' \
-X POST http://localhost:8501/v1/models/half_plus_two:predict
# 返回 => { "predictions": [2.5, 3.0, 4.5] }bash导出 SavedModel#
import tensorflow as tf
from tensorflow import keras
model = keras.Sequential([keras.layers.Dense(1, input_shape=(1,))])
model.compile(optimizer="sgd", loss="mse")
# 训练...
model.fit(x_train, y_train, epochs=10)
# 为 TensorFlow Serving 导出
model.export("models/regressor/1") # 版本目录 "1"python版本管理:每个 SavedModel 放在带编号的目录中——放入新目录即瞬间部署新版本。
GPU 批处理#
调度器将单个请求分组为批次供 GPU 联合执行:
--enable_batching=true
--batching_parameters_file=config.jsontext可配置批次大小、超时和填充。这对小请求为主的工作负载显著提升吞吐。
TFX —— 生产管道#
TensorFlow Serving 是 TFX(TensorFlow Extended)的最后阶段——Google 的端到端生产 ML 管道:
| 阶段 | 组件 |
|---|---|
| 数据验证 | Data Validation(schema、异常) |
| 变换 | Transform(特征工程) |
| 训练 | Trainer(TF + Keras) |
| 评估 | Evaluator(指标、公平性) |
| 服务 | TensorFlow Serving / Model Server |
替代方案#
| 系统 | 最擅长 |
|---|---|
| TF Serving | Google 规模 TF 模型、版本化服务 |
| Triton Inference Server | 多框架 GPU 服务(行业标准) |
| TorchServe | PyTorch 原生服务 |
| ONNX Runtime | 跨框架 CPU/GPU/移动端 |
| vLLM | 基于 PagedAttention 的 LLM 服务 |
结论#
TensorFlow Serving 依然是 TensorFlow 模型最成熟的生产模型服务器——Google 级的版本管理、批处理、金丝雀/A-B 测试,且延迟开销极小。如果你的技术栈是 TensorFlow(或 Keras),它是默认选择;异构团队则用 Triton 作为多框架替代。配合 TFX,就能获得从训练到车队长廊级服务的完整路径。