FastAPI استعمال کرتے ہوئے اعلی کارکردگی، پیداوار کے لیے تیار LLM API بنائیں: مرحلہ وار گائیڈ
FastAPI استعمال کرتے ہوئے اعلی کارکردگی، پیداوار کے لیے تیار LLM API بنائیں: مرحلہ وار گائیڈ
FastAPI، ایک جدید، اعلی کارکردگی والا Python ویب فریم ورک، اپنی آسانی، رفتار اور خودکار طور پر تیار کردہ 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 Schema کا استعمال کرتے ہوئے انٹرایکٹو API دستاویزات (Swagger UI) خود بخود تیار کرتا ہے، جو ڈویلپرز کے لیے آپ کی API کو جانچنے اور استعمال کرنے میں آسان بناتا ہے۔
- ڈیٹا کی توثیق: FastAPI Pydantic کا استعمال کرتے ہوئے ڈیٹا کی توثیق کرتا ہے، اس بات کو یقینی بناتا ہے کہ درخواست کے پیرامیٹرز درست ہیں اور غلطیوں کو کم کرتے ہیں۔
- انحصار انجیکشن: FastAPI کا انحصار انجیکشن سسٹم وسائل کو منظم اور شیئر کرنے میں آسان بناتا ہے، جیسے کہ LLM ماڈل۔
- فعال کمیونٹی: FastAPI کی ایک بڑی اور فعال کمیونٹی ہے، جو وافر مقدار میں وسائل اور سپورٹ حاصل کرنے میں مددگار ہے۔
تیاری
-
Python انسٹال کریں: یقینی بنائیں کہ آپ نے Python 3.7 یا اس سے اوپر کا ورژن انسٹال کر لیا ہے۔
-
FastAPI اور Uvicorn انسٹال کریں: pip کا استعمال کرتے ہوئے FastAPI اور Uvicorn (ASGI سرور) انسٹال کریں:
pip install fastapi uvicorn -
LLM ماڈل منتخب کریں: وہ LLM ماڈل منتخب کریں جسے آپ استعمال کرنا چاہتے ہیں۔ یہ OpenAI کا ماڈل ہو سکتا ہے، یا کوئی اوپن سورس ماڈل، جیسے TinyLlama۔ اگر آپ OpenAI کا انتخاب کرتے ہیں، تو آپ کو OpenAI API کی کلید حاصل کرنے کی ضرورت ہوگی۔ اگر آپ TinyLlama کا انتخاب کرتے ہیں، تو آپ کو ماڈل فائل ڈاؤن لوڈ کرنے کی ضرورت ہوگی۔
مرحلہ 1: FastAPI ایپلیکیشن بنائیں
main.py نامی ایک فائل بنائیں، اور درج ذیل کوڈ شامل کریں:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
app = FastAPI(title="LLM API", description="LLMs کے ساتھ تعامل کے لیے ایک سادہ API۔")
class InputText(BaseModel):
text: str
class OutputText(BaseModel):
generated_text: str
یہ کوڈ ایک FastAPI ایپلیکیشن کی وضاحت کرتا ہے، اور دو Pydantic ماڈلز کی وضاحت کرتا ہے: InputText ان پٹ ٹیکسٹ وصول کرنے کے لیے، OutputText تیار کردہ ٹیکسٹ واپس کرنے کے لیے۔
مرحلہ 2: 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))
مرحلہ 3: FastAPI ایپلیکیشن چلائیں
Uvicorn کا استعمال کرتے ہوئے FastAPI ایپلیکیشن چلائیں:
uvicorn main:app --reload
```یہ ایک لوکل سرور شروع کرے گا، آپ براؤزر میں `http://127.0.0.1:8000/docs` پر جا کر خودکار طور پر تیار کردہ API دستاویزات دیکھ سکتے ہیں۔ `--reload` پیرامیٹر کوڈ میں تبدیلی کے بعد خود بخود سرور کو دوبارہ شروع کر سکتا ہے، جو ترقی کے لیے آسان ہے۔
## مرحلہ 4: 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 جواب موصول ہونا چاہیے جس میں تیار کردہ متن شامل ہو۔
مرحلہ 5: پیداوار میں تعیناتی
FastAPI ایپلیکیشن کو پیداواری ماحول میں تعینات کریں، مثال کے طور پر:
- Docker: اپنے ایپلیکیشن کو Docker کے ساتھ کنٹینرائز کریں، جو تعیناتی اور انتظام کے لیے آسان ہے۔
- کلاؤڈ پلیٹ فارم: کلاؤڈ پلیٹ فارم پر تعینات کریں، جیسے AWS، Google Cloud Platform یا Azure۔ مضمون میں ذکر کردہ Azure Cosmos DB اور Azure Functions کو serverless API بنانے کے لیے استعمال کیا جا سکتا ہے۔ Modal کو خودکار طور پر توسیع پذیر FastAPI ایپلیکیشن کو تعینات کرنے کے لیے بھی استعمال کیا جا سکتا ہے۔
- سرور: اپنے سرور پر تعینات کریں۔
بہترین طریقے
- حساس معلومات کو ذخیرہ کرنے کے لیے ماحولیاتی متغیرات کا استعمال کریں: API کیز جیسی حساس معلومات کو کوڈ میں ہارڈ کوڈ نہ کریں، بلکہ ماحولیاتی متغیرات کا استعمال کریں۔
- لاگنگ شامل کریں: API کی چلتی ہوئی حالت کو ریکارڈ کرنے کے لیے لاگنگ ماڈیول کا استعمال کریں، جو ڈیبگنگ اور نگرانی کے لیے آسان ہے۔
- غلطی سے نمٹنا شامل کریں: ممکنہ استثناء کو ہینڈل کرنے کے لیے
try...exceptبلاک کا استعمال کریں، اور مناسب غلطی کی معلومات واپس کریں۔ - شرح کی حد: API کے غلط استعمال کو روکنے کے لیے شرح کی حد کا استعمال کریں۔ FastAPI میں کچھ تیار شرح کی حد لائبریریاں دستیاب ہیں۔
- کیشنگ: بار بار درخواستوں کے لیے، کارکردگی کو بہتر بنانے کے لیے کیشنگ کا استعمال کیا جا سکتا ہے۔
- نگرانی: API کی کارکردگی اور دستیابی کی نگرانی کے لیے نگرانی کے ٹولز کا استعمال کریں۔
اعلی درجے کی تکنیک
- غیر مطابقت پذیر پروسیسنگ: وقت طلب LLM انفرنس کے لیے،
asyncاورawaitکلیدی الفاظ کا استعمال کرتے ہوئے غیر مطابقت پذیر پروسیسنگ کریں، تاکہ مرکزی تھریڈ کو بلاک کرنے سے بچا جا سکے۔ - اسٹریمنگ رسپانس: اسٹریمنگ رسپانس (StreamingResponse) کا استعمال کرتے ہوئے تیار کردہ متن کو حقیقی وقت میں واپس کیا جا سکتا ہے، جس سے صارف کا تجربہ بہتر ہوتا ہے۔
- ملٹی تھریڈنگ/ملٹی پروسیسنگ: CPU سے بھرپور LLM انفرنس کے لیے، کارکردگی کو بہتر بنانے کے لیے ملٹی تھریڈنگ یا ملٹی پروسیسنگ کا استعمال کیا جا سکتا ہے۔
- GPU ایکسلریشن: اگر آپ کا LLM ماڈل GPU ایکسلریشن کو سپورٹ کرتا ہے، تو انفرنس کی رفتار کو بہتر بنانے کے لیے CUDA یا دیگر GPU ایکسلریشن لائبریریوں کا استعمال کیا جا سکتا ہے۔





