PyTorch মডেল প্রোডাকশনে ডেপ্লয় করার উদাহরণ

Model Deployment এবং API Integration - পাইটর্চ (Pytorch) - Machine Learning

330

PyTorch মডেল তৈরি করার পর, সেই মডেলটি প্রোডাকশনে ডেপ্লয় (deploy) করা একটি গুরুত্বপূর্ণ পদক্ষেপ। মডেল ডেপ্লয় করার জন্য কিছু সাধারণ পদ্ধতি রয়েছে, যেমন Flask বা FastAPI ব্যবহার করে মডেল সার্ভার তৈরি করা, ONNX (Open Neural Network Exchange) ব্যবহার করে মডেল এক্সপোর্ট করা, বা TensorFlow Serving ব্যবহার করা।

এখানে আমরা PyTorch মডেল প্রোডাকশনে ডেপ্লয় করার জন্য Flask এবং FastAPI এর মাধ্যমে দুটি উদাহরণ দেখাবো। Flask এবং FastAPI এর মাধ্যমে আপনি সহজেই মডেল API সার্ভার তৈরি করতে পারেন, যাতে অন্য অ্যাপ্লিকেশন বা ক্লায়েন্ট মডেলটিতে ইনপুট পাঠাতে পারে এবং আউটপুট গ্রহণ করতে পারে।


১. Flask দিয়ে PyTorch মডেল ডেপ্লয় করা

Flask একটি হালকা ওজনের ওয়েব ফ্রেমওয়ার্ক যা Python এ সার্ভিস তৈরি করতে ব্যবহৃত হয়। PyTorch মডেলকে Flask এ ডেপ্লয় করার জন্য মডেলটি প্রথমে .pth ফাইল হিসেবে সংরক্ষণ করতে হবে, এবং তারপর Flask API তৈরি করতে হবে।

ধাপ ১: মডেল ট্রেনিং এবং সংরক্ষণ (Save Model)

import torch
import torch.nn as nn
import torch.optim as optim

# Define a simple model (e.g., a neural network)
class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.fc = nn.Linear(10, 2)  # Input size: 10, Output size: 2

    def forward(self, x):
        return self.fc(x)

# Create model instance and save it
model = SimpleModel()
torch.save(model.state_dict(), 'model.pth')

ধাপ ২: Flask API সেটআপ

  1. Flask ইনস্টল করুন:

    pip install flask
    
  2. Flask API কোড লিখুন:
from flask import Flask, request, jsonify
import torch
import torch.nn as nn
import torch.optim as optim

# Define a simple model (same as the training model)
class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.fc = nn.Linear(10, 2)

    def forward(self, x):
        return self.fc(x)

# Load the model
model = SimpleModel()
model.load_state_dict(torch.load('model.pth'))
model.eval()  # Set the model to evaluation mode

# Create Flask app
app = Flask(__name__)

@app.route('/predict', methods=['POST'])
def predict():
    # Get JSON data from the request
    data = request.get_json()
    
    # Convert data to a tensor
    input_tensor = torch.tensor(data['input'], dtype=torch.float32)
    
    # Make prediction
    with torch.no_grad():
        output = model(input_tensor)
    
    # Convert output to list and send response
    return jsonify({'prediction': output.tolist()})

if __name__ == '__main__':
    app.run(debug=True)

ধাপ ৩: Flask API রান করা

  • এই কোডটি চালিয়ে Flask সার্ভার শুরু করতে পারেন:
python app.py

এখন, আপনি POST রিকোয়েস্ট পাঠিয়ে মডেল থেকে প্রেডিকশন পেতে পারবেন:

  • URL: http://127.0.0.1:5000/predict
  • HTTP Method: POST
  • Request Body:
{
  "input": [0.5, 0.3, 0.2, 0.8, 0.1, 0.4, 0.9, 0.2, 0.6, 0.3]
}

ধাপ ৪: ক্লায়েন্ট থেকে API কল করা

import requests

url = 'http://127.0.0.1:5000/predict'
data = {'input': [0.5, 0.3, 0.2, 0.8, 0.1, 0.4, 0.9, 0.2, 0.6, 0.3]}
response = requests.post(url, json=data)
print(response.json())

২. FastAPI দিয়ে PyTorch মডেল ডেপ্লয় করা

