Machine Learning Model Deployment এবং API Integration গাইড ও নোট

348

Model Deployment এবং API Integration হল ডিপ লার্নিং মডেল বা যেকোনো মেশিন লার্নিং মডেলকে উৎপাদন পর্যায়ে নিয়ে আসার প্রক্রিয়া, যেখানে মডেলটি ক্লায়েন্ট অ্যাপ্লিকেশন বা অন্যান্য সিস্টেমের সাথে কাজ করতে সক্ষম হয়। এটি মডেলকে রিয়েল-টাইম বা ব্যাচ ভিত্তিতে ব্যবহারযোগ্য করতে সাহায্য করে।

মডেল ডিপ্লয়মেন্ট এবং API ইন্টিগ্রেশন মূলত দুটি ধাপে বিভক্ত:

  1. Model Deployment: মডেলটি সার্ভারে বা ক্লাউডে ডিপ্লয় করা, যেখানে এটি ব্যবহারকারী থেকে ইনপুট গ্রহণ করে এবং আউটপুট প্রদান করে।
  2. API Integration: মডেলটি বিভিন্ন অ্যাপ্লিকেশন বা ক্লায়েন্টে ব্যবহারের জন্য API (Application Programming Interface) তৈরি করা।

এখানে আমরা PyTorch মডেল ডিপ্লয়মেন্ট এবং Flask API Integration নিয়ে আলোচনা করব।


১. Model Deployment

1.1. PyTorch মডেল সংরক্ষণ (Saving PyTorch Model)

মডেল ডিপ্লয়মেন্টের জন্য প্রথমে মডেলটি সংরক্ষণ করতে হবে, যাতে আমরা পরে এটি লোড করে ব্যবহার করতে পারি।

import torch
import torch.onnx

# মডেল সেভ করা
torch.save(model.state_dict(), 'model.pth')

# অথবা ONNX ফরম্যাটে সেভ করা (যদি ক্লাউডে বা অন্যান্য প্ল্যাটফর্মে ডিপ্লয় করতে চান)
dummy_input = torch.randn(1, 28, 28)  # এক্সাম্পল ইনপুট
torch.onnx.export(model, dummy_input, "model.onnx")

1.2. মডেল লোড করা (Loading the Model)

ডিপ্লয়মেন্টের জন্য মডেলটি পুনরায় লোড করতে হবে।

# মডেল লোড করা
model = CNNModel()  # আপনার মডেল ক্লাসের নাম
model.load_state_dict(torch.load('model.pth'))
model.eval()  # মডেলটি eval মোডে নিয়ে আসা

২. API Integration

API (Application Programming Interface) হচ্ছে একটি ইন্টারফেস যা বিভিন্ন অ্যাপ্লিকেশন বা সিস্টেমের মধ্যে যোগাযোগ তৈরি করে। Flask হল একটি পপুলার Python ফ্রেমওয়ার্ক, যা ব্যবহার করে দ্রুত RESTful API তৈরি করা সম্ভব।

2.1. Flask API তৈরি করা

এখানে একটি Flask অ্যাপ্লিকেশন তৈরি করা হচ্ছে যা আমাদের PyTorch মডেলকে RESTful API আকারে সার্ভ করবে।

pip install Flask torch torchvision

2.2. Flask API কোড

from flask import Flask, request, jsonify
import torch
from torch import nn
from torchvision import transforms
from PIL import Image
import io

# Flask অ্যাপ্লিকেশন তৈরি
app = Flask(__name__)

# মডেল লোড
model = CNNModel()  # আপনার মডেল ক্লাসের নাম
model.load_state_dict(torch.load('model.pth'))
model.eval()

# ইনপুট ইমেজ ট্রান্সফর্মেশন
transform = transforms.Compose([
    transforms.Resize((28, 28)),
    transforms.Grayscale(num_output_channels=1),
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))
])

# ইমেজ প্রেডিকশন ফাংশন
def predict_image(image_bytes):
    # PIL ইমেজ তৈরি
    image = Image.open(io.BytesIO(image_bytes))
    # ট্রান্সফর্মেশন প্রয়োগ
    image = transform(image).unsqueeze(0)  # ব্যাচ ডাইমেনশন যোগ করা
    image = image.to(torch.device("cuda" if torch.cuda.is_available() else "cpu"))
    # মডেল থেকে প্রেডিকশন
    with torch.no_grad():
        output = model(image)
    # সর্বোচ্চ প্রেডিকশন আউটপুট
    _, predicted = torch.max(output, 1)
    return predicted.item()

