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