Aracılığıyla paylaş


Günlük & ölçümleri ve günlük dosyalarını görüntüleme v1

ŞUNUN IÇIN GEÇERLIDIR:Python SDK azureml v1

Hem varsayılan Python günlük paketi hem de Azure Machine Learning Python SDK'sı'na özgü işlevselliği kullanarak gerçek zamanlı bilgileri günlüğe kaydetme. Günlükleri yerel olarak kaydedebilir ve portaldaki çalışma alanınıza gönderebilirsiniz.

Günlükler; hataları ve uyarıları tanılamanıza veya parametreler ve model performansı gibi performans ölçümlerini takip etmenize yardımcı olabilir. Bu makalede aşağıdaki senaryolarda günlüğe kaydetmeyi nasıl etkinleştirebileceğinizi öğreneceksiniz:

  • Günlük çalıştırması ölçümleri
  • Etkileşimli eğitim oturumları
  • ScriptRunConfig kullanarak eğitim işi gönderme
  • Python'daki yerel logging ayarları
  • Ek kaynaklardan günlüğe kaydetme

İpucu

Bu makalede model eğitim sürecini nasıl izleyebileceğiniz gösterilmiştir. Azure Machine Learning'den gelen kotalar, tamamlanmış eğitim çalıştırmaları veya tamamlanmış model dağıtımları gibi kaynak kullanımını ve olaylarını izlemek istiyorsanız bkz . Azure Machine Learning'i izleme.

Veri türleri

Skaler değerler, listeler, tablolar, görüntüler ve dizinler gibi birçok farklı veri türünü günlüğe kaydedebilirsiniz. Farklı veri türleri hakkında daha fazla bilgi edinmek ve Python kodu örneklerini görmek için bkz. Çalıştırma sınıfı başvuru sayfası.

Çalıştırma ölçümlerini günlüğe kaydetme

Ölçüm görselleştirmelerini etkilemek için günlük API'lerinde aşağıdaki yöntemleri kullanın. Günlüğe kaydedilen bu ölçümler için hizmet sınırlarını not edin.

Günlüğe Kaydedilen Değer Örnek kod Portalda biçimlendirme
Sayısal değer dizisini günlüğe kaydetme run.log_list(name='Fibonacci', value=[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]) tek değişkenli çizgi grafik
Aynı ölçüm adıyla tek bir sayısal değeri art arda günlüğe kaydetme (for döngüsünün içinden olduğu gibi) for i in tqdm(range(-10, 10)): run.log(name='Sigmoid', value=1 / (1 + np.exp(-i))) angle = i / 2.0 Tek değişkenli çizgi grafik
2 sayısal sütun içeren bir satırı art arda günlüğe kaydetme run.log_row(name='Cosine Wave', angle=angle, cos=np.cos(angle)) sines['angle'].append(angle) sines['sine'].append(np.sin(angle)) İki değişkenli çizgi grafik
2 sayısal sütun içeren günlük tablosu run.log_table(name='Sine Wave', value=sines) İki değişkenli çizgi grafik
Günlük görüntüsü run.log_image(name='food', path='./breadpudding.jpg', plot=None, description='desert') Bir görüntü dosyasını veya matplotlib çizimini çalıştırmaya kaydetmek için bu yöntemi kullanın. Bu görüntüler çalıştırma kaydında görünür ve karşılaştırılabilir

MLflow ile günlüğe kaydetme

Modellerinizi, ölçümlerinizi ve yapıtlarınızı açık kaynak ve yerel moddan buluta taşınabilirliği desteklediği için MLflow ile günlüğe kaydetmenizi öneririz. Aşağıdaki tablo ve kod örnekleri, eğitim çalıştırmalarınızdaki ölçümleri ve yapıtları günlüğe kaydetmek için MLflow'un nasıl kullanılacağını gösterir. MLflow'un günlük yöntemleri ve tasarım desenleri hakkında daha fazla bilgi edinin.

ve azureml-mlflow pip paketlerini çalışma alanınıza yüklediğinizden mlflow emin olun.

pip install mlflow
pip install azureml-mlflow

