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:
Si usas Keras para el entrenamiento, usa
tf.keras.Model.save
para exportar un modelo guardado.Si usas un Estimador para el entrenamiento, usa
tf.estimator.Estimator.export_saved_model
a fin de exportar un modelo guardado.De lo contrario, usa
tf.saved_model.save
otf.compat.v1.saved_model.SavedModelBuilder
.Si no usas Keras ni un Estimador, asegúrate de usar la etiqueta
serve
y la firmaserving_default
cuando exportes tu modelo guardado para asegurarte de que Vertex AI puede usar tus artefactos de modelo para entregar predicciones. Keras y Estimador controlan esto automáticamente. Obtén más información sobre la especificación de firmas durante la exportación.
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:
- Usa el método
save_model
dexgboost.Booster
para exportar un archivo llamadomodel.bst
. - Usa la biblioteca
joblib
para exportar un archivo llamadomodel.joblib
. - Usa el módulo
pickle
de Python para exportar un archivo llamadomodel.pkl
.
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:
- Usa la biblioteca
joblib
para exportar un archivo llamadomodel.joblib
. - Usa el módulo
pickle
de Python para exportar un archivo llamadomodel.pkl
.
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?
Lee sobre los requisitos adicionales para tu código de entrenamiento que debes tener en cuenta cuando realices el entrenamiento personalizado en Vertex AI.
Obtén más información sobre cómo crear un recurso
TrainingPipeline
personalizado para ejecutar tu código de entrenamiento personalizado y crear unModel
a partir de los artefactos del modelo resultantes.Aprende a importar un
Model
de los artefactos de modelo en Cloud Storage. Esto se aplica a los artefactos de modelo que creaste con un recursoCustomJob
oHyperparameterTuningJob
y a los artefactos de modelo que entrenas fuera de Vertex AI.