在Linux下部署PyTorch模型有多種方法,以下是一些常見的部署流程:
TorchScript是PyTorch的一種序列化格式,可用于在C++、Python等平臺上進行部署。
torch.jit.trace
記錄路徑上的信息并保存為torch.jit.scriptmodule
。import torch
import torchvision
model = torchvision.models.resnet18()
example = torch.rand(1, 3, 224, 224)
traced_script_module = torch.jit.trace(model, example)
torch.jit.script
編譯模塊,將其轉換為scriptmodule
。class MyModule(torch.nn.Module):
def __init__(self, n, m):
super(MyModule, self).__init__()
self.weight = torch.nn.Parameter(torch.rand(n, m))
def forward(self, input):
if input.sum() > 0:
output = self.weight.mv(input)
else:
output = self.weight + input
return output
my_module = MyModule(10, 20)
sm = torch.jit.script(my_module)
sm.save("model.pt")
#include <torch/torch.h>
int main() {
torch::jit::script::Module module;
try {
module = torch::jit::load("model.pt");
}
catch (const c10::Error& e) {
std::cerr << "error loading the model\n";
return -1;
}
// Use the module for inference
}
at::Tensor input = torch::rand({1, 3, 224, 224});
at::Tensor output = module.forward({input}).toTensor();
如果你想通過網絡提供服務,可以使用Flask或FastAPI等Web框架來部署你的模型。以下是一個使用Flask的簡單示例:
pip install flask
from flask import Flask, request, jsonify
import torch
import torchvision.transforms as transforms
from PIL import Image
app = Flask(__name__)
# 加載模型
model = torch.load('path_to_your_model.pt', map_location=torch.device('cpu'))
model.eval()
# 定義圖像預處理
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]),
])
@app.route('/predict', methods=['POST'])
def predict():
if request.method == 'POST':
file = request.files['image']
image = Image.open(file.stream)
image = transform(image).unsqueeze(0) # 添加batch維度
with torch.no_grad():
output = model(image)
_, predicted_idx = torch.max(output, 1)
return jsonify({'prediction': int(predicted_idx.item())})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
python app.py
curl -X POST -F "image=@path_to_your_image.jpg" http://localhost:5000/predict
Docker是一個容器化平臺,可以讓你輕松地打包和部署應用程序。
sudo apt update
sudo apt install docker.io
# 使用官方的PyTorch鏡像作為基礎鏡像
FROM pytorch/pytorch:latest
# 設置工作目錄
WORKDIR /app
# 復制當前目錄下的所有文件到工作目錄
COPY . /app
# 安裝依賴項
RUN pip install --no-cache-dir -r requirements.txt
# 暴露端口(如果需要)
EXPOSE 80
# 運行應用
CMD ["python", "your_script.py"]
torch
torchvision
numpy
docker build -t your-image-name .
docker run -p 80:80 your-image-name
以上是Linux下部署PyTorch模型的幾種常見方法,你可以根據自己的需求選擇合適的方式進行部署。