# API Endpoint তৈরি
@app.route('/predict', methods=['POST'])
def predict():
    # ইনপুট চেক করা
    if 'file' not in request.files:
        return jsonify({"error": "No file provided"}), 400
    file = request.files['file']
    if file.filename == '':
        return jsonify({"error": "No selected file"}), 400
    
    # ফাইল থেকে ইমেজ প্রেডিকশন
    try:
        image_bytes = file.read()
        prediction = predict_image(image_bytes)
        return jsonify({"prediction": prediction}), 200
    except Exception as e:
        return jsonify({"error": str(e)}), 500

# API রান করা
if __name__ == '__main__':
    app.run(debug=True)

2.3. Flask API বোঝানো

  1. মডেল লোড: প্রথমে, আমাদের মডেলটি model.load_state_dict() দিয়ে লোড করা হচ্ছে।
  2. প্রেডিকশন ফাংশন: predict_image ফাংশনটি ইমেজের ইনপুট গ্রহণ করে এবং মডেল থেকে প্রেডিকশন তৈরি করে।
  3. API Endpoint: /predict রুটটি POST রিকুয়েস্ট গ্রহণ করে এবং ইমেজের প্রেডিকশন রিটার্ন করে।

2.4. API ব্যবহার

এখন আপনি API এ POST রিকুয়েস্ট পাঠিয়ে ছবি প্রেডিকশন পেতে পারেন। উদাহরণস্বরূপ, আপনি Postman বা cURL ব্যবহার করতে পারেন:

curl -X POST -F "file=@path_to_image/image.jpg" http://127.0.0.1:5000/predict

এটি আপনাকে প্রেডিকশন ফলাফল প্রদান করবে, যেমন:

{
  "prediction": 7
}

এখানে 7 হচ্ছে পূর্বাভাসকৃত লেবেল।


৩. ক্লাউড ডিপ্লয়মেন্ট

এখন আপনি Flask API ডিপ্লয় করতে পারেন ক্লাউডে, যেমন Heroku, AWS, Google Cloud, বা Microsoft Azure ব্যবহার করে। এটির জন্য, আপনাকে সাধারণত একটি requirements.txt ফাইল এবং Procfile তৈরি করতে হবে (Heroku-এর জন্য):

requirements.txt:

Flask==2.0.1
torch==1.9.0
torchvision==0.10.0
Pillow==8.2.0

Procfile (Heroku জন্য):

web: python app.py

এখন আপনার অ্যাপ্লিকেশনটি ক্লাউডে ডিপ্লয় করতে পারবেন এবং পৃথিবীজুড়ে API থেকে চিত্র প্রেডিকশন করতে পারবেন।


সারাংশ

  • Model Deployment: মডেল ডিপ্লয়মেন্ট হল মডেলটিকে প্রোডাকশন পরিবেশে নিয়ে আসার প্রক্রিয়া, যেখানে এটি ইনপুট গ্রহণ করে এবং আউটপুট প্রদান করে।
  • API Integration: মডেল ডিপ্লয় করার পর, এটি ক্লায়েন্ট অ্যাপ্লিকেশন বা অন্যান্য সিস্টেমে ব্যবহারের জন্য RESTful API তৈরি করা হয়, যেমন Flask API।
  • Flask API Example: Flask দিয়ে API তৈরি করে, আপনি ইনপুট হিসেবে চিত্র গ্রহণ করে মডেল থেকে প্রেডিকশন দিতে পারেন।

এই প্রক্রিয়াটি আপনাকে মডেল ডিপ্লয়মেন্ট এবং API ইন্টিগ্রেশন সম্পর্কে মৌলিক ধারণা দেয়, যা আপনি বিভিন্ন প্রোডাকশনে ব্যবহার করতে পারবেন।

Content added By

PyTorch মডেল ডেপ্লয় করা

299

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


১. PyTorch মডেল সেভ করা

