Model Deployment এবং API Integration মডেল তৈরি ও ব্যবহার করার পরের গুরুত্বপূর্ণ ধাপ। একবার একটি মডেল প্রশিক্ষিত হলে, তা প্রোডাকশনে (production) ব্যবহার করার জন্য Deployment প্রয়োজন। Deployment এর পর, মডেলটি বিভিন্ন অ্যাপ্লিকেশন এবং সিস্টেমে ব্যবহারের জন্য একটি API (Application Programming Interface) এর মাধ্যমে integrate করা হয়। এই প্রক্রিয়ায় মডেলটি ব্যবহারকারী বা ক্লায়েন্টের অনুরোধের ভিত্তিতে কাজ করে।
Model Deployment
Model Deployment হল প্রশিক্ষিত মডেলকে উৎপাদন পরিবেশে মোতায়েন করা যাতে এটি বাস্তব জীবনের ডেটা বা অনুরোধে কাজ করতে পারে। এটি একটি অনলাইন বা অফলাইন পরিবেশে করা হতে পারে।
Model Deployment-এর ধাপসমূহ
প্রশিক্ষিত মডেল সংরক্ষণ:
- প্রথমে, একটি মডেল যা আপনি ট্রেনিং করেছেন, তা সংরক্ষণ করতে হবে। এটি একটি ফাইল হিসেবে সংরক্ষণ করা হয় যা পরবর্তী সময়ে ডিপ্লয়মেন্টের জন্য ব্যবহৃত হয়।
- কৃত্রিম নিউরাল নেটওয়ার্কের ক্ষেত্রে মডেলটি সাধারণত
.h5(Keras),.pkl(scikit-learn), অথবা.pb(TensorFlow) ফরম্যাটে সংরক্ষিত হয়।
উদাহরণ (Keras):
model.save('model.h5')API এবং Web Service তৈরি:
- প্রশিক্ষিত মডেলকে একটি API এর মাধ্যমে মডেল ডিপ্লয় করা হয়, যাতে ব্যবহারকারী HTTP অনুরোধের মাধ্যমে মডেলটিতে প্রবেশ করতে পারে।
- সাধারণত, Flask বা FastAPI এর মতো ওয়েব ফ্রেমওয়ার্ক ব্যবহৃত হয়।
উদাহরণ (Flask):
from flask import Flask, request, jsonify import tensorflow as tf app = Flask(__name__) model = tf.keras.models.load_model('model.h5') @app.route('/predict', methods=['POST']) def predict(): data = request.get_json() prediction = model.predict([data['input']]) return jsonify({'prediction': prediction.tolist()}) if __name__ == '__main__': app.run(debug=True)- Cloud Platform বা Local Server-এ মডেল ডিপ্লয়মেন্ট:
- আপনি মডেলটিকে Cloud Platforms যেমন AWS, Google Cloud, Microsoft Azure এ ডিপ্লয় করতে পারেন।
- অথবা local servers বা Docker containers ব্যবহার করে ডিপ্লয় করা হতে পারে।
- Containerization (Docker):
- Docker ব্যবহার করে আপনি মডেল ও এর ডিপেন্ডেন্সি সমেত একটি container তৈরি করতে পারেন, যা যে কোনো পরিবেশে চালানো যেতে পারে।
Docker Image তৈরি করার জন্য:
docker build -t model-image . docker run -p 5000:5000 model-image
- MLOps (Model Operations):
- MLOps ব্যবহারের মাধ্যমে মডেল লাইফসাইকেল এবং বিভিন্ন পরিবর্তন পরিচালনা করা হয়, যা মডেলগুলির উন্নয়ন, ট্র্যাকিং, ও ডিপ্লয়মেন্ট সহজ করে।
API Integration
মডেল ডিপ্লয় করার পর, তা অন্যান্য অ্যাপ্লিকেশন বা সিস্টেমের সাথে যোগাযোগ করার জন্য একটি API এর মাধ্যমে integrate করা হয়। API Integration মডেলটির আউটপুট (যেমন পূর্বাভাস বা ক্লাসিফিকেশন) অন্য সিস্টেমে ব্যবহারের জন্য তৈরি করে।
API Integration এর ধাপসমূহ
API Client তৈরি করা:
- API Integration এর জন্য প্রথমে আপনাকে একটি API Client তৈরি করতে হবে যা HTTP অনুরোধ (Request) পাঠাবে এবং প্রতিক্রিয়া (Response) নিবে।
উদাহরণ (Python Requests):
import requests url = 'http://localhost:5000/predict' data = {'input': [1, 2, 3]} # উদাহরণ ইনপুট response = requests.post(url, json=data) print(response.json()) # মডেল থেকে প্রাপ্ত আউটপুট- API Endpoints তৈরি করা:
- ওয়েব সার্ভিসে বিভিন্ন endpoint তৈরি করা হয়, যা নির্দিষ্ট কাজ (যেমন পূর্বাভাস, মূল্যায়ন) সম্পাদন করবে। একাধিক endpoint তৈরি করা যেতে পারে যেমন
/predict,/retrain,/statusইত্যাদি।
- ওয়েব সার্ভিসে বিভিন্ন endpoint তৈরি করা হয়, যা নির্দিষ্ট কাজ (যেমন পূর্বাভাস, মূল্যায়ন) সম্পাদন করবে। একাধিক endpoint তৈরি করা যেতে পারে যেমন
- Integration with Frontend Applications:
- API কে ফ্রন্টএন্ড অ্যাপ্লিকেশনের সাথে যুক্ত করা হয়, যেমন একটি ওয়েব অ্যাপ্লিকেশন (React, Angular) বা মোবাইল অ্যাপ্লিকেশন (Android, iOS)।
- AJAX বা Fetch API ব্যবহার করে ফ্রন্টএন্ড থেকে API কল করা হয়।
- Authentication and Authorization:
- API Integration-এর ক্ষেত্রে নিরাপত্তা খুবই গুরুত্বপূর্ণ। API ব্যবহারকারীদের অ্যাক্সেস সীমাবদ্ধ করার জন্য OAuth, API Key বা JWT (JSON Web Token) এর মতো সিকিউরিটি প্রযুক্তি ব্যবহার করা হয়।
Model Deployment Platforms
- Cloud Platforms:
- AWS (Amazon Web Services): AWS সবার মধ্যে সবচেয়ে জনপ্রিয় মডেল ডিপ্লয়মেন্ট প্ল্যাটফর্ম, যেখানে SageMaker একটি পূর্ণাঙ্গ AI মডেল ডিপ্লয়মেন্ট সার্ভিস।
- Google Cloud Platform (GCP): Google-এর AI সার্ভিস এবং AI Platform মডেল ডিপ্লয়মেন্টের জন্য ব্যবহৃত হয়।
- Microsoft Azure: Azure Machine Learning Service এবং Azure ML একটি শক্তিশালী AI মডেল ডিপ্লয়মেন্ট প্ল্যাটফর্ম।
- On-premise Servers:
- Local Servers ব্যবহার করে আপনি সহজেই আপনার মডেল ডিপ্লয় করতে পারেন। এটি এক্সেস কন্ট্রোল এবং নিরাপত্তা নীতিমালার জন্য উপযুক্ত হতে পারে।
- Docker and Kubernetes:
- Docker ব্যবহার করে মডেলকে একটি কন্টেইনারে বন্দী করা যায় এবং Kubernetes ব্যবহার করে সেই কন্টেইনারগুলো স্কেল করা যায়। এটি ক্লাউড এবং অন-পেমিস সিস্টেমে ব্যবহারের জন্য উপযুক্ত।
Model Deployment এর চ্যালেঞ্জ
- Scalability:
- ডিপ্লয়মেন্টের সময় মডেলটির পারফরম্যান্স এবং স্কেল নিশ্চিত করতে হবে। Auto-scaling সিস্টেম তৈরি করা প্রয়োজন।
- Monitoring and Maintenance:
- মডেলটির কার্যকারিতা ও উন্নতি ট্র্যাক করা অত্যন্ত গুরুত্বপূর্ণ। বিভিন্ন মেট্রিক্স যেমন accuracy, latency, throughput পর্যবেক্ষণ করা হয়।
- Model Drift:
- মডেলটির পারফরম্যান্স সময়ের সাথে পরিবর্তিত হতে পারে। মডেল ডিপ্লয়মেন্টের পর মডেল পুনঃপ্রশিক্ষণের প্রয়োজন হতে পারে, যা "Model Drift" মোকাবিলা করতে সাহায্য করে।
সারাংশ
- Model Deployment হল প্রশিক্ষিত মডেলকে উৎপাদন পরিবেশে মোতায়েন করা এবং এটি বিভিন্ন অ্যাপ্লিকেশন বা সিস্টেমে ব্যবহারের জন্য একটি API (RESTful API) এর মাধ্যমে সংযুক্ত করা।
- API Integration মডেলটিকে ক্লায়েন্ট অ্যাপ্লিকেশনগুলির সঙ্গে যোগাযোগ করার উপযুক্ত উপায় হিসেবে কাজ করে, যেমন ওয়েব অ্যাপ্লিকেশন, মোবাইল অ্যাপ্লিকেশন ইত্যাদি।
- Cloud platforms, Docker, এবং Kubernetes হল প্রধান টুলস এবং সিস্টেম যা মডেল ডিপ্লয়মেন্টে সহায়তা করে।
এটি নিশ্চিত করে যে মডেলটি বাস্তব পৃথিবীতে কার্যকরী এবং দক্ষভাবে কাজ করতে পারে।
Model Deployment হল একটি মেশিন লার্নিং মডেলকে প্রোডাকশন পরিবেশে নিয়ে আসার প্রক্রিয়া, যেখানে এটি রিয়েল-টাইম বা ব্যাচ প্রসেসিং ব্যবহারের মাধ্যমে ব্যবহারকারীদের জন্য সরাসরি সিদ্ধান্ত তৈরি করতে পারে। একটি মডেল তৈরি করা হয় গবেষণা বা পরীক্ষামূলক স্তরে, তবে সেটি ব্যবহারযোগ্য বা প্রোডাকশন স্তরে পৌঁছানোর জন্য deployment প্রয়োজন হয়। Model Deployment একটি গুরুত্বপূর্ণ স্টেপ, কারণ এটি মডেলটির কার্যকারিতা বাস্তবে নিশ্চিত করে এবং প্রোডাকশন সিস্টেমের অংশ হিসেবে একে ব্যবহার করা সম্ভব করে।
এটি মেশিন লার্নিং এবং ডিপ লার্নিং প্রকল্পের একটি অপরিহার্য অংশ, যা শুধু মডেল ট্রেনিংয়ের পরবর্তী ধাপ নয়, বরং মডেলটি বাস্তব জীবনে ব্যবহারযোগ্য এবং কার্যকরী করার জন্যও প্রয়োজনীয়।
Model Deployment এর ভূমিকা:
- ব্যবহারকারী বা সিস্টেমের জন্য কার্যকরী সিদ্ধান্ত তৈরি করা:
- মডেলটি যখন প্রোডাকশন পরিবেশে ডিপ্লয় করা হয়, তখন এটি রিয়েল-টাইম সিদ্ধান্ত গ্রহণ এবং অটোমেটেড ডেটা প্রক্রিয়াকরণ করতে সক্ষম হয়। উদাহরণস্বরূপ, একটি নিরাপত্তা সিস্টেম ব্যবহার করতে পারে মুখ চিহ্নিতকরণ মডেল যা প্রাপ্ত ফুটেজে অপরিচিত ব্যক্তি শনাক্ত করবে এবং সতর্কতা পাঠাবে।
- ফলাফল বা আউটপুট সরবরাহ করা:
- প্রোডাকশনে ডিপ্লয় করা মডেলটি নতুন ডেটার উপর পূর্বাভাস (prediction) তৈরি করবে এবং সরাসরি ব্যবহারকারী বা সিস্টেমে ফলাফল সরবরাহ করবে। যেমন, একটি ক্রেডিট স্কোর মডেল ব্যাংকের সিস্টেমে ডিপ্লয় করা হলে এটি নতুন লোন অ্যাপ্লিকেশনের তথ্য নিয়ে ঋণ অনুমোদন/অস্বীকৃতি সিদ্ধান্ত গ্রহণ করতে পারে।
- ব্যবসার জন্য মান বৃদ্ধি করা:
- Model Deployment একটি কার্যকরী টুল হয়ে ওঠে, যা ব্যবসার জন্য সরাসরি মান সৃষ্টি করে। যেমন, ই-কমার্স সাইট এ রেকমেন্ডেশন সিস্টেম ডিপ্লয় করলে ব্যবহারকারীদের পছন্দ অনুযায়ী প্রোডাক্ট পরামর্শ দেয়া যেতে পারে, যা বিক্রির পরিমাণ বাড়াতে সাহায্য করবে।
- স্কেলেবল সলিউশন প্রদান করা:
- প্রোডাকশন পরিবেশে ডিপ্লয় করা মডেলটি সাধারণত ডিস্ট্রিবিউটেড সিস্টেম বা ক্লাউড ব্যবহার করে স্কেল করা যায়, যাতে এটি বড় আকারের ডেটাসেট প্রক্রিয়া করতে এবং বড় সংখ্যক রিকোয়েস্ট হ্যান্ডেল করতে সক্ষম হয়। এটি মডেলটির স্কেলেবিলিটি এবং ইফিশিয়েন্সি নিশ্চিত করে।
- অ্যাপ্লিকেশন ইন্টিগ্রেশন:
- মডেল ডিপ্লয়মেন্টের মাধ্যমে, আপনি বিভিন্ন অ্যাপ্লিকেশন বা সিস্টেম এর মধ্যে মডেলটি ইন্টিগ্রেট করতে পারেন, যেমন ওয়েব অ্যাপ্লিকেশন, মোবাইল অ্যাপ্লিকেশন বা এন্টারপ্রাইজ সফটওয়্যার। এটি মডেলটির কার্যকারিতা বিভিন্ন প্ল্যাটফর্মে কার্যকরী করার সুযোগ দেয়।
- নতুন ডেটা এবং ফলাফল ব্যবহার করা:
- মডেলটি প্রোডাকশনে ডিপ্লয় করার পরে, এটি নতুন ডেটা গ্রহণ করতে পারে এবং ফলাফল বা আউটপুট পুনঃশিক্ষা (retraining) এর মাধ্যমে অপটিমাইজেশন করতে সক্ষম। এটি মডেলটির দীর্ঘমেয়াদী কার্যকারিতা এবং প্রাসঙ্গিকতা নিশ্চিত করতে সহায়তা করে।
Model Deployment এর বিভিন্ন পদ্ধতি:
- Web API Deployment:
- মডেলটি একটি REST API বা GraphQL API হিসেবে ডিপ্লয় করা হয়, যেখানে ব্যবহারকারীরা HTTP রিকোয়েস্টের মাধ্যমে মডেলের আউটপুট পেতে পারে। যেমন, একটি রিয়েল-টাইম প্রেডিকশন API যা মোবাইল অ্যাপ্লিকেশন বা ওয়েবসাইট এর সাথে ইন্টিগ্রেট করা হয়।
- Batch Processing:
- এখানে মডেলটি এক বা একাধিক ব্যাচে ডেটা প্রক্রিয়া করে, যেমন একটি ব্যাচ প্রেডিকশন সিস্টেম। এটি ডেটার একটি বৃহৎ অংশ একসাথে প্রক্রিয়া করে এবং পরবর্তীতে আউটপুট বা ফলাফল তৈরি করে।
- Cloud Deployment:
- মডেলটি ক্লাউড সেবা (যেমন AWS, Google Cloud, Microsoft Azure) এর মাধ্যমে ডিপ্লয় করা হয়, যা মডেলটির স্কেলিং, ব্যবস্থাপনা এবং রক্ষণাবেক্ষণ সহজ করে তোলে। এখানে Cloud AI services ব্যবহার করা হতে পারে, যেমন AWS SageMaker, Azure Machine Learning, বা Google AI Platform।
- On-premise Deployment:
- এখানে, মডেলটি সরাসরি একটি লোকাল সার্ভারে বা নেটওয়ার্কে ডিপ্লয় করা হয়, যেখানে ইন্টারনেট বা ক্লাউডে নির্ভরতা কম থাকে এবং বিশেষ সিকিউরিটি প্রয়োজনীয়তা থাকে।
- Embedded Deployment:
- মডেলটি ডিপ্লয় করা হয় একটি এম্বেডেড ডিভাইসে বা আইওটি ডিভাইসে, যেখানে কম্পিউটেশনাল শক্তি কম এবং মডেলটি প্রোডাকশন বা রিয়েল-টাইম প্রেডিকশন সক্ষম করতে হয়।
Model Deployment এর জন্য জনপ্রিয় টুলস এবং ফ্রেমওয়ার্কস:
- Flask/Django:
- এই দুটি Python ফ্রেমওয়ার্কে মডেল API তৈরি করতে সহায়তা করে, যা মডেল ডিপ্লয়মেন্টের জন্য ব্যবহৃত হয়।
- TensorFlow Serving:
- TensorFlow মডেল ডিপ্লয় করার জন্য একটি বিশেষ সার্ভার যা মডেল ইন্টিগ্রেশন, স্কেলিং এবং পারফরম্যান্স অপটিমাইজেশন করতে সহায়তা করে।
- FastAPI:
- Python এ মডেল API তৈরির জন্য খুব দ্রুত এবং কার্যকরী একটি ফ্রেমওয়ার্ক, যা মডেল ডিপ্লয়মেন্টে ব্যবহৃত হয়।
- KubeFlow:
- Kubernetes এ মডেল ডিপ্লয়মেন্ট এবং ম্যানেজমেন্টের জন্য ব্যবহৃত একটি ফ্রেমওয়ার্ক। এটি মডেল ডিপ্লয়মেন্ট এবং স্কেলিং সহজ করে।
- Docker:
- মডেল ডিপ্লয়মেন্টের জন্য একটি কনটেইনারাইজেশন টুল যা মডেল এবং এর ডিপেনডেন্সিগুলিকে একত্রে প্যাকেজ করতে সহায়তা করে।
সারাংশ
Model Deployment হল মডেলকে প্রোডাকশন পরিবেশে সরিয়ে নেওয়ার প্রক্রিয়া, যেখানে মডেলটি রিয়েল-টাইম বা ব্যাচ প্রসেসিংয়ের মাধ্যমে কার্যকরী সিদ্ধান্ত তৈরি করতে পারে। এটি মডেলের কার্যকারিতা বাস্তবে নিশ্চিত করে এবং এটি স্কেলেবল, দ্রুত এবং ব্যবহারকারী বা সিস্টেমের জন্য কার্যকরী আউটপুট প্রদান করতে সক্ষম। Model Deployment একটি মেশিন লার্নিং বা ডিপ লার্নিং প্রকল্পের শেষ এবং গুরুত্বপূর্ণ ধাপ, যা মডেলটির ব্যবসায়িক প্রয়োগ এবং বাস্তবায়নে সহায়তা করে।
MXNet মডেল ডেপ্লয়মেন্ট একটি অত্যন্ত গুরুত্বপূর্ণ প্রক্রিয়া যা আপনাকে আপনার প্রশিক্ষিত মডেলটি প্রোডাকশন পরিবেশে চালাতে এবং ওয়েব অ্যাপ্লিকেশন বা সার্ভিসের মাধ্যমে ব্যবহার করতে সক্ষম করে। সাধারণত, Flask বা Django এর মতো ওয়েব ফ্রেমওয়ার্ক ব্যবহার করে মডেল ডেপ্লয় করা হয়।
এখানে আমরা দেখব কিভাবে MXNet মডেলটি Flask এবং Django ওয়েব অ্যাপ্লিকেশন ব্যবহার করে ডেপ্লয় করা যায়।
১. MXNet মডেল Flask অ্যাপ্লিকেশনে ডেপ্লয় করা
Flask একটি লাইটওয়েট ওয়েব ফ্রেমওয়ার্ক, যা মডেল ডেপ্লয়মেন্টের জন্য খুবই উপযোগী। Flask ব্যবহার করে আপনি REST API তৈরি করতে পারেন, যা মডেলকে সার্ভ করবে এবং ওয়েব ক্লায়েন্ট থেকে ইনপুট নেবে।
1.1 Flask অ্যাপ্লিকেশন সেটআপ
Flask ইনস্টলেশন: প্রথমে Flask ইনস্টল করতে হবে:
pip install FlaskMXNet মডেল লোড: Flask অ্যাপ্লিকেশনে MXNet মডেল লোড করার জন্য
mxnetইনস্টল করতে হবে:pip install mxnetFlask অ্যাপ্লিকেশন তৈরি: এখন Flask অ্যাপ তৈরি করতে হবে যা প্রি-ট্রেইনড MXNet মডেল ব্যবহার করবে।
from flask import Flask, request, jsonify import mxnet as mx from mxnet.gluon import model_zoo from mxnet import nd app = Flask(__name__) # Pre-trained মডেল লোড করা model = model_zoo.vision.resnet18_v2(pretrained=True) model.hybridize() # মডেলটি দ্রুততার জন্য হাইব্রিড করুন @app.route('/predict', methods=['POST']) def predict(): # রিকোয়েস্ট থেকে ইমেজ ডেটা গ্রহণ img = request.files['file'].read() # ইমেজ ফাইল গ্রহণ img = nd.array(img) # ইমেজ কনভার্ট করা MXNet অ্যারে-তে # ইমেজ প্রিপ্রসেসিং এবং ফিচার এক্সট্রাকশন img = img.astype('float32') img = img.reshape((1, 3, 224, 224)) # ইনপুট সাইজ সঠিক করতে # প্রেডিকশন করা output = model(img) # আউটপুট রিটার্ন করা return jsonify({'prediction': output.asnumpy().tolist()}) if __name__ == '__main__': app.run(debug=True)Flask অ্যাপ্লিকেশন চালানো: Flask অ্যাপ্লিকেশন চালাতে নিচের কমান্ডটি ব্যবহার করুন:
python app.py
1.2 API কল করা (Client-Side Request)
আপনার Flask সার্ভারটি এখন localhost:5000 এ চলবে এবং /predict এ POST রিকোয়েস্ট গ্রহণ করবে। ক্লায়েন্ট থেকে ইমেজ প্রেরণ করতে, আপনি যেমন curl বা Postman ব্যবহার করতে পারেন।
যেমন একটি curl কমান্ড হতে পারে:
curl -X POST -F "file=@image.jpg" http://localhost:5000/predict
এটি Flask অ্যাপ থেকে prediction রিটার্ন করবে।
২. MXNet মডেল Django অ্যাপ্লিকেশনে ডেপ্লয় করা
Django হল একটি পূর্ণাঙ্গ ওয়েব ফ্রেমওয়ার্ক এবং এটি খুবই শক্তিশালী। Django ব্যবহার করে আপনি একইভাবে REST API তৈরি করে MXNet মডেল ডেপ্লয় করতে পারেন।
2.1 Django অ্যাপ্লিকেশন সেটআপ
Django ইনস্টলেশন: প্রথমে Django ইনস্টল করতে হবে:
pip install DjangoDjango REST Framework ইনস্টলেশন: Django অ্যাপ্লিকেশনে API তৈরি করার জন্য Django REST Framework ইনস্টল করতে হবে:
pip install djangorestframeworkMXNet ইনস্টলেশন: MXNet মডেল লোড করার জন্য
mxnetইনস্টল করতে হবে:pip install mxnetDjango প্রজেক্ট তৈরি করা: Django প্রজেক্ট তৈরি করার জন্য:
django-admin startproject myproject cd myproject python manage.py startapp predictionDjango মডেল লোড এবং প্রেডিকশন ফাংশন তৈরি: Django অ্যাপ্লিকেশনে একটি API তৈরি করা হবে যা ইমেজ রিসিভ করবে এবং MXNet মডেলের মাধ্যমে প্রেডিকশন করবে।
views.pyফাইলে নিম্নলিখিত কোড লিখুন:from django.http import JsonResponse from rest_framework.decorators import api_view import mxnet as mx from mxnet.gluon import model_zoo from mxnet import nd from PIL import Image import numpy as np from io import BytesIO # Pre-trained মডেল লোড করা model = model_zoo.vision.resnet18_v2(pretrained=True) model.hybridize() @api_view(['POST']) def predict(request): file = request.FILES['file'] img = Image.open(file) img = img.resize((224, 224)) img = np.array(img) img = mx.nd.array(img) img = img.astype('float32') img = img.transpose((2, 0, 1)).expand_dims(axis=0) # সঠিক ইনপুট সাইজ নিশ্চিত করা # প্রেডিকশন output = model(img) result = output.asnumpy().tolist() return JsonResponse({'prediction': result})URL কনফিগারেশন: Django অ্যাপের
urls.pyফাইলে API রাউটিং যুক্ত করুন:from django.urls import path from . import views urlpatterns = [ path('predict/', views.predict, name='predict'), ]Django অ্যাপ চালানো: Django অ্যাপ চালাতে:
python manage.py runserver
2.2 Django API কল করা
আপনার Django সার্ভারটি এখন localhost:8000 এ চলবে এবং /predict/ রুটে POST রিকোয়েস্ট গ্রহণ করবে। ক্লায়েন্ট থেকে ইমেজ প্রেরণ করতে, আপনি curl বা Postman ব্যবহার করতে পারেন।
যেমন একটি curl কমান্ড হতে পারে:
curl -X POST -F "file=@image.jpg" http://localhost:8000/predict/
এটি Django অ্যাপ থেকে prediction রিটার্ন করবে।
সারাংশ
- Flask বা Django ব্যবহার করে আপনি খুব সহজেই MXNet মডেল ডেপ্লয় করতে পারেন এবং ওয়েব অ্যাপ্লিকেশন বা API তৈরি করতে পারেন।
- Flask সাধারণত দ্রুত এবং সহজ অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয়, তবে Django একটি পূর্ণাঙ্গ ওয়েব ফ্রেমওয়ার্ক, যেখানে আপনাকে বেশি কনফিগারেশন এবং ফিচার পেতে সাহায্য করবে।
- আপনি MXNet মডেলকে ওয়েব সার্ভিসের মাধ্যমে ডেপ্লয় করতে পারেন এবং এতে prediction সার্ভ করা যায় ক্লায়েন্টদের ইনপুট ডেটার ভিত্তিতে।
একটি 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 এর মাধ্যমে ডিপ্লয় করা হয়েছে।
Model Deployment হল মেশিন লার্নিং মডেলটি প্রডাকশনে নিয়ে আসা, যাতে এটি রিয়েল-টাইম ডেটাতে বা API-এর মাধ্যমে ব্যবহার করা যেতে পারে। মডেল ডিপ্লয়মেন্টের পর, আপনার মডেলটি অন্যান্য অ্যাপ্লিকেশন বা সিস্টেমে ইন্টিগ্রেটেড হয়ে কাজ করতে পারে।
এখানে, আমরা MXNet ব্যবহার করে একটি সিম্পল Image Classification মডেল তৈরি করব এবং তার পরে সেটিকে Flask অ্যাপ্লিকেশনে ডিপ্লয় করব, যাতে ব্যবহারকারীরা একটি ওয়েব ইন্টারফেসের মাধ্যমে মডেলটি ব্যবহার করতে পারে।
ধাপ ১: মডেল তৈরি এবং ট্রেনিং
ধরা যাক, আমরা Cats vs Dogs ইমেজ ক্লাসিফিকেশন প্রজেক্টের জন্য একটি pre-trained ResNet-50 মডেল ব্যবহার করে ট্রেনিং করেছি। মডেলটি MXNet ব্যবহার করে ট্রেনিং করা হয়েছে।
import mxnet as mx
from mxnet.gluon import model_zoo, nn
from mxnet.gluon.data.vision import datasets, transforms
from mxnet.gluon.data import DataLoader
# Pre-trained model লোড করা
net = model_zoo.vision.resnet50_v2(pretrained=True)
# আউটপুট লেয়ার পরিবর্তন করা (Cats vs Dogs জন্য)
net.output = nn.Dense(2)
# মডেল ইনিশিয়ালাইজ করা
net.initialize(mx.init.Xavier(), ctx=mx.cpu())
# প্রশিক্ষণ কোড (যেমন আগের উদাহরণে দেওয়া হয়েছে)
# ...
# মডেল সংরক্ষণ করা
net.save_parameters('cats_vs_dogs_model.params')
এখানে, আমরা ResNet-50 মডেল ব্যবহার করেছি এবং output layer-টি পরিবর্তন করেছি যাতে এটি ২টি শ্রেণি (Cats, Dogs) চিহ্নিত করতে পারে।
ধাপ ২: Flask অ্যাপ্লিকেশন তৈরি
এখন আমরা Flask ব্যবহার করে একটি ওয়েব অ্যাপ্লিকেশন তৈরি করব, যেখানে ব্যবহারকারী ইমেজ আপলোড করে মডেলের মাধ্যমে ক্লাসিফিকেশন ফলাফল দেখতে পারবে।
2.1 Flask ইনস্টলেশন
pip install flask
pip install mxnet
pip install pillow
2.2 Flask অ্যাপ্লিকেশন তৈরি করা
app.py ফাইলে Flask অ্যাপ্লিকেশন তৈরি করা হবে:
from flask import Flask, request, render_template
import mxnet as mx
from mxnet.gluon import nn
from mxnet import nd
from PIL import Image
import numpy as np
import io
# Flask অ্যাপ্লিকেশন তৈরি
app = Flask(__name__)
# মডেল লোড করা
net = nn.HybridBlock()
net.load_parameters('cats_vs_dogs_model.params', ctx=mx.cpu())
net.hybridize()
# ইনপুট ইমেজ প্রি-প্রসেসিং ফাংশন
def preprocess_image(image):
# ইমেজ রিসাইজ এবং টেনসরে রূপান্তর
transform = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
return transform(image).expand_dims(axis=0)
# ক্লাসিফিকেশন ফাংশন
def classify_image(image):
# ইমেজ প্রি-প্রসেসিং
image = preprocess_image(image)
# ক্লাসিফিকেশন
output = net(image)
# আউটপুট প্রেডিকশন
prediction = nd.argmax(output, axis=1)
return prediction.asscalar()
# হোম পেজ
@app.route('/')
def index():
return render_template('index.html')
# ইমেজ আপলোড ফাংশন
@app.route('/predict', methods=['POST'])
def predict():
# ইমেজ আপলোড করা
if 'file' not in request.files:
return 'No file uploaded', 400
file = request.files['file']
if file.filename == '':
return 'No selected file', 400
# PIL ইমেজে রূপান্তর
img = Image.open(file.stream)
# ক্লাসিফিকেশন
result = classify_image(img)
# ফলাফল দেখানো
if result == 0:
return 'Prediction: Cat'
else:
return 'Prediction: Dog'
if __name__ == '__main__':
app.run(debug=True)
ব্যাখ্যা:
- Flask অ্যাপ্লিকেশন তৈরি করা হয়েছে যেখানে
/রুটটি হোম পেজ এবং/predictরুটটি ইমেজ ক্লাসিফিকেশন এর জন্য। - ইমেজ আপলোড করার পরে, সেটি preprocess_image() ফাংশন দিয়ে প্রি-প্রসেস করা হয়, এবং মডেল ব্যবহার করে ক্লাসিফিকেশন করা হয়।
- ফলস্বরূপ, মডেলটি ইমেজটি Cat অথবা Dog হিসাবে চিহ্নিত করবে।
ধাপ ৩: HTML ফর্ম তৈরি করা
index.html ফাইল তৈরি করা হবে, যেখানে ব্যবহারকারীরা ছবি আপলোড করতে পারবেন।
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Cat vs Dog Classifier</title>
</head>
<body>
<h1>Upload an image of a cat or a dog</h1>
<form action="/predict" method="post" enctype="multipart/form-data">
<input type="file" name="file" accept="image/*" required>
<button type="submit">Predict</button>
</form>
</body>
</html>
এখানে:
- ব্যবহারকারী ছবি আপলোড করতে পারবেন এবং predict বাটনে ক্লিক করলে, সেই ছবি মডেলটির মাধ্যমে ক্লাসিফাই হবে এবং ফলাফল পেজে দেখানো হবে।
ধাপ ৪: Flask অ্যাপ্লিকেশন চালানো
এখন, Flask অ্যাপ্লিকেশনটি চালানোর জন্য নিচের কমান্ডটি ব্যবহার করুন:
python app.py
এটি একটি ওয়েব সার্ভার চালু করবে যা আপনার লোকালহোস্টে http://127.0.0.1:5000/ এ অ্যাক্সেস করা যাবে।
সারাংশ
এখানে আমরা MXNet মডেলটি Flask অ্যাপ্লিকেশনের মাধ্যমে ডিপ্লয় করেছি। এই প্রক্রিয়ায়:
- pre-trained ResNet-50 মডেলটি ব্যবহার করে Cats vs Dogs ডেটাসেটের উপর ক্লাসিফিকেশন করা হয়েছে।
- Flask ওয়েব সার্ভার তৈরি করে, আমরা file upload ফিচার তৈরি করেছি যেখানে ব্যবহারকারী ইমেজ আপলোড করে মডেলটির মাধ্যমে ক্লাসিফিকেশন দেখতে পারে।
এই মডেল ডিপ্লয়মেন্ট প্রক্রিয়া সাধারণত ওয়েব অ্যাপ্লিকেশন বা API ডিপ্লয়মেন্টে ব্যবহৃত হয়, যেখানে আপনি আপনার মডেলটি সহজে অন্যদের ব্যবহারের জন্য ইন্টারফেস তৈরি করেন।
Read more