模型部署性能基准:PyTorch Serving vs Flask API响应时间

ThickSky +0/-0 0 0 正常 2025-12-24T07:01:19 PyTorch · 部署 · 深度学习模型

在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通过优化模型加载和推理流程,在高并发场景下表现更佳。

推广
广告位招租

讨论

0/2000
SwiftUrsula
SwiftUrsula · 2026-01-08T10:24:58
Flask API虽然部署简单,但单线程处理在高并发下响应时间明显变长,PyTorch Serving通过异步和批处理优化,性能提升约30-50%,建议生产环境优先考虑Serving。
Yara206
Yara206 · 2026-01-08T10:24:58
实际测试中发现,Flask的请求解析和模型加载开销较大,而PyTorch Serving结合了TensorRT等加速技术,对于ResNet50这类模型,平均响应时间从200ms降至80ms左右,部署策略需根据业务QPS做权衡。