মডেল ডেপ্লয় করার আগে, প্রথমে আপনাকে আপনার মডেলটি সেভ করতে হবে। PyTorch এ মডেল সেভ করার দুটি প্রধান উপায় রয়েছে:

  • torch.save(): মডেল সেভ করার জন্য এটি ব্যবহার করা হয়। আপনি মডেলের state_dict (যা ওজন এবং বায়াসের মান ধারণ করে) সেভ করতে পারেন।

মডেল সেভ করা:

import torch

# মডেল ট্রেনিং পর সেভ করা
torch.save(model.state_dict(), "model.pth")

এটি model.pth নামে মডেলের state_dict সেভ করবে। মডেল সেভ করার পর, আপনি এটি ডেপ্লয় করার জন্য ব্যবহার করতে পারবেন।


২. মডেল লোড করা

মডেল ডেপ্লয় করার পর, মডেল লোড করতে হবে। লোড করার জন্য আপনাকে সঠিক ক্লাস এবং ওজন (weights) প্রয়োজন হবে।

মডেল লোড করা:

# মডেল রিস্টোর করার জন্য
model = CNNModel()  # আপনার মডেল ক্লাস ব্যবহার করুন
model.load_state_dict(torch.load("model.pth"))
model.eval()  # ইনফারেন্স মোডে মডেলটি পরিবর্তন করুন

এখন আপনার মডেল প্রস্তুত এবং eval() ব্যবহার করে ইনফারেন্স (prediction) জন্য প্রস্তুত।


৩. Flask দিয়ে PyTorch মডেল ডেপ্লয়

Flask হল একটি জনপ্রিয় Python ওয়েব ফ্রেমওয়ার্ক যা ছোট এবং সহজ ওয়েব অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয়। এটি মডেল ডেপ্লয়মেন্টের জন্য খুবই উপকারী, যেখানে আপনি আপনার PyTorch মডেল একটি REST API হিসেবে প্রকাশ করতে পারেন।

Flask API তৈরি করে মডেল ডেপ্লয়:

  1. প্রথমে, Flask ইনস্টল করতে হবে:

    pip install Flask
    
  2. একটি সাধারণ Flask API তৈরি করা:
from flask import Flask, request, jsonify
import torch
import torch.nn as nn
import torchvision.transforms as transforms
from PIL import Image
import io

# মডেল ক্লাস ডিফাইন
class CNNModel(nn.Module):
    def __init__(self):
        super(CNNModel, self).__init__()
        # মডেলের লেয়ারগুলি এখানে ডিফাইন করুন
        self.fc = nn.Linear(28*28, 10)  # উদাহরণ হিসাবে

    def forward(self, x):
        return self.fc(x.view(-1, 28*28))

# Flask অ্যাপ তৈরি
app = Flask(__name__)

# মডেল লোড করা
model = CNNModel()
model.load_state_dict(torch.load("model.pth"))
model.eval()

# ইনপুট ইমেজের ট্রান্সফরমেশন
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])

# API এর জন্য রুট
@app.route('/predict', methods=['POST'])
def predict():
    # ইমেজ ইনপুট গ্রহণ
    img = Image.open(io.BytesIO(request.data))
    img = transform(img).unsqueeze(0)  # টেনসর রূপে রূপান্তর
    output = model(img)
    _, predicted = torch.max(output, 1)  # সর্বোচ্চ সম্ভাব্য শ্রেণী
    return jsonify({'prediction': predicted.item()})

# অ্যাপ চালু করা
if __name__ == '__main__':
    app.run(debug=True)

API ব্যবহার করা:

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


৪. Heroku-তে Flask অ্যাপ্লিকেশন ডেপ্লয় করা

Heroku একটি জনপ্রিয় ক্লাউড প্ল্যাটফর্ম যেখানে আপনি Flask অ্যাপ্লিকেশন ডেপ্লয় করতে পারেন।

