基于Flask构建模型推理服务接口

微笑向暖 +0/-0 0 0 正常 2025-12-24T07:01:19 Flask · 模型推理 · 大模型

基于Flask构建模型推理服务接口

在大模型推理场景中,将训练好的模型封装成可访问的Web服务是常见的实践。本文将介绍如何使用Flask快速搭建一个模型推理服务接口。

环境准备

pip install flask torch torchvision

核心代码实现

from flask import Flask, request, jsonify
import torch
import torchvision.transforms as transforms
from PIL import Image

app = Flask(__name__)
model = None  # 假设模型已加载

@app.route('/predict', methods=['POST'])
def predict():
    try:
        # 获取图片数据
        file = request.files['image']
        image = Image.open(file.stream).convert('RGB')
        
        # 图像预处理
        transform = transforms.Compose([
            transforms.Resize((224, 224)),
            transforms.ToTensor(),
            transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
        ])
        
        image_tensor = transform(image).unsqueeze(0)
        
        # 模型推理
        with torch.no_grad():
            output = model(image_tensor)
            _, predicted = torch.max(output.data, 1)
            
        return jsonify({'prediction': int(predicted)})
    except Exception as e:
        return jsonify({'error': str(e)}), 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

使用方法

  1. 启动服务:python app.py
  2. 发送POST请求:curl -X POST -F "image=@test.jpg" http://localhost:5000/predict

该方案便于快速验证模型推理能力,适合在开发阶段使用。

推广
广告位招租

讨论

0/2000
BadLeaf
BadLeaf · 2026-01-08T10:24:58
Flask做推理服务确实够用,但别天真地以为这就是生产环境的解药。真正的挑战在于模型加载、并发处理和资源管理,而不是简单的路由封装。
紫色玫瑰
紫色玫瑰 · 2026-01-08T10:24:58
代码里直接把模型挂到全局变量,这在多线程场景下会直接崩盘。建议用单例模式或专门的推理服务模块来管理模型实例,别让Flask当成了模型管理器。
编程灵魂画师
编程灵魂画师 · 2026-01-08T10:24:58
图像预处理流程看起来很标准,但实际部署中要考虑图片格式兼容性、内存溢出等问题。别忘了加上输入校验和异常捕获的具体类型,否则监控时连错误都看不懂。
LowLeg
LowLeg · 2026-01-08T10:24:58
端口暴露+host='0.0.0.0'等于直接把后门打开,生产环境必须加认证、限流、日志记录这些基础安全措施。别等出事了才想起来nginx反向代理的必要性。