Exporta artefactos de modelo para la predicción y explicación

Vertex AI ofrece contenedores precompilados para entregar predicciones y explicaciones de modelos entrenados con los siguientes frameworks de aprendizaje automático (AA):

  • TensorFlow
  • PyTorch
  • XGBoost
  • scikit-learn

Para usar uno de estos contenedores precompilados, debes guardar el modelo como uno o más artefactos del modelo que cumplan con los requisitos del contenedor precompilado. Estos requisitos se aplican sin importar si los artefactos del modelo se crean en Vertex AI o no.

Si usas un contenedor personalizado para entregar predicciones, no necesitas cumplir con los requisitos de esta página, pero puedes usarlos como lineamientos.

Requisitos específicos del framework para exportar a contenedores compilados previamente

Según el framework de AA que desees usar para la predicción, debes exportar artefactos de modelo en diferentes formatos. En las siguientes secciones, se describen los formatos de modelo aceptables para cada framework de AA.

TensorFlow

Si usas TensorFlow para entrenar un modelo, exporta el modelo como un directorio de modelos guardados de TensorFlow.

Hay varias maneras de exportar modelos guardados desde el código de entrenamiento de TensorFlow. En la siguiente lista, se describen algunas opciones que funcionan para varias APIs de TensorFlow:

A fin de entregar predicciones con estos artefactos, crea un Model con el contenedor compilado previamente para la predicción que coincida con la versión de TensorFlow que usaste en el entrenamiento.

TensorFlow para Vertex Explainable AI

Si deseas obtener explicaciones de un Model que usa un contenedor compilado con anterioridad de TensorFlow para entregar predicciones, lee los requisitos adicionales para exportar un modelo de TensorFlow para Vertex Explainable AI.

Habilita el procesamiento por lotes de solicitudes del servidor para TensorFlow

Si deseas habilitar el procesamiento por lotes de solicitudes para un Model que use un contenedor compilado con anterioridad de TensorFlow para entregar predicciones, incluye el archivo config/batching_parameters_config en el mismo directorio de GCS que el archivo saved_model.pb. Para configurar el archivo de configuración de procesamiento por lotes, consulta la documentación oficial de TensorFlow.

PyTorch

Debes empaquetar los artefactos del modelo, incluido un controlador predeterminado o personalizado mediante la creación de un archivo de almacenamiento mediante el archivador de modelos de PyTorch. Las imágenes de PyTorch compiladas con anterioridad esperan que el archivo se llame model.mar, así que asegúrate de establecer el nombre del modelo como “model”.

Para obtener información sobre cómo optimizar el uso de memoria, la latencia o la capacidad de procesamiento de un modelo de PyTorch entregado con TorchServe, consulta la Guía de rendimiento de PyTorch.

XGBoost

Si usas un contenedor precompilado de XGBoost para entrenar un modelo, puedes exportarlo de las siguientes maneras:

El nombre de archivo del artefacto del modelo debe coincidir con una de estas opciones.

En los siguientes ejemplos, se muestra cómo entrenar y exportar un modelo:

xgboost.Booster

import os

from google.cloud import storage
from sklearn import datasets
import xgboost as xgb

digits = datasets.load_digits()
dtrain = xgb.DMatrix(digits.data, label=digits.target)
bst = xgb.train({}, dtrain, 20)

artifact_filename = 'model.bst'

# Save model artifact to local filesystem (doesn't persist)
local_path = artifact_filename
bst.save_model(local_path)

# Upload model artifact to Cloud Storage
model_directory = os.environ['AIP_MODEL_DIR']
storage_path = os.path.join(model_directory, artifact_filename)
blob = storage.blob.Blob.from_string(storage_path, client=storage.Client())
blob.upload_from_filename(local_path)

joblib

import os

from google.cloud import storage
from sklearn import datasets
import joblib
import xgboost as xgb

digits = datasets.load_digits()
dtrain = xgb.DMatrix(digits.data, label=digits.target)
bst = xgb.train({}, dtrain, 20)

artifact_filename = 'model.joblib'

# Save model artifact to local filesystem (doesn't persist)
local_path = artifact_filename
joblib.dump(bst, local_path)

# Upload model artifact to Cloud Storage
model_directory = os.environ['AIP_MODEL_DIR']
storage_path = os.path.join(model_directory, artifact_filename)
blob = storage.blob.Blob.from_string(storage_path, client=storage.Client())
blob.upload_from_filename(local_path)

pickle

import os
import pickle

from google.cloud import storage
from sklearn import datasets
import xgboost as xgb

digits = datasets.load_digits()
dtrain = xgb.DMatrix(digits.data, label=digits.target)
bst = xgb.train({}, dtrain, 20)

artifact_filename = 'model.pkl'

# Save model artifact to local filesystem (doesn't persist)
local_path = artifact_filename
with open(local_path, 'wb') as model_file:
  pickle.dump(bst, model_file)

# Upload model artifact to Cloud Storage
model_directory = os.environ['AIP_MODEL_DIR']
storage_path = os.path.join(model_directory, artifact_filename)
blob = storage.blob.Blob.from_string(storage_path, client=storage.Client())
blob.upload_from_filename(local_path)

A fin de entregar predicciones con este artefacto, crea un Model con el contenedor compilado previamente para la predicción que coincida con la versión de XGBoost que usaste en el entrenamiento.

scikit-learn

Si usas un modelo precompilado de scikit-learn para entrenar un modelo, puedes exportarlo de las siguientes maneras:

El nombre de archivo del artefacto del modelo debe coincidir con una de estas opciones. Puedes exportar estimadores estándar de scikit-learn o canalizaciones de scikit-learn.

En los siguientes ejemplos, se muestra cómo entrenar y exportar un modelo:

joblib

import os

from google.cloud import storage
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
import joblib

digits = datasets.load_digits()
classifier = RandomForestClassifier()
classifier.fit(digits.data, digits.target)

artifact_filename = 'model.joblib'

# Save model artifact to local filesystem (doesn't persist)
local_path = artifact_filename
joblib.dump(classifier, local_path)

# Upload model artifact to Cloud Storage
model_directory = os.environ['AIP_MODEL_DIR']
storage_path = os.path.join(model_directory, artifact_filename)
blob = storage.blob.Blob.from_string(storage_path, client=storage.Client())
blob.upload_from_filename(local_path)

pickle

import os
import pickle

from google.cloud import storage
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier

digits = datasets.load_digits()
classifier = RandomForestClassifier()
classifier.fit(digits.data, digits.target)

artifact_filename = 'model.pkl'

# Save model artifact to local filesystem (doesn't persist)
local_path = artifact_filename
with open(local_path, 'wb') as model_file:
  pickle.dump(classifier, model_file)

# Upload model artifact to Cloud Storage
model_directory = os.environ['AIP_MODEL_DIR']
storage_path = os.path.join(model_directory, artifact_filename)
blob = storage.blob.Blob.from_string(storage_path, client=storage.Client())
blob.upload_from_filename(local_path)

A fin de entregar predicciones con este artefacto, crea un Model con el contenedor compilado previamente para la predicción que coincida con la versión de scikit-learn que usaste en el entrenamiento.

¿Qué sigue?