Heroku ডেপ্লয় করার স্টেপস:

  1. Heroku CLI ইনস্টল করুন: Heroku CLI ডাউনলোড করুন এবং ইনস্টল করুন।
  2. প্রোজেক্ট প্রস্তুত করুন:
    • requirements.txt তৈরি করুন, যেখানে সমস্ত নির্ভরশীল লাইব্রেরি থাকবে (যেমন, Flask, PyTorch):

      flask
      torch
      torchvision
      pillow
      
    • Procfile তৈরি করুন (যেখানে Flask অ্যাপ চালানোর নির্দেশনা থাকবে):

      web: python app.py
      
  3. Heroku অ্যাপ তৈরি করুন:

    heroku create your-app-name
    git init
    git add .
    git commit -m "Initial commit"
    git push heroku master
    
  4. Heroku অ্যাপ চালু করুন:

    heroku open
    

এখন আপনার Flask API অনলাইনে ডেপ্লয় হয়ে যাবে এবং আপনি Heroku URL ব্যবহার করে এটিতে অ্যাক্সেস করতে পারবেন।


৫. ক্লাউড ডেপ্লয়মেন্ট (AWS, Google Cloud, Azure)

আপনি PyTorch মডেলটি ক্লাউডে ডেপ্লয় করতে পারেন, যেমন AWS Sagemaker, Google AI Platform, বা Microsoft Azure Machine Learning। ক্লাউডে মডেল ডেপ্লয় করার জন্য:

  • AWS Sagemaker: PyTorch মডেল সহজে Sagemaker এ ডিপ্লয় করা যায়। আপনি সহজেই মডেল ট্রেনিং, ডেপ্লয়মেন্ট এবং স্কেলিং করতে পারেন।
  • Google AI Platform: Google Cloud এর AI Platform ব্যবহার করে PyTorch মডেল ডিপ্লয় করা যায়।
  • Microsoft Azure: Azure Machine Learning ব্যবহার করে মডেলটি ক্লাউডে ডিপ্লয় করা যেতে পারে।

সারাংশ

PyTorch মডেল ডেপ্লয়মেন্ট করার জন্য বেশ কিছু পদ্ধতি রয়েছে:

  1. Flask API তৈরি করে মডেল ডেপ্লয় করা, যা একটি RESTful API হিসেবে কাজ করে।
  2. Heroku বা ক্লাউড প্ল্যাটফর্ম (AWS, Google Cloud) ব্যবহার করে মডেল অনলাইনে ডেপ্লয় করা।

এটি মডেল ট্রেনিং শেষে প্রডাকশনে মডেলকে ব্যবহার করার একটি শক্তিশালী উপায়, যেখানে আপনার মডেলকে দ্রুত API এর মাধ্যমে এক্সেস করা যায়।

Content added By

Flask বা Django এর সাথে API তৈরি

292

Flask এবং Django দুটি জনপ্রিয় Python ফ্রেমওয়ার্ক যা ওয়েব অ্যাপ্লিকেশন এবং API তৈরি করার জন্য ব্যবহৃত হয়। Flask একটি মিনি ফ্রেমওয়ার্ক হওয়ায় ছোট এবং লাইটওয়েট প্রকল্পের জন্য উপযুক্ত, যেখানে Django একটি পূর্ণাঙ্গ এবং বড় প্রকল্পের জন্য উপযোগী। দুইটি ফ্রেমওয়ার্কেই আপনি RESTful API তৈরি করতে পারেন, তবে তাদের ব্যবহারের পদ্ধতি কিছুটা ভিন্ন।

এখানে Flask এবং Django এর সাথে API তৈরি করার দুটি উদাহরণ দেখানো হলো।


১. Flask এর সাথে API তৈরি

Flask একটি মিনি ওয়েব ফ্রেমওয়ার্ক, তাই এটি ছোট ও দ্রুত অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয়। Flask এর সাথে API তৈরি করা সহজ এবং অনেক ফ্লেক্সিবল।

