Caricamento e serving dei modelli ML
Caricamento del modello joblib/keras all'avvio, inferenza thread-safe, endpoint per la predizione a batch
Caricamento e serving dei modelli ML è una lezione Learn AI with Python gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Learn AI with Python, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Learn AI with Python include 4 lezioni in totale.
Il problema del caricamento
Caricare un modello dal disco è lento. Se lo si ricarica a ogni richiesta, la latenza aumenta vertiginosamente. La soluzione consiste nel caricare il modello una sola volta all'avvio e riutilizzarlo per tutte le richieste.
L'evento startup
L'hook @app.on_event("startup") viene eseguito una volta quando il server si avvia: è il luogo ideale per caricare il modello prima dell'arrivo di qualsiasi richiesta.
from fastapi import FastAPI
import joblib
app = FastAPI()
@app.on_event("startup")
def load_model():
app.state.model = joblib.load("model.joblib")app.state per l'archiviazione thread-safe
app.state è il luogo consigliato per conservare oggetti condivisi come il modello. Memorizzandolo una volta all'avvio e leggendolo soltanto durante le richieste, si evitano i problemi delle variabili globali mutabili a livello di modulo.
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]}Perché non una variabile globale?
Una variabile globale del modulo funziona, ma lega il caricamento al momento dell'importazione ed è più difficile da testare o sostituire. app.state lega il ciclo di vita dell'oggetto all'applicazione: è una soluzione più pulita e il pattern consigliato da FastAPI.
L'approccio moderno lifespan
Le versioni più recenti di FastAPI sostituiscono on_event con un context manager lifespan, che gestisce avvio e arresto in un unico punto.
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)Riscaldamento del modello
La prima predizione è spesso lenta perché i framework eseguono l'inizializzazione differita alla prima chiamata. Esegua il warm-up del modello all'avvio con una predizione fittizia, così la prima richiesta reale dell'utente sarà già veloce.
@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-upPerché il warm-up è importante
Senza warm-up, la prima richiesta dopo la distribuzione può essere molto più lenta, peggiorando la latenza di coda e causando potenzialmente il fallimento dei controlli dello stato. Una singola inferenza fittizia all'avvio sostiene questo costo fuori dal percorso critico.
Un endpoint per le predizioni batch
Predire molte righe in un'unica chiamata è molto più efficiente rispetto a effettuare molte chiamate singole, poiché i modelli vettorizzano le operazioni su un batch. Accetti un elenco di vettori di feature e restituisca un elenco di predizioni.
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()}Singola predizione e batch
- Singola: un input, latenza minima per chiamata, client semplici.
- Batch: molti input contemporaneamente, throughput molto più elevato, ideale per lo scoring offline.
Offrire entrambe le modalità copre i casi d'uso in tempo reale e in blocco.
Lettura dello stato negli endpoint
Ogni endpoint legge il modello condiviso tramite request.app.state.model, senza mai ricaricarlo, così tutte le richieste condividono una singola istanza in memoria.
Assemblare il tutto
Una configurazione pronta per la produzione: caricare e riscaldare il modello in lifespan/startup, memorizzarlo in app.state ed esporre endpoint di predizione sia singoli sia batch che leggono dallo stato. In questo modo si riduce al minimo la latenza e si massimizza il throughput.
Verifica rapida
Verifichi le Sue conoscenze sulla distribuzione dei modelli.
Riepilogo
Ha caricato il modello una sola volta tramite startup/lifespan, lo ha memorizzato in app.state per riutilizzarlo in modo thread-safe, ha aggiunto una predizione fittizia di warm-up ed esposto un endpoint batch per aumentare il throughput. Prossimo argomento: la containerizzazione dell'API con Docker.
Domande Frequenti
La lezione «Caricamento e serving dei modelli ML» è gratuita?
Sì — il testo completo di «Caricamento e serving dei modelli ML» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Learn AI with Python, passa a CoddyKit PRO. Il corso Learn AI with Python include 4 lezioni in totale.
Cosa imparerò in «Caricamento e serving dei modelli ML»?
Caricamento del modello joblib/keras all'avvio, inferenza thread-safe, endpoint per la predizione a batch Eserciti Learn AI with Python con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Learn AI with Python?
Non è richiesta alcuna esperienza precedente. Learn AI with Python su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Caricamento e serving dei modelli ML»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Learn AI with Python?
Sì. Ogni lezione Learn AI with Python include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Fondamenti di FastAPI per ML engineer
- Schemi Pydantic per richieste e risposte
- Caricamento e serving dei modelli ML
- Containerizzazione dell'API del modello