MLflow ile ölçümleri, parametreleri ve dosyaları günlüğe kaydetme

ŞUNLAR IÇIN GEÇERLIDIR: Python SDK'sı azure-ai-ml v2 (geçerli)

Azure Machine Learning, MLflow İzleme kullanarak denemeleri günlüğe kaydetmeyi ve izlemeyi destekler. MLflow ile modelleri, ölçümleri, parametreleri ve yapıtları yerel olarak bilgisayarınızda veya bulut ortamında günlüğe kaydedebilirsiniz.

Önemli

Azure Machine Learning SDK v1'den farklı olarak, Python için Azure Machine Learning SDK'sında (v2) günlüğe kaydetme işlevi yoktur. Azure Machine Learning SDK v1'i daha önce kullandıysanız, denemeleri izlemek için MLflow'ı kullanmanızı öneririz. Belirli yönergeler için bkz . Günlüğü SDK v1'den MLflow'a geçirme.

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 kaydetmenin nasıl etkinleştirileceği açıklanmaktadır:

  • İşleri gönderirken ölçümleri, parametreleri ve modelleri günlüğe kaydetme.
  • Etkileşimli eğitim sırasında çalıştırmaları izleyin.
  • Eğitimle ilgili tanılama bilgilerini görüntüleyin.

İpucu

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

Önkoşullar

  • Azure Machine Learning çalışma alanınız olmalıdır. Yoksa bkz . Çalışma alanı kaynakları oluşturma.

  • ve azureml-mlflow paketleri yüklü olmalıdırmlflow. Kullanmıyorsanız, bunları geliştirme ortamınıza yüklemek için aşağıdaki komutu kullanın:

    pip install mlflow azureml-mlflow
    
  • Uzaktan izleme (Azure Machine Learning dışında çalışan izleme denemeleri) yapıyorsanız, denemeleri izlemek için MLflow'u yapılandırın. Daha fazla bilgi için bkz . Azure Machine Learning için MLflow yapılandırma.

  • MLflow kullanarak Azure Machine Learning'deki denemelerinizdeki ölçümleri, parametreleri, yapıtları ve modelleri günlüğe kaydetmek için MLflow'ı betiğinize aktarmanız gerekir:

    import mlflow
    

Denemeleri yapılandırma

MLflow, deneme ve çalıştırmalardaki bilgileri düzenler (Azure Machine Learning'de çalıştırmalara iş adı verilir). Kodunuzu nasıl çalıştırdığınıza bağlı olarak bunları yapılandırma konusunda bazı farklılıklar vardır:

Jupyter Notebook gibi etkileşimli eğitim yaparken aşağıdaki deseni kullanın:

  1. Etkin denemeyi oluşturun veya ayarlayın.
  2. İşi başlatın.
  3. Ölçümleri ve diğer bilgileri günlüğe kaydetmek için günlüğe kaydetme yöntemlerini kullanın.
  4. İşi bitir.

Örneğin, aşağıdaki kod parçacığı denemeyi yapılandırıp bir iş sırasında günlüğe kaydeder:

import mlflow
# Set the experiment
mlflow.set_experiment("mlflow-experiment")

# Start the run
mlflow_run = mlflow.start_run()
# Log metrics or other information
mlflow.log_metric('mymetric', 1)
# End run 
mlflow.end_run()

İpucu

Teknik olarak, start_run() yoksa yeni bir çalıştırma oluşturulduğundan ve bir günlük API'sini çağırdığınızda çağırmanız gerekmez. Bu durumda, şu anda kullanılmakta olan çalıştırmayı almak için kullanabilirsiniz mlflow.active_run() . Daha fazla bilgi için bkz . mlflow.active_run().

Bağlam yöneticisi paradigması da kullanabilirsiniz:

import mlflow
mlflow.set_experiment("mlflow-experiment")

# Start the run, log metrics, end the run
with mlflow.start_run() as run:
    # Run started when context manager is entered, and ended when context manager exits
    mlflow.log_metric('mymetric', 1)
    mlflow.log_metric('anothermetric',1)
    pass

ile mlflow.start_runyeni bir çalıştırma başlattığınızda parametresini belirtmek yararlı olabilir. Bu parametre run_name, Azure Machine Learning kullanıcı arabiriminde çalıştırmanın adına çevrilir ve çalıştırmayı daha hızlı belirlemenize yardımcı olur:

with mlflow.start_run(run_name="iris-classifier-random-forest") as run:
    mlflow.log_metric('mymetric', 1)
    mlflow.log_metric('anothermetric',1)

MLflow günlük API'leri hakkında daha fazla bilgi için bkz . MLflow başvurusu.

Günlük parametreleri

MLflow, denemeleriniz tarafından kullanılan günlük parametrelerini destekler. Parametreler herhangi bir türde olabilir ve aşağıdaki söz dizimi kullanılarak günlüğe kaydedilebilir:

mlflow.log_param("num_epochs", 20)

MLflow, birden çok parametreyi tümünü sözlük kullanarak belirterek günlüğe kaydetmek için kullanışlı bir yol da sunar. Çeşitli çerçeveler de sözlükleri kullanarak modellere parametre geçirebilir ve bu nedenle bu, bunları denemede günlüğe kaydetmenin kullanışlı bir yoludur.

params = {
    "num_epochs": 20,
    "dropout_rate": .6,
    "objective": "binary_crossentropy"
}

mlflow.log_params(params)

Günlük ölçümleri

Ölçümler, parametrelerin tersi olarak her zaman sayısaldır. Aşağıdaki tabloda belirli sayısal türlerin nasıl günlüğe kaydedildiği açıklanır:

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)
Zaman içinde sayısal bir değeri (int veya float) günlüğe kaydetme mlflow.log_metric("my_metric", 1, step=1) Ölçüm değerini günlüğe kaydettiğiniz adımı belirtmek için parametresini step kullanın. Herhangi bir tamsayı olabilir. Varsayılan olarak sıfır olur.
Boole değerini günlüğe kaydetme mlflow.log_metric("my_metric", 0) 0 = Doğru, 1 = Yanlış

