在机器学习项目中,训练好的模型需要被部署到生产环境中才能发挥实际价值。本集聚焦于如何将模型高效地部署到生产环境,涵盖TensorFlow Serving和ONNX两种主流工具的使用方法。我们将从理论入手,介绍模型部署的核心概念,并通过实战案例展示如何使用TensorFlow Serving部署图像分类模型,以及如何利用ONNX实现跨平台模型转换与部署。最后,我们还将探讨云原生部署和边缘计算中的相关策略。
我们使用一个预训练的 TensorFlow 图像分类模型(如 MobileNetV2),并通过 TensorFlow Serving 将其部署为 REST API 服务。
import tensorflow as tf
from tensorflow.keras.applications import MobileNetV2
# 加载预训练的 MobileNetV2 模型
model = MobileNetV2(weights='imagenet')
# 保存模型为 SavedModel 格式
export_path = './mobilenetv2/1'
model.save(export_path, save_format='tf')
print(f"模型已保存至: {export_path}")
使用 Docker 启动 TensorFlow Serving 容器:
docker pull tensorflow/serving
docker run -p 8501:8501 --name tf_serving \
-v "$(pwd)/mobilenetv2:/models/mobilenetv2" \
-e MODEL_NAME=mobilenetv2 \
tensorflow/serving
通过 REST API 发送预测请求:
import requests
import json
from PIL import Image
import numpy as np
# 加载并预处理图像
def preprocess_image(image_path):
img = Image.open(image_path).resize((224, 224))
img_array = np.array(img) / 255.0
img_array = np.expand_dims(img_array, axis=0)
return img_array.tolist()
# 发送 REST 请求
url = "http://localhost:8501/v1/models/mobilenetv2:predict"
data = {"instances": preprocess_image("cat.jpg")}
response = requests.post(url, json=data)
# 解析结果
predictions = response.json()['predictions'][0]
print("预测结果:", predictions)
预测结果: [0.0001, 0.0002, ..., 0.9876, ...]
通过 TensorFlow Serving,我们成功将 MobileNetV2 模型部署为 REST API 服务,并能够快速获取预测结果。
我们将一个 PyTorch 训练的模型转换为 ONNX 格式,并通过 ONNX Runtime 进行推理。
import torch
import torch.nn as nn
import torch.onnx
# 定义简单的神经网络
class SimpleModel(nn.Module):
def __init__(self):
super(SimpleModel, self).__init__()
self.fc = nn.Linear(4, 1)
def forward(self, x):
return self.fc(x)
# 训练模型
model = SimpleModel()
dummy_input = torch.randn(1, 4)
torch.onnx.export(model, dummy_input, "simple_model.onnx", input_names=["input"], output_names=["output"])
print("模型已导出为 ONNX 格式")
import onnxruntime as ort
import numpy as np
# 加载 ONNX 模型
session = ort.InferenceSession("simple_model.onnx")
# 准备输入数据
input_data = np.random.randn(1, 4).astype(np.float32)
# 执行推理
outputs = session.run(None, {"input": input_data})
print("推理结果:", outputs[0])
推理结果: [[0.12345678]]
通过 ONNX,我们将 PyTorch 模型转换为跨平台格式,并使用 ONNX Runtime 实现高效推理。
云原生部署(如 Kubernetes)对模型服务的影响
边缘计算中的模型部署策略
通过本集的学习,相信你已经掌握了如何使用 TensorFlow Serving 和 ONNX 部署模型,并能将其应用到实际项目中。下一期,我们将深入探讨如何利用自动化工具简化模型监控与维护流程,敬请期待!