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):
"""
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 નું પરીક્ષણ કરવા માટે API ડોક્યુમેન્ટેશન અથવા curl જેવા ટૂલ્સનો ઉપયોગ કરો. ઉદાહરણ તરીકે, 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: ડોકરનો ઉપયોગ કરીને તમારી એપ્લિકેશનને કન્ટેનરાઇઝ કરો, જે ડિપ્લોયમેન્ટ અને મેનેજમેન્ટને સરળ બનાવે છે.
- ક્લાઉડ પ્લેટફોર્મ: ક્લાઉડ પ્લેટફોર્મ પર ડિપ્લોય કરો, જેમ કે AWS, Google Cloud Platform અથવા Azure. આ લેખમાં ઉલ્લેખિત Azure Cosmos DB અને Azure Functions નો ઉપયોગ સર્વરલેસ API બનાવવા માટે થઈ શકે છે. મોડલનો ઉપયોગ આપોઆપ સ્કેલિંગ FastAPI એપ્લિકેશનને ડિપ્લોય કરવા માટે પણ થઈ શકે છે.
- સર્વર: તમારા પોતાના સર્વર પર ડિપ્લોય કરો.
શ્રેષ્ઠ પ્રથાઓ
- સંવેદનશીલ માહિતીને સ્ટોર કરવા માટે એન્વાયર્નમેન્ટ વેરીએબલ્સનો ઉપયોગ કરો: API કી જેવી સંવેદનશીલ માહિતીને કોડમાં હાર્ડકોડ કરશો નહીં, પરંતુ એન્વાયર્નમેન્ટ વેરીએબલ્સનો ઉપયોગ કરો.
- લોગિંગ ઉમેરો: API ની ઓપરેશનલ સ્થિતિને રેકોર્ડ કરવા માટે લોગિંગ મોડ્યુલનો ઉપયોગ કરો, જે ડિબગીંગ અને મોનિટરિંગને સરળ બનાવે છે.
- એરર હેન્ડલિંગ ઉમેરો: સંભવિત અપવાદોને હેન્ડલ કરવા માટે
try...exceptબ્લોકનો ઉપયોગ કરો અને યોગ્ય એરર મેસેજ રિટર્ન કરો. - રેટ લિમિટિંગ: API ના દુરુપયોગને રોકવા માટે રેટ લિમિટરનો ઉપયોગ કરો. FastAPI પાસે કેટલાક તૈયાર રેટ લિમિટિંગ લાઇબ્રેરીઓ ઉપલબ્ધ છે.
- કેશીંગ: વારંવાર થતી રિક્વેસ્ટ માટે, પરફોર્મન્સ સુધારવા માટે કેશીંગનો ઉપયોગ કરી શકાય છે.
- મોનિટરિંગ: API ના પરફોર્મન્સ અને ઉપલબ્ધતાને મોનિટર કરવા માટે મોનિટરિંગ ટૂલ્સનો ઉપયોગ કરો.
અદ્યતન યુક્તિઓ
- એસીંક્રનસ પ્રોસેસિંગ: સમય માંગી લેતી LLM અનુમાન માટે, મુખ્ય થ્રેડને બ્લોક કરવાનું ટાળવા માટે
asyncઅનેawaitકીવર્ડ્સનો ઉપયોગ કરીને એસીંક્રનસ પ્રોસેસિંગ કરો. - સ્ટ્રીમિંગ રિસ્પોન્સ: યુઝર એક્સપિરિયન્સ સુધારવા માટે સ્ટ્રીમિંગ રિસ્પોન્સ (StreamingResponse) નો ઉપયોગ કરીને જનરેટ થયેલ ટેક્સ્ટને રીઅલ ટાઇમમાં રિટર્ન કરી શકાય છે.
- મલ્ટીથ્રેડીંગ/મલ્ટીપ્રોસેસિંગ: CPU સઘન LLM અનુમાન માટે, પરફોર્મન્સ સુધારવા માટે મલ્ટીથ્રેડીંગ અથવા મલ્ટીપ્રોસેસિંગનો ઉપયોગ કરી શકાય છે.
- GPU એક્સિલરેશન: જો તમારું LLM મોડેલ GPU એક્સિલરેશનને સપોર્ટ કરે છે, તો અનુમાનની ગતિ વધારવા માટે CUDA અથવા અન્ય GPU એક્સિલરેશન લાઇબ્રેરીઓનો ઉપયોગ કરી શકાય છે.