Önemli

Performansla ilgili dikkat edilmesi gerekenler: Birden çok ölçümü (veya aynı ölçüm için birden çok değeri) günlüğe mlflow.log_metric kaydetmeniz gerekiyorsa döngüler halinde çağrı yapmaktan kaçının. Toplu ölçümler günlüğe kaydedilerek daha iyi performans elde edilebilir. Aynı anda günlüğe kaydetmek istediğiniz tüm ölçümleri içeren bir sözlüğü kabul eden veya günlüğe kaydetme için birden çok öğe türünü kabul eden yöntemini mlflow.log_metrics kullanın MLflowClient.log_batch . Bir örnek için bkz . Günlük eğrileri veya değer listesi.

Günlük eğrileri veya değer listesi

Eğriler (veya sayısal değerler listesi), aynı ölçümü birden çok kez günlüğe kaydederek MLflow ile günlüğe kaydedilebilir. Aşağıdaki örnek bunun nasıl yapılacağını gösterir:

list_to_log = [1, 2, 3, 2, 1, 2, 3, 2, 1]
from mlflow.entities import Metric
from mlflow.tracking import MlflowClient
import time

client = MlflowClient()
client.log_batch(mlflow.active_run().info.run_id, 
                 metrics=[Metric(key="sample_list", value=val, timestamp=int(time.time() * 1000), step=0) for val in list_to_log])

Günlük görüntüleri

MLflow, görüntüleri günlüğe kaydetmenin iki yolunu destekler. Her iki yöntem de verilen görüntüyü çalıştırmanın içinde bir yapıt olarak kalıcı hale getirme.

Günlüğe kaydedilen değer Örnek kod Notlar
Numpy ölçümlerini veya PIL görüntüsü nesnelerini günlüğe kaydetme mlflow.log_image(img, "figure.png") imgveya PIL.Image.Imageörneği numpy.ndarray olmalıdır. figure.png çalıştırmanın içinde oluşturulan yapıtın adıdır. Mevcut bir dosya olması gerekmez.
Günlük matlotlib çizimi veya görüntü dosyası mlflow.log_figure(fig, "figure.png") figure.png çalıştırmanın içinde oluşturulan yapıtın adıdır. Mevcut bir dosya olması gerekmez.

Günlük dosyaları

