F· AI engineeringinferens-optimering· ca 90 min· volatil — kontrolleras ofta· verifierad 2026-09-20
Servering och skalning av modeller
Kunna sätta upp en inferensserver med köer, tidsgränser och observability.
Förkunskaper
Intuition
Att servera en modell är inte att starta model.generate() bakom ett API. Sju saker måste finnas innan det tål verklig trafik:
| Del | Varför |
|---|---|
| Continuous batching | 2–10× throughput; vLLM/TGI gör det åt dig |
| Kö med tak | utan tak växer latensen obegränsat vid topp — bättre att avvisa med 429 |
| Tidsgräns per förfrågan | en som genererar 4 000 tokens får inte blockera resten |
| Kvot per användare | skyddar mot både missbruk och buggar hos klienter |
| Hälsokontroll | orkestreringen måste veta om noden ska få trafik |
| Mätning | TTFT, tokens/s, kölängd, GPU-utnyttjande, kostnad |
| Degradering | mindre modell eller förskrivet svar när kön är full |
Den näst sista raden är den som gör felsökning möjlig; den sista är den som gör att användaren inte möter en vit sida.
Kod
import asyncio, time
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field
app = FastAPI()
KO = asyncio.Queue(maxsize=200)
SAMTIDIGA = asyncio.Semaphore(32)
class In(BaseModel):
prompt: str = Field(min_length=1, max_length=8000)
max_tokens: int = Field(default=512, ge=1, le=2048)
@app.get("/healthz")
async def healthz():
return {"ok": True, "ko": KO.qsize(), "kapacitet": KO.maxsize}
@app.post("/v1/generate")
async def generate(body: In):
if KO.full():
raise HTTPException(429, "Systemet är överbelastat — försök om en stund")
await KO.put(1)
t0 = time.perf_counter()
try:
async with SAMTIDIGA:
try:
text = await asyncio.wait_for(motor.generate(body.prompt, body.max_tokens), timeout=60)
except asyncio.TimeoutError:
raise HTTPException(504, "Tidsgräns överskriden")
return {"text": text, "latens_ms": round((time.perf_counter() - t0) * 1000)}
finally:
KO.get_nowait(); KO.task_done()
Dimensionering: mät throughput vid den samtidighet som ger acceptabel p95-latens (inte maximal throughput). Kör sedan på ~60–70 % av den kapaciteten i normalfall — resten är marginal för toppar. Autoskalning på GPU tar minuter, så marginalen måste finnas i förväg.
Behärskning innebär
- Sätter upp en inferensserver med köer och tidsgränser
- Dimensionerar efter p95-krav
- Bygger in observability och degradering
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- arXiv — Efficient Memory Management for LLM Serving with PagedAttention (vLLM) — arXiv (öppen åtkomst; licens per artikel)
- Text Generation Inference (HFOILv1.0/Apache-2.0) — Apache-2.0