MLflow ile Azure Machine Learning'de model kayıt defterlerini 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 yolunu temsil eder. Aşağıdaki makalede farklı özellikler ve diğer seçeneklerle karşılaştırması açıklanmaktadır.

Önkoşullar

  • MLflow SDK paketini mlflow ve MLflow azureml-mlflowiçin Azure Machine Learning 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 . mlflow-skinny dağıtımlar da dahil olmak üzere tüm özellik paketini içeri aktarmadan öncelikle MLflow'un izleme ve günlüğe kaydetme özelliklerine ihtiyaç duyan kullanıcılar için önerilir.

  • Azure Machine Learning çalışma alanı. Makine öğrenmesi kaynakları oluşturma öğreticisini izleyerek bir tane oluşturabilirsiniz.

  • Uzaktan izleme (yani Azure Machine Learning dışında çalışan izleme denemeleri) gerçekleştiriyorsanız, 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.

  • Kuruluş kayıt defterlerinin MLflow ile model yönetimi için desteklenmediğini fark edin.

  • Bazı işlemler doğrudan MLflow akıcı API'si (mlflow.<method> ) kullanılarak yürütülebilir. Ancak, başkalarının MLflow protokolünde Azure Machine Learning ile iletişim kurmasına olanak tanıyan bir MLflow istemcisi oluşturması gerekebilir. Aşağıdaki gibi bir MlflowClient nesne oluşturabilirsiniz. Bu öğreticide, böyle bir MLflow istemcisine başvurmak için nesnesi client kullanılır.

    import mlflow
    
    client = mlflow.tracking.MlflowClient()
    

Kayıt defterine yeni modeller 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ümde, MLflow SDK'sını kullanarak modelleri kayıt defterine kaydetmenin birden çok yolu açıklanmaktadır.

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

Çalıştırmanın içinde günlüğe kaydedilmiş bir MLflow modeliniz varsa ve bunu bir kayıt defterine kaydetmek istiyorsanız, çalıştırma kimliğini ve modelin günlüğe kaydedildiği yolu kullanın. Bu bilgilere sahip değilseniz nasıl sorgulayabileceğinizi öğrenmek için bkz . MLflow ile denemeleri ve çalıştırmaları yönetme.

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

Not

Modeller yalnızca çalıştırmanın izlendiği çalışma alanında kayıt defterine kaydedilebilir. Çalışma alanları arası işlemler Şu anda Azure Machine Learning'de desteklenmez.

İpucu

Çalıştırmalardan modelleri kaydetmenizi veya varlığı oluşturan işin kökenini tuttuğundan çalıştırmanın içinden yöntemini mlflow.<flavor>.log_model kullanmanızı öneririz.

Varlıklardan model oluşturma

MLModel MLflow modeline sahip bir klasörünüz varsa doğrudan kaydedebilirsiniz. Modelin her zaman çalıştırma bağlamında olması gerekmez. Bunu yapmak için URI şemasını file://path/to/model kullanarak yerel dosya sisteminde depolanan MLflow modellerini kaydedebilirsiniz. Kullanarak Scikit-Learn basit bir model oluşturalım ve bunu yerel depolamada MLflow biçiminde kaydedelim:

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

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

Şimdi modeli yerel yoldan kaydedebilirsiniz:

import os

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

Model kayıt defterlerini sorgulama

Kayıt defterinde kayıtlı modelleri sorgulamak ve aramak için MLflow SDK'sını kullanabilirsiniz. Aşağıdaki bölümde bunu başarmanın birden çok yolu açıklanmaktadır.

Kayıt defterindeki tüm modelleri sorgulama

MLflow istemcisini kullanarak kayıt defterindeki tüm kayıtlı modelleri sorgulayabilirsiniz. Aşağıdaki örnek, modelin tüm adlarını yazdırır:

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

, , creation_timestampversionve last_updated_timestampgibi namebelirli bir özelliğe göre sıralamak için kullanınorder_by:

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

Not

MLflow 2.0 önerisi: Mlflow'un eski sürümlerinde (<2.0) bunun yerine yöntemi MlflowClient.list_registered_models() kullanın.

Modelin belirli sürümlerini alma

search_registered_models() komutu, tüm model sürümlerini içeren model nesnesini alır. Ancak, belirli bir modelin son kayıtlı model sürümünü almak istiyorsanız kullanabilirsiniz get_registered_model:

client.get_registered_model(model_name)

Modelin belirli bir sürümüne ihtiyacınız varsa şunları belirtebilirsiniz:

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. Aşağıdaki söz dizimini kullanarak yüklemek istediğiniz modelin URI'sini gösteren veya mlflow.pyfunc.load_model() işlevlerini mlflow.<flavor>.load_model() kullanın:

  • models:/<model-name>/latest, modelin son sürümünü yüklemek için.
  • models:/<model-name>/<version-number>, modelin belirli bir sürümünü yüklemek için.
  • models:/<model-name>/<stage-name>, belirli bir model için belirli bir aşamadaki belirli bir sürümü yüklemek için. Ayrıntılar için Model aşamalarını görüntüleyin.

