Compartilhar via


Acompanhar modelos de ML com o MLflow e o Azure Machine Learning

APLICA-SE A:SDK do Python do Azure MLv1

Neste artigo, saiba como habilitar o Acompanhamento do MLflow para conectar o Azure Machine Learning como o back-end dos experimentos do MLflow.

O MLFlow é uma biblioteca de open-source para gerenciar o ciclo de vida dos experimentos de aprendizado de máquina. O Acompanhamento do MLFlow é um componente do MLflow que registra e acompanha as métricas de execução de treinamento e os artefatos de modelo, independentemente de o ambiente do seu experimento ser localmente no computador, em um destino de computação remoto, em uma máquina virtual ou em um cluster do Azure Databricks.

Consulte o MLflow e Azure Machine Learning para todas as funcionalidades de MLflow e de Azure Machine Learning com suporte, incluindo suporte a MLflow Project (visualização) e implantação de modelo.

Dica

Se você quiser acompanhar os experimentos em execução no Azure Databricks ou no Azure Synapse Analytics, confira os artigos dedicados Acompanhar experimentos do Azure Databricks ML com o MLflow e o Azure Machine Learning ou Acompanhar experimentos do Azure Synapse Analytics ML com MLflow e o Azure Machine Learning.

Observação

Este documento oferece informações principalmente para cientistas de dados e desenvolvedores que querem monitorar o processo de treinamento de modelo. Se você for um administrador interessado em monitorar o uso de recursos e os eventos do Azure Machine Learning, como cotas, trabalhos de treinamento concluídos ou implantações de modelo concluídas, confira Monitoramento do Azure Machine Learning.

Pré-requisitos

Acompanhar execuções no computador local ou na computação remota

O acompanhamento usando o MLflow com o Azure Machine Learning permite armazenar as métricas registradas e os artefatos das execuções em computador local no Workspace do Azure Machine Learning.

Configurar o ambiente de acompanhamento

Para acompanhar uma execução que não ocorre na Computação do Azure Machine Learning (a qual chamaremos de "computação local"), você precisa apontar a computação local para o URI de Acompanhamento do MLflow do Azure Machine Learning.

Observação

Ao executar na Computação do Azure (Azure Notebooks, Jupyter Notebooks hospedados em Instâncias de Computação do Azure ou Clusters de Computação), você não precisa configurar o URI de acompanhamento. Ele é configurado automaticamente para você.

APLICA-SE A:SDK do Python do Azure MLv1

Você pode obter o URI de acompanhamento do MLflow do Azure Machine Learning usando o SDK v1 do Azure Machine Learning para Python. Verifique se você tem a biblioteca azureml-sdk instalada no cluster que está usando. O exemplo a seguir obtém o URI de acompanhamento do MLflow exclusivo associado ao seu workspace. Em seguida, o método set_tracking_uri() aponta o URI de acompanhamento de MLflow para esse URI.

  1. Usando o arquivo de configuração do workspace:

    from azureml.core import Workspace
    import mlflow
    
    ws = Workspace.from_config()
    mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
    

    Dica

    Você pode baixar o arquivo de configuração do workspace desta forma:

    1. Link para o estúdio do Azure Machine Learning
    2. Clique no canto superior direito da página –> Baixar o arquivo de configuração.
    3. Salve o arquivo config.json no mesmo diretório no qual você está trabalhando.
  2. Usando a ID da assinatura, o nome do grupo de recursos e o nome do workspace:

    from azureml.core import Workspace
    import mlflow
    
    #Enter details of your Azure Machine Learning workspace
    subscription_id = '<SUBSCRIPTION_ID>'
    resource_group = '<RESOURCE_GROUP>'
    workspace_name = '<AZUREML_WORKSPACE_NAME>'
    
    ws = Workspace.get(name=workspace_name,
                       subscription_id=subscription_id,
                       resource_group=resource_group)
    
    mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
    

Definir o nome do experimento

Todas as execuções do MLflow são registradas no experimento ativo. Por padrão, as execuções são registradas em um experimento chamado Default, que é criado automaticamente para você. Para configurar o experimento em que você deseja trabalhar, use o comando do MLflow mlflow.set_experiment().

experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)

Dica

Ao enviar trabalhos usando o SDK do Azure Machine Learning, você pode definir o nome do experimento usando a propriedade experiment_name durante o envio. Você não precisa configurá-lo no script de treinamento.

Começar a executar o treinamento

Defina o nome do experimento do MLflow e inicie a execução de treinamento com start_run(). Use log_metric() para ativar a API de registro do MLflow e começar a registrar as métricas de execução de treinamento.

import os
from random import random

with mlflow.start_run() as mlflow_run:
    mlflow.log_param("hello_param", "world")
    mlflow.log_metric("hello_metric", random())
    os.system(f"echo 'hello world' > helloworld.txt")
    mlflow.log_artifact("helloworld.txt")

Para obter detalhes sobre como registrar métricas, parâmetros e artefatos em uma execução usando o MLflow, veja Como registrar e exibir métricas.

Acompanhar execuções no Azure Machine Learning

APLICA-SE A:azureml do SDK do Python v1

As execuções (trabalhos) remotas permitem treinar os modelos de forma mais robusta e repetitiva. Elas também podem aproveitar cálculos mais avançados, como clusters de Computação do Machine Learning. Confira Usar os destinos de computação para treinamento de modelo para saber mais sobre diferentes opções de computação.

Ao enviar execuções, o Azure Machine Learning configura automaticamente o MLflow para trabalhar com o workspace em que a execução ocorrendo. Isso significa que não é necessário configurar o URI de acompanhamento do MLflow. Além disso, os experimentos são nomeados automaticamente de acordo com os detalhes do envio do experimento.

Importante

Ao enviar trabalhos de treinamento para o Azure Machine Learning, você não precisa configurar o URI de acompanhamento do MLflow na lógica de treinamento, pois ele já foi configurado para você. Você também não precisa configurar o nome do experimento na rotina de treinamento.

Criação de uma rotina de treinamento

Primeiro, crie um subdiretório src e um arquivo com o código de treinamento em um arquivo train.py no subdiretório src. Todo o seu código de treinamento entrará no subdiretório src, incluindo train.py.

O código de treinamento foi obtido deste exemplo do MLfLow no repositório de exemplos do Azure Machine Learning.

Copie este código para o arquivo:

# imports
import os
import mlflow

from random import random

# define functions
def main():
    mlflow.log_param("hello_param", "world")
    mlflow.log_metric("hello_metric", random())
    os.system(f"echo 'hello world' > helloworld.txt")
    mlflow.log_artifact("helloworld.txt")


# run functions
if __name__ == "__main__":
    # run main function
    main()

Configuração do experimento

Você precisará usar o Python para enviar o experimento para o Azure Machine Learning. Em um notebook ou arquivo Python, configure o ambiente de execução de computação e treinamento com a classe Environment.

from azureml.core import Environment
from azureml.core.conda_dependencies import CondaDependencies

env = Environment(name="mlflow-env")

# Specify conda dependencies with scikit-learn and temporary pointers to mlflow extensions
cd = CondaDependencies.create(
    conda_packages=["scikit-learn", "matplotlib"],
    pip_packages=["azureml-mlflow", "pandas", "numpy"]
    )

env.python.conda_dependencies = cd

Crie o ScriptRunConfig usando a computação remota como o destino de computação.

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory="src",
                      script=training_script,
                      compute_target="<COMPUTE_NAME>",
                      environment=env)

Com essa configuração de computação e execução de treinamento, use o método Experiment.submit() para enviar uma execução. Esse método define automaticamente o URI de acompanhamento do MLflow e direciona o registro do MLflow para o espaço de trabalho.

from azureml.core import Experiment
from azureml.core import Workspace
ws = Workspace.from_config()

experiment_name = "experiment_with_mlflow"
exp = Experiment(workspace=ws, name=experiment_name)

run = exp.submit(src)

Exibir métricas e artefatos no espaço de trabalho

As métricas e os artefatos no registro do MLflow são mantidos no espaço de trabalho. Para exibi-los a qualquer momento, navegue até o espaço de trabalho e localize o experimento por nome no espaço de trabalho em Azure Machine Learning Studio. Ou execute o código abaixo.

