Controlar experimentações e modelos de ML com o MLflow

Neste artigo, saiba como ativar o Controlo de MLflow para ligar o Azure Machine Learning como o back-end das experimentações do MLflow.

O MLflow é uma biblioteca open source para gerir o ciclo de vida das experimentações de machine learning. O Controlo de MLflow é um componente do MLflow que regista e controla as métricas da tarefa de preparação e os artefactos de modelo, independentemente do ambiente da experimentação, localmente no seu computador, num destino de computação remoto, numa máquina virtual ou num cluster do Azure Databricks.

Veja MLflow e Azure Machine Learning para todas as funcionalidades suportadas do MLflow e do Azure Machine Learning, incluindo suporte do Projeto MLflow (pré-visualização) e implementação de modelos.

Nota

As informações neste documento são principalmente para cientistas de dados e programadores que querem monitorizar o processo de preparação de modelos. Se for um administrador interessado em monitorizar a utilização de recursos e eventos do Azure Machine Learning, como quotas, tarefas de preparação concluídas ou implementações de modelos concluídas, veja Monitorizar o Azure Machine Learning.

Pré-requisitos

  • (Opcional) Instale e configure a CLI do Azure ML (v2) e certifique-se de que instala a extensão ml.
  • (Opcional) Instale e configure o SDK (v2) do Azure ML para Python.

Ligar à sua área de trabalho

Primeiro, vamos ligar à área de trabalho do Azure Machine Learning onde o modelo está registado.

O controlo já está configurado para si. As suas credenciais predefinidas também serão utilizadas ao trabalhar com o MLflow.

Definir o nome da experimentação

Todas as execuções de MLflow são registadas na experimentação ativa. Por predefinição, as execuções são registadas numa experimentação com o nome Default que é criada automaticamente para si. Pode configurar a experimentação onde está a ocorrer o controlo.

Dica

Ao submeter tarefas com a CLI v2 do Azure ML, pode definir o nome da experimentação com a propriedade experiment_name na definição YAML da tarefa. Não tem de o configurar no script de preparação. Veja YAML: nome a apresentar, nome da experimentação, descrição e etiquetas para obter detalhes.

Para configurar a experimentação em que pretende trabalhar, utilize o comando mlflow.set_experiment()MLflow .

experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)

Iniciar tarefa de preparação

Depois de definir o nome da experimentação do MLflow, pode iniciar a sua tarefa de preparação com start_run(). Em seguida, utilize log_metric() para ativar a API de registo do MLflow e começar a registar as métricas das tarefas de preparação.

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 registar métricas, parâmetros e artefactos numa execução com o MLflow, veja Como registar e ver métricas.

Controlar tarefas em execução no Azure Machine Learning

APLICA-SE A:Extensão v2 da CLI do Azure (atual)

As execuções remotas (tarefas) permitem-lhe preparar os seus modelos de uma forma mais robusta e repetitiva. Também podem tirar partido de cálculos mais poderosos, como clusters de Computação do Machine Learning. Veja O que são os destinos de computação no Azure Machine Learning? para saber mais sobre as diferentes opções de computação.

Ao submeter execuções com tarefas, o Azure Machine Learning configura automaticamente o MLflow para trabalhar com a área de trabalho na qual a tarefa está a ser executada. Isto significa que não é necessário configurar o URI de controlo do MLflow. Além disso, as experimentações são automaticamente nomeadas com base nos detalhes da tarefa.

Importante

Ao submeter tarefas de preparação para o Azure Machine Learning, não tem de configurar o URI de controlo do MLflow na sua lógica de preparação, uma vez que já está configurado para si.

Criar uma rotina de preparação

Primeiro, deve criar um src subdiretório e criar um ficheiro com o seu código de preparação num hello_world.py ficheiro no src subdiretório. Todo o seu código de preparação irá para o src subdiretório, incluindo train.py.

O código de preparação é retirado deste exemplo MLfLow no repositório de exemplo do Azure Machine Learning.

Copie este código para o ficheiro:

# 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()

Nota

Tenha em atenção que este exemplo não contém as instruções mlflow.start_run nem mlflow.set_experiment. Isto é feito automaticamente pelo Azure Machine Learning.

Submeter a tarefa

Utilize o Azure Machine Learning para submeter uma execução remota. Ao utilizar a CLI do Azure Machine Learning (v2), o URI de controlo do MLflow e o nome da experimentação são definidos automaticamente e direcionam o registo do MLflow para a área de trabalho. Saiba mais sobre o registo de experimentações do Azure Machine Learning com o MLflow

Crie um ficheiro YAML com a definição da tarefa num job.yml ficheiro. Este ficheiro deve ser criado fora do src diretório. Copie este código para o ficheiro:

$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
command: python hello-mlflow.py
code: src
environment: azureml:AzureML-sklearn-1.0-ubuntu20.04-py38-cpu@latest
compute: azureml:cpu-cluster

Abra o terminal e utilize o seguinte para submeter a tarefa.

az ml job create -f job.yml --web

Ver métricas e artefactos na área de trabalho

As métricas e artefactos do registo do MLflow são controlados na área de trabalho. Para vê-los em qualquer altura, navegue para a área de trabalho e localize a experimentação por nome na área de trabalho no estúdio do Azure Machine Learning. Em alternativa, execute o código abaixo.

Obtenha a métrica de execução com o MLflow get_run().

from mlflow.tracking import MlflowClient

# Use MlFlow to retrieve the job 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 ver os artefactos de uma execução, pode utilizar MlFlowClient.list_artifacts()

client.list_artifacts(run_id)

Para transferir um artefacto para o diretório atual, pode utilizar MLFlowClient.download_artifacts()

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

Para obter mais detalhes sobre como obter informações de experimentações e execuções no Azure Machine Learning com a vista do MLflow , veja Gerir experimentações e execuções com o MLflow.

Gerir modelos

Registe e controle os seus modelos com o registo do modelo do Azure Machine Learning, que suporta o registo de modelo do MLflow. Os modelos do Azure Machine Learning estão alinhados com o esquema do modelo do MLflow, facilitando a exportação e importação destes modelos em diferentes fluxos de trabalho. Os metadados relacionados com o MLflow, como o ID de execução, também são monitorizados com o modelo registado para rastreabilidade. Os utilizadores podem submeter tarefas de preparação, registar e implementar modelos produzidos a partir de execuções do MLflow.

Se quiser implementar e registar o modelo pronto para produção num único passo, veja Implementar e registar modelos do MLflow.

Para registar e ver um modelo a partir de uma tarefa, utilize os seguintes passos:

  1. Assim que uma tarefa estiver concluída, chame o register_model() método .

    # the model folder produced from a job 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. Veja o modelo registado na área de trabalho com estúdio do Azure Machine Learning.

    No exemplo seguinte, my-model o modelo registado tem metadados de controlo do MLflow etiquetados.

    register-mlflow-model

  3. Selecione o separador Artefactos para ver todos os ficheiros de modelo alinhados com o esquema do modelo MLflow (conda.yaml, MLmodel, model.pkl).

    model-schema

  4. Selecione MLmodel para ver o ficheiro MLmodel gerado pela tarefa.

    MLmodel-schema

Ficheiros de exemplo

Utilizar o MLflow (Jupyter Notebooks)

Limitações

Alguns métodos disponíveis na API do MLflow podem não estar disponíveis quando ligados ao Azure Machine Learning. Para obter detalhes sobre as operações suportadas e não suportadas, leia Matriz de suporte para execuções e experimentações de consultas.

Passos seguintes