FastAPI ব্যবহারের মাধ্যমে উচ্চ কার্যকারিতা সম্পন্ন, উৎপাদন-উপযোগী LLM API তৈরি করা: একটি ধাপে ধাপে গাইড
FastAPI ব্যবহারের মাধ্যমে উচ্চ কার্যকারিতা সম্পন্ন, উৎপাদন-উপযোগী LLM API তৈরি করা: একটি ধাপে ধাপে গাইড
FastAPI, একটি আধুনিক, উচ্চ কার্যকারিতা সম্পন্ন পাইথন ওয়েব ফ্রেমওয়ার্ক, যা এর ব্যবহারযোগ্যতা, গতি এবং স্বয়ংক্রিয়ভাবে তৈরি API ডকুমেন্টেশনের জন্য বিশেষভাবে জনপ্রিয়। বিশেষ করে LLM (Large Language Model) অ্যাপ্লিকেশনগুলির ব্যাকএন্ড API তৈরির ক্ষেত্রে, FastAPI একটি শক্তিশালী সুবিধা প্রদান করে। এই নিবন্ধে, আমরা ধাপে ধাপে দেখাবো কিভাবে FastAPI ব্যবহার করে একটি উৎপাদন-উপযোগী LLM API তৈরি করা যায় এবং কিছু সেরা অনুশীলন নিয়ে আলোচনা করা হবে।
কেন FastAPI নির্বাচন করবেন?
LLM অ্যাপ্লিকেশনের API তৈরি করার সময়, FastAPI নিম্নলিখিত গুরুত্বপূর্ণ সুবিধাগুলি প্রদান করে:
- উচ্চ কার্যকারিতা: ASGI-এর উপর ভিত্তি করে, FastAPI উচ্চ সংখ্যক কনকারেন্ট অনুরোধগুলি পরিচালনা করতে পারে, যা দ্রুত প্রতিক্রিয়া প্রয়োজন এমন LLM অ্যাপ্লিকেশনগুলির জন্য অত্যন্ত গুরুত্বপূর্ণ।
- অ্যাসিঙ্ক্রোনাস সমর্থন: FastAPI তে
asyncএবংawaitকীওয়ার্ডগুলির জন্য অন্তর্নির্মিত সমর্থন রয়েছে, যা অ্যাসিঙ্ক্রোনাস অপারেশনগুলি সহজে পরিচালনা করতে পারে, যেমন LLM অনুমান কল করা এবং প্রধান থ্রেডকে ব্লক করা এড়ানো। - স্বয়ংক্রিয় API ডকুমেন্টেশন: FastAPI OpenAPI এবং JSON স্কিমা ব্যবহার করে স্বয়ংক্রিয়ভাবে ইন্টারেক্টিভ API ডকুমেন্টেশন (Swagger UI) তৈরি করে, যা ডেভেলপারদের আপনার API পরীক্ষা এবং ব্যবহার করতে সুবিধা দেয়।
- ডেটা যাচাইকরণ: FastAPI Pydantic ব্যবহার করে ডেটা যাচাই করে, যা অনুরোধ প্যারামিটারগুলির সঠিকতা নিশ্চিত করে এবং ত্রুটি হ্রাস করে।
- নির্ভরতা ইনজেকশন: FastAPI-এর নির্ভরতা ইনজেকশন সিস্টেম সম্পদগুলি পরিচালনা এবং ভাগ করে নেওয়ার সুবিধা দেয়, যেমন LLM মডেল।
- সক্রিয় সম্প্রদায়: FastAPI-এর একটি বিশাল এবং সক্রিয় সম্প্রদায় রয়েছে, যা থেকে প্রচুর সম্পদ এবং সমর্থন পাওয়া যায়।
প্রস্তুতি
-
পাইথন ইনস্টল করুন: নিশ্চিত করুন যে আপনি পাইথন 3.7 বা তার উপরে সংস্করণ ইনস্টল করেছেন।
-
FastAPI এবং Uvicorn ইনস্টল করুন: pip ব্যবহার করে FastAPI এবং Uvicorn (ASGI সার্ভার) ইনস্টল করুন:
pip install fastapi uvicorn -
LLM মডেল নির্বাচন করুন: আপনি যে LLM মডেলটি ব্যবহার করতে চান তা নির্বাচন করুন। এটি OpenAI এর মডেল হতে পারে, অথবা TinyLlama-এর মতো ওপেন সোর্স মডেলও হতে পারে। যদি OpenAI নির্বাচন করেন, তাহলে আপনার OpenAI API কী লাগবে। যদি TinyLlama নির্বাচন করেন, তাহলে আপনাকে মডেল ফাইলটি ডাউনলোড করতে হবে।
ধাপ ১: FastAPI অ্যাপ্লিকেশন তৈরি করুন
main.py নামের একটি ফাইল তৈরি করুন এবং নিম্নলিখিত কোড যোগ করুন:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
app = FastAPI(title="LLM API", description="LLM-এর সাথে ইন্টারঅ্যাক্ট করার জন্য একটি সাধারণ API।")
class InputText(BaseModel):
text: str
class OutputText(BaseModel):
generated_text: str
এই কোডটি একটি FastAPI অ্যাপ্লিকেশন তৈরি করে এবং দুটি Pydantic মডেল সংজ্ঞায়িত করে: InputText ইনপুট টেক্সট গ্রহণ করার জন্য এবং OutputText জেনারেটেড টেক্সট ফেরত দেওয়ার জন্য।
ধাপ ২: LLM অনুমানের যুক্তি যোগ করুন
আপনার নির্বাচিত LLM মডেলের উপর ভিত্তি করে, সংশ্লিষ্ট অনুমানের যুক্তি যোগ করুন। এখানে OpenAI API ব্যবহারের একটি উদাহরণ দেওয়া হলো:
import openai
import os
# OpenAI API কী পান
openai.api_key = os.environ.get("OPENAI_API_KEY") # পরিবেশের পরিবর্তনশীল ব্যবহার করার পরামর্শ দেওয়া হচ্ছে
@app.post("/generate", response_model=OutputText)
async def generate_text(input_text: InputText):
"""
Generates text based on the input text using OpenAI.
"""
try:
response = openai.Completion.create(
engine="text-davinci-003", # মডেল নির্বাচন করুন
prompt=input_text.text,
max_tokens=150,
n=1,
stop=None,
temperature=0.7,
)
generated_text = response.choices[0].text.strip()
return OutputText(generated_text=generated_text)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
এই কোডটি একটি /generate রুট সংজ্ঞায়িত করে, যা ইনপুট হিসাবে একটি InputText অবজেক্ট গ্রহণ করে, OpenAI API ব্যবহার করে টেক্সট তৈরি করে এবং জেনারেট করা টেক্সটকে OutputText অবজেক্ট হিসাবে ফেরত দেয়। text-davinci-003-কে আপনার পছন্দের মডেল দিয়ে প্রতিস্থাপন করতে ভুলবেন না।
যদি TinyLlama-এর মতো লোকাল মডেল ব্যবহার করেন, তাহলে transformers-এর মতো সংশ্লিষ্ট লাইব্রেরি ইনস্টল করতে হবে এবং মডেলটিকে মেমরিতে লোড করতে হবে। কোডের উদাহরণ নিচে দেওয়া হল:
from transformers import pipeline
import torch
generator = pipeline('text-generation', model="TinyLlama/TinyLlama-1.1B-Chat-v1.0", torch_dtype=torch.bfloat16, device_map="auto")
@app.post("/generate", response_model=OutputText)
async def generate_text(input_text: InputText):
"""
Generates text based on the input text using TinyLlama.
"""
try:
generated_text = generator(input_text.text, max_length=50, do_sample=True, temperature=0.7)[0]['generated_text']
return OutputText(generated_text=generated_text)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
ধাপ ৩: FastAPI অ্যাপ্লিকেশন চালান
Uvicorn ব্যবহার করে FastAPI অ্যাপ্লিকেশন চালান:
uvicorn main:app --reload
```এটি একটি লোকাল সার্ভার শুরু করবে, আপনি ব্রাউজারে `http://127.0.0.1:8000/docs` এ স্বয়ংক্রিয়ভাবে তৈরি API ডকুমেন্ট দেখতে পারেন। `--reload` প্যারামিটার কোড পরিবর্তনের পরে স্বয়ংক্রিয়ভাবে সার্ভার পুনরায় চালু করতে পারে, যা ডেভেলপমেন্টের জন্য সুবিধাজনক।
## ধাপ ৪: API পরীক্ষা করা
API ডকুমেন্ট বা curl এর মতো সরঞ্জাম ব্যবহার করে আপনার API পরীক্ষা করুন। উদাহরণস্বরূপ, curl ব্যবহার করে একটি POST অনুরোধ পাঠান:
```bash
curl -X POST -H "Content-Type: application/json" -d '{"text": "Tell me a joke about cats."}' http://127.0.0.1:8000/generate
আপনার একটি JSON প্রতিক্রিয়া পাওয়া উচিত যাতে জেনারেট করা টেক্সট রয়েছে।
ধাপ ৫: প্রোডাকশন ডেপ্লয়মেন্ট
FastAPI অ্যাপ্লিকেশনটিকে প্রোডাকশন পরিবেশে ডেপ্লয় করুন, যেমন:
- Docker: ডকার ব্যবহার করে আপনার অ্যাপ্লিকেশনটিকে কন্টেইনারাইজ করুন, যা ডেপ্লয় এবং ব্যবস্থাপনার জন্য সুবিধাজনক।
- ক্লাউড প্ল্যাটফর্ম: ক্লাউড প্ল্যাটফর্মে ডেপ্লয় করুন, যেমন AWS, Google Cloud Platform বা Azure। আর্টিকেলে উল্লিখিত Azure Cosmos DB এবং Azure Functions সার্ভারবিহীন API তৈরি করতে ব্যবহার করা যেতে পারে। Modal স্বয়ংক্রিয়ভাবে স্কেলিং হওয়া FastAPI অ্যাপ্লিকেশন ডেপ্লয় করার জন্য ব্যবহার করা যেতে পারে।
- সার্ভার: আপনার নিজের সার্ভারে ডেপ্লয় করুন।
সেরা অনুশীলন
- সংবেদনশীল তথ্য সংরক্ষণের জন্য এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করুন: API কী-এর মতো সংবেদনশীল তথ্য কোডে সরাসরি লিখবেন না, বরং এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করুন।
- লগিং যোগ করুন: API-এর চলমান অবস্থা রেকর্ড করতে লগিং মডিউল ব্যবহার করুন, যা ডিবাগিং এবং নিরীক্ষণের জন্য সুবিধাজনক।
- এরর হ্যান্ডলিং যোগ করুন: সম্ভাব্য ব্যতিক্রমগুলি পরিচালনা করতে
try...exceptব্লক ব্যবহার করুন এবং উপযুক্ত ত্রুটি বার্তা ফেরত দিন। - রেট লিমিটিং: API-এর অপব্যবহার রোধ করতে রেট লিমিটার ব্যবহার করুন। FastAPI-তে কিছু তৈরি করা রেট লিমিটিং লাইব্রেরি উপলব্ধ রয়েছে।
- ক্যাশিং: পুনরাবৃত্ত অনুরোধের জন্য, কর্মক্ষমতা উন্নত করতে ক্যাশিং ব্যবহার করা যেতে পারে।
- মনিটরিং: API-এর কর্মক্ষমতা এবং উপলব্ধতা নিরীক্ষণের জন্য মনিটরিং সরঞ্জাম ব্যবহার করুন।
উন্নত কৌশল
- অ্যাসিঙ্ক্রোনাস প্রসেসিং: সময়সাপেক্ষ LLM অনুমানের জন্য, প্রধান থ্রেডকে ব্লক করা এড়াতে
asyncএবংawaitকীওয়ার্ড ব্যবহার করে অ্যাসিঙ্ক্রোনাস প্রসেসিং করুন। - স্ট্রিমিং রেসপন্স: রিয়েল-টাইমে জেনারেট করা টেক্সট ফেরত দিতে স্ট্রিমিং রেসপন্স (StreamingResponse) ব্যবহার করুন, যা ব্যবহারকারীর অভিজ্ঞতা উন্নত করে।
- মাল্টিথ্রেডিং/মাল্টিপ্রসেসিং: CPU-intensive LLM অনুমানের জন্য, কর্মক্ষমতা উন্নত করতে মাল্টিথ্রেডিং বা মাল্টিপ্রসেসিং ব্যবহার করা যেতে পারে।
- GPU ত্বরণ: যদি আপনার LLM মডেল GPU ত্বরণ সমর্থন করে, তাহলে অনুমানের গতি বাড়ানোর জন্য CUDA বা অন্যান্য GPU ত্বরণ লাইব্রেরি ব্যবহার করা যেতে পারে।





