MLflow ile Azure Machine Learning'de model kayıt defterini yönetme

Azure Machine Learning, çalışma alanına bağlıyken model yönetimi için MLflow'ı destekler. Bu yaklaşım, MLflow istemcisini bilen kullanıcılar için model yaşam döngüsünün tamamını desteklemenin kullanışlı bir yoludur.

Bu makalede, MLflow ile model kayıt defterini yönetme özellikleri ve bu yöntemin diğer yönetim seçenekleriyle karşılaştırması açıklanmaktadır.

Önkoşullar

  • MLflow SDK mlflow paketini ve MLflow için Azure Machine Learning azureml-mlflow eklentisini yükleyin:

    pip install mlflow azureml-mlflow
    

    İpucu

    SQL depolama, sunucu, kullanıcı arabirimi veya veri bilimi bağımlılıkları olmadan basit bir MLflow paketi olan paketini kullanabilirsiniz mlflow-skinny . Bu paketi öncelikle MLflow izleme ve günlüğe kaydetme özelliklerine ihtiyacı olan ancak dağıtımlar dahil olmak üzere tam özellik paketine ihtiyaç duymayan kullanıcılar için öneririz.

  • Azure Machine Learning çalışma alanı oluşturun. Çalışma alanı oluşturmak için, başlamak için ihtiyaç duyduğunuz kaynakları oluşturmayı görün. Çalışma alanınızda MLflow işlemleri gerçekleştirmek için ihtiyacınız olan erişim izinlerini gözden geçirin.

  • Uzaktan izleme yapmak veya Azure Machine Learning dışında çalışan denemeleri izlemek için MLflow'ı Azure Machine Learning çalışma alanınızın izleme URI'sine işaret eden şekilde yapılandırın. MLflow'u çalışma alanınıza bağlama hakkında daha fazla bilgi için bkz . Azure Machine Learning için MLflow'u yapılandırma.

  • Bu makaledeki yordamlar, MLflow istemcisine başvurmak için bir client nesne kullanır.

    Bazı işlemler, MLflow fluent API'sini mlflow.<method>kullanarak doğrudan yürütülebilir. Diğer işlemler, MLflow protokolünde Machine Learning ile iletişimi etkinleştirmek için bir MLflow istemcisi gerektirir. Aşağıdaki kod bir MlflowClient nesne oluşturur:

    import mlflow
    
    client = mlflow.tracking.MlflowClient()
    

Sınırlamalar

  • Azure Machine Learning modelleri yeniden adlandırmayı desteklemez.

  • Azure Machine Learning, model kapsayıcısının tamamını silmeyi desteklemez.

  • Kuruluş kayıt defterleri MLflow ile model yönetimi için desteklenmez.

  • Azure Machine Learning'de belirli bir model aşamasından model dağıtımı şu anda desteklenmiyor.

  • Çalışma alanları arası işlemler şu anda Azure Machine Learning'de desteklenmiyor.

Yeni modelleri kaydetme

Models kayıt defteri, çalışma alanında modelleri yönetmek için kullanışlı ve merkezi bir yol sunar. Her çalışma alanının kendi bağımsız model kayıt defteri vardır. Aşağıdaki bölümlerde, MLflow SDK'sını kullanarak modelleri kayıt defterine kaydetmenin iki yolu gösterilmektedir.

Mevcut çalıştırmadan model oluşturma

Bir çalıştırmanın içinde günlüğe kaydedilmiş bir MLflow modeliniz varsa ve bunu bir kayıt defterine kaydetmek istiyorsanız, modelin günlüğe kaydedildiği çalışma kimliğini ve yolu kullanın. MLflow ile denemeleri ve çalıştırmaları yönetme başlığındaki yönergeleri izleyerek bu bilgileri sorgulayabilirsiniz.

mlflow.register_model(f"runs:/{run_id}/{artifact_path}", model_name)

Not

Modelleri yalnızca koşuyu takip ettiğiniz aynı çalışma alanındaki kayıt merkezine kaydedebilirsiniz. Azure Machine Learning şu anda çalışma alanları arası işlemleri desteklemez.

İpucu

Koşumlardan veya çalıştırma sırasında mlflow.<flavor>.log_model yöntemini kullanarak modelleri kaydedin. Bu yaklaşım, varlığı oluşturan işin kökenini korur.

Varlıklardan model oluşturma

MLModel MLflow modeline sahip bir klasörünüz varsa doğrudan kaydedebilirsiniz. Modelin çalıştırılma bağlamında olması gerekmez. Bu yaklaşım için, yerel dosya sisteminde depolanan MLflow modellerini kaydetmek için URI şemasını file://path/to/model kullanabilirsiniz.

