Paggamit ng FastAPI para Bumuo ng Mataas na Pagganap at Handa nang Gamiting LLM API: Isang Hakbang-hakbang na Gabay
Paggamit ng FastAPI para Bumuo ng Mataas na Pagganap at Handa nang Gamiting LLM API: Isang Hakbang-hakbang na Gabay
Ang FastAPI, bilang isang moderno at mataas na pagganap na Python Web framework, ay sikat dahil sa kanyang kadalian sa paggamit, bilis, at awtomatikong nabuong dokumentasyon ng API. Lalo na sa pagbuo ng backend API para sa mga LLM (Large Language Model) na aplikasyon, ipinapakita ng FastAPI ang malakas na kalamangan. Ituturo sa iyo ng artikulong ito kung paano bumuo ng isang handa nang gamiting LLM API gamit ang FastAPI, at tatalakayin ang ilang pinakamahusay na kasanayan.
Bakit Pipiliin ang FastAPI?
Sa pagbuo ng API para sa mga LLM na aplikasyon, nagbibigay ang FastAPI ng mga sumusunod na pangunahing kalamangan:
- Mataas na Pagganap: Batay sa ASGI, kayang pangasiwaan ng FastAPI ang mataas na sabay-sabay na mga kahilingan, na mahalaga para sa mga LLM na aplikasyon na nangangailangan ng mabilis na pagtugon.
- Suporta sa Asynchronous: Ang FastAPI ay may built-in na suporta para sa mga keyword na
asyncatawait, na nagpapadali sa paghawak ng mga asynchronous na operasyon, tulad ng pagtawag sa LLM inference, upang maiwasan ang pagbara sa pangunahing thread. - Awtomatikong Dokumentasyon ng API: Awtomatikong bumubuo ang FastAPI ng interactive na dokumentasyon ng API (Swagger UI) gamit ang OpenAPI at JSON Schema, na nagpapadali sa mga developer na subukan at gamitin ang iyong API.
- Pagpapatunay ng Data: Gumagamit ang FastAPI ng Pydantic para sa pagpapatunay ng data, na tinitiyak ang kawastuhan ng mga parameter ng kahilingan at binabawasan ang mga pagkakamali.
- Dependency Injection: Ang dependency injection system ng FastAPI ay nagpapadali sa pamamahala at pagbabahagi ng mga mapagkukunan, tulad ng mga LLM model.
- Aktibong Komunidad: Ang FastAPI ay may malaki at aktibong komunidad, kung saan makakakuha ka ng maraming mapagkukunan at suporta.
Paghahanda
-
Pag-install ng Python: Tiyaking naka-install ka ng Python 3.7 o mas mataas.
-
Pag-install ng FastAPI at Uvicorn: Gamitin ang pip upang i-install ang FastAPI at Uvicorn (ASGI server):
pip install fastapi uvicorn -
Pumili ng LLM Model: Pumili ng LLM model na gusto mong gamitin. Maaaring ito ay isang modelo mula sa OpenAI, o isang open-source na modelo, tulad ng TinyLlama. Kung pipiliin mo ang OpenAI, kailangan mong kumuha ng OpenAI API key. Kung pipiliin mo ang TinyLlama, kailangan mong i-download ang model file.
Hakbang 1: Paglikha ng FastAPI Application
Lumikha ng isang file na pinangalanang main.py, at idagdag ang sumusunod na code:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
app = FastAPI(title="LLM API", description="A simple API for interacting with LLMs.")
class InputText(BaseModel):
text: str
class OutputText(BaseModel):
generated_text: str
Ang code na ito ay nagtatakda ng isang FastAPI application, at nagtatakda ng dalawang Pydantic model: InputText para sa pagtanggap ng input text, OutputText para sa pagbabalik ng nabuong text.
Hakbang 2: Pagdaragdag ng LLM Inference Logic
Batay sa LLM model na iyong pinili, idagdag ang kaukulang inference logic. Narito ang isang halimbawa gamit ang OpenAI API:
import openai
import os
# Kunin ang OpenAI API key
openai.api_key = os.environ.get("OPENAI_API_KEY") # Inirerekomenda na gumamit ng environment variable
```@app.post("/generate", response_model=OutputText)
async def generate_text(input_text: InputText):
"""
Generates text based on the input text using OpenAI.
"""
try:
response = openai.Completion.create(
engine="text-davinci-003", # Piliin ang modelo
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))
Ang code na ito ay nagdedefine ng /generate na ruta, na tumatanggap ng InputText na object bilang input, tumatawag sa OpenAI API upang bumuo ng teksto, at ibinabalik ang nabuong teksto bilang OutputText na object. Tandaan na palitan ang text-davinci-003 ng angkop na modelo na iyong pinili.
Kung gumagamit ng mga lokal na modelo tulad ng TinyLlama, kailangan mong i-install ang kaukulang library, tulad ng transformers, at i-load ang modelo sa memorya. Narito ang isang halimbawa ng code:
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):
"""
Generates text based on the input text using 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))
Hakbang 3: Patakbuhin ang FastAPI Application
Patakbuhin ang FastAPI application gamit ang Uvicorn:
uvicorn main:app --reload
```Ito ay magsisimula ng isang lokal na server, na maaari mong bisitahin sa browser sa `http://127.0.0.1:8000/docs` upang tingnan ang awtomatikong nabuong dokumentasyon ng API. Ang parameter na `--reload` ay maaaring awtomatikong i-restart ang server pagkatapos baguhin ang code, na nagpapadali sa pag-develop.
## Hakbang 4: Subukan ang API
Gamitin ang dokumentasyon ng API o mga tool tulad ng curl upang subukan ang iyong API. Halimbawa, gamitin ang curl upang magpadala ng isang POST request:
```bash
curl -X POST -H "Content-Type: application/json" -d '{"text": "Tell me a joke about cats."}' http://127.0.0.1:8000/generate
Makatatanggap ka ng isang JSON response na naglalaman ng nabuong teksto.
Hakbang 5: Pag-deploy sa Produksyon
I-deploy ang FastAPI application sa isang production environment, halimbawa:
- Docker: Gamitin ang Docker upang i-containerize ang iyong application, na nagpapadali sa pag-deploy at pamamahala.
- Cloud platform: I-deploy sa isang cloud platform, tulad ng AWS, Google Cloud Platform, o Azure. Ang Azure Cosmos DB at Azure Functions na binanggit sa artikulo ay maaaring gamitin upang bumuo ng serverless API. Maaari ring gamitin ang Modal upang i-deploy ang awtomatikong nag-e-expand na FastAPI application.
- Server: I-deploy sa iyong sariling server.
Mga Pinakamahusay na Kasanayan
- Gumamit ng mga variable ng environment upang mag-imbak ng sensitibong impormasyon: Huwag i-hardcode ang mga sensitibong impormasyon tulad ng mga API key sa code, sa halip ay gumamit ng mga variable ng environment.
- Magdagdag ng pag-log: Gumamit ng module ng pag-log upang itala ang katayuan ng pagpapatakbo ng API, na nagpapadali sa pag-debug at pagsubaybay.
- Magdagdag ng paghawak ng error: Gumamit ng mga
try...exceptblock upang mahawakan ang mga posibleng exception, at magbalik ng naaangkop na impormasyon ng error. - Limitasyon sa rate: Gumamit ng rate limiter upang maiwasan ang pag-abuso sa API. Mayroong ilang mga handa nang rate limiting library na magagamit para sa FastAPI.
- Caching: Para sa mga paulit-ulit na request, maaari mong gamitin ang caching upang mapabuti ang pagganap.
- Pagsubaybay: Gumamit ng mga tool sa pagsubaybay upang subaybayan ang pagganap at availability ng API.
Mga Advanced na Tip
- Asynchronous na pagproseso: Para sa matagal na LLM inference, gumamit ng mga keyword na
asyncatawaitpara sa asynchronous na pagproseso upang maiwasan ang pag-block sa pangunahing thread. - Streaming response: Ang paggamit ng streaming response (StreamingResponse) ay maaaring magbalik ng nabuong teksto sa real time, na nagpapabuti sa karanasan ng user.
- Multi-threading/multi-processing: Para sa CPU-intensive na LLM inference, maaari mong gamitin ang multi-threading o multi-processing upang mapabuti ang pagganap.
- GPU acceleration: Kung sinusuportahan ng iyong LLM model ang GPU acceleration, maaari mong gamitin ang CUDA o iba pang GPU acceleration library upang mapabuti ang bilis ng inference.