Flask API তৈরি করার প্রক্রিয়া:

  1. প্রয়োজনীয় প্যাকেজ ইনস্টল করা:

    Flask এবং Flask-RESTful ইনস্টল করতে:

    pip install Flask Flask-RESTful
    
  2. Flask API তৈরি করা:

    এখানে একটি সাধারণ GET এবং POST মেথড সহ Flask API এর উদাহরণ দেওয়া হলো:

    from flask import Flask, request
    from flask_restful import Api, Resource
    
    app = Flask(__name__)
    api = Api(app)
    
    # API Resource
    class HelloWorld(Resource):
        def get(self):
            return {'message': 'Hello, World!'}
    
        def post(self):
            data = request.get_json()  # ইনপুট ডেটা গ্রহণ করা
            return {'message': f"Received data: {data}"}, 201
    
    # API রুট সেট করা
    api.add_resource(HelloWorld, '/')
    
    if __name__ == '__main__':
        app.run(debug=True)
    

    এই কোডটি একটি খুব সাধারণ API তৈরি করে যেখানে:

    • GET রিকোয়েস্টে "Hello, World!" মেসেজ রিটার্ন হবে।
    • POST রিকোয়েস্টে JSON ডেটা গ্রহণ করে সেটি আউটপুট হিসাবে পাঠাবে।
  3. API রান করা: এই স্ক্রিপ্টটি চালানোর পরে Flask সার্ভার চালু হবে, এবং আপনি http://127.0.0.1:5000/ থেকে API অ্যাক্সেস করতে পারবেন।

২. Django এর সাথে API তৈরি

Django একটি পূর্ণাঙ্গ ফ্রেমওয়ার্ক, যেখানে অনেক বেশি বিল্ট-ইন ফিচার থাকে এবং এটি বড় প্রকল্পে ব্যবহৃত হয়। Django REST Framework (DRF) হল Django এর জন্য একটি পাওয়ারফুল লাইব্রেরি যা RESTful API তৈরি করতে ব্যবহৃত হয়।

Django API তৈরি করার প্রক্রিয়া:

  1. প্রয়োজনীয় প্যাকেজ ইনস্টল করা:

    Django এবং Django REST Framework ইনস্টল করতে:

    pip install Django djangorestframework
    
  2. Django প্রজেক্ট তৈরি করা:

    Django প্রজেক্ট শুরু করতে:

    django-admin startproject myproject
    cd myproject
    
  3. API অ্যাপ তৈরি করা:

    Django অ্যাপ তৈরি করতে:

    python manage.py startapp api
    
  4. Django REST Framework এর সিস্টেম কনফিগার করা: myproject/settings.pyINSTALLED_APPS এর মধ্যে rest_framework যোগ করুন।

    INSTALLED_APPS = [
        ...,
        'rest_framework',
        'api',  # আমাদের API অ্যাপ
    ]
    
  5. API তৈরি করা:

    api/views.py এ একটি সাধারণ API তৈরি করা:

    from rest_framework.views import APIView
    from rest_framework.response import Response
    from rest_framework import status
    
    class HelloWorld(APIView):
        def get(self, request):
            return Response({"message": "Hello, World!"})
    
        def post(self, request):
            data = request.data
            return Response({"message": f"Received data: {data}"}, status=status.HTTP_201_CREATED)
    
  6. URL কনফিগার করা:

    api/urls.py ফাইল তৈরি করুন এবং API রুট সেট করুন:

    from django.urls import path
    from .views import HelloWorld
    
    urlpatterns = [
        path('', HelloWorld.as_view(), name='hello_world'),
    ]
    
  7. প্রধান URL কনফিগারেশন:

    myproject/urls.py ফাইলে api.urls অন্তর্ভুক্ত করুন:

    from django.contrib import admin
    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('api/', include('api.urls')),  # আমাদের API রুট
    ]
    
  8. API রান করা:

    Django প্রজেক্ট চালানোর জন্য:

    python manage.py runserver
    

    এর পরে, আপনি http://127.0.0.1:8000/api/ থেকে API অ্যাক্সেস করতে পারবেন।


সারাংশ

  • Flask একটি মিনি ফ্রেমওয়ার্ক যা ছোট এবং সহজ অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয়। এটি সরল এবং হালকা ওজনের API তৈরি করতে সহায়ক।
  • Django একটি পূর্ণাঙ্গ ফ্রেমওয়ার্ক যা বৃহত্তর এবং জটিল অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয়। Django REST Framework (DRF) এর মাধ্যমে Django এ শক্তিশালী API তৈরি করা যায়।

আপনি যদি একটি ছোট বা সহজ API তৈরি করতে চান, তবে Flask একটি ভালো অপশন। কিন্তু, আপনি যদি একটি বড় এবং স্কেলযোগ্য অ্যাপ্লিকেশন তৈরি করতে চান, তবে Django এবং Django REST Framework ব্যবহার করা আরও উপযোগী হতে পারে।

