একটি REST API তৈরি করা এবং ডিপ লার্নিং মডেল সার্ভ করা একটি সাধারণ পদ্ধতি যা মডেল ডিপ্লয়মেন্টের জন্য ব্যবহৃত হয়। এটি একটি ওয়েব সেবা সরবরাহ করে যেখানে মডেল অনলাইনে ব্যবহৃত হতে পারে। MXNet মডেল সার্ভ করার জন্য সাধারণত Flask অথবা FastAPI ব্যবহৃত হয়। এখানে আমরা Flask ব্যবহার করে একটি REST API তৈরি করব এবং একটি MXNet মডেল সার্ভ করব।
ধাপ ১: প্রয়োজনীয় লাইব্রেরি ইনস্টল করা
প্রথমে আমাদের Flask এবং MXNet লাইব্রেরি ইনস্টল করতে হবে:
pip install flask mxnet
এছাড়া, আমরা কিছু অতিরিক্ত লাইব্রেরি ইনস্টল করতে পারি যেমন numpy, Pillow (ইমেজ প্রসেসিংয়ের জন্য):
pip install numpy pillow
ধাপ ২: মডেল তৈরি এবং সংরক্ষণ
ধরা যাক, আমরা একটি ResNet-50 মডেল ব্যবহার করছি, যেটি ImageNet ডেটাসেটের উপর প্রশিক্ষিত। এখানে, প্রথমে আমরা একটি ResNet মডেল তৈরি করব এবং তা সংরক্ষণ করব।
import mxnet as mx
from mxnet.gluon import model_zoo, nn
from mxnet import init
# Pre-trained ResNet-50 মডেল লোড করুন
model = model_zoo.vision.resnet50_v2(pretrained=True)
# আউটপুট লেয়ার পরিবর্তন করুন
model.output = nn.Dense(2) # কাস্টম ডেটাসেটের জন্য 2 ক্লাস (cats vs dogs)
# মডেল ইনিশিয়ালাইজ করুন
model.initialize(init.Xavier(), ctx=mx.gpu())
# মডেল সংরক্ষণ করুন
model.save_parameters('resnet50_cats_vs_dogs.params')
এখানে:
- আমরা ResNet-50 মডেলটি ImageNet এর উপর প্রশিক্ষিত ব্যবহার করেছি।
- আউটপুট লেয়ারটি ২ ক্লাস (যেমন cats vs dogs) এর জন্য পরিবর্তন করেছি।
- মডেলটি
resnet50_cats_vs_dogs.paramsনামের ফাইলে সংরক্ষণ করেছি।
ধাপ ৩: Flask API তৈরি করা
এখন আমরা একটি Flask API তৈরি করব যা আমাদের মডেলকে সার্ভ করবে। Flask একটি পপুলার Python ওয়েব ফ্রেমওয়ার্ক যা RESTful API তৈরির জন্য খুবই সহজ।
3.1 Flask API কোড
from flask import Flask, request, jsonify
import mxnet as mx
from mxnet.gluon import nn
from mxnet import nd
import numpy as np
from PIL import Image
import io
# Flask অ্যাপ্লিকেশন তৈরি করুন
app = Flask(__name__)
# মডেল লোড করুন
model = nn.HybridBlock()
model.load_parameters('resnet50_cats_vs_dogs.params', ctx=mx.gpu())
model.hybridize()
# ইনপুট ইমেজ প্রসেসিং
def process_image(image):
image = image.resize((224, 224)) # ইমেজ আকার 224x224 এ রিসাইজ করুন
image = np.array(image).astype(np.float32)
image = nd.array(image) / 255.0 # নরমালাইজ করুন
image = image.transpose((2, 0, 1)) # CxHxW আকারে রূপান্তর
image = image.expand_dims(axis=0) # ব্যাচ আকারে রূপান্তর
return image
# API রুট - POST রিকোয়েস্ট
@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
# ইমেজ প্রসেসিং
image = Image.open(file.stream)
image = process_image(image)
# মডেল প্রেডিকশন
output = model(image.as_in_context(mx.gpu())) # GPU তে ইনপুট পাঠান
prediction = nd.argmax(output, axis=1).asscalar() # সর্বোচ্চ প্রেডিকশন ক্লাস চয়ন
# প্রেডিকশন রিটার্ন করুন
return jsonify({'prediction': int(prediction)})
# API চালু করুন
if __name__ == '__main__':
app.run(debug=True)
ব্যাখ্যা:
- Flask অ্যাপ্লিকেশন: Flask অ্যাপ তৈরি করা হয়েছে
Flask(__name__)এর মাধ্যমে। - মডেল লোড করা:
model.load_parameters()ব্যবহার করে আমাদের প্রাক-প্রশিক্ষিত মডেলটি লোড করা হয়েছে। - ইমেজ প্রসেসিং:
process_image()ফাংশনটি ইমেজকে 224x224 সাইজে রিসাইজ এবং নরমালাইজ করে মডেল ইনপুট হিসাবে উপযুক্ত করে। - প্রেডিকশন:
/predictরুটে POST রিকোয়েস্ট আসলে, আমরা সেই ইমেজটি প্রসেস করে, মডেল থেকে আউটপুট এনে সর্বোচ্চ প্রেডিকশন ক্লাস রিটার্ন করি।
ধাপ ৪: API চালু করা
আপনি যখন Flask API চালু করবেন, তখন এটি ওয়েব সার্ভারে শুনতে শুরু করবে এবং আপনি আপনার মডেল সার্ভ করতে পারবেন। নিচের কোড দিয়ে Flask অ্যাপ চালু করুন:
python app.py
এটি http://127.0.0.1:5000/ ঠিকানায় চলে যাবে।
ধাপ ৫: API তে রিকোয়েস্ট পাঠানো
আপনি Postman বা curl দিয়ে API তে ইমেজ পাঠাতে পারবেন। উদাহরণস্বরূপ, curl দিয়ে একটি POST রিকোয়েস্ট পাঠানো যেতে পারে:
curl -X POST -F "file=@path_to_image.jpg" http://127.0.0.1:5000/predict
এটি ইমেজ ফাইল পাঠিয়ে প্রেডিকশন রিসিভ করবে।
ধাপ ৬: মডেল ডিপ্লয়মেন্ট (Optional)
একটি প্রকৃত পরিবেশে মডেল ডিপ্লয় করতে হলে, Flask API চালানোর জন্য আপনার সার্ভার বা ক্লাউড পরিবেশে এটি হোস্ট করতে হবে। আপনি AWS, Heroku বা Google Cloud ব্যবহার করে এই API ডিপ্লয় করতে পারেন।
Heroku তে Flask API ডিপ্লয় করার জন্য পদক্ষেপ:
- Heroku অ্যাকাউন্ট তৈরি করুন এবং Heroku CLI ইনস্টল করুন।
- Flask অ্যাপ ডিপ্লয় করতে প্রয়োজনীয় ফাইল তৈরি করুন যেমন:
requirements.txt:flask mxnet numpy pillowProcfile:web: python app.py
- Git রেপোজিটরি তৈরি করুন এবং Heroku অ্যাপ্লিকেশন ডিপ্লয় করুন।
সারাংশ
- Flask API ব্যবহার করে একটি RESTful API তৈরি করা হয়েছে যা একটি MXNet pre-trained model সার্ভ করে।
- Custom Dataset বা pre-trained model ব্যবহার করে ইমেজ ক্লাসিফিকেশন করার জন্য একটি মডেল তৈরি করা হয়েছে।
- Transfer Learning ব্যবহার করে কাস্টম ডেটাসেটের জন্য মডেল সার্ভ করা সম্ভব।
- Postman বা curl ব্যবহার করে API তে ইমেজ পাঠিয়ে প্রেডিকশন রিটার্ন করা হয়েছে।
এই প্রকল্পটি একটি MXNet model সার্ভ করার জন্য একটি সহজ API তৈরি করার উদাহরণ, যা Flask এর মাধ্যমে ডিপ্লয় করা হয়েছে।
Read more