FastAPI ಅನ್ನು ಬಳಸಿಕೊಂಡು ಹೆಚ್ಚಿನ ಕಾರ್ಯಕ್ಷಮತೆ, ಉತ್ಪಾದನೆಗೆ ಸಿದ್ಧವಾದ LLM API ಅನ್ನು ನಿರ್ಮಿಸುವುದು: ಹಂತ-ಹಂತದ ಮಾರ್ಗದರ್ಶಿ
# FastAPI ಅನ್ನು ಬಳಸಿಕೊಂಡು ಹೆಚ್ಚಿನ ಕಾರ್ಯಕ್ಷಮತೆ, ಉತ್ಪಾದನೆಗೆ ಸಿದ್ಧವಾದ LLM API ಅನ್ನು ನಿರ್ಮಿಸುವುದು: ಹಂತ-ಹಂತದ ಮಾರ್ಗದರ್ಶಿ
FastAPI, ಒಂದು ಆಧುನಿಕ, ಹೆಚ್ಚಿನ ಕಾರ್ಯಕ್ಷಮತೆಯ Python ವೆಬ್ ಫ್ರೇಮ್ವರ್ಕ್, ಅದರ ಬಳಕೆಯ ಸುಲಭತೆ, ವೇಗ ಮತ್ತು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಉತ್ಪತ್ತಿಯಾಗುವ API ದಾಖಲೆಗಳಿಗಾಗಿ ಜನಪ್ರಿಯವಾಗಿದೆ. ವಿಶೇಷವಾಗಿ LLM (ದೊಡ್ಡ ಭಾಷಾ ಮಾದರಿ) ಅಪ್ಲಿಕೇಶನ್ಗಳ ಬ್ಯಾಕೆಂಡ್ API ಅನ್ನು ನಿರ್ಮಿಸುವಲ್ಲಿ, FastAPI ಪ್ರಬಲ ಅನುಕೂಲಗಳನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ. ಈ ಲೇಖನವು ಉತ್ಪಾದನೆಗೆ ಸಿದ್ಧವಾದ LLM API ಅನ್ನು ನಿರ್ಮಿಸಲು FastAPI ಅನ್ನು ಹೇಗೆ ಬಳಸುವುದು ಎಂದು ಹಂತ ಹಂತವಾಗಿ ನಿಮಗೆ ಕಲಿಸುತ್ತದೆ ಮತ್ತು ಕೆಲವು ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಅನ್ವೇಷಿಸುತ್ತದೆ.
## 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 ದೊಡ್ಡ ಮತ್ತು ಕ್ರಿಯಾಶೀಲ ಸಮುದಾಯವನ್ನು ಹೊಂದಿದೆ, ಇದು ಸಮೃದ್ಧ ಸಂಪನ್ಮೂಲಗಳು ಮತ್ತು ಬೆಂಬಲವನ್ನು ಪಡೆಯಲು ಸಾಧ್ಯವಾಗಿಸುತ್ತದೆ.
## ಸಿದ್ಧತೆ
1. **Python ಅನ್ನು ಸ್ಥಾಪಿಸಿ:** ನೀವು Python 3.7 ಅಥವಾ ಹೆಚ್ಚಿನ ಆವೃತ್ತಿಯನ್ನು ಸ್ಥಾಪಿಸಿರುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.
2. **FastAPI ಮತ್ತು Uvicorn ಅನ್ನು ಸ್ಥಾಪಿಸಿ:** pip ಬಳಸಿ FastAPI ಮತ್ತು Uvicorn (ASGI ಸರ್ವರ್) ಅನ್ನು ಸ್ಥಾಪಿಸಿ:
```bash
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 ಅನ್ನು ಸರ್ವರ್ಲೆಸ್ API ಅನ್ನು ನಿರ್ಮಿಸಲು ಬಳಸಬಹುದು. ಸ್ವಯಂ-ವಿಸ್ತರಿಸುವ FastAPI ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿಯೋಜಿಸಲು Modal ಅನ್ನು ಸಹ ಬಳಸಬಹುದು.
- ಸರ್ವರ್: ನಿಮ್ಮ ಸ್ವಂತ ಸರ್ವರ್ಗೆ ನಿಯೋಜಿಸಿ.
ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು
- ಸೂಕ್ಷ್ಮ ಮಾಹಿತಿಯನ್ನು ಸಂಗ್ರಹಿಸಲು ಪರಿಸರ ವೇರಿಯೇಬಲ್ಗಳನ್ನು ಬಳಸಿ: API ಕೀಗಳಂತಹ ಸೂಕ್ಷ್ಮ ಮಾಹಿತಿಯನ್ನು ಕೋಡ್ನಲ್ಲಿ ಹಾರ್ಡ್ಕೋಡ್ ಮಾಡಬೇಡಿ, ಬದಲಿಗೆ ಪರಿಸರ ವೇರಿಯೇಬಲ್ಗಳನ್ನು ಬಳಸಿ.
- ಲಾಗ್ ರೆಕಾರ್ಡಿಂಗ್ ಅನ್ನು ಸೇರಿಸಿ: API ಯ ಚಾಲನೆಯಲ್ಲಿರುವ ಸ್ಥಿತಿಯನ್ನು ದಾಖಲಿಸಲು ಲಾಗ್ ರೆಕಾರ್ಡಿಂಗ್ ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಬಳಸಿ, ಇದು ಡೀಬಗ್ ಮಾಡಲು ಮತ್ತು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಲು ಅನುಕೂಲಕರವಾಗಿದೆ.
- ದೋಷ ನಿರ್ವಹಣೆಯನ್ನು ಸೇರಿಸಿ: ಸಂಭವಿಸಬಹುದಾದ ವಿನಾಯಿತಿಗಳನ್ನು ನಿರ್ವಹಿಸಲು
try...exceptಬ್ಲಾಕ್ಗಳನ್ನು ಬಳಸಿ ಮತ್ತು ಸೂಕ್ತವಾದ ದೋಷ ಮಾಹಿತಿಯನ್ನು ಹಿಂತಿರುಗಿಸಿ. - ದರ ಮಿತಿ: API ಅನ್ನು ದುರುಪಯೋಗಪಡಿಸುವುದನ್ನು ತಡೆಯಲು ದರ ಮಿತಿಯನ್ನು ಬಳಸಿ. FastAPI ನಲ್ಲಿ ಕೆಲವು ಸಿದ್ಧ ದರ ಮಿತಿ ಲೈಬ್ರರಿಗಳು ಲಭ್ಯವಿದೆ.
- ಕ್ಯಾಶ್: ಪುನರಾವರ್ತಿತ ವಿನಂತಿಗಳಿಗಾಗಿ, ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸಲು ನೀವು ಕ್ಯಾಶ್ ಅನ್ನು ಬಳಸಬಹುದು.
- ಮೇಲ್ವಿಚಾರಣೆ: API ಯ ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಲಭ್ಯತೆಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಲು ಮೇಲ್ವಿಚಾರಣಾ ಪರಿಕರಗಳನ್ನು ಬಳಸಿ.
ಸುಧಾರಿತ ತಂತ್ರಗಳು
- ಅಸಮಕಾಲಿಕ ಪ್ರಕ್ರಿಯೆ: ಸಮಯ ತೆಗೆದುಕೊಳ್ಳುವ LLM ತಾರ್ಕಿಕ ಕ್ರಿಯೆಗಾಗಿ, ಮುಖ್ಯ ಥ್ರೆಡ್ ಅನ್ನು ನಿರ್ಬಂಧಿಸುವುದನ್ನು ತಪ್ಪಿಸಲು
asyncಮತ್ತುawaitಕೀವರ್ಡ್ಗಳನ್ನು ಬಳಸಿ ಅಸಮಕಾಲಿಕವಾಗಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಿ. - ಸ್ಟ್ರೀಮಿಂಗ್ ಪ್ರತಿಕ್ರಿಯೆ: ಸ್ಟ್ರೀಮಿಂಗ್ ಪ್ರತಿಕ್ರಿಯೆ (StreamingResponse) ಅನ್ನು ಬಳಸುವುದರಿಂದ ನೈಜ ಸಮಯದಲ್ಲಿ ಉತ್ಪಾದಿತ ಪಠ್ಯವನ್ನು ಹಿಂತಿರುಗಿಸಬಹುದು, ಇದು ಬಳಕೆದಾರರ ಅನುಭವವನ್ನು ಸುಧಾರಿಸುತ್ತದೆ.
- ಬಹು ಥ್ರೆಡ್/ಬಹು ಪ್ರಕ್ರಿಯೆ: CPU ತೀವ್ರವಾದ LLM ತಾರ್ಕಿಕ ಕ್ರಿಯೆಗಾಗಿ, ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸಲು ನೀವು ಬಹು ಥ್ರೆಡ್ಗಳು ಅಥವಾ ಬಹು ಪ್ರಕ್ರಿಯೆಗಳನ್ನು ಬಳಸಬಹುದು.
- GPU ವೇಗವರ್ಧನೆ: ನಿಮ್ಮ LLM ಮಾದರಿಯು GPU ವೇಗವರ್ಧನೆಯನ್ನು ಬೆಂಬಲಿಸಿದರೆ, ತಾರ್ಕಿಕ ಕ್ರಿಯೆಯ ವೇಗವನ್ನು ಹೆಚ್ಚಿಸಲು ನೀವು CUDA ಅಥವಾ ಇತರ GPU ವೇಗವರ್ಧಕ ಲೈಬ್ರರಿಗಳನ್ನು ಬಳಸಬಹುದು.





