Ölçümleri & günlük dosyalarını görüntülemek için günlük kaydı

Hem varsayılan Python günlük paketini hem de Python SDK'ya özgü Azure Machine Learning 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ırma ö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 ile ilgili kaynak kullanımlarını ve olayları (kotalar, tamamlanan eğitim çalıştırmaları veya tamamlanan model dağıtımları gibi) 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'leri içinde aşağıdaki yöntemleri kullanın. Günlüğe kaydedilen bu ölçümler için hizmet sınırlarına dikkatin.

Günlüğe Kaydedilen Değer Örnek kod Portalda biçim
Sayısal değer dizisini günlüğe kaydedilir run.log_list(name='Fibonacci', value=[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]) tek değişkenli çizgi grafik
Tekrar tekrar kullanılan aynı ölçüm adına sahip tek bir sayısal değeri günlüğe yazın (for döngüsü içinde 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
Arka arkaya 2 sayısal sütun içeren bir satırı günlüğe ekleme 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') Çalıştırmaya bir görüntü dosyası veya matplotlib çizimi günlük kaydı yapmak 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 olacaktır

MLflow ile günlüğe kaydetme

Açık kaynak olduğu ve bulut taşınabilirliği için yerel modu desteklediği için modellerinizi, ölçümlerinizi ve yapıtlarınızı MLflow ile günlüğe kaydetmenizi öneririz. Aşağıdaki tablo ve kod örnekleri, eğitim çalıştırmalarınıza ait ölçümleri ve yapıtları günlüğe kaydedilirken MLflow'ın nasıl kullanıLflow olduğunu gösterir. MLflow'un günlüğe kaydetme yöntemleri ve tasarım desenleri hakkında daha fazla bilgi.

ve pip paketlerini çalışma mlflow azureml-mlflow alanınıza yükleyenin.

pip install mlflow
pip install azureml-mlflow

Ölçümlerinizi ve yapıtlarınızı çalışma alanınıza günlüğe Azure Machine Learning sağlamak için MLflow izleme URI'lerini arka ucu işaret etmek için 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 günlüğe (int veya float) mlflow.log_metric('my_metric', 1)
Boole değerini günlüğe kaydedilir mlflow.log_metric('my_metric', 0) 0 = True, 1 = False
Dizeyi günlüğe kaydedilir mlflow.log_text('foo', 'my_string') Yapıt olarak günlüğe kaydedilir
Günlük numpy ölçümleri veya PIL görüntüsü nesneleri mlflow.log_image(img, 'figure.png')
Log matlotlib çizim veya görüntü dosyası mlflow.log_figure(fig, "figure.png")

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

Eğitilen bir modelin ölçümlerini kullanarak run.get_metrics() görüntüabilirsiniz.

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 bilgilerine, çalıştırma nesnesinin verileri ve bilgi özellikleri aracılığıyla MLflow kullanarak da erişebilirsiniz. Daha fazla bilgi için MLflow.entities.Run nesne belgelerine bakın.

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

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üebilirsiniz.

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

Not

altındaki ölçüm sözlüğü, belirli mlflow.entities.Run.data.metrics bir ölçüm adı için yalnızca en son günlüğe kaydedilen değeri döndürür. Örneğin, sırasıyla, 1, sonra 2, sonra 3, ardından 4 olarak adlandırılan bir ölçüme oturum asanız, için ölçüm sözlüğünde yalnızca sample_metric 4 sample_metric vardır.

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

Studio kullanıcı arabiriminde çalıştırma ölçümlerini görüntüleme

Azure Machine Learning studio'da 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ız'daki tüm çalıştırmalarınızı görüntülemek için Tüm çalıştırmalar sekmesini seçin. Üst menü çubuğunda Deneme filtresini uygulayarak belirli Denemeler için çalıştırmaların detaya gitmelerini sebilirsiniz.

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

Ayrıca, birden çok çalıştırma seçmek ve çalıştırmalar için son, en düşük veya en yüksek günlüğe kaydedilen değeri görüntülemek için çalıştırma listesi tabloyu düzenleyebilirsiniz. Birden çok çalıştırmada günlüğe kaydedilen ölçüm değerlerini ve toplamları karşılaştırmak için grafiklerinizi özelleştirin. Grafiğinizin y ekseninde birden çok ölçüm çizebilirsiniz ve x ekseninizi günlük ölçümlerinizi çizen şekilde özelleştirebilirsiniz.

Çalıştırma için günlük dosyalarını görüntüleme ve indirme

Günlük dosyaları, Azure iş yüklerinde hata ayıklamak için ML kaynaktır. Eğitim işi gönderildikten sonra, günlüklerini ve çıkışlarını görüntülemek için belirli bir çalıştırmanın detaya gitme:

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

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

Aşağıdaki tablolarda, bu bölümde göreceğiz klasörlerdeki günlük dosyalarının içeriği gösterilmiştir.

Not

Her çalıştırma için her dosyayı mutlaka görmeyebilirsiniz. Örneğin, 20_image_build_log*.txt yalnızca yeni bir görüntü yerleşik olduğunda (örneğin, ortamı değiştirme) görüntülenir.

azureml-logs Klasör

Dosya Description
20_image_build_log.txt Eğitim ortamı için Docker görüntüsü bina günlüğü(isteğe bağlı, çalıştırma başına bir günlük). Yalnızca Ortamınızı güncelleştiriyorken geçerlidir. Aksi AML önbelleğe alınmış görüntüyü yeniden kullanır. Başarılı olursa, ilgili görüntü için görüntü kayıt defteri ayrıntılarını içerir.
55_azureml-execution-<node_id>.txt konak aracının stdout/stderr günlüğü, düğüm başına bir günlük. Görüntüyü işlem hedefine çeker. Bu günlüğün yalnızca güvenli işlem kaynaklarınız olduktan sonra görüntülendiğinde görüntülendiğinden emin olun.
65_job_prep-<node_id>.txt iş hazırlama betiği stdout/stderr günlüğü, düğüm başına bir. İşlem hedefine ve veri deposuna kodunuzu indirin (gerekirse).
70_driver_log(_x).txt her işlem için bir tane olmak AML betiğinden stdout/stderr günlüğü. Betiğinizin standart çıktısı. Bu dosya, kodunuzun günlüklerinin (örneğin, yazdırma deyimleri) göster olduğu dosyadır. Çoğu durumda günlükleri burada izleyebilirsiniz.
70_mpi_log.txt MPI çerçeve günlüğü, isteğe bağlı, çalıştırma başına bir günlük. Yalnızca MPI çalıştırması için.
75_job_post-<node_id>.txt iş sürümü betiği stdout/stderr günlüğü, düğüm başına bir. Günlükleri gönderin, işlem kaynaklarını Azure'a geri bırakın.
process_info.json hangi düğümün üzerinde hangi sürecin çalıştır olduğunu gösterir.
process_status.json bir işlem başlatlanmadı, çalıştırlanmadı veya tamamlandı gibi işlem durumunu gösterir.

logs > azureml Klasör

Dosya Description
110_azureml.log
job_prep_azureml.log iş hazırlama için sistem günlüğü
job_release_azureml.log iş sürümü için sistem günlüğü

logs > azureml > sidecar > node_id Klasör

Sidecar etkinleştirildiğinde, iş hazırlığı ve iş sürümü betikleri yan araba kapsayıcısı içinde çalışır. Her düğüm için bir klasör vardır.

Dosya Description
start_cms.txt Sidecar Container başlatıldığında başlayan işlem günlüğü
prep_cmd.txt Çalıştırıldıkları zaman girilen ContextManagers için günlük job_prep.py (bu içeriğin bazıları akışına azureml-logs/65-job_prep olur)
release_cmd.txt Çalıştırılıyorken ComtextManagers günlüğü job_release.py çıkış yaptı

Diğer klasörler

Çok işlemli kümelerde eğiten işler için, her düğüm IP'si için günlükler mevcuttur. 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şinin çalıştır olduğu Docker kapsayıcısı gibi çeşitli kaynaklardan gelen bilgileri günlüğe kaydeder. Bu günlüklerin çoğu belgelenmiş değildir. Sorunlarla karşılaşırsanız ve Microsoft desteğine başvurun, 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='./', 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: