FastAPI abil suure jõudlusega ja tootmiseks valmis LLM API loomine: samm-sammult juhend
# FastAPI abil suure jõudlusega ja tootmiseks valmis LLM API loomine: samm-sammult juhend
FastAPI, kui kaasaegne ja suure jõudlusega Pythoni veebiraamistik, on populaarne oma kasutusmugavuse, kiiruse ja automaatselt genereeritud API dokumentatsiooni tõttu. Eriti LLM (Large Language Model) rakenduste taustarakenduse API-de loomisel näitab FastAPI suurt eelist. See artikkel õpetab teile samm-sammult, kuidas kasutada FastAPI-d tootmiseks valmis LLM API loomiseks, ja uurib mõningaid parimaid praktikaid.
## Miks valida FastAPI?
LLM-i rakenduste API-de loomisel pakub FastAPI järgmisi peamisi eeliseid:
* **Suur jõudlus:** ASGI-l põhinev FastAPI suudab käsitleda suure koormusega samaaegseid päringuid, mis on kiire reageerimise vajaduse korral LLM-i rakenduste jaoks ülioluline.
* **Asünkroonne tugi:** FastAPI-l on sisseehitatud tugi märksõnadele `async` ja `await`, mis võimaldab mugavalt käsitleda asünkroonseid toiminguid, näiteks LLM-i järelduste kutsumist, vältides peamise lõime blokeerimist.
* **Automaatne API dokumentatsioon:** FastAPI genereerib OpenAPI ja JSON Schema abil automaatselt interaktiivse API dokumentatsiooni (Swagger UI), mis võimaldab arendajatel teie API-t mugavalt testida ja kasutada.
* **Andmete valideerimine:** FastAPI kasutab Pydanticut andmete valideerimiseks, tagades päringuparameetrite õigsuse ja vähendades vigu.
* **Sõltuvuse süstimine:** FastAPI sõltuvuse süstimise süsteem võimaldab mugavalt hallata ja jagada ressursse, näiteks LLM-i mudeleid.
* **Aktiivne kogukond:** FastAPI-l on suur ja aktiivne kogukond, kust saab rikkalikult ressursse ja tuge.
## Ettevalmistused
1. **Installige Python:** Veenduge, et teil on installitud Python 3.7 või uuem versioon.
2. **Installige FastAPI ja Uvicorn:** Installige FastAPI ja Uvicorn (ASGI server) pip abil:
```bash
pip install fastapi uvicorn
- Valige LLM mudel: Valige LLM mudel, mida soovite kasutada. See võib olla OpenAI mudel või avatud lähtekoodiga mudel, näiteks TinyLlama. Kui valite OpenAI, peate hankima OpenAI API võtme. Kui valite TinyLlama, peate alla laadima mudelifaili.
Samm 1: FastAPI rakenduse loomine
Looge fail nimega main.py ja lisage järgmine kood:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
app = FastAPI(title="LLM API", description="Lihtne API LLM-idega suhtlemiseks.")
class InputText(BaseModel):
text: str
class OutputText(BaseModel):
generated_text: str
See kood määratleb FastAPI rakenduse ja määratleb kaks Pydanticu mudelit: InputText sisendteksti vastuvõtmiseks ja OutputText genereeritud teksti tagastamiseks.
Samm 2: LLM-i järeldusloogika lisamine
Lisage vastavalt valitud LLM-i mudelile vastav järeldusloogika. Siin on näide OpenAI API kasutamisest:
import openai
import os
# Hankige OpenAI API võti
openai.api_key = os.environ.get("OPENAI_API_KEY") # Soovitatav on kasutada keskkonnamuutujaid
@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", # Vali mudel 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))
See kood defineerib `/generate` marsruudi, mis võtab sisendina `InputText` objekti, kutsub OpenAI API teksti genereerimiseks ja tagastab genereeritud teksti `OutputText` objektina. Pange tähele, et `text-davinci-003` tuleb asendada sobiva valitud mudeliga.
**Kui kasutate kohalikke mudeleid, nagu TinyLlama, peate installima vastavad teegid, näiteks `transformers`, ja laadima mudeli mällu. Koodinäide on järgmine:**
```python
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))
Samm 3: Käivitage FastAPI rakendus
Käivitage FastAPI rakendus Uvicorniga:
uvicorn main:app --reload
```See käivitab kohaliku serveri, millele pääsete brauseris juurde aadressil `http://127.0.0.1:8000/docs`, et vaadata automaatselt genereeritud API dokumentatsiooni. `--reload` parameeter võimaldab koodi muutmise järel serveri automaatselt taaskäivitada, mis on arendamisel mugav.
## Samm 4: API testimine
Kasutage API dokumentatsiooni või tööriistu nagu curl oma API testimiseks. Näiteks kasutage curli, et saata POST päring:
```bash
curl -X POST -H "Content-Type: application/json" -d '{"text": "Tell me a joke about cats."}' http://127.0.0.1:8000/generate
Peaksite saama JSON vastuse, mis sisaldab genereeritud teksti.
Samm 5: Tootmises juurutamine
Juurutage oma FastAPI rakendus tootmiskeskkonda, näiteks:
- Docker: Kasutage Dockerit oma rakenduse konteineriseerimiseks, et seda oleks lihtne juurutada ja hallata.
- Pilveplatvorm: Juurutage pilveplatvormile, näiteks AWS, Google Cloud Platform või Azure. Artiklis mainitud Azure Cosmos DB ja Azure Functions võivad olla kasutatud serverless API ehitamiseks. Modalit saab kasutada ka automaatselt skaleeruva FastAPI rakenduse juurutamiseks.
- Server: Juurutage oma serverisse.
Parimad praktikad
- Kasutage tundliku teabe salvestamiseks keskkonnamuutujaid: Ärge kodeerige API võtmeid ja muud tundlikku teavet otse koodi, vaid kasutage keskkonnamuutujaid.
- Lisage logimine: Kasutage logimismoodulit API tööoleku salvestamiseks, et hõlbustada silumist ja jälgimist.
- Lisage veatöötlus: Kasutage
try...exceptplokke võimalike erandite käsitlemiseks ja sobivate veateadete tagastamiseks. - Kiiruse piiramine: Kasutage kiiruse piirajat, et vältida API kuritarvitamist. FastAPI jaoks on saadaval mõned valmis kiiruse piiramise teegid.
- Vahemälu: Korduvate päringute korral saate jõudluse parandamiseks kasutada vahemälu.
- Jälgimine: Kasutage jälgimistööriistu API jõudluse ja kättesaadavuse jälgimiseks.
Täpsemad nipid
- Asünkroonne töötlemine: Aeganõudva LLM järelduse jaoks kasutage asünkroonseks töötlemiseks märksõnu
asyncjaawait, et vältida põhivoo blokeerimist. - Voogedastusvastus: Voogedastusvastuse (StreamingResponse) abil saate genereeritud teksti reaalajas tagastada, et parandada kasutajakogemust.
- Mitmelõimelisus/mitmeprotsessilisus: CPU-mahuka LLM järelduse jaoks saate jõudluse parandamiseks kasutada mitmelõimelisust või mitmeprotsessilisust.
- GPU kiirendus: Kui teie LLM mudel toetab GPU kiirendust, saate järelduskiiruse suurendamiseks kasutada CUDA-t või muid GPU kiirendusraamatukogusid.





