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 Learningazureml-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 birMlflowClient
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_timestamp
veya last_updated_timestamp
gibi name
belirli 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 Archived
taşı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.
İlgili içerik
- MLflow modelleri için günlüğe kaydetmeyi keşfetme
- MLflow ile denemeleri ve çalıştırmaları sorgulama ve karşılaştırma
- MLflow modellerini dağıtma yönergelerini gözden geçirin