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 MLflowazureml-mlflow
iç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.
- Çalışma alanınızda MLflow işlemlerinizi gerçekleştirmek için hangi erişim izinlerine ihtiyacınız olduğunu görün.
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 birMlflowClient
nesne oluşturabilirsiniz. Bu öğreticide, böyle bir MLflow istemcisine başvurmak için nesnesiclient
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_timestamp
version
ve last_updated_timestamp
gibi name
belirli 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 Staging
olan 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 Archived
taşı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_tag
yö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.