Ölçümlerinizin ve yapıtlarınızın çalışma alanınızda günlüğe kaydedildiğinden emin olmak için MLflow izleme URI'sini Azure Machine Learning arka ucuna işaret eder şekilde ayarlayın.

from azureml.core import Workspace
import mlflow
from mlflow.tracking import MlflowClient

ws = Workspace.from_config()
mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())

mlflow.create_experiment("mlflow-experiment")
mlflow.set_experiment("mlflow-experiment")
mlflow_run = mlflow.start_run()
Günlüğe Kaydedilen Değer Örnek kod Notlar
Sayısal bir değeri günlüğe kaydetme (int veya float) mlflow.log_metric('my_metric', 1)
Boole değerini günlüğe kaydetme mlflow.log_metric('my_metric', 0) 0 = Doğru, 1 = Yanlış
Dizeyi günlüğe kaydetme mlflow.log_text('foo', 'my_string') Yapıt olarak günlüğe kaydedildi
Numpy ölçümlerini veya PIL görüntüsü nesnelerini günlüğe kaydetme mlflow.log_image(img, 'figure.png')
Günlük matlotlib çizimi veya görüntü dosyası mlflow.log_figure(fig, "figure.png")

SDK aracılığıyla çalıştırma ölçümlerini görüntüleme

kullanarak run.get_metrics()eğitilmiş modelin ölçümlerini görüntüleyebilirsiniz.

from azureml.core import Run
run = Run.get_context()
run.log('metric-name', metric_value)

metrics = run.get_metrics()
# metrics is of type Dict[str, List[float]] mapping metric names
# to a list of the values for that metric in the given run.

metrics.get('metric-name')
# list of metrics in the order they were recorded

Çalıştırma nesnesinin veri ve bilgi özellikleri aracılığıyla MLflow kullanarak çalıştırma bilgilerine de erişebilirsiniz. Daha fazla bilgi için MLflow.entities.Run nesnesi belgelerine bakın.

Çalıştırma tamamlandıktan sonra MlFlowClient() kullanarak alabilirsiniz.

from mlflow.tracking import MlflowClient

# Use MlFlow to retrieve the run that was just completed
client = MlflowClient()
finished_mlflow_run = MlflowClient().get_run(mlflow_run.info.run_id)

Çalıştırmanın ölçümlerini, parametrelerini ve etiketlerini çalıştırma nesnesinin veri alanında görüntüleyebilirsiniz.

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

Not

altındaki mlflow.entities.Run.data.metrics ölçüm sözlüğü yalnızca belirli bir ölçüm adı için en son günlüğe kaydedilen değeri döndürür. Örneğin, sırasıyla 1, sonra 2, sonra 3 ve ardından 4'te adlı sample_metricbir metrikte günlüğe kaydederseniz, için ölçüm sözlüğünde sample_metricyalnızca 4 bulunur.

Belirli bir ölçüm adı için günlüğe kaydedilen tüm ölçümleri almak için kullanabilirsiniz MlFlowClient.get_metric_history().

Çalışma ölçümlerini stüdyo kullanıcı arabiriminde görüntüleme

Azure Machine Learning stüdyosu günlüğe kaydedilen ölçümler de dahil olmak üzere tamamlanmış çalıştırma kayıtlarına göz atabilirsiniz.

Denemeler sekmesine gidin. Denemeler arasında Çalışma Alanınızdaki tüm çalıştırmalarınızı görüntülemek için Tüm çalıştırmalar sekmesini seçin. Üst menü çubuğundaki Deneme filtresini uygulayarak belirli Denemeler için çalıştırmalarda detaya gidebilirsiniz.

Tek tek Deneme görünümü için Tüm denemeler sekmesini seçin. Deneme çalıştırması panosunda, her çalıştırma için izlenen ölçümleri ve günlükleri görebilirsiniz.

Ayrıca, çalıştırma listesi tablosunu düzenleyerek birden çok çalıştırma seçebilir ve çalıştırmalarınız için en son, en düşük veya en fazla günlüğe kaydedilen değeri görüntüleyebilirsiniz. Birden çok çalıştırmada günlüğe kaydedilen ölçüm değerlerini ve toplamlarını karşılaştırmak için grafiklerinizi özelleştirin. Grafiğinizin y eksenine birden çok ölçüm çizebilir ve x ekseninizi özelleştirerek günlüğe kaydedilen ölçümlerinizi çizebilirsiniz.

Çalıştırmanın günlük dosyalarını görüntüleme ve indirme

Günlük dosyaları, Azure Machine Learning iş yüklerinde hata ayıklamak için temel bir kaynaktır. Eğitim işini gönderdikten sonra, günlüklerini ve çıkışlarını görüntülemek için belirli bir çalıştırmanın detayına gidin:

  1. Denemeler sekmesine gidin.
  2. Belirli bir çalıştırma için runID'yi seçin.
  3. Sayfanın üst kısmındaki Çıkışlar ve günlükler'i seçin.
  4. Tüm günlüklerinizi bir zip klasörüne indirmek için Tümünü indir'i seçin.
  5. Günlük dosyasını seçip İndir'i seçerek tek tek günlük dosyalarını da indirebilirsiniz

Çalıştırmanın Çıkış ve günlükler bölümünün ekran görüntüsü.

user_logs klasörü

Bu klasör, kullanıcı tarafından oluşturulan günlükler hakkında bilgi içerir. Bu klasör varsayılan olarak açıktır ve std_log.txt günlüğü seçilidir. std_log.txt, kodunuzun günlüklerinin (örneğin, yazdırma deyimleri) göründüğü yerdir. Bu dosya, denetim betiğinizden ve stderr eğitim betiğinizden günlükleri ve işlem başına birer günlük içerirstdout. Çoğu durumda günlükleri burada izlersiniz.

system_logs klasörü

Bu klasör, Azure Machine Learning tarafından oluşturulan günlükleri içerir ve varsayılan olarak kapatılır. Sistem tarafından oluşturulan günlükler, çalışma zamanındaki işin aşamasına göre farklı klasörler halinde gruplandırılır.

Diğer klasörler

Çoklu işlem kümeleri üzerinde iş eğitimi için her düğüm IP'sinde günlükler bulunur. Her düğümün yapısı tek düğüm işleri ile aynıdır. Genel yürütme, stderr ve stdout günlükleri için bir günlük klasörü daha vardır.

Azure Machine Learning, eğitim sırasında AutoML veya eğitim işini çalıştıran Docker kapsayıcısı gibi çeşitli kaynaklardan gelen bilgileri günlüğe kaydeder. Bu günlüklerin çoğu belgelenmemiştir. Sorunlarla karşılaşır ve Microsoft desteğine başvurursanız, sorun giderme sırasında bu günlükleri kullanabilirler.

Etkileşimli günlüğe kaydetme oturumu

Etkileşimli günlüğe kaydetme oturumları genellikle not defteri ortamlarında kullanılır. Experiment.start_logging() yöntemi etkileşimli günlüğe kaydetme oturumu başlatır. Oturum sırasında günlüğe kaydedilen ölçümler, denemedeki çalıştırma kaydına eklenir. run.complete() yöntemi oturumları sonlandırır ve çalıştırmayı tamamlandı olarak işaretler.

ScriptRun günlükleri

Bu bölümde ScriptConfig ile yapılandırıldığında oluşturulan çalıştırmalara günlüğe kaydetme kodu eklemeyi öğreneceksiniz. ScriptRunConfig sınıfını kullanarak yinelenebilir çalıştırmalar için betikleri ve ortamları kapsülleyebilirsiniz. Bu seçeneği ayrıca izleme amacıyla görsel bir Jupyter Notebook pencere öğesi göstermek için de kullanabilirsiniz.

