Modelos de log com MLflow
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.