Registrar modelos com o MLflow
Para treinar um modelo de machine learning, você pode optar por usar uma estrutura código aberto que melhor atenda às suas necessidades. Após o treinamento, implante seu modelo. O MLflow é uma plataforma código aberto que simplifica a implantação de machine learning, independentemente do tipo de modelo treinado e da estrutura usada.
O MLflow é integrado ao Azure Machine Learning. A integração com o Azure Machine Learning permite implantar facilmente modelos que você treina e acompanha com o Mlflow. Por exemplo, quando você tem um modelo do MLflow, é possível optar pela implantação sem código no Azure Machine Learning.
Observação
Atualmente, alguns tipos de modelos não são compatíveis com o Azure Machine Learning e o MLflow. Nesse caso, você pode registrar um modelo custom
. Saiba mais sobre como trabalhar com modelos (personalizados) no Azure Machine Learning.
Por que usar o MLflow?
Ao treinar um modelo de machine learning com o Azure Machine Learning, você pode usar o MLflow para registrar o modelo. O MLflow padroniza o empacotamento de modelos, o que significa que um modelo do MLflow pode ser facilmente importado ou exportado em diferentes fluxos de trabalho.
Por exemplo, imagine que você treinou um modelo em um workspace do Azure Machine Learning usado para desenvolvimento. Se quiser exportar esse modelo para outro workspace usado para produção, você poderá usar um modelo do MLflow para fazer isso com facilidade.
Ao treinar e registrar um modelo, você armazenará todos os artefatos relevantes em um diretório. Quando você registra o modelo, um arquivo MLmodel
é criado naquele diretório. O arquivo MLmodel
contém metadados do modelo, o que permite a rastreabilidade do modelo.
Você pode registrar modelos com o MLflow habilitando o registro automático ou usando o registro em log personalizado.
Observação
O MLflow permite registrar um modelo como um artefato ou como um modelo. Quando você registra um modelo como um artefato, ele é tratado como um arquivo. Ao registrar um modelo como modelo, você está adicionando informações ao modelo registrado que permite usar 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 em log para registrar um modelo
Ao treinar um modelo, você pode incluir mlflow.autolog()
para habilitar o registro automático em log. O registro automático em log do MLflow registra automaticamente parâmetros, métricas, artefatos e o modelo que você treina. O modelo é registrado quando o método .fit()
é chamado. A estrutura usada para treinar seu modelo é identificada e incluída como a variante do modelo.
Opcionalmente, você pode especificar por qual variante deseja que seu modelo seja identificado usando mlflow.<flavor>.autolog()
. Algumas variantes comuns que podem ser usadas com o registro automático em log são:
- Keras:
mlflow.keras.autolog()
- Scikit-learn:
mlflow.sklearn.autolog()
- LightGBM:
mlflow.lightgbm.autolog()
- XGBoost:
mlflow.xgboost.autolog()
- TensorFlow:
mlflow.tensorflow.autolog()
- PyTorch:
mlflow.pytorch.autolog()
- ONNX:
mlflow.onnx.autolog()
Dica
Explore a lista completa das variantes de modelo internos do MLflow.
Quando você usa o registro automático, é criada uma pasta de saída que contém todos os artefatos de modelo necessários, incluindo o arquivo MLmodel
que faz referência a esses arquivos e inclui os metadados do modelo.
Registrar um modelo manualmente
Quando quiser ter mais controle sobre como o modelo é registrado, você pode usar autolog
(para métricas, parâmetros e outros artefatos) e definir log_models=False
. Quando você define o parâmetro log_models
como falso, 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 tempo de 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 arquivo MLmodel
.
Personalizar a assinatura
A assinatura do modelo define o esquema das entradas e saídas do modelo. A assinatura é armazenada em formato JSON no arquivo MLmodel
, juntamente com outros metadados do modelo.
A assinatura do modelo pode ser inferida por meio de conjuntos de dados ou criada à mão.
Para registrar um modelo com uma assinatura inferida do seu conjunto de dados de treinamento e das previsões do modelo, você pode usar infer_signature()
. O seguinte exemplo usa o conjunto de dados de treinamento para inferir o esquema das entradas, e usa 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)
Observação
Saiba mais sobre o registro em log de modelos do MLflow no Azure Machine Learning e a assinatura de modelo do MLflow.