Ö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
loggingayarları - 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:
- Denemeler sekmesine gidin.
- Belirli bir çalıştırma için runID'yi seçin.
- Sayfanın üst kısmında Çıkışlar ve günlükler'i seçin.
- Tüm günlüklerinizi zip klasörüne indirmek için Hepsini indir'i seçin.
- Ayrıca günlük dosyasını seçerek ve İndir'i seçerek tek tek günlük dosyalarını indirebilirsiniz
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.
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))train.pybetiğ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_outputparametresi, 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:
- how-to-use-azureml/training/train-on-local
- how-to-use-azureml/track-and-monitor-experiments/logging-api
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:
- En iyi modeli kaydetme ve dağıtma öğreticisi için bkz. Azure Machine Learning ile görüntü sınıflandırma modeli eğitme.