Content added By

REST API এর মাধ্যমে মডেল সার্ভ করা

271

REST API (Representational State Transfer) হল একটি জনপ্রিয় আর্কিটেকচারাল স্টাইল যা ওয়েব সার্ভিস তৈরি করার জন্য ব্যবহৃত হয়। REST API-এর মাধ্যমে মডেল সার্ভ করার মাধ্যমে, আপনি আপনার ডিপ লার্নিং বা মেশিন লার্নিং মডেলকে একটি সার্ভারে হোস্ট করতে পারেন এবং অন্য অ্যাপ্লিকেশন বা সিস্টেম থেকে HTTP রিকুয়েস্টের মাধ্যমে মডেলটির পূর্বাভাস (prediction) নিতে পারেন।

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


১. Flask দিয়ে REST API তৈরি করে মডেল সার্ভ করা

প্রয়োজনীয় লাইব্রেরি ইনস্টলেশন:

প্রথমে Flask এবং PyTorch ইনস্টল করতে হবে:

pip install flask torch torchvision

মডেল ট্রেনিং বা লোডিং:

এখানে, একটি সরল PyTorch মডেল (যেমন, pretrained ResNet50) ব্যবহার করা হবে। তবে, আপনি নিজের ট্রেনিং করা মডেলও লোড করতে পারেন।

import torch
import torchvision.models as models

# লোড করা pretrained মডেল
model = models.resnet50(pretrained=True)
model.eval()  # মডেলটি evaluation মোডে আনুন

Flask API তৈরি করা:

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

# Flask অ্যাপ তৈরি
app = Flask(__name__)

# Pretrained ResNet50 মডেল লোড করা
model = models.resnet50(pretrained=True)
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]),
])

# REST API রুট: মডেলকে ছবি পাঠানো এবং প্রেডিকশন নেওয়া
@app.route('/predict', methods=['POST'])
def predict():
    if 'file' not in request.files:
        return jsonify({'error': 'No file part'}), 400
    file = request.files['file']
    
    if file.filename == '':
        return jsonify({'error': 'No selected file'}), 400
    
    try:
        # ইমেজ লোড করা এবং প্রিপ্রসেসিং
        img = Image.open(io.BytesIO(file.read()))
        img = transform(img).unsqueeze(0)  # ব্যাচ সাইজ 1 এর জন্য আউটপুট তৈরি

        # মডেলে প্রেডিকশন করা
        with torch.no_grad():
            output = model(img)
        
        # প্রেডিকশন থেকে কেবল সবচেয়ে সম্ভাব্য ক্লাস
        _, predicted = torch.max(output, 1)
        
        return jsonify({'prediction': predicted.item()})
    except Exception as e:
        return jsonify({'error': str(e)}), 500

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

কিভাবে কাজ করে:

  1. Flask অ্যাপ তৈরি: Flask অ্যাপটি তৈরি করা হয়েছে যেখানে /predict রুটে POST রিকুয়েস্ট পেতে হবে।
  2. ইমেজ আপলোড: request.files থেকে ছবি গ্রহণ করা হয়।
  3. ইমেজ প্রিপ্রসেসিং: ইমেজটি রিসাইজ এবং ট্রান্সফর্ম করা হয় যাতে মডেল গ্রহণ করতে পারে।
  4. মডেল প্রেডিকশন: PyTorch মডেল থেকে প্রেডিকশন করা হয় এবং আউটপুট রিটার্ন করা হয়।
  5. প্রেডিকশন রিটার্ন: JSON ফরম্যাটে প্রেডিকশন রিটার্ন করা হয়।

API কল করার উদাহরণ:

একবার Flask অ্যাপটি চালু হলে, আপনি POST রিকুয়েস্ট পাঠিয়ে মডেল থেকে প্রেডিকশন নিতে পারেন। উদাহরণস্বরূপ, Postman বা cURL ব্যবহার করে API কল করতে পারেন।

cURL উদাহরণ:

curl -X POST -F "file=@/path/to/your/image.jpg" http://127.0.0.1:5000/predict

এটি /predict রুটে ছবি পাঠাবে এবং মডেল থেকে প্রেডিকশন রিটার্ন করবে।


২. FastAPI দিয়ে REST API তৈরি করে মডেল সার্ভ করা

FastAPI হল একটি আধুনিক, দ্রুত এবং অ্যাসিঙ্ক্রোনাস ওয়েব ফ্রেমওয়ার্ক যা দ্রুত REST API তৈরি করতে ব্যবহৃত হয়। এটি Flask এর তুলনায় দ্রুত এবং আরো অনেক সুবিধা দেয়।

প্রয়োজনীয় লাইব্রেরি ইনস্টলেশন:

pip install fastapi uvicorn torch torchvision

FastAPI অ্যাপ তৈরি করা:

from fastapi import FastAPI, File, UploadFile
import torch
from torchvision import models, transforms
from PIL import Image
import io

# FastAPI অ্যাপ তৈরি
app = FastAPI()

# Pretrained ResNet50 মডেল লোড করা
model = models.resnet50(pretrained=True)
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]),
])

# REST API রুট: মডেলকে ছবি পাঠানো এবং প্রেডিকশন নেওয়া
@app.post("/predict")
async def predict(file: UploadFile = File(...)):
    try:
        # ফাইল থেকে ছবি লোড করা
        image = Image.open(io.BytesIO(await file.read()))
        image = transform(image).unsqueeze(0)  # ব্যাচ সাইজ 1 এর জন্য আউটপুট তৈরি

        # মডেলে প্রেডিকশন করা
        with torch.no_grad():
            output = model(image)
        
        # প্রেডিকশন থেকে সবচেয়ে সম্ভাব্য ক্লাস বের করা
        _, predicted = torch.max(output, 1)
        
        return {"prediction": predicted.item()}
    except Exception as e:
        return {"error": str(e)}

কিভাবে কাজ করে:

  1. FastAPI অ্যাপ তৈরি: FastAPI দিয়ে অ্যাপ তৈরি করা হয়েছে এবং /predict রুটে POST রিকুয়েস্টের মাধ্যমে ছবি পাঠানো হয়।
  2. ফাইল আপলোড: UploadFile ক্লাস ব্যবহার করে ছবি গ্রহণ করা হয়।
  3. ইমেজ প্রিপ্রসেসিং: ছবিটি transform ফাংশন ব্যবহার করে প্রিপ্রসেস করা হয়।
  4. মডেল প্রেডিকশন: PyTorch মডেল ব্যবহার করে প্রেডিকশন করা হয়।
  5. JSON রেসপন্স: প্রেডিকশনটি JSON ফরম্যাটে রিটার্ন করা হয়।

FastAPI সার্ভার চালানো:

uvicorn your_script_name:app --reload

এটি FastAPI সার্ভার চালু করবে এবং আপনি http://127.0.0.1:8000 থেকে API অ্যাক্সেস করতে পারবেন।

API কল করার উদাহরণ (cURL):

curl -X 'POST' 'http://127.0.0.1:8000/predict' -F 'file=@/path/to/your/image.jpg'

এটি FastAPI সার্ভারে ছবি পাঠাবে এবং প্রেডিকশন রিটার্ন করবে।


সারাংশ

  • Flask এবং FastAPI উভয়ই REST API তৈরি করার জন্য জনপ্রিয় ফ্রেমওয়ার্ক।
  • Flask সহজ এবং লাইটওয়েট হলেও, FastAPI দ্রুত এবং আধুনিক ফিচার প্রদান করে (যেমন, অ্যাসিঙ্ক্রোনাস ফিচার এবং টাইপ হিন্টিং)।
  • Pretrained মডেল যেমন VGG, ResNet, বা Inception ব্যবহার করে REST API মাধ্যমে মডেল সার্ভ করা যেতে পারে, যা বিভিন্ন অ্যাপ্লিকেশন থেকে HTTP রিকুয়েস্টে প্রেডিকশন পেতে সহায়ক।

এটি মডেল হোস্টিং এবং ডিপ লার্নিং মডেলগুলি অন্যান্য সিস্টেম বা অ্যাপ্লিকেশনগুলোতে ইন্টিগ্রেট করতে একটি শক্তিশালী সমাধান।

Content added By

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

321

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...