FastAPI ഉപയോഗിച്ച് ഉയർന്ന പ്രകടനം കാഴ്ചവെക്കുന്ന, ഉൽപ്പാദനത്തിന് തയ്യാറായ LLM API നിർമ്മിക്കുക: ഒരു പടിപടിയായുള്ള ഗൈഡ്
FastAPI ഉപയോഗിച്ച് ഉയർന്ന പ്രകടനം കാഴ്ചവെക്കുന്ന, ഉൽപ്പാദനത്തിന് തയ്യാറായ LLM API നിർമ്മിക്കുക: ഒരു പടിപടിയായുള്ള ഗൈഡ്
FastAPI, ഒരു ആധുനികവും ഉയർന്ന പ്രകടനം കാഴ്ചവെക്കുന്നതുമായ പൈത്തൺ വെബ് ഫ്രെയിംവർക്ക് എന്ന നിലയിൽ, അതിന്റെ ഉപയോഗ എളുപ്പം, വേഗത, സ്വയം നിർമ്മിത API ഡോക്യുമെൻ്റേഷൻ എന്നിവ കാരണം വളരെയധികം പ്രചാരം നേടിയിട്ടുണ്ട്. പ്രത്യേകിച്ചും LLM (Large Language Model) ആപ്ലിക്കേഷനുകളുടെ ബാക്കെൻഡ് API നിർമ്മിക്കുന്ന കാര്യത്തിൽ, FastAPI ശക്തമായ മേൽക്കൈ നേടുന്നു. ഈ ലേഖനം ഒരു പ്രൊഡക്ഷൻ-റെഡി LLM API എങ്ങനെ FastAPI ഉപയോഗിച്ച് നിർമ്മിക്കാമെന്ന് ഘട്ടം ഘട്ടമായി പഠിപ്പിക്കുകയും ചില മികച്ച രീതികൾ പര്യവേക്ഷണം ചെയ്യുകയും ചെയ്യുന്നു.
എന്തുകൊണ്ട് FastAPI തിരഞ്ഞെടുക്കണം?
LLM ആപ്ലിക്കേഷനുകളുടെ API നിർമ്മിക്കുമ്പോൾ, FastAPI ഇനിപ്പറയുന്ന പ്രധാനപ്പെട്ട ഗുണങ്ങൾ നൽകുന്നു:
- ഉയർന്ന പ്രകടനം: ASGI അടിസ്ഥാനമാക്കി, FastAPI-ക്ക് ഉയർന്ന കൺകറൻ്റ് അഭ്യർത്ഥനകൾ കൈകാര്യം ചെയ്യാൻ കഴിയും, ഇത് വേഗത്തിൽ പ്രതികരിക്കേണ്ട LLM ആപ്ലിക്കേഷനുകൾക്ക് അത്യാവശ്യമാണ്.
- അസിൻക്രണസ് പിന്തുണ: FastAPI-ൽ
async,awaitകീവേഡുകൾക്കുള്ള പിന്തുണയുണ്ട്. LLM ഇൻഫറൻസ് വിളിക്കുന്നത് പോലുള്ള അസിൻക്രണസ് പ്രവർത്തനങ്ങൾ എളുപ്പത്തിൽ കൈകാര്യം ചെയ്യാനും പ്രധാന ത്രെഡ് തടസ്സപ്പെടുത്തുന്നത് ഒഴിവാക്കാനും ഇത് സഹായിക്കുന്നു. - യാന്ത്രിക API ഡോക്യുമെൻ്റേഷൻ: FastAPI, OpenAPI, JSON സ്കീമ എന്നിവ ഉപയോഗിച്ച് ഇൻ്ററാക്ടീവ് 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="LLM-കളുമായി സംവദിക്കാനുള്ള ഒരു ലളിതമായ 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 ഡോക്യുമെന്റേഷൻ അല്ലെങ്കിൽ 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 നിർമ്മിക്കാൻ ഉപയോഗിക്കാം. സ്വയം വികസിക്കുന്ന FastAPI ആപ്ലിക്കേഷനുകൾ വിന്യസിക്കാൻ Modal ഉപയോഗിക്കാം.
- സെർവർ: നിങ്ങളുടെ സ്വന്തം സെർവറിൽ വിന്യസിക്കുക.
മികച്ച രീതികൾ
- സെൻസിറ്റീവ് വിവരങ്ങൾ സംഭരിക്കാൻ എൻവയോൺമെന്റൽ വേരിയബിളുകൾ ഉപയോഗിക്കുക: API കീകൾ പോലുള്ള സെൻസിറ്റീവ് വിവരങ്ങൾ കോഡിൽ നേരിട്ട് നൽകരുത്, പകരം എൻവയോൺമെന്റൽ വേരിയബിളുകൾ ഉപയോഗിക്കുക.
- ലോഗിംഗ് ചേർക്കുക: API-യുടെ പ്രവർത്തന നില രേഖപ്പെടുത്താൻ ലോഗിംഗ് മൊഡ്യൂൾ ഉപയോഗിക്കുക, ഇത് ഡീബഗ് ചെയ്യാനും നിരീക്ഷിക്കാനും എളുപ്പമാക്കുന്നു.
- Error handling ചേർക്കുക: സംഭവിക്കാൻ സാധ്യതയുള്ള ഒഴിവാക്കലുകൾ കൈകാര്യം ചെയ്യാൻ
try...exceptബ്ലോക്കുകൾ ഉപയോഗിക്കുക, ഉചിതമായ പിശക് സന്ദേശങ്ങൾ നൽകുക. - നിരക്ക് പരിധി (Rate limiting): API ദുരുപയോഗം ചെയ്യുന്നത് തടയാൻ നിരക്ക് പരിധികൾ ഉപയോഗിക്കുക. FastAPI-യിൽ ലഭ്യമായ ചില റേറ്റ് ലിമിറ്റിംഗ് ലൈബ്രറികൾ ഉണ്ട്.
- കാഷെ (Cache): ആവർത്തിച്ചുള്ള അഭ്യർത്ഥനകൾക്ക്, പ്രകടനം മെച്ചപ്പെടുത്താൻ കാഷെ ഉപയോഗിക്കാം.
- നിരീക്ഷണം (Monitoring): API-യുടെ പ്രകടനവും ലഭ്യതയും നിരീക്ഷിക്കാൻ നിരീക്ഷണ ടൂളുകൾ ഉപയോഗിക്കുക.
വിപുലമായ തന്ത്രങ്ങൾ
- അസിൻക്രണസ് പ്രോസസ്സിംഗ്: സമയമെടുക്കുന്ന LLM അനുമാനത്തിന്, പ്രധാന ത്രെഡ് തടസ്സപ്പെടുത്തുന്നത് ഒഴിവാക്കാൻ
async,awaitകീവേഡുകൾ ഉപയോഗിച്ച് അസിൻക്രണസ് പ്രോസസ്സിംഗ് നടത്തുക. - സ്ട്രീമിംഗ് പ്രതികരണം: സ്ട്രീമിംഗ് പ്രതികരണം (StreamingResponse) ഉപയോഗിച്ച് ജനറേറ്റ് ചെയ്ത ടെക്സ്റ്റ് തത്സമയം നൽകാനും ഉപയോക്തൃ അനുഭവം മെച്ചപ്പെടുത്താനും കഴിയും.
- മൾട്ടി-ത്രെഡിംഗ്/മൾട്ടി-പ്രോസസ്സിംഗ്: CPU ഉപയോഗം കൂടുതലുള്ള LLM അനുമാനത്തിന്, പ്രകടനം മെച്ചപ്പെടുത്താൻ മൾട്ടി-ത്രെഡിംഗ് അല്ലെങ്കിൽ മൾട്ടി-പ്രോസസ്സിംഗ് ഉപയോഗിക്കാം.
- GPU ആക്സിലറേഷൻ: നിങ്ങളുടെ LLM മോഡൽ GPU ആക്സിലറേഷനെ പിന്തുണയ്ക്കുന്നുണ്ടെങ്കിൽ, CUDA അല്ലെങ്കിൽ മറ്റ് GPU ആക്സിലറേഷൻ ലൈബ്രറികൾ ഉപയോഗിച്ച് അനുമാന വേഗത വർദ്ധിപ്പിക്കാൻ കഴിയും.





