在PyTorch模型部署场景中,Serving vs Flask API是两种常见的推理服务方案。本文通过实际测试对比两者响应时间表现。
测试环境
- GPU: NVIDIA RTX 3090
- CPU: Intel i7-12700K
- Python版本: 3.9
- PyTorch版本: 2.0.1
模型与数据
我们使用ResNet50模型进行测试,输入图像尺寸为224x224。
Flask API实现
from flask import Flask, request, jsonify
import torch
import torchvision.transforms as transforms
from PIL import Image
app = Flask(__name__)
model = torch.load('resnet50.pth')
model.eval()
@app.route('/predict', methods=['POST'])
def predict():
file = request.files['image']
image = Image.open(file.stream).convert('RGB')
transform = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
image = transform(image).unsqueeze(0)
with torch.no_grad():
output = model(image)
return jsonify({'prediction': output.tolist()})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
PyTorch Serving实现
import torch
from torch import nn
import torch.nn.functional as F
# 模型定义
model = torch.load('resnet50.pth')
model.eval()
# 导出为ONNX格式
example_input = torch.randn(1, 3, 224, 224)
torch.onnx.export(model, example_input, "resnet50.onnx",
export_params=True, opset_version=11)
# 使用TorchServe部署
# torchserve --start --model-name resnet50.mar --models resnet50.mar
性能测试
使用hey工具进行压力测试,每秒100次请求,持续30秒。
| 服务方式 | 平均响应时间(ms) | P90响应时间(ms) |
|---|---|---|
| Flask | 45.2 | 58.7 |
| Serving | 12.8 | 18.3 |
结论
PyTorch Serving在平均响应时间和P90响应时间上均优于Flask API,性能提升约72%。Serving通过优化模型加载和推理流程,在高并发场景下表现更佳。

讨论