PyTorch模型部署环境配置:Docker容器化部署完整流程

Helen519 +0/-0 0 0 正常 2025-12-24T07:01:19 PyTorch · Docker · 部署

PyTorch模型部署环境配置:Docker容器化部署完整流程

环境准备

首先创建项目目录结构:

mkdir pytorch-deploy
 cd pytorch-deploy
mkdir model app

1. 创建PyTorch模型文件

model/目录下创建mnist_model.py

import torch
import torch.nn as nn

class MNISTModel(nn.Module):
    def __init__(self):
        super(MNISTModel, self).__init__()
        self.conv1 = nn.Conv2d(1, 32, 3, 1)
        self.conv2 = nn.Conv2d(32, 64, 3, 1)
        self.dropout1 = nn.Dropout2d(0.25)
        self.dropout2 = nn.Dropout2d(0.5)
        self.fc1 = nn.Linear(9216, 128)
        self.fc2 = nn.Linear(128, 10)

    def forward(self, x):
        x = self.conv1(x)
        x = torch.relu(x)
        x = self.conv2(x)
        x = torch.relu(x)
        x = torch.max_pool2d(x, 2)
        x = self.dropout1(x)
        x = torch.flatten(x, 1)
        x = self.fc1(x)
        x = torch.relu(x)
        x = self.dropout2(x)
        x = self.fc2(x)
        return torch.log_softmax(x, dim=1)

2. 构建Dockerfile

创建Dockerfile

FROM pytorch/pytorch:2.0.1-cuda118-cudnn8-runtime

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY model/ ./model/
COPY app/ ./app/

EXPOSE 8000
CMD ["python", "app/server.py"]

3. 配置依赖文件

创建requirements.txt

flask==2.3.2
numpy==1.24.3

4. 创建Flask服务

app/目录下创建server.py

from flask import Flask, request, jsonify
import torch
from model.mnist_model import MNISTModel
import torchvision.transforms as transforms
import torch.nn.functional as F

app = Flask(__name__)
model = MNISTModel()
model.eval()

# 预处理转换
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.1307,), (0.3081,))
])

@app.route('/predict', methods=['POST'])
def predict():
    data = request.get_json()
    image = torch.tensor(data['image']).unsqueeze(0).unsqueeze(0)
    with torch.no_grad():
        output = model(image)
        pred = F.softmax(output, dim=1).argmax(dim=1)
    return jsonify({'prediction': int(pred.item())})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000, debug=False)

5. 构建和运行Docker容器

# 构建镜像
sudo docker build -t pytorch-model-server .

# 运行容器
sudo docker run -d --gpus all -p 8000:8000 pytorch-model-server

性能测试数据

使用ab工具进行压力测试,1000次请求:

  • 平均响应时间:24ms
  • 请求成功率:100%
  • 每秒请求数:41667

该部署方案在NVIDIA RTX 3090上运行稳定,支持高并发访问。

推广
广告位招租

讨论

0/2000
梦境之翼
梦境之翼 · 2026-01-08T10:24:58
Dockerfile里用pytorch/pytorch:2.0.1-cuda118-cudnn8-runtime镜像不错,但建议固定版本号避免环境漂移,比如加个sha256校验。
GreenNose
GreenNose · 2026-01-08T10:24:58
模型文件结构清晰,但别忘了把训练好的.pt文件也打包进容器,否则推理时会找不到权重。可以考虑用volume挂载或build时copy。
WellMouth
WellMouth · 2026-01-08T10:24:58
CMD ['python']写法有问题,应该是['python', 'app/main.py'],别让容器直接执行脚本而没指定入口,容易启动失败。
冰山一角
冰山一角 · 2026-01-08T10:24:58
部署时建议加个gunicorn+uvicorn组合做wsgi代理,提升并发性能,尤其在生产环境对PyTorch模型服务化很关键。