Paketering av ML-modeller

Att utveckla maskininlärningsmodeller för produktion

Sinan Ozdemir

Data Scientist, Entrepreneur, and Author

Varför paketering är viktigt

  • Optimera prestanda
  • Säkerställ kompatibilitet
  • Förenklar driftsättning

Paketeringsmetoder

  • Serialisering: enkel, kompakt och språkoberoende
  • Miljöpaketering: fångar hela programvarumiljön
  • Containerisering: en portabel, reproducerbar och isolerad miljö
Att utveckla maskininlärningsmodeller för produktion

Hur man paketerar ML-modeller

  • Serialisering – lagra och hämta en ML-modell

  • Miljöpaketering – konsekvent och reproducerbar miljö för ML-modellen

  • Containerisering – paketerar modellen, beroenden och miljön i en enda "container"

Att utveckla maskininlärningsmodeller för produktion

Serialisera scikit-learn-modeller

Serialisera en sklearn-modell med 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)

Serialisera en sklearn-modell i HDF5-format:

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'][:])
Att utveckla maskininlärningsmodeller för produktion

Serialisera PyTorch- och TensorFlow-modeller

Serialisera en PyTorch-modell:

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))

Serialisera en TensorFlow-modell:

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)
Att utveckla maskininlärningsmodeller för produktion

ML-miljöpaketering med Docker

  • Säkerställ att modellens miljö fungerar korrekt
  • virtualenv m.fl. skapar konsekventa och reproducerbara miljöer
  • Docker-containers är fristående enheter som enkelt kan driftsättas

docker

Att utveckla maskininlärningsmodeller för produktion

Exempel på 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"]

<---- Use Python 3.8 base image


<---- Set the working directory


<---- Copy the requirmentes.txt file


<---- Install the model's dependent packages


<---- Copy the model into the continer


<---- Tell the container how to start up
Att utveckla maskininlärningsmodeller för produktion

Experiment -> Docker-arbetsflöde

  1. Serialisera den tränade ML-modellen i ett format som pickle, HDF5 eller PyTorch.

  2. Containerisera den serialiserade ML-modellen, dess beroenden och miljön

  3. Driftsätt Docker-avbildningen i en målmiljö, t.ex. en molnplattform

  4. Kör Docker-containern från den driftsatta avbildningen och starta ML-modellen.

  5. Använd modellen i containern via ett API eller annan åtkomstpunkt.

Docker-arbetsflöde

Att utveckla maskininlärningsmodeller för produktion

Nu kör vi en övning!

Att utveckla maskininlärningsmodeller för produktion

Preparing Video For Download...