Günlüğü SDK v1'den SDK v2'ye geçirme

Azure Machine Learning, denemeleri Azure Machine Learning Python SDK'sı, Azure Machine Learning CLI veya Azure Machine Learning stüdyosu aracılığıyla oluşturmuş olmanız fark ederek denemeleriniz için ölçüm günlüğü ve yapıt depolaması için MLflow İzleme'yi kullanır. Denemeleri izlemek için MLflow kullanmanızı öneririz.

SDK v1'den SDK v2'ye geçiriyorsanız, SDK v1 günlük API'lerinin MLflow eşdeğerlerini anlamak için bu bölümdeki bilgileri kullanın.

Neden MLflow?

Aylık 13 milyondan fazla indirmeye sahip MLflow, uçtan uca MLOps için standart platform haline geldi ve her büyüklükteki ekiplerin toplu veya gerçek zamanlı çıkarım için herhangi bir modeli izlemesine, paylaşmasına, paketlemesine ve dağıtmasına olanak sağladı. Azure Machine Learning, Azure Machine Learning'e özgü yönergeler içermediğinden eğitim kodunuzun diğer platformlarla gerçek taşınabilirlik ve sorunsuz tümleştirme elde etmelerini sağlayan MLflow ile tümleştirilir.

MLflow'a geçiş için hazırlanma

MLflow izlemeyi kullanmak için Mlflow SDK paketini mlflow ve MLflow azureml-mlflowiçin Azure Machine Learning eklentisini yüklemeniz gerekir. Tüm Azure Machine Learning ortamlarında bu paketler sizin için zaten kullanılabilir ancak kendi ortamınızı oluştururken bunları eklemeniz gerekir.

pip install mlflow azureml-mlflow

Çalışma alanınıza bağlanma

Azure Machine Learning, kullanıcıların çalışma alanınızda çalışan veya uzaktan çalışan eğitim işlerinde izleme gerçekleştirmesine olanak tanır (Azure Machine Learning dışında çalışan izleme denemeleri). Uzaktan izleme gerçekleştiriyorsanız, MLflow'a bağlanmak istediğiniz çalışma alanını belirtmeniz gerekir.

Azure Machine Learning işlemlerinde çalışırken zaten çalışma alanınıza bağlısınız.

Denemeler ve çalıştırmalar

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

MLflow ile SDK v2

# Set the MLflow experiment and start a run
mlflow.set_experiment("logging-with-mlflow")
mlflow_run = mlflow.start_run()

Günlük API'si karşılaştırması

Tamsayı veya float ölçümünü günlüğe kaydetme

SDK v1

azureml_run.log("sample_int_metric", 1)

MLflow ile SDK v2

mlflow.log_metric("sample_int_metric", 1)

Boole ölçümünü günlüğe kaydetme

SDK v1

azureml_run.log("sample_boolean_metric", True)

MLflow ile SDK v2

mlflow.log_metric("sample_boolean_metric", 1)

Dize ölçümünü günlüğe kaydetme

SDK v1

azureml_run.log("sample_string_metric", "a_metric")

MLflow ile SDK v2

mlflow.log_text("sample_string_text", "string.txt")
  • Dize, ölçüm olarak değil yapıt olarak günlüğe kaydedilir. Azure Machine Learning stüdyosu'da değer Çıkışlar + günlükler sekmesinde görüntülenir.

Görüntüyü PNG veya JPEG dosyasına kaydetme

SDK v1

azureml_run.log_image("sample_image", path="Azure.png")

MLflow ile SDK v2

mlflow.log_artifact("Azure.png")

Görüntü bir yapıt olarak günlüğe kaydedilir ve Azure Machine Learning Studio'daki Resimler sekmesinde görünür.

Matplotlib.pyplot dosyasını günlüğe kaydetme

SDK v1

import matplotlib.pyplot as plt

plt.plot([1, 2, 3])
azureml_run.log_image("sample_pyplot", plot=plt)

MLflow ile SDK v2

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")
  • Görüntü bir yapıt olarak günlüğe kaydedilir ve Azure Machine Learning Studio'daki Resimler sekmesinde görünür.

Ölçümlerin listesini günlüğe kaydetme

SDK v1

list_to_log = [1, 2, 3, 2, 1, 2, 3, 2, 1]
azureml_run.log_list('sample_list', list_to_log)

MLflow ile SDK v2

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)
  • Ölçümler, Azure Machine Learning stüdyosu ölçümler sekmesinde görünür.
  • Metin değerleri desteklenmez.

