Korištenje FastAPI-ja za izgradnju LLM API-ja visokih performansi, spremnog za produkciju: Vodič korak po korak
Korištenje FastAPI-ja za izgradnju LLM API-ja visokih performansi, spremnog za produkciju: Vodič korak po korak
FastAPI, kao moderan, Python Web framework visokih performansi, popularan je zbog svoje jednostavnosti korištenja, brzine i automatski generirane API dokumentacije. Posebno u izgradnji LLM (Large Language Model) aplikacija za backend API, FastAPI pokazuje snažne prednosti. Ovaj članak će vas korak po korak naučiti kako koristiti FastAPI za izgradnju LLM API-ja spremnog za produkciju i istražiti neke najbolje prakse.
Zašto odabrati FastAPI?
Prilikom izgradnje API-ja za LLM aplikacije, FastAPI nudi sljedeće ključne prednosti:
- Visoke performanse: Baziran na ASGI, FastAPI može obraditi zahtjeve visokog stupnja konkurentnosti, što je ključno za LLM aplikacije koje zahtijevaju brzi odgovor.
- Asinkrona podrška: FastAPI ima ugrađenu podršku za ključne riječi
asynciawait, što olakšava obradu asinkronih operacija, poput pozivanja LLM zaključivanja, izbjegavajući blokiranje glavne niti. - Automatska API dokumentacija: FastAPI koristi OpenAPI i JSON Schema za automatsko generiranje interaktivne API dokumentacije (Swagger UI), što olakšava programerima testiranje i korištenje vašeg API-ja.
- Validacija podataka: FastAPI koristi Pydantic za validaciju podataka, osiguravajući ispravnost parametara zahtjeva, smanjujući pogreške.
- Injekcija ovisnosti: FastAPI-jev sustav injekcije ovisnosti olakšava upravljanje i dijeljenje resursa, poput LLM modela.
- Aktivna zajednica: FastAPI ima veliku i aktivnu zajednicu, što vam omogućuje pristup bogatim resursima i podršci.
Priprema
-
Instalirajte Python: Provjerite jeste li instalirali Python 3.7 ili noviju verziju.
-
Instalirajte FastAPI i Uvicorn: Koristite pip za instalaciju FastAPI-ja i Uvicorn-a (ASGI server):
pip install fastapi uvicorn -
Odaberite LLM model: Odaberite LLM model koji želite koristiti. Može biti OpenAI model ili model otvorenog koda, kao što je TinyLlama. Ako odaberete OpenAI, trebat će vam OpenAI API ključ. Ako odaberete TinyLlama, trebat ćete preuzeti datoteku modela.
Korak 1: Stvaranje FastAPI aplikacije
Stvorite datoteku pod nazivom main.py i dodajte sljedeći kod:
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
Ovaj kod definira FastAPI aplikaciju i definira dva Pydantic modela: InputText za primanje ulaznog teksta i OutputText za vraćanje generiranog teksta.
Korak 2: Dodavanje LLM logike zaključivanja
Ovisno o LLM modelu koji ste odabrali, dodajte odgovarajuću logiku zaključivanja. Ovdje ćemo koristiti OpenAI API kao primjer:
import openai
import os
# Dohvati OpenAI API ključ
openai.api_key = os.environ.get("OPENAI_API_KEY") # Preporučuje se korištenje varijabli okruženja
```@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", # Odaberite model
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))
Ovaj kod definira /generate rutu, koja prima InputText objekat kao ulaz, poziva OpenAI API za generisanje teksta i vraća generisani tekst kao OutputText objekat. Obratite pažnju da zamijenite text-davinci-003 sa odgovarajućim modelom koji ste odabrali.
Ako koristite lokalne modele kao što je TinyLlama, potrebno je instalirati odgovarajuću biblioteku, na primjer transformers, i učitati model u memoriju. Primjer koda je sljedeći:
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))
Korak 3: Pokretanje FastAPI aplikacije
Koristite Uvicorn za pokretanje FastAPI aplikacije:
uvicorn main:app --reload
```Ovo će pokrenuti lokalni server, kojem možete pristupiti u pregledniku na `http://127.0.0.1:8000/docs` da biste vidjeli automatski generiranu API dokumentaciju. Parametar `--reload` omogućuje automatsko ponovno pokretanje servera nakon izmjene koda, što olakšava razvoj.
## Korak 4: Testiranje API-ja
Koristite API dokumentaciju ili alate poput curl-a za testiranje vašeg API-ja. Na primjer, koristite curl za slanje POST zahtjeva:
```bash
curl -X POST -H "Content-Type: application/json" -d '{"text": "Tell me a joke about cats."}' http://127.0.0.1:8000/generate
Trebali biste primiti JSON odgovor koji sadrži generirani tekst.
Korak 5: Produkcijska implementacija
Implementirajte FastAPI aplikaciju u produkcijsko okruženje, na primjer:
- Docker: Koristite Docker za kontejnerizaciju vaše aplikacije, što olakšava implementaciju i upravljanje.
- Cloud platforme: Implementirajte na cloud platforme, kao što su AWS, Google Cloud Platform ili Azure. Azure Cosmos DB i Azure Functions, spomenuti u tekstu, mogu se koristiti za izgradnju serverless API-ja. Modal se također može koristiti za implementaciju FastAPI aplikacija koje se automatski skaliraju.
- Server: Implementirajte na vlastiti server.
Najbolje prakse
- Koristite varijable okoline za pohranu osjetljivih informacija: Nemojte hardkodirati osjetljive informacije kao što su API ključevi u kodu, već koristite varijable okoline.
- Dodajte zapisivanje (logging): Koristite modul za zapisivanje (logging) za bilježenje stanja rada API-ja, što olakšava otklanjanje pogrešaka i nadzor.
- Dodajte obradu pogrešaka: Koristite
try...exceptblokove za obradu mogućih iznimki i vraćanje odgovarajućih poruka o pogreškama. - Ograničenje brzine (Rate limiting): Koristite ograničivač brzine kako biste spriječili zlouporabu API-ja. FastAPI ima neke gotove biblioteke za ograničenje brzine.
- Caching: Za ponavljajuće zahtjeve, možete koristiti caching za poboljšanje performansi.
- Nadzor (Monitoring): Koristite alate za nadzor kako biste pratili performanse i dostupnost API-ja.
Napredni trikovi
- Asinkrona obrada: Za dugotrajno LLM zaključivanje, koristite ključne riječi
asynciawaitza asinkronu obradu, kako biste izbjegli blokiranje glavne niti. - Streaming odgovor: Korištenje streaming odgovora (StreamingResponse) omogućuje vraćanje generiranog teksta u stvarnom vremenu, poboljšavajući korisničko iskustvo.
- Višenitnost/više procesa: Za CPU intenzivno LLM zaključivanje, možete koristiti višenitnost ili više procesa za poboljšanje performansi.
- GPU ubrzanje: Ako vaš LLM model podržava GPU ubrzanje, možete koristiti CUDA ili druge GPU biblioteke za ubrzanje zaključivanja.