FastAPI একটি দ্রুত এবং আধুনিক ওয়েব ফ্রেমওয়ার্ক যা API ডেভেলপমেন্টে ব্যবহৃত হয়। এটি উচ্চ কার্যক্ষমতা এবং স্বয়ংক্রিয় ডকুমেন্টেশন সরবরাহ করে (Swagger UI ব্যবহার করে)। PyTorch মডেল FastAPI এ ডেপ্লয় করার প্রক্রিয়া Flask এর মতোই, তবে FastAPI কিছুটা দ্রুত এবং আরও উন্নত ফিচার সরবরাহ করে।

ধাপ ১: FastAPI ইনস্টল করুন

pip install fastapi uvicorn

ধাপ ২: FastAPI API কোড লিখুন

from fastapi import FastAPI
from pydantic import BaseModel
import torch
import torch.nn as nn

# Define a simple model (same as the training model)
class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.fc = nn.Linear(10, 2)

    def forward(self, x):
        return self.fc(x)

# Load the model
model = SimpleModel()
model.load_state_dict(torch.load('model.pth'))
model.eval()  # Set the model to evaluation mode

# Create FastAPI app
app = FastAPI()

class InputData(BaseModel):
    input: list

@app.post("/predict")
def predict(data: InputData):
    # Convert input list to tensor
    input_tensor = torch.tensor(data.input, dtype=torch.float32)
    
    # Make prediction
    with torch.no_grad():
        output = model(input_tensor)
    
    # Return prediction as a JSON response
    return {"prediction": output.tolist()}

ধাপ ৩: FastAPI সার্ভার রান করা

  • এই কোডটি চালিয়ে FastAPI সার্ভার শুরু করতে পারেন:
uvicorn app:app --reload

এখন, আপনি POST রিকোয়েস্ট পাঠিয়ে মডেল থেকে প্রেডিকশন পেতে পারবেন:

  • URL: http://127.0.0.1:8000/predict
  • HTTP Method: POST
  • Request Body:
{
  "input": [0.5, 0.3, 0.2, 0.8, 0.1, 0.4, 0.9, 0.2, 0.6, 0.3]
}

ধাপ ৪: ক্লায়েন্ট থেকে FastAPI API কল করা

import requests

url = 'http://127.0.0.1:8000/predict'
data = {'input': [0.5, 0.3, 0.2, 0.8, 0.1, 0.4, 0.9, 0.2, 0.6, 0.3]}
response = requests.post(url, json=data)
print(response.json())

৩. ONNX দিয়ে PyTorch মডেল এক্সপোর্ট করা

ONNX (Open Neural Network Exchange) হল একটি ওপেন ফরম্যাট যা মডেল এক্সচেঞ্জের জন্য ব্যবহৃত হয়। আপনি PyTorch মডেলকে ONNX ফরম্যাটে এক্সপোর্ট করে অন্য ফ্রেমওয়ার্কে ব্যবহার করতে পারেন, যেমন TensorFlow, Caffe2, Microsoft Azure, ইত্যাদি।

ধাপ ১: ONNX এ মডেল এক্সপোর্ট করা

import torch.onnx

# Dummy input for the model
dummy_input = torch.randn(1, 10)

# Export model to ONNX format
torch.onnx.export(model, dummy_input, "model.onnx")

এখন, আপনি মডেলটি ONNX Runtime বা অন্য সফটওয়্যার ব্যবহার করে প্রোডাকশনে ডেপ্লয় করতে পারেন।


সারাংশ

  • Flask এবং FastAPI ব্যবহার করে PyTorch মডেল খুব সহজে ওয়েব API হিসেবে ডেপ্লয় করা যায়।
  • Flask সহজ এবং কমপ্লেক্স টাস্কের জন্য উপযুক্ত, কিন্তু FastAPI উচ্চ পারফরম্যান্স এবং স্বয়ংক্রিয় ডকুমেন্টেশন সরবরাহ করে, যা আরও উন্নত এবং দ্রুত।
  • ONNX ব্যবহার করে PyTorch মডেল এক্সপোর্ট করা যেতে পারে, যাতে এটি অন্যান্য মডেল ফ্রেমওয়ার্কে ব্যবহার করা সম্ভব হয়।

এই পদ্ধতিগুলির মাধ্যমে PyTorch মডেল প্রোডাকশনে ডেপ্লয় করা সম্ভব এবং এটি আপনার মডেলকে বাস্তব জীবনে কাজে লাগানোর জন্য গুরুত্বপূর্ণ।

Content added By
Promotion

Are you sure to start over?

Loading...