Memigrasikan pengelogan dari SDK v1 ke SDK v2

Azure Machine Learning menggunakan Pelacakan MLflow untuk pengelogan metrik dan penyimpanan artefak untuk eksperimen Anda, baik Anda membuat eksperimen melalui SDK Python Azure Machine Learning, CLI Azure Machine Learning, atau studio Azure Machine Learning. Sebaiknya gunakan MLflow untuk melacak eksperimen.

Jika Anda bermigrasi dari SDK v1 ke SDK v2, gunakan informasi di bagian ini untuk memahami MLflow yang setara dengan API pengelogan SDK v1.

Mengapa MLflow?

MLflow, dengan lebih dari 13 juta unduhan bulanan, telah menjadi platform standar untuk MLOps end-to-end, memungkinkan tim dari semua ukuran untuk melacak, berbagi, mengemas, dan menyebarkan model apa pun untuk inferensi batch atau real-time. Azure Pembelajaran Mesin terintegrasi dengan MLflow, yang memungkinkan kode pelatihan Anda mencapai portabilitas sejati dan integrasi yang mulus dengan platform lain karena tidak menyimpan instruksi khusus Azure Pembelajaran Mesin apa pun.

Bersiap untuk bermigrasi ke MLflow

Untuk menggunakan pelacakan MLflow, Anda perlu menginstal paket mlflow Mlflow SDK dan plug-in Azure Pembelajaran Mesin untuk MLflow azureml-mlflow. Semua lingkungan Azure Pembelajaran Mesin memiliki paket ini yang sudah tersedia untuk Anda tetapi Anda perlu menyertakannya jika membuat lingkungan Anda sendiri.

pip install mlflow azureml-mlflow

Menyambungkan ke ruang kerja Anda

Azure Pembelajaran Mesin memungkinkan pengguna untuk melakukan pelacakan dalam pekerjaan pelatihan yang berjalan di ruang kerja Anda atau berjalan dari jarak jauh (eksperimen pelacakan yang berjalan di luar Azure Pembelajaran Mesin). Jika melakukan pelacakan jarak jauh, Anda perlu menunjukkan ruang kerja tempat Anda ingin menyambungkan MLflow.

Anda sudah tersambung ke ruang kerja saat berjalan di komputasi Azure Pembelajaran Mesin.

Eksperimen dan eksekusi

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 dengan MLflow

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

Perbandingan API Pengelogan

Mencatat metrik bilangan bulat atau float

SDK v1

azureml_run.log("sample_int_metric", 1)

SDK v2 dengan MLflow

mlflow.log_metric("sample_int_metric", 1)

Mencatat metrik boolean

SDK v1

azureml_run.log("sample_boolean_metric", True)

SDK v2 dengan MLflow

mlflow.log_metric("sample_boolean_metric", 1)

Mencatat metrik string

SDK v1

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

SDK v2 dengan MLflow

mlflow.log_text("sample_string_text", "string.txt")
  • String dicatat sebagai artefak, bukan sebagai metrik. Di studio Azure Pembelajaran Mesin, nilai ditampilkan di tab Output + log.

Mencatat gambar ke file PNG atau JPEG

SDK v1

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

SDK v2 dengan MLflow

mlflow.log_artifact("Azure.png")

Gambar dicatat sebagai artefak dan muncul di tab Gambar di Azure Pembelajaran Mesin Studio.

Mencatat matplotlib.pyplot

SDK v1

import matplotlib.pyplot as plt

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

SDK v2 dengan 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")
  • Gambar dicatat sebagai artefak dan muncul di tab Gambar di Azure Pembelajaran Mesin Studio.

Mencatat daftar metrik

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 dengan 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)
  • Metrik muncul di tab metrik di studio Azure Machine Learning.
  • Nilai teks tidak didukung.

Mencatat baris metrik

SDK v1

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

SDK v2 dengan MLflow

metrics = {"sample_table.col1": 5, "sample_table.col2": 10}
mlflow.log_metrics(metrics)
  • Metrik tidak dirender sebagai tabel di studio Azure Machine Learning.
  • Nilai teks tidak didukung.
  • Dicatat sebagai artefak, bukan sebagai metrik.

Mencatat tabel

SDK v1

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

SDK v2 dengan 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")
  • Mencatat metrik untuk setiap kolom.
  • Metrik tidak dirender sebagai tabel di studio Azure Machine Learning.
  • Nilai teks tidak didukung.
  • Dicatat sebagai artefak, bukan sebagai metrik.

Mencatat tabel akurasi

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 dengan 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')
  • Metrik tidak dirender sebagai tabel akurasi di studio Azure Machine Learning.
  • Dicatat sebagai artefak, bukan sebagai metrik.
  • Metode mlflow.log_dict bersifat eksperimental.

Mencatat matriks konfusi

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 dengan 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')
  • Metrik tidak dirender sebagai matriks konfusi di studio Azure Machine Learning.
  • Dicatat sebagai artefak, bukan sebagai metrik.
  • Metode mlflow.log_dict bersifat eksperimental.

Mencatat 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 dengan 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')
  • Metrik tidak dirender sebagai matriks konfusi di studio Azure Machine Learning.
  • Dicatat sebagai artefak, bukan sebagai metrik.
  • Metode mlflow.log_dict bersifat eksperimental.

Mencatat residu

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 dengan 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')
  • Metrik tidak dirender sebagai matriks konfusi di studio Azure Machine Learning.
  • Dicatat sebagai artefak, bukan sebagai metrik.
  • Metode mlflow.log_dict bersifat eksperimental.

Melihat info dan data eksekusi

Anda dapat mengakses informasi eksekusi menggunakan properti data dan info objek MLflow run (mlflow.entities.Run).

Tip

Eksperimen dan menjalankan informasi pelacakan di Azure Pembelajaran Mesin dapat dikueri menggunakan MLflow, yang menyediakan API pencarian komprehensif untuk mengkueri dan mencari eksperimen dan berjalan dengan mudah, dan membandingkan hasil dengan cepat. Untuk informasi selengkapnya tentang semua kemampuan dalam MLflow dalam dimensi ini, lihat Kueri & bandingkan eksperimen dan eksekusi dengan MLflow

Contoh berikut menunjukkan cara mengambil eksekusi yang selesai:

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

Contoh berikut ini menunjukkan cara melihat metrics, tags, dan params:

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

Catatan

metrics hanya akan berisi nilai yang baru dicatat untuk metrik tertentu. Misalnya, jika Anda masuk dalam urutan nilai 1, lakukan 2, 3, dan 4 ke metrik bernama sample_metric, hanya 4 yang ada di kamus metrics. Untuk mencatat semua metrik untuk metrik bernama tertentu, gunakan 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"))

Untuk mengetahui informasi lebih lanjut, lihat referensi MlFlowClient.

Bidang info menyediakan informasi umum tentang eksekusi, seperti waktu mulai, ID eksekusi, ID eksperimen, dll.:

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

Melihat artefak eksekusi

Untuk melihat artefak sebuah eksekusi, gunakan MlFlowClient.list_artifacts:

client.list_artifacts(finished_mlflow_run.info.run_id)

Untuk mengunduh artefak, gunakan mlflow.artifacts.download_artifacts:

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

Langkah berikutnya