Aşağıdaki kod, paketini kullanarak scikit-learn basit bir model oluşturur ve modeli yerel depolamada MLflow biçiminde kaydeder:

from sklearn import linear_model

reg = linear_model.LinearRegression()
reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])

mlflow.sklearn.save_model(reg, "./regressor")

İpucu

save_model() yöntemi, log_model() yöntemiyle aynı şekilde çalışır. log_model() yöntemi modeli etkin bir çalıştırmanın içine kaydederken, save_model() yöntemi modeli kaydetmek için yerel dosya sistemini kullanır.

Aşağıdaki kod, yerel yolu kullanarak modeli kaydeder:

import os

model_local_path = os.path.abspath("./regressor")
mlflow.register_model(f"file://{model_local_path}", "local-model-test")

Sorgu modeli kayıt defterleri

Kayıt defterinde kayıtlı modelleri sorgulamak ve aramak için MLflow SDK'sını kullanın. Aşağıdaki bölümlerde bir modeli sorgulamanın iki yolu gösterilmektedir.

Kayıt defterindeki tüm modelleri sorgulama

Kayıt defterindeki tüm kayıtlı modelleri sorgulamak için MLflow istemcisini kullanın.

Aşağıdaki kod, kayıt defterindeki tüm modellerin adlarını yazdırır:

for model in client.search_registered_models():
    print(f"{model.name}")

Çıktıyı order_by , name, versionveya creation_timestampgibi last_updated_timestampbelirli bir özelliğe göre düzenlemek için yöntemini kullanın:

client.search_registered_models(order_by=["name ASC"])

Not

2.0'dan önceki MLflow sürümleri için bunun yerine yöntemini kullanın MlflowClient.list_registered_models() .

Belirli model sürümlerini alma

search_registered_models() yöntemi, tüm model sürümlerini içeren model nesnesini alır. Belirli bir modelin son kayıtlı model sürümünü almak için yöntemini kullanın get_registered_model() :

client.get_registered_model(model_name)

Modelin belirli bir sürümünü almak için aşağıdaki kodu kullanın:

client.get_model_version(model_name, version=2)

Modelleri kayıt defterinden yükleme

Günlüğe kaydedilen model nesnelerini geri yüklemek için modelleri doğrudan kayıt defterinden yükleyebilirsiniz. Bu görev için işlevleri mlflow.<flavor>.load_model() kullanın veya mlflow.pyfunc.load_model() yüklenecek modelin URI'sini belirtin.

Bu işlevleri aşağıdaki söz dizimiyle uygulayabilirsiniz:

  • models:/<model-name>/latest: Modelin son sürümünü yükleyin.
  • models:/<model-name>/<version-number>: Modelin belirli bir sürümünü yükleyin.
  • models:/<model-name>/<stage-name>: Bir model için belirli bir aşamada belirli bir sürümü yükleyin. Daha fazla bilgi için Model aşamalarıyla çalışma başlıklı bölüme bakın.

İşlevler mlflow.<flavor>.load_model() ve mlflow.pyfunc.load_model() arasındaki farkları anlamak için MLflow modellerini yüklemek için iş akışlarına bakın.

Model aşamaları üzerinde çalışmak

MLflow, modelin yaşam döngüsünü yönetme aşamalarını destekler. Model sürümü bir aşamadan diğerine geçiş yapabilir. Aşamalar, modelin belirli sürümlerine atanır. Bir modelin farklı aşamalarda birden çok sürümü olabilir.

Önemli

Aşamalara yalnızca MLflow SDK'sını kullanarak erişebilirsiniz. Azure Machine Learning stüdyosunda görünmüyorlar. Azure Machine Learning SDK'sını, Azure Machine Learning CLI'sını veya Azure Machine Learning REST API'sini kullanarak aşamaları alamazsınız. Belirli bir model aşamasından dağıtım şu anda desteklenmiyor.

Sorgu modeli aşamaları

Modeli kayıt defterinden alarak her model aşaması için model sürümlerini görebilirsiniz. Aşağıdaki kod, şu anda Staging aşamasında olan model sürümünü alır:

client.get_latest_versions(model_name, stages=["Staging"])

MLflow'da aynı anda birden çok model sürümü aynı aşamada olabilir. Önceki örnekte yöntemi, aşamanın tüm sürümleri arasında en son (en son) sürümü döndürür.

Önemli

MLflow SDK'sında aşama adları büyük/küçük harfe duyarlıdır.

Geçiş modeli sürümü

MLflow istemcisini kullanarak model sürümünü belirli bir aşamaya geçirin:

