Hoppa till innehållet
AI-grafen
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:

DelVarför
Continuous batching2–10× throughput; vLLM/TGI gör det åt dig
Kö med takutan tak växer latensen obegränsat vid topp — bättre att avvisa med 429
Tidsgräns per förfråganen som genererar 4 000 tokens får inte blockera resten
Kvot per användareskyddar mot både missbruk och buggar hos klienter
Hälsokontrollorkestreringen måste veta om noden ska få trafik
MätningTTFT, tokens/s, kölängd, GPU-utnyttjande, kostnad
Degraderingmindre 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

Alla källor och licenser