İpucu

ile arasındaki mlflow.<flavor>.load_model() fark hakkında bilgi edinmek için MLflow modellerini yüklemeye yönelik iş akışlarını görüntüleyin.mlflow.pyfunc.load_model()

Model aşamaları

MLflow, modelin yaşam döngüsünü yönetme aşamalarını destekler. Modelin sürümü bir aşamadan diğerine geçiş yapabilir. Aşamalar modelin sürümüne (modeller yerine) atanır; bu da belirli bir modelin farklı aşamalarda birden çok sürümü olabileceği anlamına gelir.

Önemli

Aşamalara yalnızca MLflow SDK'sı kullanılarak erişilebilir. Azure ML Studio portalında gösterilmez ve Azure ML SDK, Azure ML CLI veya Azure ML REST API kullanılarak alınamaz. Belirli bir modelin aşamasından dağıtım oluşturma şu an için desteklenmiyor.

Model aşamalarını sorgulama

Modelin olası tüm aşamalarını denetlemek için MLflow istemcisini kullanabilirsiniz:

client.get_model_version_stages(model_name, version="latest")

Modeli kayıt defterinden alarak her aşamada hangi modelin sürümünün olduğunu görebilirsiniz. Aşağıdaki örnek, şu anda aşamasında Stagingolan modelin sürümünü alır.

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

Not

Mlflow'da birden çok sürüm aynı aşamada olabilir, ancak bu yöntem tümü arasında en son sürümü (daha yüksek sürüm) döndürür.

Uyarı

Aşama adları büyük/küçük harfe duyarlıdır.

Modelleri geçirme

Modelin sürümünü belirli bir aşamaya geçirme işlemi MLflow istemcisi kullanılarak yapılabilir.

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

Varsayılan olarak, bu aşamada mevcut bir model sürümü varsa, orada kalır. Bu nedenle, birden çok modelin sürümleri aynı anda aynı aşamada olabileceğinden değiştirilmez. Alternatif olarak, MLflow'a mevcut modelin sürümünü aşamasına Archivedtaşımasını istediğinizi belirtebilirsinizarchive_existing_versions=True.

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

Aşamalardan model yükleme

ou, işlevi ve aşağıdaki URI biçimini kullanarak load_model modeli belirli bir aşamada doğrudan Python'dan yükleyebilir. Bu yöntemin başarılı olması için, üzerinde çalıştığınız ortamda tüm kitaplıkların ve bağımlılıkların zaten yüklü olması gerektiğini fark edin.

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

Modelleri düzenleme ve silme

Kayıtlı modellerin düzenlenmesi hem Mlflow hem de Azure ML'de desteklenir. Ancak dikkat edilmesi gereken bazı farklılıklar vardır:

Uyarı

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

Modelleri düzenleme

Mlflow 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 ve remove_model_version_tagyöntemini set_model_version_tag kullanmanız gerekir:

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

Etiket kaldırılıyor:

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

Modelin sürümünü silme

Aşağıdaki örnekte gösterildiği gibi MLflow istemcisini kullanarak kayıt defterindeki herhangi bir model sürümünü silebilirsiniz:

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

Not

Azure Machine Learning, model kapsayıcısının tamamını silmeyi desteklemez. Aynı şeyi başarmak için, belirli bir modeldeki tüm model sürümlerini silmeniz gerekir.

MLflow ile modelleri yönetmeye yönelik destek matrisi

MLflow istemcisi modelleri almak ve yönetmek için çeşitli yöntemler sunar. Aşağıdaki tabloda, Azure ML'ye bağlanıldığında bu yöntemlerden hangilerinin şu anda MLflow'da desteklendiği gösterilmektedir. Ayrıca Azure ML'deki diğer model yönetimi özellikleriyle karşılaştırır.

Özellik MLflow MLflow ile Azure ML Azure ML CLIv2 Azure ML Studio
Modelleri MLflow biçiminde kaydetme
MLflow biçiminde olmayan modelleri kaydetme
Çalıştırma çıkışlarından/yapıtlarından modelleri kaydetme 1 2
Farklı bir izleme sunucusuna/çalışma alanına çıkış/yapıt çalıştırmalarından model kaydetme 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ı düzenleniyor
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
Kayıtlı modelleri ada göre arama 4
Dize karşılaştırıcılarını LIKE kullanarak kayıtlı modelleri arama ve ILIKE 4
Kayıtlı modelleri etikete göre arama 4
Kuruluş kayıt defterleri desteği

Not

  • 1 URI'leri biçimiyle runs:/<ruin-id>/<path>kullanın.
  • 2 URI'leri biçimiyle azureml://jobs/<job-id>/outputs/artifacts/<path>kullanın.
  • 3 Kayıtlı modeller, Azure ML'de sabit nesnelerdir.
  • 4 Azure ML Studio'da arama kutusunu kullanın. Kısmi eşleşme desteklenir.
  • 5 Kökenleri koruyarak modelleri farklı çalışma alanları arasında taşımak için kayıt defterlerini kullanın.

Sonraki adımlar