💡 Obiettivo del Capitolo:
Questo capitolo esplora le tecniche e le best practice per portare i modelli di Machine Learning (ML) dalla fase di sviluppo alla produzione e per gestirli in modo affidabile nel tempo attraverso MLOps. Copriremo il deployment, la creazione di API, la containerizzazione e l'intero ciclo di vita MLOps.
📚 7.1 Fondamenti Teorici: Dal Modello Sviluppato all'Utilizzo Reale
Il deployment è il ponte tra lo sviluppo del modello e il suo utilizzo pratico. Rende le predizioni accessibili ad altre applicazioni o utenti.
📌 7.1.1 Modalità di Deployment
La scelta dipende dall'applicazione:
- Batch Prediction: Esecuzione periodica su grandi set di dati. Output salvato per uso futuro (es. report).
- Real-time Prediction (Online Inference): Esposizione del modello come servizio API per risposte immediate (es. raccomandazioni live).
- Edge Deployment: Esecuzione diretta sul dispositivo dell'utente (es. smartphone, IoT) per bassa latenza e offline.
💾 7.1.2 Salvataggio e Serializzazione del Modello
Necessario per rendere il modello persistente e portabile:
- Pickle/Joblib: Standard Python, facili ma con potenziali rischi di sicurezza/compatibilità. Joblib ottimizzato per NumPy/Scikit-learn.
- Formati Specifici del Framework:
- TensorFlow:
.keras, SavedModel (preferito per il serving).
- PyTorch:
.pth (solo pesi, comune), .pt (intero modello).
- ONNX (Open Neural Network Exchange): Formato standard aperto per interoperabilità tra framework e runtime ottimizzati. Utile per cross-platform e edge.
☁️ 7.1.3 Esposizione tramite API REST
Un modo comune per il real-time: un client invia dati (JSON via HTTP POST) a un endpoint, l'API esegue il modello e restituisce la predizione (JSON).
📦 7.1.4 Necessità della Containerizzazione (Docker)
Risolve il problema delle discrepanze tra ambiente di sviluppo e produzione.
- Docker: Impacchetta l'applicazione (codice, modello, dipendenze) in un'immagine container isolata e portabile.
- Dockerfile: File di testo con le istruzioni per costruire l'immagine.