溫馨提示×

PyTorch模型在CentOS上的部署方法

小樊
69
2025-03-28 00:12:10
欄目: 智能運維

在CentOS上部署PyTorch模型可以通過多種方法實現,以下是一些常見的方法和步驟:

使用TorchScript進行部署

TorchScript是PyTorch的一種序列化格式,可以在C++中加載和執行。以下是使用TorchScript進行部署的基本步驟:

  1. 模型轉換
  • Tracing:適用于沒有控制流的模型,通過記錄推理路徑生成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)
    
  • Scripting:適用于有控制流的模型,直接在Torch腳本中編寫模型并編譯。
    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)
    
  1. 保存序列化模型
sm.save("model.pt")
  1. 在C++中加載序列化的PyTorch模型
#include <torch/script.h>

int main(int argc, const char* argv[]) {
    torch::jit::script::Module module;
    try {
        // Deserialize the ScriptModule from a file using torch::jit::load().
        module = torch::jit::load("model.pt");
    }
    catch (const c10::Error& e) {
        std::cerr << "error loading the model\n";
        return -1;
    }

    // Execute the model
    at::Tensor input = torch::rand({1, 3, 224, 224});
    at::Tensor output = module.forward({input}).toTensor();
    std::cout << output << "\n";
    return 0;
}

使用ONNX進行部署

ONNX(Open Neural Network Exchange)是一種開放格式,用于表示深度學習模型??梢詫yTorch模型轉換為ONNX格式,然后在CentOS上使用ONNX Runtime進行部署。

  1. 將PyTorch模型轉換為ONNX格式
import torch
import torch.nn as nn
import torch.optim as optim
from torch.onnx import export

class MyModel(nn.Module):
    def __init__(self):
        super(MyModel, self).__init__()
        self.conv1 = nn.Conv2d(1, 6, 5)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
        x = F.max_pool2d(F.relu(self.conv2(x)), 2)
        x = x.view(-1, self.num_flat_features(x))
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

    def num_flat_features(self, x):
        size = x.size()[1:]  # all dimensions except the batch dimension
        num_features = 1
        for s in size:
            num_features *= s
        return num_features

model = MyModel()
example_input = torch.rand(1, 1, 28, 28)
torch.onnx.export(model, example_input, "model.onnx", verbose=True)
  1. 安裝ONNX Runtime
conda install onnx onnxruntime
  1. 在C++中使用ONNX Runtime加載和運行模型
#include <onnxruntime_cpp_ext.h>

int main(int argc, const char* argv[]) {
    Ort::Env env(ORT_LOGGING_LEVEL_WARNING, "test");
    Ort::SessionOptions session_options;
    session_options.SetIntraOpNumThreads(1);
    session_options.SetInterOpNumThreads(1);

    Ort::Session session(env, "model.onnx", session_options);

    std::vector<float> input_data = {/* input data */};
    std::vector<float> output_data(10);

    Ort::Value input_tensor = Ort::Value::CreateTensor<float>(input_data.data(), input_data.size(), input_data.size() * sizeof(float), input_data.data());
    Ort::Value output_tensor = Ort::Value::CreateTensor<float>(output_data.data(), output_data.size(), output_data.size() * sizeof(float), output_data.data());

    std::vector<const char*> input_names = {"input"};
    std::vector<const char*> output_names = {"output"};

    session.Run(Ort::RunOptions{nullptr}, input_names.data(), &input_tensor, input_names.size(), output_names.data(), output_names.size(), &output_tensor, output_names.size());

    return 0;
}

使用TorchServe進行部署

TorchServe是PyTorch的一個輕量級推理服務器,可以用于部署和推理PyTorch模型。

  1. 安裝TorchServe
git clone https://github.com/pytorch/serve.git
cd serve
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install
  1. 準備模型和配置文件: 創建一個配置文件model-store.cfg
[default]
  model_name=my_model
  model_base_path=/path/to/model
  model_file_name=model.pt
  num_threads=4
  batch_size=1
  protocol=onnx
  1. 啟動TorchServe
torch-serve --model-store=model-store.cfg
  1. 使用TorchServe進行推理
torch-client --model-name my_model --input-data "[[0.1, 0.2, ..., 0.9]]"

以上方法可以根據具體需求選擇使用。如果需要更詳細的步驟和配置,請參考官方文檔和相關教程。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女