फास्ट API वापरून उच्च-कार्यक्षम, उत्पादन-तयार LLM API तयार करणे: एक चरण-दर-चरण मार्गदर्शक
फास्ट API वापरून उच्च-कार्यक्षम, उत्पादन-तयार LLM API तयार करणे: एक चरण-दर-चरण मार्गदर्शक
फास्ट API, एक आधुनिक, उच्च-कार्यक्षमतेचे पायथन वेब फ्रेमवर्क, त्याच्या वापरण्यास सुलभता, वेग आणि स्वयंचलितपणे तयार होणाऱ्या API डॉक्युमेंटेशनमुळे खूप लोकप्रिय आहे. विशेषतः LLM (Large Language Model) ॲप्लिकेशन्ससाठी बॅकएंड API तयार करण्याच्या बाबतीत, फास्ट API एक मोठा फायदा आहे. हा लेख तुम्हाला फास्ट API वापरून उत्पादन-तयार LLM API कसे तयार करावे हे चरण-दर-चरण शिकवेल आणि काही सर्वोत्तम पद्धतींचे परीक्षण करेल.
फास्ट API का निवडावे?
LLM ॲप्लिकेशनसाठी API तयार करताना, फास्ट API खालील महत्त्वाचे फायदे देते:
- उच्च कार्यक्षमता: ASGI वर आधारित, फास्ट API एकाच वेळी अनेक विनंत्या (concurrent requests) हाताळू शकते, जे LLM ॲप्लिकेशन्ससाठी आवश्यक आहे ज्याला जलद प्रतिसाद हवा असतो.
- Async सपोर्ट: फास्ट API मध्ये
asyncआणिawaitकीवर्डसाठी सपोर्ट आहे, ज्यामुळे LLM इन्फरन्सला कॉल करण्यासारखे एसिंक्रोनस ऑपरेशन्स हाताळणे सोपे होते आणि मुख्य थ्रेडला ब्लॉक करणे टाळता येते. - स्वयंचलित API डॉक्युमेंटेशन: फास्ट API OpenAPI आणि JSON स्कीमा वापरून इंटरॲक्टिव्ह API डॉक्युमेंटेशन (Swagger UI) स्वयंचलितपणे तयार करते, ज्यामुळे डेव्हलपर्सना तुमच्या API ची चाचणी करणे आणि वापरणे सोपे होते.
- डेटा व्हॅलिडेशन: फास्ट API डेटा व्हॅलिडेशनसाठी Pydantic वापरते, जे विनंती पॅरामीटर्सची अचूकता सुनिश्चित करते आणि त्रुटी कमी करते.
- डिपेंडेंसी इंजेक्शन: फास्ट API ची डिपेंडेंसी इंजेक्शन प्रणाली LLM मॉडेलसारख्या संसाधनांचे व्यवस्थापन आणि शेअरिंग सुलभ करते.
- सक्रिय समुदाय: फास्ट API मध्ये एक मोठा आणि सक्रिय समुदाय आहे, ज्यामुळे तुम्हाला भरपूर संसाधने आणि समर्थन मिळू शकते.
तयारी
-
पायथन स्थापित करा: तुमच्याकडे पायथन 3.7 किंवा त्यावरील आवृत्ती स्थापित असल्याची खात्री करा.
-
फास्ट API आणि Uvicorn स्थापित करा: pip वापरून फास्ट API आणि Uvicorn (ASGI सर्व्हर) स्थापित करा:
pip install fastapi uvicorn -
LLM मॉडेल निवडा: तुम्हाला वापरायचे असलेले LLM मॉडेल निवडा. ते OpenAI चे मॉडेल असू शकते किंवा TinyLlama सारखे ओपन-सोर्स मॉडेल देखील असू शकते. जर तुम्ही OpenAI निवडले, तर तुम्हाला OpenAI API की मिळवावी लागेल. जर तुम्ही TinyLlama निवडले, तर तुम्हाला मॉडेल फाइल डाउनलोड करावी लागेल.
चरण 1: फास्ट API ॲप्लिकेशन तयार करा
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
हा कोड एक फास्ट API ॲप्लिकेशन परिभाषित करतो आणि दोन 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):
"""
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):
"""
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 प्रवेग लायब्ररी वापरून इन्फरन्सची गती वाढवा.





