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-mlflow
iç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, , tags
ve params
'nin nasıl görüntülenip görüntülenme şekli metrics
gö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 1
2
3
göre , ve son olarak 4
adlı sample_metric
bir ö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
- MLflow ile ML denemelerini ve modellerini izleyin.
- MLflow ile ölçümleri, parametreleri ve dosyaları günlüğe kaydetme.
- MLflow modellerini günlüğe kaydetme.
- Sorgu & denemeleri ve çalıştırmaları MLflow ile karşılaştırın.
- MLflow ile Azure Machine Learning'de model kayıt defterlerini yönetin.