FastAPI арқылы жоғары өнімді, өндіріске дайын LLM API құру: қадамдық нұсқаулық
# FastAPI арқылы жоғары өнімді, өндіріске дайын LLM API құру: қадамдық нұсқаулық
FastAPI, заманауи, жоғары өнімді Python Web фреймворкі ретінде, қолданудың қарапайымдылығы, жылдамдығы және автоматты түрде жасалатын 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-дің үлкен және белсенді қауымдастығы бар, ол бай ресурстар мен қолдауды ала алады.
## Дайындық жұмыстары
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 қолданбасын іске қосу
FastAPI қолданбасын Uvicorn арқылы іске қосыңыз:
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 құру үшін пайдаланылуы мүмкін. Modal автоматты түрде кеңейтілетін FastAPI қолданбаларын орналастыру үшін де пайдаланылуы мүмкін.
- Сервер: Өз серверіңізге орналастырыңыз.
Үздік тәжірибелер
- Құпия ақпаратты сақтау үшін орта айнымалыларын пайдаланыңыз: API кілттері сияқты құпия ақпаратты кодта қатты кодтамаңыз, оның орнына орта айнымалыларын пайдаланыңыз.
- Журнал жазбаларын қосыңыз: API жұмысының күйін жазу үшін журнал жазбасы модулін пайдаланыңыз, бұл жөндеу мен мониторингті жеңілдетеді.
- Қателерді өңдеуді қосыңыз: Мүмкін болатын ерекшеліктерді өңдеу және сәйкес қате туралы ақпаратты қайтару үшін
try...exceptблогын пайдаланыңыз. - Жылдамдықты шектеу: API-ді теріс пайдаланудан қорғау үшін жылдамдықты шектеуді пайдаланыңыз. FastAPI-де қол жетімді жылдамдықты шектеу кітапханалары бар.
- Кэштеу: Қайталанатын сұраулар үшін өнімділікті арттыру үшін кэштеуді пайдалануға болады.
- Мониторинг: API өнімділігі мен қолжетімділігін бақылау үшін мониторинг құралдарын пайдаланыңыз.
Кеңейтілген кеңестер
- Асинхронды өңдеу: Уақытты қажет ететін LLM қорытындысы үшін негізгі ағынды бұғаттамау үшін
asyncжәнеawaitкілт сөздерін пайдаланып асинхронды өңдеуді орындаңыз. - Ағынды жауап: Пайдаланушы тәжірибесін жақсарту үшін жасалған мәтінді нақты уақытта қайтару үшін ағынды жауапты (StreamingResponse) пайдаланыңыз.
- Көп ағындылық/көп процестілік: CPU қарқынды LLM қорытындысы үшін өнімділікті арттыру үшін көп ағындылықты немесе көп процестілікті пайдалануға болады.
- GPU жеделдету: Егер сіздің LLM моделіңіз GPU жеделдетуін қолдаса, қорытынды жылдамдығын арттыру үшін CUDA немесе басқа GPU жеделдету кітапханаларын пайдалануға болады.