Bu örnek, run.log() yöntemini kullanarak alfa değerleri üzerinde parametre tarama işlemi gerçekleştirir ve sonuçları yakalar.

  1. Günlüğe kaydetme mantığını içeren bir eğitim betiği oluşturun: train.py.

    # Copyright (c) Microsoft. All rights reserved.
    # Licensed under the MIT license.
    
    from sklearn.datasets import load_diabetes
    from sklearn.linear_model import Ridge
    from sklearn.metrics import mean_squared_error
    from sklearn.model_selection import train_test_split
    from azureml.core.run import Run
    import os
    import numpy as np
    import mylib
    # sklearn.externals.joblib is removed in 0.23
    try:
        from sklearn.externals import joblib
    except ImportError:
        import joblib
    
    os.makedirs('./outputs', exist_ok=True)
    
    X, y = load_diabetes(return_X_y=True)
    
    run = Run.get_context()
    
    X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                        test_size=0.2,
                                                        random_state=0)
    data = {"train": {"X": X_train, "y": y_train},
            "test": {"X": X_test, "y": y_test}}
    
    # list of numbers from 0.0 to 1.0 with a 0.05 interval
    alphas = mylib.get_alphas()
    
    for alpha in alphas:
        # Use Ridge algorithm to create a regression model
        reg = Ridge(alpha=alpha)
        reg.fit(data["train"]["X"], data["train"]["y"])
    
        preds = reg.predict(data["test"]["X"])
        mse = mean_squared_error(preds, data["test"]["y"])
        run.log('alpha', alpha)
        run.log('mse', mse)
    
        model_file_name = 'ridge_{0:.2f}.pkl'.format(alpha)
        # save model in the outputs folder so it automatically get uploaded
        with open(model_file_name, "wb") as file:
            joblib.dump(value=reg, filename=os.path.join('./outputs/',
                                                         model_file_name))
    
        print('alpha is {0:.2f}, and mse is {1:0.2f}'.format(alpha, mse))
    
  2. train.py betiğini kullanıcı tarafından yönetilen bir ortamda çalıştırılmak üzere gönderin. Betik klasörünün tamamı eğitim için gönderilir.

    from azureml.core import ScriptRunConfig
    
    src = ScriptRunConfig(source_directory='./scripts', script='train.py', environment=user_managed_env)
    run = exp.submit(src)

    show_output parametresi, eğitim sürecinin ayrıntılarına ek olarak uzak kaynaklar veya işlem hedefleri hakkındaki bilgileri görmenizi sağlayan ayrıntılı günlüğe kaydetme özelliğini etkinleştirir. Denemeyi gönderdiğinizde ayrıntılı günlüğe kaydetme özelliğini açmak için aşağıdaki kodu kullanın.

    run = exp.submit(src, show_output=True)
    

    İsterseniz aynı parametreyi sonuç çalıştırmasındaki wait_for_completion işlevde de kullanabilirsiniz.

    run.wait_for_completion(show_output=True)
    

Yerel Python günlüğü

SDK'daki bazı günlüklerde günlük kaydı düzeyini DEBUG olarak ayarlamanızı isteyen hatalar bulunabilir. Günlük kaydı düzeyini ayarlamak için aşağıdaki kodu betiğinize ekleyin.

import logging
logging.basicConfig(level=logging.DEBUG)

Diğer günlük kaynakları

Azure Machine Learning; eğitim sırasında otomatik makine öğrenmesi çalıştırmaları veya işleri çalıştıran Docker kapsayıcıları gibi farklı kaynaklardan alınan günlük bilgilerini de kullanabilir. Bu günlük kayıtları belge halinde sunulmaz ancak karşılaştığınız sorunlar için Microsoft destek ekibiyle iletişime geçerseniz sorun giderme aşamasında bu günlükler kullanılabilir.

Azure Machine Learning tasarımcısında ölçümleri günlüğe kaydetme hakkında daha fazla bilgi için bkz. Tasarımcıda ölçümleri günlüğe kaydetme

Örnek not defterleri

Aşağıdaki not defterlerinde bu makaledeki kavramlar gösterilmiştir:

Not defterlerini çalıştırmayı öğrenmek için bkz. Hizmeti keşfetmek için Jupyter not defterlerini kullanma.

Sonraki adımlar

Azure Machine Learning'i kullanma hakkında daha fazla bilgi edinmek için şu makaleleri inceleyin: