Migrar o log do SDK v1 para o SDK v2
O Azure Machine Learning utiliza o MLflow Tracking para registo de métricas e armazenamento de artefactos para as suas experiências, quer tenha criado as experiências através do SDK Python do Azure Machine Learning, da CLI do Azure Machine Learning ou do estúdio Azure Machine Learning. Recomendamos o uso do MLflow para rastrear experimentos.
Se você estiver migrando do SDK v1 para o SDK v2, use as informações desta seção para entender os equivalentes MLflow das APIs de log do SDK v1.
Porquê o MLflow?
O MLflow, com mais de 13 milhões de downloads mensais, tornou-se a plataforma padrão para MLOps de ponta a ponta, permitindo que equipes de todos os tamanhos rastreiem, compartilhem, empacotem e implantem qualquer modelo para inferência em lote ou em tempo real. O Azure Machine Learning integra-se com o MLflow, o que permite que o seu código de formação obtenha uma verdadeira portabilidade e uma integração perfeita com outras plataformas, uma vez que não contém quaisquer instruções específicas do Azure Machine Learning.
Prepare-se para migrar para o MLflow
Para usar o rastreamento MLflow, você precisa instalar o pacote mlflow
SDK do Mlflow e o plug-in do Azure Machine Learning para MLflow azureml-mlflow
. Todos os ambientes do Azure Machine Learning já têm esses pacotes disponíveis para você, mas você precisa incluí-los ao criar seu próprio ambiente.
pip install mlflow azureml-mlflow
Ligar à sua área de trabalho
O Azure Machine Learning permite que os usuários realizem o acompanhamento em trabalhos de treinamento em execução em seu espaço de trabalho ou remotamente (rastreando experimentos executados fora do Azure Machine Learning). Se estiver executando o rastreamento remoto, você precisará indicar o espaço de trabalho ao qual deseja conectar o MLflow.
Você já está conectado ao seu espaço de trabalho ao executar na computação do Azure Machine Learning.
Experiências e execuções
SDK v1
from azureml.core import Experiment
# create an Azure Machine Learning experiment and start a run
experiment = Experiment(ws, "create-experiment-sdk-v1")
azureml_run = experiment.start_logging()
SDK v2 com MLflow
# Set the MLflow experiment and start a run
mlflow.set_experiment("logging-with-mlflow")
mlflow_run = mlflow.start_run()
Comparação da API de registro em log
Registrar uma métrica inteira ou flutuante
SDK v1
azureml_run.log("sample_int_metric", 1)
SDK v2 com MLflow
mlflow.log_metric("sample_int_metric", 1)
Registrar uma métrica booleana
SDK v1
azureml_run.log("sample_boolean_metric", True)
SDK v2 com MLflow
mlflow.log_metric("sample_boolean_metric", 1)
Registrar uma métrica de cadeia de caracteres
SDK v1
azureml_run.log("sample_string_metric", "a_metric")
SDK v2 com MLflow
mlflow.log_text("sample_string_text", "string.txt")
- A cadeia de caracteres é registrada como um artefato, não como uma métrica. No estúdio do Azure Machine Learning, o valor é exibido na guia Saídas + logs .
Registrar uma imagem em um arquivo PNG ou JPEG
SDK v1
azureml_run.log_image("sample_image", path="Azure.png")
SDK v2 com MLflow
mlflow.log_artifact("Azure.png")
A imagem é registrada como um artefato e aparece na guia Imagens no Estúdio de Aprendizado de Máquina do Azure.
Registrar um matplotlib.pyplot
SDK v1
import matplotlib.pyplot as plt
plt.plot([1, 2, 3])
azureml_run.log_image("sample_pyplot", plot=plt)
SDK v2 com MLflow
import matplotlib.pyplot as plt
plt.plot([1, 2, 3])
fig, ax = plt.subplots()
ax.plot([0, 1], [2, 3])
mlflow.log_figure(fig, "sample_pyplot.png")
- A imagem é registrada como um artefato e aparece na guia Imagens no Estúdio de Aprendizado de Máquina do Azure.
Registrar uma lista de métricas
SDK v1
list_to_log = [1, 2, 3, 2, 1, 2, 3, 2, 1]
azureml_run.log_list('sample_list', list_to_log)
SDK v2 com MLflow
list_to_log = [1, 2, 3, 2, 1, 2, 3, 2, 1]
from mlflow.entities import Metric
from mlflow.tracking import MlflowClient
import time
metrics = [Metric(key="sample_list", value=val, timestamp=int(time.time() * 1000), step=0) for val in list_to_log]
MlflowClient().log_batch(mlflow_run.info.run_id, metrics=metrics)
- As métricas aparecem na guia métricas no estúdio do Azure Machine Learning.
- Não há suporte para valores de texto.
Registrar uma linha de métricas
SDK v1
azureml_run.log_row("sample_table", col1=5, col2=10)
SDK v2 com MLflow
metrics = {"sample_table.col1": 5, "sample_table.col2": 10}
mlflow.log_metrics(metrics)
- As métricas não são renderizadas como uma tabela no estúdio do Azure Machine Learning.
- Não há suporte para valores de texto.
- Registrado como um artefato, não como uma métrica.
Registar uma tabela
SDK v1
table = {
"col1" : [1, 2, 3],
"col2" : [4, 5, 6]
}
azureml_run.log_table("table", table)
SDK v2 com MLflow
# Add a metric for each column prefixed by metric name. Similar to log_row
row1 = {"table.col1": 5, "table.col2": 10}
# To be done for each row in the table
mlflow.log_metrics(row1)
# Using mlflow.log_artifact
import json
with open("table.json", 'w') as f:
json.dump(table, f)
mlflow.log_artifact("table.json")
- Registra métricas para cada coluna.
- As métricas não são renderizadas como uma tabela no estúdio do Azure Machine Learning.
- Não há suporte para valores de texto.
- Registrado como um artefato, não como uma métrica.
Registrar uma tabela de precisão
SDK v1
ACCURACY_TABLE = '{"schema_type": "accuracy_table", "schema_version": "v1", "data": {"probability_tables": ' +\
'[[[114311, 385689, 0, 0], [0, 0, 385689, 114311]], [[67998, 432002, 0, 0], [0, 0, ' + \
'432002, 67998]]], "percentile_tables": [[[114311, 385689, 0, 0], [1, 0, 385689, ' + \
'114310]], [[67998, 432002, 0, 0], [1, 0, 432002, 67997]]], "class_labels": ["0", "1"], ' + \
'"probability_thresholds": [0.52], "percentile_thresholds": [0.09]}}'
azureml_run.log_accuracy_table('v1_accuracy_table', ACCURACY_TABLE)
SDK v2 com MLflow
ACCURACY_TABLE = '{"schema_type": "accuracy_table", "schema_version": "v1", "data": {"probability_tables": ' +\
'[[[114311, 385689, 0, 0], [0, 0, 385689, 114311]], [[67998, 432002, 0, 0], [0, 0, ' + \
'432002, 67998]]], "percentile_tables": [[[114311, 385689, 0, 0], [1, 0, 385689, ' + \
'114310]], [[67998, 432002, 0, 0], [1, 0, 432002, 67997]]], "class_labels": ["0", "1"], ' + \
'"probability_thresholds": [0.52], "percentile_thresholds": [0.09]}}'
mlflow.log_dict(ACCURACY_TABLE, 'mlflow_accuracy_table.json')
- As métricas não são renderizadas como uma tabela de precisão no estúdio do Azure Machine Learning.
- Registrado como um artefato, não como uma métrica.
- O
mlflow.log_dict
método é experimental.
Registar uma matriz de confusão
SDK v1
CONF_MATRIX = '{"schema_type": "confusion_matrix", "schema_version": "v1", "data": {"class_labels": ' + \
'["0", "1", "2", "3"], "matrix": [[3, 0, 1, 0], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]}}'
azureml_run.log_confusion_matrix('v1_confusion_matrix', json.loads(CONF_MATRIX))
SDK v2 com MLflow
CONF_MATRIX = '{"schema_type": "confusion_matrix", "schema_version": "v1", "data": {"class_labels": ' + \
'["0", "1", "2", "3"], "matrix": [[3, 0, 1, 0], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]}}'
mlflow.log_dict(CONF_MATRIX, 'mlflow_confusion_matrix.json')
- As métricas não são renderizadas como uma matriz de confusão no estúdio de Aprendizado de Máquina do Azure.
- Registrado como um artefato, não como uma métrica.
- O
mlflow.log_dict
método é experimental.
Previsões de log
SDK v1
PREDICTIONS = '{"schema_type": "predictions", "schema_version": "v1", "data": {"bin_averages": [0.25,' + \
' 0.75], "bin_errors": [0.013, 0.042], "bin_counts": [56, 34], "bin_edges": [0.0, 0.5, 1.0]}}'
azureml_run.log_predictions('test_predictions', json.loads(PREDICTIONS))
SDK v2 com MLflow
PREDICTIONS = '{"schema_type": "predictions", "schema_version": "v1", "data": {"bin_averages": [0.25,' + \
' 0.75], "bin_errors": [0.013, 0.042], "bin_counts": [56, 34], "bin_edges": [0.0, 0.5, 1.0]}}'
mlflow.log_dict(PREDICTIONS, 'mlflow_predictions.json')
- As métricas não são renderizadas como uma matriz de confusão no estúdio de Aprendizado de Máquina do Azure.
- Registrado como um artefato, não como uma métrica.
- O
mlflow.log_dict
método é experimental.
Log de resíduos
SDK v1
RESIDUALS = '{"schema_type": "residuals", "schema_version": "v1", "data": {"bin_edges": [100, 200, 300], ' + \
'"bin_counts": [0.88, 20, 30, 50.99]}}'
azureml_run.log_residuals('test_residuals', json.loads(RESIDUALS))
SDK v2 com MLflow
RESIDUALS = '{"schema_type": "residuals", "schema_version": "v1", "data": {"bin_edges": [100, 200, 300], ' + \
'"bin_counts": [0.88, 20, 30, 50.99]}}'
mlflow.log_dict(RESIDUALS, 'mlflow_residuals.json')
- As métricas não são renderizadas como uma matriz de confusão no estúdio de Aprendizado de Máquina do Azure.
- Registrado como um artefato, não como uma métrica.
- O
mlflow.log_dict
método é experimental.
Exibir informações e dados de execução
Você pode acessar informações de execução usando as propriedades data
e info
do objeto MLflow run (mlflow.entities.Run ).
Gorjeta
Experimentos e execuções de informações de rastreamento no Aprendizado de Máquina do Azure podem ser consultados usando o MLflow, que fornece uma API de pesquisa abrangente para consultar e pesquisar experimentos, e é executado facilmente e comparar resultados rapidamente. Para obter mais informações sobre todos os recursos do MLflow nessa dimensão, consulte Query & compare experimentos e execuções com MLflow
O exemplo a seguir mostra como recuperar uma execução concluída:
from mlflow.tracking import MlflowClient
# Use MlFlow to retrieve the run that was just completed
client = MlflowClient()
finished_mlflow_run = MlflowClient().get_run("<RUN_ID>")
O exemplo a seguir mostra como exibir o metrics
, tags
e params
:
metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params
Nota
O metrics
terá apenas o valor registrado mais recentemente para uma determinada métrica. Por exemplo, se você registrar em ordem um valor de 1
, então 2
, 3
e finalmente 4
para uma métrica chamada sample_metric
, somente 4
estará presente no metrics
dicionário. Para obter todas as métricas registradas para uma métrica nomeada específica, use MlFlowClient.get_metric_history:
with mlflow.start_run() as multiple_metrics_run:
mlflow.log_metric("sample_metric", 1)
mlflow.log_metric("sample_metric", 2)
mlflow.log_metric("sample_metric", 3)
mlflow.log_metric("sample_metric", 4)
print(client.get_run(multiple_metrics_run.info.run_id).data.metrics)
print(client.get_metric_history(multiple_metrics_run.info.run_id, "sample_metric"))
Para obter mais informações, consulte a referência MlFlowClient .
O info
campo fornece informações gerais sobre a execução, como hora de início, ID de execução, ID do experimento, etc.:
run_start_time = finished_mlflow_run.info.start_time
run_experiment_id = finished_mlflow_run.info.experiment_id
run_id = finished_mlflow_run.info.run_id
Exibir artefatos de execução
Para exibir os artefatos de uma execução, use MlFlowClient.list_artifacts:
client.list_artifacts(finished_mlflow_run.info.run_id)
Para baixar um artefato, use mlflow.artifacts.download_artifacts:
mlflow.artifacts.download_artifacts(run_id=finished_mlflow_run.info.run_id, artifact_path="Azure.png")