Lär Er AI med Python · Lektion

Läsa in och tillhandahålla ML-modeller

Läsa in en joblib/keras-modell vid uppstart, trådsäker inferens, slutpunkter för batchprediktion.

Lektion 3 av 413 steg

Läsa in och tillhandahålla ML-modeller är en gratis lektion i Lär Er AI med Python på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lär Er AI med Python, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lär Er AI med Python innehåller totalt 4 lektioner.

Problemet med inläsning

Att läsa in en modell från disk tar tid. Om ni läser in den vid varje request skjuter latensen i höjden. Lösningen: läs in modellen en enda gång vid start och återanvänd den för alla requests.

Händelsen startup

Hooken @app.on_event("startup") körs en gång när servern startar och är den perfekta platsen för att läsa in modellen innan någon request anländer.

from fastapi import FastAPI
import joblib

app = FastAPI()

@app.on_event("startup")
def load_model():
    app.state.model = joblib.load("model.joblib")

app.state för trådsäker lagring

app.state är den rekommenderade platsen för att lagra delade objekt som modellen. Den lagras en gång vid start och läses bara under requests, vilket undviker problemen med föränderliga globala variabler på modulnivå.

from fastapi import Request

@app.post("/predict")
def predict(req: PredictRequest, request: Request):
    model = request.app.state.model
    return {"prediction": model.predict([req.features])[0]}

Varför inte en global variabel?

En fristående global variabel fungerar, men kopplar inläsningen till importtiden och är svårare att testa eller byta ut. app.state knyter objektets livscykel till appen, vilket är renare och det mönster FastAPI rekommenderar.

Det moderna lifespan-angreppssättet

Nyare FastAPI ersätter on_event med en lifespan-kontexthanterare, som hanterar både start och avstängning på samma plats.

from contextlib import asynccontextmanager

@asynccontextmanager
async def lifespan(app):
    app.state.model = joblib.load("model.joblib")  # startup
    yield
    app.state.model = None                          # shutdown

app = FastAPI(lifespan=lifespan)

Uppvärmning av modellen

Den första förutsägelsen är ofta långsam eftersom ramverk ofta initierar delar först vid det första anropet. Värm upp modellen vid start med en dummy-förutsägelse, så att den första riktiga användarrequesten redan går snabbt.

@app.on_event("startup")
def load_and_warm():
    app.state.model = joblib.load("model.joblib")
    app.state.model.predict([[0.0, 0.0, 0.0, 0.0]])  # warm-up

Varför uppvärmning är viktig

Utan uppvärmning kan den första requesten efter driftsättning ta många gånger längre tid, vilket försämrar tail-latensen och eventuellt gör att hälsokontroller misslyckas. En enda dummy-inferens vid start flyttar denna kostnad bort från den kritiska sökvägen.

En endpoint för batchförutsägelser

Att göra förutsägelser för många rader i ett anrop är mycket effektivare än många enskilda anrop, eftersom modeller vektoriserar över en batch. Ta emot en lista med featurevektorer och returnera en lista med förutsägelser.

class BatchRequest(BaseModel):
    items: list[list[float]]

@app.post("/predict/batch")
def predict_batch(req: BatchRequest, request: Request):
    model = request.app.state.model
    preds = model.predict(req.items)
    return {"predictions": preds.tolist()}

Enskilt jämfört med batch

  • Enskilt: en indata, lägst latens per anrop, enkla klienter.
  • Batch: många indata samtidigt, betydligt högre genomströmning, idealiskt för offline-scoring.

Genom att erbjuda båda täcker ni användningsfall i realtid och i bulk.

Läsa från state i endpoints

Varje endpoint läser den delade modellen via request.app.state.model utan att läsa in den på nytt, så att alla requests delar på en enda instans i minnet.

Sätta ihop delarna

En produktionsklar uppsättning: läs in och värm upp modellen i lifespan/startup, lagra den i app.state och exponera både endpoints för enskilda förutsägelser och batch-förutsägelser som läser från state. Detta minimerar latensen och maximerar genomströmningen.

Snabbtest

Testa era kunskaper om modellservering.

Sammanfattning

Ni läste in modellen en gång via startup/lifespan, lagrade den i app.state för trådsäker återanvändning, lade till en dummy-förutsägelse som uppvärmning och exponerade en batch-endpoint för hög genomströmning. Nästa del: dockerisera API:t.

Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
53
Lektioner
225

Vanliga frågor

Är lektionen ”Läsa in och tillhandahålla ML-modeller” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lär Er AI med Python, inklusive ”Läsa in och tillhandahålla ML-modeller”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lär Er AI med Python innehåller totalt 4 lektioner.

Vad lär jag mig i ”Läsa in och tillhandahålla ML-modeller”?

Läsa in en joblib/keras-modell vid uppstart, trådsäker inferens, slutpunkter för batchprediktion. Ni övar på Lär Er AI med Python med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Lär Er AI med Python?

Du behöver inga förkunskaper. Utbildningen i Lär Er AI med Python på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Läsa in och tillhandahålla ML-modeller”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Lär Er AI med Python-lektionen?

Ja. Varje Lär Er AI med Python-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Grunderna i FastAPI för ML-ingenjörer
  2. Pydantic-scheman för förfrågningar och svar
  3. Läsa in och tillhandahålla ML-modeller
  4. Dockerisera modell-API:t
← Tillbaka till Lär Er AI med Python