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
Instale o pacote
mlflow
.- Você pode usar o MLflow Skinny, que é um pacote do MLflow leve sem dependências de servidor, interface do usuário, ciência de dados ou armazenamento do SQL. Isso é recomendado para usuários que precisam principalmente das funcionalidades de acompanhamento e de registro em log sem importar o conjunto completo de recursos do MLflow, incluindo as implantações.
Instale o pacote
azureml-mlflow
.Instale e configure a CLI do Azure Machine Learning (v1) e instale a extensão do ML.
Importante
Alguns comandos da CLI do Azure neste artigo usam a extensão
azure-cli-ml
ou v1 do Azure Machine Learning. O suporte à extensão v1 terminará em 30 de setembro de 2025. Você poderá instalar e usar a extensão v1 até essa data.Recomendamos que você faça a transição para a extensão
ml
ou v2, antes de 30 de setembro de 2025. Para obter mais informações sobre a extensão v2, confira Extensão da CLI do Azure ML e SDK do Python v2.Instale e configure o SDK do Azure Machine Learning para Python.
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ê.
- Como usar o SDK do Azure Machine Learning
- Usando uma variável de ambiente
- Criando o URI de acompanhamento do MLflow
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.
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:
- Link para o estúdio do Azure Machine Learning
- Clique no canto superior direito da página –> Baixar o arquivo de configuração.
- Salve o arquivo
config.json
no mesmo diretório no qual você está trabalhando.
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:
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")
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.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).
Selecione MLmodel para ver o arquivo MLmodel gerado pela execução.
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:
No portal do Azure, selecione Grupos de recursos no canto esquerdo.
Selecione o grupo de recursos criado na lista.
Selecione Excluir grupo de recursos.
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
- Implantar modelos com o MLflow.
- Monitore os modelos de produção para descompasso de dados.
- Acompanhar as execuções do Azure Databricks com o MLflow.
- Gerenciar os modelos.