Impacchettare modelli ML

Sviluppare modelli di Machine Learning per la produzione

Sinan Ozdemir

Data Scientist, Entrepreneur, and Author

Perché il packaging è importante

  • Ottimizza le prestazioni
  • Garantisce compatibilità
  • Rende i modelli più facili da distribuire

Metodi di packaging

  • Serializzazione: semplice, leggera e linguaggio-agnostica
  • Packaging dell'ambiente: cattura l'intero ambiente software
  • Containerizzazione: ambiente portabile, riproducibile e isolato
Sviluppare modelli di Machine Learning per la produzione

Come impacchettare modelli ML

  • Serializzazione: salvataggio e caricamento di un modello ML

  • Packaging dell'ambiente: ambiente coerente e riproducibile per il modello ML

  • Containerizzazione: pacchetta modello, dipendenze e ambiente in un singolo "container"

Sviluppare modelli di Machine Learning per la produzione

Serializzare modelli scikit-learn

Serializzare un modello sklearn con pickle:

import pickle

model = ...  # Train the scikit-learn model

# Serialize the model to a file
with open('model.pkl', 'wb') as f:
    pickle.dump(model, f)

# Load the serialized model from the file
with open('model.pkl', 'rb') as f:
    model = pickle.load(f)

Serializzare un modello sklearn in formato HDF5:

import h5py
import numpy as np
from sklearn.externals import joblib

model = ...  # Train the scikit-learn model

# Serialize the model to an HDF5 file
with h5py.File('model.h5', 'w') as f:
    f.create_dataset('model_weights',
    data=joblib.dump(model))

# Load the serialized model from the HDF5 file
with h5py.File('model.h5', 'r') as f:
    model = joblib.load(f['model_weights'][:])
Sviluppare modelli di Machine Learning per la produzione

Serializzare modelli PyTorch e Tensorflow

Serializzare un modello PyTorch:

import torch

# Train a PyTorch model and store it in a variable
trained_model = ...

# Serialize the trained model to a file
serialized_model_path = 'model.pt'
torch.save(trained_model.state_dict(), serialized_model_path)

# Load the serialized model from a file
loaded_model = ... # Initialize the model
loaded_model.load_state_dict(
    torch.load(serialized_model_path))

Serializzare un modello Tensorflow:

import tensorflow as tf

# Train a Tensorflow model
trained_model = ...

# Save the trained model to a directory 
saved_model_directory = 'model/'
tf.saved_model.save
    (trained_model, saved_model_directory)

# Load the saved model from the directory 
loaded_model = tf.saved_model.load(
    saved_model_directory)
Sviluppare modelli di Machine Learning per la produzione

Impacchettare ambienti ML con Docker

  • Assicura che l'ambiente permetta l'esecuzione del modello
  • virtualenv ecc. creano ambienti coerenti e riproducibili
  • I container Docker sono unità autonome, facili da distribuire

docker

Sviluppare modelli di Machine Learning per la produzione

Esempio di Dockerfile

# Use an existing image as the base image
FROM python:3.8-slim

# Set the working directory
WORKDIR /app

# Copy the requirements file to the image
COPY requirements.txt .

# Install the required dependencies
RUN pip install -r requirements.txt

# Copy the ML model and its dependencies to the image
COPY model/ .

# Set the entrypoint to run the model
ENTRYPOINT ["python", "run_model.py"]

<---- Usa l'immagine base Python 3.8


<---- Imposta la working directory


<---- Copia il file requirements.txt


<---- Installa le dipendenze del modello


<---- Copia il modello nel container


<---- Indica come avviare il container
Sviluppare modelli di Machine Learning per la produzione

Esperimento -> workflow Docker

  1. Serializza il modello ML addestrato con formati come pickle, HDF5 o PyTorch.

  2. Containerizza il modello serializzato, le dipendenze e l'ambiente

  3. Distribuisci l'immagine Docker in un ambiente target (es. cloud)

  4. Esegui il container dall'immagine distribuita e avvia il modello ML

  5. Usa il modello nel container via API o altro punto di accesso

Flusso Docker

Sviluppare modelli di Machine Learning per la produzione

Passons à la pratique !

Sviluppare modelli di Machine Learning per la produzione

Preparing Video For Download...