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.
Dica
Se quiser controlar as experimentações em execução no Azure Databricks ou no Azure Synapse Analytics, veja os artigos dedicados Track Azure Databricks ML experiments with MLflow and Azure Machine Learning or Track Azure Synapse Analytics ML experiments with MLflow and Azure Machine Learning (Monitorizar experimentações de ML do Azure Databricks com o MLflow e o Azure Machine Learning) ou Track Azure Synapse Analytics ML experiments with MLflow and Azure Machine Learning (Monitorizar experimentações ML do Azure Databricks com o MLflow e o Azure Machine Learning) ou Track Azure Synapse Analytics ML experiments with MLflow and Azure Machine Learning (Monitorizar experimentações de ML do Azure Databricks com o MLflow e o Azure Machine Learning) ou Track Azure Synapse Analytics ML experiments with MLflow and
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
Instale o pacote
mlflow
do SDK do Mlflow e o plug-in do Azure Machine Learning para MLflowazureml-mlflow
.pip install mlflow azureml-mlflow
Dica
Pode utilizar o pacote
mlflow-skinny
, que é um pacote MLflow leve sem dependências de armazenamento, servidor, IU ou ciência de dados do SQL. É recomendado para os utilizadores que precisam principalmente das capacidades de controlo e registo sem importar o conjunto completo de funcionalidades do MLflow, incluindo implementações.Se estiver a efetuar o controlo remoto (a controlar experimentações em execução fora do Azure Machine Learning), configure o MLflow para o URI de controlo da área de trabalho do Azure Machine Learning, conforme explicado em Configurar o MLflow para o Azure Machine Learning.
- (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:
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")
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.Selecione o separador Artefactos para ver todos os ficheiros de modelo alinhados com o esquema do modelo MLflow (conda.yaml, MLmodel, model.pkl).
Selecione MLmodel para ver o ficheiro MLmodel gerado pela tarefa.
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.