Aracılığıyla paylaş


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

  • Azure Machine Learning çalışma alanı. Çalışma alanı oluşturmak için Makine öğrenmesi kaynakları oluşturma öğreticisine bakın. Çalışma alanınızda MLflow işlemlerinizi gerçekleştirmek için ihtiyacınız olan erişim izinlerini gözden geçirin.

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

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

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

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

  • Çalışma alanları arası işlemler şu anda 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

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 desteklenmiyor.

İpucu

Çalıştırmalardan veya çalıştırmanın mlflow.<flavor>.log_model içinden 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 her zaman çalıştırma 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

yöntemi, save_model() yöntemiyle aynı şekilde log_model() ç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ı kullanabilirsiniz. Aşağıdaki bölümlerde bir modeli sorgulamanın iki yolu gösterilmektedir.

Kayıt defterindeki tüm modelleri sorgulama

MLflow istemcisini kullanarak kayıt defterindeki tüm kayıtlı modelleri sorgulayabilirsiniz.

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 , version, creation_timestampveya last_updated_timestampgibi namebelirli 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 kullanabilirsiniz 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 bkz . Model aşamalarıyla çalışma.

ile işlevleri mlflow.<flavor>.load_model() mlflow.pyfunc.load_model()arasındaki farkları anlamak için bkz . MLflow modellerini yüklemek için iş akışları.

Model aşamalarıyla çalışma

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ı kullanılarak erişilebilir. Bunlar Azure Machine Learning stüdyosu görünmez. Aşamalar Azure Machine Learning SDK'sı, Azure Machine Learning CLI veya Azure Machine Learning REST API kullanılarak alınamaz. Belirli bir model aşamasından dağıtım şu anda desteklenmiyor.

Sorgu modeli aşamaları

Aşağıdaki kod, modelin tüm olası aşamalarını denetlemek için MLflow istemcisini kullanır:

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

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ü

Model 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")

Bir model sürümünü belirli bir aşamaya geçirdiğinizde, aşamanın başka model sürümleri zaten varsa, mevcut sürümler değişmeden kalır. Bu davranış varsayılan olarak geçerlidir.

Bir diğer yaklaşım da geçiş sırasında parametresini archive_existing_versions=True ayarlamaktır. Bu yaklaşım, MLflow'a mevcut model sürümlerini aşamasına Archivedtaşımasını sağlar:

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 tüm kitaplıkların ve bağımlılıkların çalışma ortamınıza yüklenmesi gerekir.

Modeli aşamadan Staging yükleyin:

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

Modelleri düzenleme ve silme

Kayıtlı modelleri düzenleme hem MLflow hem de Azure Machine Learning'de desteklenir, 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 ve remove_model_version_tag yöntemlerini kullanınset_model_version_tag:

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 Machine Learning 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 sunucusu/çalışma alanında çalıştırma çıkışlarından/yapıtlarından modelleri 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ı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
Kayıtlı modelleri ada göre arama 4
Ve dize karşılaştırıcılarını LIKE kullanarak kayıtlı modelleri arama ILIKE 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.
  • 2 URI'leri biçiminde azureml://jobs/<job-id>/outputs/artifacts/<path>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.