Bir ölçüm satırını günlüğe kaydetme

SDK v1

azureml_run.log_row("sample_table", col1=5, col2=10)

MLflow ile SDK v2

metrics = {"sample_table.col1": 5, "sample_table.col2": 10}
mlflow.log_metrics(metrics)
  • Ölçümler Azure Machine Learning stüdyosu tablo olarak işlenmez.
  • Metin değerleri desteklenmez.
  • Ölçüm olarak değil yapıt olarak günlüğe kaydedilir.

Tabloyu günlüğe kaydetme

SDK v1

table = {
"col1" : [1, 2, 3],
"col2" : [4, 5, 6]
}
azureml_run.log_table("table", table)

MLflow ile SDK v2

# 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")
  • Her sütun için ölçümleri günlüğe kaydeder.
  • Ölçümler Azure Machine Learning stüdyosu tablo olarak işlenmez.
  • Metin değerleri desteklenmez.
  • Ölçüm olarak değil yapıt olarak günlüğe kaydedilir.

Doğruluk tablosunu günlüğe kaydetme

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)

MLflow ile SDK v2

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')
  • Ölçümler Azure Machine Learning stüdyosu doğruluk tablosu olarak işlenmez.
  • Ölçüm olarak değil yapıt olarak günlüğe kaydedilir.
  • mlflow.log_dict Yöntem deneyseldir.

Karışıklık matrisi kaydetme

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

MLflow ile SDK v2

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')
  • Ölçümler Azure Machine Learning stüdyosu karışıklık matrisi olarak işlenmez.
  • Ölçüm olarak değil yapıt olarak günlüğe kaydedilir.
  • mlflow.log_dict Yöntem deneyseldir.

Günlük tahminleri

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

MLflow ile SDK v2

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')
  • Ölçümler Azure Machine Learning stüdyosu karışıklık matrisi olarak işlenmez.
  • Ölçüm olarak değil yapıt olarak günlüğe kaydedilir.
  • mlflow.log_dict Yöntem deneyseldir.

Günlük artıkları

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

MLflow ile SDK v2

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')
  • Ölçümler Azure Machine Learning stüdyosu karışıklık matrisi olarak işlenmez.
  • Ölçüm olarak değil yapıt olarak günlüğe kaydedilir.
  • mlflow.log_dict Yöntem deneyseldir.

Çalıştırma bilgilerini ve verilerini görüntüleme

MLflow run (mlflow.entities.Run) nesnesinin özelliklerini ve info özelliklerini data kullanarak çalıştırma bilgilerine erişebilirsiniz.

İpucu

Azure Machine Learning'deki denemeler ve çalıştırmalar izleme bilgileri, denemeleri ve çalıştırmaları kolayca sorgulamak ve aramak ve sonuçları hızla karşılaştırmak için kapsamlı bir arama API'si sağlayan MLflow kullanılarak sorgulanabilir. Bu boyuttaki MLflow'daki tüm özellikler hakkında daha fazla bilgi için bkz . Sorgu & denemeleri ve çalıştırmaları MLflow ile karşılaştırma

Aşağıdaki örnek, tamamlanmış çalıştırmanın nasıl alınıp alınamaya çalışılır olduğunu gösterir:

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>")

Aşağıdaki örnekte, , tagsve params'nin nasıl görüntülenip görüntülenme şekli metricsgösterilmektedir:

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

Not

metrics yalnızca belirli bir ölçüm için en son günlüğe kaydedilen değere sahip olur. Örneğin, değerinin sırasına 123göre , ve son olarak 4 adlı sample_metricbir ölçümde oturum açarsanız, sözlükte metrics yalnızca 4 bulunur. Belirli bir adlandırılmış ölçüm için günlüğe kaydedilen tüm ölçümleri almak için MlFlowClient.get_metric_history kullanın:

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"))

Daha fazla bilgi için bkz . MlFlowClient başvurusu.

alanı info çalıştırma hakkında başlangıç zamanı, çalıştırma kimliği, deneme kimliği vb. genel bilgiler sağlar:

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

Çalıştırma yapıtlarını görüntüleme

Çalıştırmanın yapıtlarını görüntülemek için MlFlowClient.list_artifacts kullanın:

client.list_artifacts(finished_mlflow_run.info.run_id)

Yapıt indirmek için mlflow.artifacts.download_artifacts kullanın:

mlflow.artifacts.download_artifacts(run_id=finished_mlflow_run.info.run_id, artifact_path="Azure.png")

Sonraki adımlar