Recuperar a métrica de execução usando o MLflow get_run ().

from mlflow.tracking import MlflowClient

# Use MlFlow to retrieve the run that was just completed
client = MlflowClient()
run_id = mlflow_run.info.run_id
finished_mlflow_run = MlflowClient().get_run(run_id)

metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params

print(metrics,tags,params)

Para exibir os artefatos de uma execução, você pode usar MlFlowClient.list_artifacts()

client.list_artifacts(run_id)

Para baixar um artefato para o diretório atual, você pode usar MLFlowClient.download_artifacts()

client.download_artifacts(run_id, "helloworld.txt", ".")

Para obter mais detalhes sobre como recuperar informações de experimentos e execuções no Azure Machine Learning usando o MLflow, veja Gerenciar experimentos e execuções com o MLflow.

Comparar e consultar

Compare e consulte todas as execuções de MLflow em seu espaço de trabalho Azure Machine Learning com o código a seguir. Saiba mais sobre como consultar execuções com o MLflow.

from mlflow.entities import ViewType

all_experiments = [exp.experiment_id for exp in MlflowClient().list_experiments()]
query = "metrics.hello_metric > 0"
runs = mlflow.search_runs(experiment_ids=all_experiments, filter_string=query, run_view_type=ViewType.ALL)

runs.head(10)

Log automático

Com o Azure Machine Learning e o MLflow, os usuários podem registrar em log métricas, parâmetros e artefatos de modelo automaticamente ao treinar um modelo. Há suporte para uma variedade de bibliotecas populares de machine learning.

Para habilitar o log automático, insira o seguinte código antes do código de treinamento:

mlflow.autolog()

Saiba mais sobre o log automático com o MLflow.

Gerenciar modelos

Registre e acompanhe os seus modelos com o registro de modelo do Azure Machine Learning que dá suporte ao registro de modelo do MLflow. Os modelos do Azure Machine Learning são alinhados com o esquema de modelo do MLflow, facilitando a exportação e importação desses modelos em diferentes fluxos de trabalho. Os metadados relacionados ao MLflow, como a ID de execução, também são marcados com o modelo registrado para fins de rastreabilidade. Os usuários podem enviar execuções de treinamento, bem como registrar e implantar os modelos produzidos por meio de execuções do MLflow.

Se você quiser implantar e registrar o seu modelo pronto para produção em uma etapa, confira Implantar e registrar modelos do MLflow.

Para registrar e exibir um modelo de uma execução, use as seguintes etapas:

  1. Quando a execução for concluída, chame o método register_model().

    # the model folder produced from a run is registered. This includes the MLmodel file, model.pkl and the conda.yaml.
    model_path = "model"
    model_uri = 'runs:/{}/{}'.format(run_id, model_path) 
    mlflow.register_model(model_uri,"registered_model_name")
    
  2. Exiba o modelo registrado no seu workspace com o estúdio do Azure Machine Learning.

    No exemplo a seguir, o modelo registrado my-model tem metadados de acompanhamento do MLflow marcados.

    register-mlflow-model

  3. Selecione a guia Artefatos para ver todos os arquivos de modelo que se alinham com o esquema de modelo do MLflow (conda.yaml, MLmodel, model.pkl).

    model-schema

  4. Selecione MLmodel para ver o arquivo MLmodel gerado pela execução.

    MLmodel-schema

Limpar recursos

Se você não planeja usar as métricas registradas e os artefatos em seu workspace, a capacidade de excluí-los individualmente não estará disponível no momento. Em vez disso, exclua o grupo de recursos que contém a conta de armazenamento e o workspace, para que você não incorra nenhum encargo:

  1. No portal do Azure, selecione Grupos de recursos no canto esquerdo.

    Exclusão no portal do Azure

  2. Selecione o grupo de recursos criado na lista.

  3. Selecione Excluir grupo de recursos.

  4. Insira o nome do grupo de recursos. Em seguida, selecione Excluir.

Blocos de anotações de exemplo

O MLflow com notebooks do Azure Machine Learning demonstra e expande os conceitos apresentados neste artigo. Consulte também o repositório orientado pela comunidade, AzureML-Examples.

Próximas etapas