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.
- Ölçümleri zaman uyumsuz olarak günlüğe kaydetme.
- 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
Not
Ölçümlerin zaman uyumsuz günlüğe kaydedilmesi için 2.8.0+ sürümüne ve
azureml-mlflow
1.55+ sürümüne sahipMLflow
olmanız gerekir.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:
- Etkin denemeyi oluşturun veya ayarlayın.
- İşi başlatın.
- Ölçümleri ve diğer bilgileri günlüğe kaydetmek için günlüğe kaydetme yöntemlerini kullanın.
- İş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_run
yeni 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
Parametrelere ters olarak ölçümler her zaman sayısaldır ve zaman uyumlu veya zaman uyumsuz olarak günlüğe kaydedilebilir. Ölçümler günlüğe kaydedildiğinde, arama iadesinde hemen kullanıma sunulur. 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. Zaman uyumsuz günlük kullanılarak veya toplu ölçümler günlüğe mlflow.log_metric("metric1", 9.42, synchronous=False)
kaydedilerek daha iyi performans elde edilebilir.
Ölçümleri zaman uyumsuz olarak günlüğe kaydetme
MLflow ayrıca ölçümlerin zaman uyumsuz bir şekilde günlüğe kaydedilmesine de olanak tanır. Zaman uyumsuz ölçüm günlüğü, onlarca işlem düğümüne sahip büyük eğitim işlerinin çalıştırılıp ölçümleri eşzamanlı olarak günlüğe kaydetmeye çalıştığı durumlarda özellikle yararlıdır. Az sayıda düğüm yüksek sayıda ölçümü günlüğe kaydetmeye çalıştığında da kullanışlıdır.
Zaman uyumsuz ölçüm günlüğü, arka uç hizmetinde gerçekleştirilmesini beklemekten kaçınarak ölçümleri hemen günlüğe kaydetmenizi sağlar. Bu yaklaşım, yüz binlerce ölçüm değerini günlüğe kaydeden büyük eğitim yordamlarına ölçeklendirilir ve önerilen yaklaşım budur.
MLflow ölçümleri varsayılan olarak zaman uyumlu olarak günlüğe kaydeder, ancak bu davranışı istediğiniz zaman değiştirebilirsiniz:
import mlflow
mlflow.config.enable_async_logging()
Ortam değişkeni kullanılarak aynı özellik ayarlanabilir:
export MLFLOW_ENABLE_ASYNC_LOGGING=True
Belirli ölçümleri zaman uyumsuz olarak günlüğe kaydetmek için MLflow günlük API'sini normalde yaptığınız gibi kullanın, ancak ek parametresini synchronous=False
ekleyin.
import mlflow
with mlflow.start_run():
# (...)
mlflow.log_metric("metric1", 9.42, synchronous=False)
# (...)
kullandığınızda log_metric(synchronous=False)
, işlem kabul edildikten sonra denetim çağırana otomatik olarak döndürülür; ancak değer, düzgün bir şekilde okumak için kullanılamaz. Ölçümlerin zaman uyumsuz günlüğe kaydedilmesi sırayı garanti eder ve günlüğe kaydedildikleri zaman damgasıyla kalıcı hale getirildi.
Önemli
Azure Machine Learning ile synchronous=False
bile ölçümlerin sıralanması garanti edilir.
Arka uçta belirli bir değerin kalıcı olmasını beklemeniz gerekiyorsa, aşağıdaki örnekte gösterildiği gibi, bu değeri beklemek için döndürülen ölçüm işlemini kullanabilirsiniz:
import mlflow
with mlflow.start_run():
# (...)
run_operation = mlflow.log_metric("metric1", 9.42, synchronous=False)
# (...)
run_operation.wait()
# (...)
Aşağıdaki örnekte gösterildiği gibi, bir ölçümü zaman uyumsuz olarak bir kerede günlüğe kaydedebilir veya bir grup ölçümü günlüğe kaydedebilirsiniz:
import mlflow
import time
from mlflow.entities import Metric
with mlflow.start_run() as current_run:
mlflow_client = mlflow.tracking.MlflowClient()
metrics = {"metric-0": 3.14, "metric-1": 6.28}
timestamp = int(time.time() * 1000)
metrics_arr = [Metric(key, value, timestamp, 0) for key, value in metrics.items()]
run_operation = mlflow_client.log_batch(
run_id=current_run.info.run_id,
metrics=metrics_arr,
synchronous=False,
)
Bu wait()
işlem, bir toplu ölçüm günlüğe kaydetme sırasında da kullanılabilir:
run_operation.wait()
Ölçüm değerlerine hemen erişmeniz gerekmiyorsa rutinlerinizi çağırmanız wait()
gerekmez. Azure Machine Learning, iş bitmek üzereyken kalıcı olarak bekleyen ölçüm olup olmadığını görmek için otomatik olarak bekler. Azure Machine Learning'de bir iş tamamlandığında tüm ölçümlerin kalıcı olması garanti edilir.
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") |
img veya 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_model
ile 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_TIMEOUT
ayarlayarak 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 seconds
karşı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_TIMEOUT
ayarlayarak 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şler veya çalıştırmalar hakkındaki bilgileri 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_artifact
kullanı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üdyodaki işler veya çalıştırmalar hakkındaki bilgileri 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.
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:
- İşler sekmesine gidin.
- Belirli bir çalıştırma için runID'yi seçin.
- Sayfanın üst kısmındaki Çıkışlar ve günlükler'i seçin.
- Tüm günlüklerinizi bir zip klasörüne indirmek için Tümünü indir'i seçin.
- Günlük dosyasını seçip İndir'i seçerek tek tek günlük dosyalarını da indirebilirsiniz
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.