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.
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-upVarfö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.
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
- Grunderna i FastAPI för ML-ingenjörer
- Pydantic-scheman för förfrågningar och svar
- Läsa in och tillhandahålla ML-modeller
- Dockerisera modell-API:t