Notkun FastAPI til að byggja afkastamikil, framleiðsluhæf LLM API: Skref fyrir skref leiðbeiningar
# Notkun FastAPI til að byggja afkastamikil, framleiðsluhæf LLM API: Skref fyrir skref leiðbeiningar
FastAPI, sem er nútímalegt, afkastamikið Python vef-rammaverk, er vinsælt vegna þess hve auðvelt er að nota það, hraða og sjálfvirkt myndað API skjöl. Sérstaklega þegar kemur að því að byggja bakenda API fyrir LLM (Large Language Model) forrit, sýnir FastAPI mikla kosti. Þessi grein mun kenna þér skref fyrir skref hvernig á að nota FastAPI til að byggja framleiðsluhæft LLM API og kanna nokkrar bestu starfsvenjur.
## Hvers vegna að velja FastAPI?
Þegar API er byggt fyrir LLM forrit býður FastAPI upp á eftirfarandi lykilkosti:
* **Mikil afköst:** Byggt á ASGI, FastAPI getur unnið úr miklum fjölda samtímis beiðna, sem er mikilvægt fyrir LLM forrit sem þurfa skjót viðbrögð.
* **Ósamstilltur stuðningur:** FastAPI hefur innbyggðan stuðning fyrir `async` og `await` lykilorðin, sem gerir það auðvelt að vinna úr ósamstilltum aðgerðum, eins og að kalla á LLM ályktun, til að forðast að hindra aðalþráðinn.
* **Sjálfvirk API skjöl:** FastAPI notar OpenAPI og JSON Schema til að búa sjálfkrafa til gagnvirk API skjöl (Swagger UI), sem gerir forriturum auðvelt að prófa og nota API-ið þitt.
* **Gagnastaðfesting:** FastAPI notar Pydantic til að staðfesta gögn, tryggja réttmæti beiðnisfæribreytna og draga úr villum.
* **Fíkniefnainnspýting:** Fíkniefnainnspýtingarkerfi FastAPI gerir það auðvelt að stjórna og deila auðlindum, eins og LLM líkönum.
* **Virkt samfélag:** FastAPI hefur stórt og virkt samfélag, þar sem hægt er að fá ríkulegt úrval af auðlindum og stuðningi.
## Undirbúningur
1. **Settu upp Python:** Gakktu úr skugga um að þú hafir sett upp Python 3.7 eða nýrri útgáfu.
2. **Settu upp FastAPI og Uvicorn:** Notaðu pip til að setja upp FastAPI og Uvicorn (ASGI netþjón):
```bash
pip install fastapi uvicorn
- Veldu LLM líkan: Veldu LLM líkanið sem þú vilt nota. Það getur verið líkan frá OpenAI, eða opið líkan, eins og TinyLlama. Ef þú velur OpenAI þarftu að fá OpenAI API lykil. Ef þú velur TinyLlama þarftu að hlaða niður líkanaskránni.
Skref 1: Búðu til FastAPI forrit
Búðu til skrá sem heitir main.py og bættu við eftirfarandi kóða:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
app = FastAPI(title="LLM API", description="Einfalt API til að hafa samskipti við LLM.")
class InputText(BaseModel):
text: str
class OutputText(BaseModel):
generated_text: str
Þessi kóði skilgreinir FastAPI forrit og skilgreinir tvö Pydantic líkön: InputText til að taka á móti inntakstexta og OutputText til að skila mynduðum texta.
Skref 2: Bættu við LLM ályktunarrökfræði
Bættu við samsvarandi ályktunarrökfræði í samræmi við LLM líkanið sem þú valdir. Hér er dæmi um notkun OpenAI API:
import openai
import os
# Fáðu OpenAI API lykil
openai.api_key = os.environ.get("OPENAI_API_KEY") # Mælt er með að nota umhverfisbreytur
@app.post("/generate", response_model=OutputText) async def generate_text(input_text: InputText): """ Býr til texta byggt á inntakstextanum með því að nota OpenAI. """ try: response = openai.Completion.create( engine="text-davinci-003", # Veldu líkan 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))
Þessi kóði skilgreinir `/generate` leið, sem tekur við `InputText` hlut sem inntak, kallar á OpenAI API til að búa til texta og skilar búna textanum sem `OutputText` hlut. Athugaðu að skipta út `text-davinci-003` fyrir viðeigandi líkan að eigin vali.
**Ef þú notar staðbundið líkan eins og TinyLlama, þarftu að setja upp samsvarandi bókasöfn, til dæmis `transformers`, og hlaða líkaninu í minni. Hér er dæmi um kóða:**
```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):
"""
Býr til texta byggt á inntakstextanum með því að nota 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))
Skref 3: Keyra FastAPI forritið
Keyrðu FastAPI forritið með Uvicorn:
uvicorn main:app --reload
```Þetta mun ræsa staðbundinn netþjón sem þú getur nálgast í vafranum þínum á `http://127.0.0.1:8000/docs` til að skoða sjálfvirkt myndaðar API skjöl. `--reload` breytan gerir það að verkum að netþjónninn endurræsist sjálfkrafa þegar kóðinn er breyttur, sem auðveldar þróun.
## Skref 4: Prófa API
Notaðu API skjöl eða verkfæri eins og curl til að prófa API-ið þitt. Til dæmis, notaðu curl til að senda POST beiðni:
```bash
curl -X POST -H "Content-Type: application/json" -d '{"text": "Segðu mér brandara um ketti."}' http://127.0.0.1:8000/generate
Þú ættir að fá JSON svar sem inniheldur myndaðan texta.
Skref 5: Framleiðsludreifing
Dreifðu FastAPI forritinu þínu í framleiðsluumhverfi, til dæmis:
- Docker: Notaðu Docker til að geyma forritið þitt í ílát, sem auðveldar dreifingu og stjórnun.
- Skývettvangur: Dreifðu á skývettvang, til dæmis AWS, Google Cloud Platform eða Azure. Azure Cosmos DB og Azure Functions sem nefnd eru í textanum er hægt að nota til að byggja upp serverless API. Einnig er hægt að nota Modal til að dreifa sjálfskalandi FastAPI forritum.
- Netþjónn: Dreifðu á þinn eigin netþjón.
Bestu starfsvenjur
- Notaðu umhverfisbreytur til að geyma viðkvæmar upplýsingar: Ekki harðkóða viðkvæmar upplýsingar eins og API lykla í kóðann, heldur notaðu umhverfisbreytur.
- Bættu við skráningu: Notaðu skráningareininguna til að skrá rekstrarstöðu API-sins, sem auðveldar villuleit og vöktun.
- Bættu við villumeðhöndlun: Notaðu
try...exceptblokkir til að meðhöndla hugsanlegar undantekningar og skila viðeigandi villuboðum. - Hraðatakmörkun: Notaðu hraðatakmarkara til að koma í veg fyrir misnotkun á API-inu. FastAPI hefur nokkur tilbúin hraðatakmörkunarbókasöfn í boði.
- Skyndiminni: Fyrir endurteknar beiðnir geturðu notað skyndiminni til að bæta afköst.
- Vöktun: Notaðu vöktunartól til að fylgjast með afköstum og framboði API-sins.
Háþróuð tækni
- Ósamhverf vinnsla: Fyrir tímafreka LLM ályktun, notaðu
asyncogawaitlykilorðin til að vinna úr ósamstillt, til að forðast að hindra aðalþráðinn. - Streymissvörun: Notkun streymissvörunar (StreamingResponse) getur skilað mynduðum texta í rauntíma, sem bætir notendaupplifunina.
- Fjölþráður/fjölvinnslur: Fyrir CPU-freka LLM ályktun geturðu notað fjölþráð eða fjölvinnslur til að bæta afköst.
- GPU hröðun: Ef LLM líkanið þitt styður GPU hröðun geturðu notað CUDA eða önnur GPU hröðunarbókasöfn til að auka ályktunarhraðann.