Genel olarak, MLflow'daki dosyalar yapıt olarak adlandırılır. Mlflow'da yapıtları birden çok şekilde günlüğe kaydedebilirsiniz:

Günlüğe kaydedilen değer Örnek kod Notlar
Metin dosyasındaki metni günlüğe kaydetme mlflow.log_text("text string", "notes.txt") Metin, adı notes.txt olan bir metin dosyasında çalıştırmanın içinde kalıcıdır.
Sözlükleri JSON ve YAML dosyaları olarak günlüğe kaydetme mlflow.log_dict(dictionary, "file.yaml" dictionary , JSON veya YAML dosyası olarak kalıcı hale getirmek istediğiniz tüm yapıyı içeren bir sözlük nesnesidir.
Zaten var olan önemsiz bir dosyayı günlüğe kaydetme mlflow.log_artifact("path/to/file.pkl") Dosyalar her zaman çalıştırmanın köküne kaydedilir. Sağlanırsa artifact_path , dosya bu parametrede gösterildiği gibi bir klasöre kaydedilir.
Var olan bir klasördeki tüm yapıtları günlüğe kaydetme mlflow.log_artifacts("path/to/folder") Klasör yapısı çalıştırmaya kopyalanır, ancak belirtilen kök klasör dahil değildir.

İpucu

veya log_modelile büyük dosyaları günlüğe kaydettiğinizde, dosyanın karşıya yüklenmesi tamamlanmadan önce zaman aşımı hatalarıyla log_artifact karşılaşabilirsiniz. ortam değişkenini AZUREML_ARTIFACTS_DEFAULT_TIMEOUTayarlayarak zaman aşımı değerini artırmayı göz önünde bulundurun. Varsayılan değer 300'dür (saniye).

Günlük modelleri

MLflow, belirli bir modelin çalışması için gereken tüm yapıtları paketlemenin bir yolu olarak model kavramını tanıtır. MLflow'daki modeller, modeli oluşturmak için kullanılan çerçeveye bağlı olarak her zaman rastgele sayıda dosya içeren bir klasördir. Günlüğe kaydetme modelleri, modelin tüm öğelerini kaydedilebilen ve sonra dağıtılabilir tek bir varlık olarak izleme avantajına sahiptir. Buna ek olarak, MLflow modelleri kodsuz dağıtım avantajından yararlanabilir ve studio'daki Sorumlu yapay zeka panosuyla kullanılabilir. Daha fazla bilgi için bkz. Yapıtlardan MLflow'daki modellere.

Modeli bir eğitim çalıştırmasından kaydetmek için üzerinde çalıştığınız çerçevenin API'sini kullanın log_model() . Örneğin, mlflow.sklearn.log_model(). Daha fazla bilgi için bkz . MLflow modellerini günlüğe kaydetme. Mevcut modelleri MLflow'a geçirmek için bkz . Özel modelleri MLflow'a dönüştürme.

İpucu

Büyük modelleri günlüğe kaydettiğinizde hatasıyla Failed to flush the queue within 300 secondskarşılaşabilirsiniz. Genellikle, model yapıtlarının karşıya yüklenmesi tamamlanmadan önce işlemin zaman aşımına uğraması anlamına gelir. ortam değişkenini AZUREML_ARTIFACTS_DEFAULT_TIMEOUTayarlayarak zaman aşımı değerini artırmayı göz önünde bulundurun.

Otomatik günlük kaydı

Azure Machine Learning ve MLflow ile kullanıcılar bir modeli eğitirken ölçümleri, model parametrelerini ve model yapıtlarını otomatik olarak günlüğe kaydedebilir. Sizin için otomatik olarak nelerin izeceğine her çerçeve karar verir. Çeşitli popüler makine öğrenmesi kitaplıkları desteklenir. MLflow ile otomatik günlük kaydı hakkında daha fazla bilgi edinin.

Otomatik günlüğü etkinleştirmek için eğitim kodunuzun önüne aşağıdaki kodu ekleyin:

mlflow.autolog()

İpucu

Otomatik oturum açma ile otomatik olarak günlüğe nelerin kaydedilebileceğini denetleyebilirsiniz. Örneğin, belirtirseniz mlflow.autolog(log_models=False), MLflow sizin için modeller dışında her şeyi günlüğe kaydeder. Bu tür denetim, modelleri el ile günlüğe kaydetmek istediğiniz ancak yine de ölçümlerin ve parametrelerin otomatik olarak günlüğe kaydedilmesini istediğiniz durumlarda kullanışlıdır. Ayrıca eğitilen model belirli sınırların ötesine geçtiğinde bazı çerçevelerin modellerin otomatik günlüğe kaydedilmesini devre dışı bırakabileceğine de dikkat edin. Bu tür davranış, kullanılan türe bağlıdır ve bu sizin durumunuzsa belgeleri görüntülemenizi öneririz.

MLflow ile işleri/çalıştırma bilgilerini görüntüleme

MLflow kullanarak günlüğe kaydedilen bilgileri MLflow.entities.Run nesnesi aracılığıyla görüntüleyebilirsiniz:

import mlflow

run = mlflow.get_run(run_id="<RUN_ID>")

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

metrics = run.data.metrics
params = run.data.params
tags = run.data.tags

Not

veya mlflow.search_runs tarafından mlflow.get_run döndürülen ölçüm sözlüğü, belirli bir ölçüm adı için yalnızca en son günlüğe kaydedilen değeri döndürür. Örneğin, adlı iteration bir ölçümü 1, sonra 2, sonra 3 ve 4 değerleriyle birden çok kez günlüğe kaydederseniz, çağrılırken run.data.metrics['iteration']yalnızca 4 döndürülür.

Belirli bir ölçüm adı için günlüğe kaydedilen tüm ölçümleri almak için, bir çalıştırmadan parametreleri ve ölçümleri alma örneğinde açıklandığı gibi kullanabilirsinizMlFlowClient.get_metric_history().

İpucu

MLflow aynı anda birden çok çalıştırmadan ölçüm ve parametre alabilir ve birden çok denemede hızlı karşılaştırmalar yapabilir. Daha fazla bilgi edinmek için bkz . MLflow ile denemeleri ve çalıştırmaları sorgulama ve karşılaştırma.

MLflow, bir çalıştırma tarafından günlüğe kaydedilen tüm yapıtları sorgulayabilir. Yapıtlara çalıştırma nesnesinin kendisi kullanılarak erişilemiyor ve bunun yerine MLflow istemcisi kullanılmalıdır:

client = mlflow.tracking.MlflowClient()
client.list_artifacts("<RUN_ID>")

Bu yöntem, çalıştırmada günlüğe kaydedilen tüm yapıtları listeler, ancak yapıt deposunda (Azure Machine Learning depolaması) depolanmaya devam eder. Bunlardan herhangi birini indirmek için yöntemini download_artifactkullanın:

file_path = client.download_artifacts("<RUN_ID>", path="feature_importance_weight.png")

Daha fazla bilgi için lütfen Ölçümleri, parametreleri, yapıtları ve modelleri alma bölümüne bakın.

Stüdyoda işleri/çalıştırma bilgilerini görüntüleme

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

İşler sekmesine gidin. Denemeler genelinde Çalışma Alanınızdaki tüm işlerinizi görüntülemek için Tüm işler sekmesini seçin. Üst menü çubuğundaki Deneme filtresini uygulayarak belirli denemeler için işlerde detaya gidebilirsiniz. Ayrıntılar görünümünü girmek için ilgilendiğim işi seçin ve ardından Ölçümler sekmesini seçin.

Grafikleri sağ tarafta işlemek için günlüğe kaydedilen ölçümleri seçin. Tek bir grafikte düzeltme uygulayarak, rengi değiştirerek veya birden çok ölçüm çizerek grafikleri özelleştirebilirsiniz. Ayrıca düzeni istediğiniz gibi yeniden boyutlandırabilir ve yeniden düzenleyebilirsiniz. İstediğiniz görünümü oluşturduktan sonra, daha sonra kullanmak üzere kaydedebilir ve doğrudan bağlantı kullanarak ekip arkadaşlarınızla paylaşabilirsiniz.

Ölçümler görünümünün ekran görüntüsü.

Tanılama günlüklerini 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. İşler 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 kapalıdı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 IP düğümü için 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.

Sonraki adımlar