Exportar artefatos do modelo para previsão e explicação

A Vertex AI oferece contêineres pré-criados para exibir previsões e explicações de modelos treinados com os seguintes frameworks de machine learning (ML):

  • TensorFlow
  • PyTorch
  • XGBoost
  • scikit-learn

Para usar um desses contêineres predefinidos, salve seu modelo como um ou mais artefatos de modelo que atendam aos requisitos do contêiner pré-criado. Esses requisitos se aplicam, independentemente de os artefatos do modelo serem criados na Vertex AI.

Se você quiser usar um contêiner personalizado para exibir previsões, não precisará obedecer aos requisitos desta página, mas ainda poderá usá-los como diretrizes.

Requisitos específicos do framework para exportar para contêineres pré-criados

Dependendo de qual framework de ML você pretende usar para previsão, exporte artefatos de modelo em formatos diferentes. As seções a seguir descrevem os formatos de modelo aceitáveis para cada framework de ML.

TensorFlow

Se você usar o TensorFlow para treinar um modelo, exporte-o como um diretório TensorFlow SavedModel.

Há várias maneiras de exportar SavedModels do código de treinamento do TensorFlow. Na lista a seguir, você verá algumas maneiras diferentes que funcionam para várias APIs TensorFlow:

Para exibir previsões usando esses artefatos, crie um Model com o contêiner pré-criado para previsão correspondente à versão do TensorFlow que você usou para treinamento.

TensorFlow para IA explicável

Se você quiser ver explicações de um Model que use um contêiner pré-criado do TensorFlow para exibir previsões, leia os requisitos adicionais para exportar um modelo do TensorFlow para o Vertex Explainable AI.

Ativar o agrupamento de solicitações do lado do servidor para o Tensorflow

Se você quiser ativar o envio de solicitações em lote para um Model que usa um contêiner predefinido do TensorFlow para exibir previsões, inclua config/batching_parameters_config no mesmo diretório do gcs do arquivo saved_model.pb. Para configurar o arquivo de configuração em lote, consulte a documentação oficial do Tensorflow.

PyTorch

É preciso empacotar os artefatos do modelo, incluindo um gerenciador padrão ou personalizado criando um arquivo com o arquivador de modelo do Torch. As imagens do PyTorch pré-criadas esperam que o arquivo seja nomeado como model.mar, portanto, defina o nome do modelo como "model".

Para informações sobre a otimização do uso de memória, a latência ou a capacidade de processamento de um modelo do PyTorch fornecido com o TorchServe, consulte o Guia de desempenho do PyTorch.

XGBoost

Se você usar o XGBoost para treinar um modelo, convém exportar o modelo treinado de uma destas três maneiras:

  • Use save_model de xgboost.Booster para exportar um arquivo chamado model.bst.
  • Use a biblioteca joblib para exportar um arquivo chamado model.joblib.
  • Use o módulo pickle do Python para exportar um arquivo chamado model.pkl.

O nome de arquivo do artefato de modelo precisa corresponder exatamente a uma dessas opções.

Estes exemplos com guias mostram como treinar e exportar um modelo de três maneiras:

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)

Para exibir previsões usando esse artefato, crie um Model com o contêiner pré-criado para previsão que corresponda à versão do XGBoost que você usou para treinamento.

scikit-learn

Se você usar scikit-learn para treinar um modelo, convém exportá-lo de duas maneiras:

  • Use a biblioteca joblib para exportar um arquivo chamado model.joblib.
  • Use o módulo pickle do Python para exportar um arquivo chamado model.pkl.

O nome de arquivo do artefato de modelo precisa corresponder exatamente a uma dessas opções. É possível exportar estimators scikit-learn ou pipelines do scikit-learn padrão.

Estes exemplos com guias mostram como treinar e exportar um modelo de duas maneiras:

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)

Para exibir previsões usando esse artefato, crie um Model com o contêiner pré-criado para previsão que corresponda à versão do scikit-learn que você usou para treinamento.

A seguir