Modelos de log com MLflow

Concluído

Para treinar um modelo de aprendizado de máquina, você pode optar por usar uma estrutura de código aberto que melhor atenda às suas necessidades. Após o treinamento, você deseja implantar seu modelo. O MLflow é uma plataforma de código aberto que simplifica a implantação de aprendizado de máquina, independentemente do tipo de modelo treinado e da estrutura usada.

O MLflow está integrado com o Azure Machine Learning. A integração com o Azure Machine Learning permite que você implante facilmente modelos que você treina e rastreia com o Mlflow. Por exemplo, quando você tem um modelo MLflow, pode optar pela implantação sem código no Aprendizado de Máquina do Azure.

Nota

Alguns tipos de modelos atualmente não são suportados pelo Azure Machine Learning e MLflow. Nesse caso, pode registar um custom modelo. Saiba mais sobre como trabalhar com modelos (personalizados) no Azure Machine Learning.

Porquê usar o MLflow?

Ao treinar um modelo de aprendizado de máquina com o Azure Machine Learning, você pode usar o MLflow para registrar seu modelo. O MLflow padroniza o empacotamento de modelos, o que significa que um modelo MLflow pode ser facilmente importado ou exportado em diferentes fluxos de trabalho.

Por exemplo, imagine treinar um modelo em um espaço de trabalho do Azure Machine Learning usado para desenvolvimento. Se quiser exportar o modelo para outro espaço de trabalho usado para produção, você pode usar um modelo MLflow para fazer isso facilmente.

Ao treinar e registrar um modelo, você armazena todos os artefatos relevantes em um diretório. Quando você registra o modelo, um MLmodel arquivo é criado nesse diretório. O MLmodel arquivo contém os metadados do modelo, o que permite a rastreabilidade do modelo.

Você pode registrar modelos com MLflow habilitando o registro automático ou usando o log personalizado.

Nota

O MLflow permite registrar um modelo como um artefato ou como um modelo. Quando você registra um modelo como um artefato, o modelo é tratado como um arquivo. Ao registrar um modelo como modelo, você está adicionando informações ao modelo registrado que permitem que você use o modelo diretamente em pipelines ou implantações. Saiba mais sobre a diferença entre um artefato e um modelo

Usar o registro automático para registrar um modelo

Ao treinar um modelo, você pode incluir mlflow.autolog() para habilitar o registro automático. O registro automático do MLflow registra automaticamente parâmetros, métricas, artefatos e o modelo que você treina. O modelo é registrado quando o .fit() método é chamado. A estrutura que você usa para treinar seu modelo é identificada e incluída como o sabor do seu modelo.

Opcionalmente, você pode especificar qual sabor deseja que seu modelo seja identificado usando mlflow.<flavor>.autolog(). Alguns sabores comuns que você pode usar com o registro automático são:

  • Keras: mlflow.keras.autolog()
  • Scikit-aprender: mlflow.sklearn.autolog()
  • LuzGBM: mlflow.lightgbm.autolog()
  • XGBoost: mlflow.xgboost.autolog()
  • TensorFlow: mlflow.tensorflow.autolog()
  • PyTorch: mlflow.pytorch.autolog()
  • ONNX: mlflow.onnx.autolog()

Gorjeta

Explore a lista completa dos sabores de modelos integrados do MLflow.

Quando você usa o registro automático, uma pasta de saída é criada que inclui todos os artefatos de modelo necessários, incluindo o arquivo que faz referência a MLmodel esses arquivos e inclui os metadados do modelo.

Registrar manualmente um modelo

Quando quiser ter mais controle sobre como o modelo é registrado, você pode usar autolog (para seus parâmetros, métricas e outros artefatos) e definir log_models=False. Quando você define o log_models parâmetro como false, o MLflow não registra automaticamente o modelo e você pode adicioná-lo manualmente.

O registro em log do modelo permite que você implante facilmente o modelo. Para especificar como o modelo deve se comportar no momento da inferência, você pode personalizar as entradas e saídas esperadas do modelo. Os esquemas das entradas e saídas esperadas são definidos como a assinatura no MLmodel arquivo.

Personalizar a assinatura

A assinatura do modelo define o esquema das entradas e saídas do modelo. A assinatura é armazenada no formato JSON no MLmodel arquivo, juntamente com outros metadados do modelo.

A assinatura do modelo pode ser inferida a partir de conjuntos de dados ou criada manualmente manualmente.

Para registrar um modelo com uma assinatura que é inferida do conjunto de dados de treinamento e das previsões do modelo, você pode usar infer_signature()o . Por exemplo, o exemplo a seguir usa o conjunto de dados de treinamento para inferir o esquema das entradas e as previsões do modelo para inferir o esquema da saída:

import pandas as pd
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
import mlflow
import mlflow.sklearn
from mlflow.models.signature import infer_signature

iris = datasets.load_iris()
iris_train = pd.DataFrame(iris.data, columns=iris.feature_names)
clf = RandomForestClassifier(max_depth=7, random_state=0)
clf.fit(iris_train, iris.target)

# Infer the signature from the training dataset and model's predictions
signature = infer_signature(iris_train, clf.predict(iris_train))

# Log the scikit-learn model with the custom signature
mlflow.sklearn.log_model(clf, "iris_rf", signature=signature)

Como alternativa, você pode criar a assinatura manualmente:

from mlflow.models.signature import ModelSignature
from mlflow.types.schema import Schema, ColSpec

# Define the schema for the input data
input_schema = Schema([
  ColSpec("double", "sepal length (cm)"),
  ColSpec("double", "sepal width (cm)"),
  ColSpec("double", "petal length (cm)"),
  ColSpec("double", "petal width (cm)"),
])

# Define the schema for the output data
output_schema = Schema([ColSpec("long")])

# Create the signature object
signature = ModelSignature(inputs=input_schema, outputs=output_schema)

Nota

Saiba mais sobre como registrar modelos MLflow no Azure Machine Learning e na assinatura de modelo do MLflow.