client.transition_model_version_stage(model_name, version=3, stage="Staging")

Bir model sürümünü belirli bir aşamaya geçirdiğinizde, bu aşamadaki mevcut model sürümleri değişmeden kalır. Bu davranış varsayılandır.

Mevcut model sürümlerini Archived aşamasına taşımak için, geçiş sırasında archive_existing_versions=True parametresini ayarlayın.

client.transition_model_version_stage(
    model_name, version=3, stage="Staging", archive_existing_versions=True
)

Aşamalardan model yükleme

İşlevi ve aşağıdaki URI biçimini kullanarak load_model modeli belirli bir aşamada doğrudan Python'dan yükleyebilirsiniz. Bu yöntemin başarılı olması için çalışma ortamınızdaki tüm kitaplıkları ve bağımlılıkları yüklemeniz gerekir.

Modeli Staging aşamasından yükleyin.

model = mlflow.pyfunc.load_model(f"models:/{model_name}/Staging")

Modelleri düzenleme ve silme

Hem MLflow hem de Azure Machine Learning kayıtlı modelleri düzenlemeyi destekler, ancak bazı önemli farklılıklar vardır. Aşağıdaki bölümlerde bazı seçenekler açıklanmaktadır.

Not

Model nesneleri sabit olduğundan Azure Machine Learning'de modelleri yeniden adlandırma desteklenmez.

Model açıklamasını ve etiketlerini düzenleme

MLflow SDK'sını kullanarak modelin açıklamasını ve etiketlerini düzenleyebilirsiniz:

client.update_model_version(model_name, version=1, description="My classifier description")

Etiketleri düzenlemek için set_model_version_tag ve remove_model_version_tag yöntemlerini kullanın.

client.set_model_version_tag(model_name, version="1", key="type", value="classification")

Etiketi kaldırmak için yöntemini delete_model_version_tag kullanın:

client.delete_model_version_tag(model_name, version="1", key="type")

Model sürümünü silme

MLflow istemcisini kullanarak kayıt defterindeki herhangi bir model sürümünü silebilirsiniz:

client.delete_model_version(model_name, version="2")

Not

Machine Learning, model kapsayıcısının tamamını silmeyi desteklemez. Bu görevi gerçekleştirmek için belirli bir modelin tüm model sürümlerini silin.

Modelleri yönetmek için desteklenen özellikleri gözden geçirin

MLflow istemcisi modelleri almak ve yönetmek için çeşitli yöntemler sunar. Aşağıdaki tabloda, Azure Machine Learning'e bağlanıldığında MLflow'da desteklenen yöntemler listelenmektedir. Tablo ayrıca MLflow'un Azure Machine Learning'deki diğer model yönetimi özellikleriyle karşılaştırır.


Özellik açıklaması
Yalnızca MLflow MLflow ile Machine Learning Machine Learning CLI v2 Makine Öğrenimi Stüdyosu
Modelleri MLflow biçiminde kaydetme
MLflow biçiminde olmayan modelleri kaydetme
Çalıştırmaların çıktılarından/artefaktlarından modelleri kaydetme 1 2
Farklı bir izleme sunucusu veya çalışma alanında çalıştırma çıkışlarından veya nesnelerinden modelleri kaydetmek 5 5
Kayıtlı modelleri arama/listeleme
Kayıtlı modelin sürümlerinin ayrıntılarını alma
Kayıtlı modelin sürüm açıklamasını düzenleme
Kayıtlı modelin sürüm etiketlerini düzenleme
Kayıtlı modelleri yeniden adlandırma 3 3 3
Kayıtlı modeli silme (kapsayıcı) 3 3 3
Kayıtlı modelin sürümünü silme
MLflow modeli aşamalarını yönetme
Adına göre kayıtlı modelleri ara 4
Kayıtlı modelleri, dize karşılaştırıcılarını LIKE kullanarak ILIKE arayın 4
Kayıtlı modelleri etikete göre arama 4
Kuruluş kayıt defterleri desteği

Tablo dipnotları:

  • 1 Biçiminde runs:/<ruin-id>/<path>Tekdüzen Kaynak Tanımlayıcıları (URI' ler) kullanın.
  • 2azureml://jobs/<job-id>/outputs/artifacts/<path> biçiminde URI'leri kullanın.
  • 3 Kayıtlı modeller, Azure Machine Learning'de sabit nesnelerdir.
  • 4 Azure Machine Learning stüdyosu arama kutusunu kullanın. Kısmi eşleştirme desteklenir.
  • 5 Modelleri farklı çalışma alanları arasında taşımak ve kökeni korumak için kayıt defterlerini kullanın.