MLflow ve Azure Machine Learning ile Azure Databricks ML denemelerini izleme
MLflow , makine öğrenmesi denemelerinizin yaşam döngüsünü yönetmeye yönelik bir açık kaynak kitaplıktır. MLflow kullanarak Azure Databricks'i Azure Machine Learning ile tümleştirerek her iki üründen de en iyi şekilde yararlanmanızı sağlayabilirsiniz.
Bu makalede aşağıdakileri öğreneceksiniz:
- Azure Databricks ve Azure Machine Learning ile MLflow kullanmak için gereken kitaplıklar.
- Azure Machine Learning'de MLflow ile Azure Databricks çalıştırmalarını izleme.
- Modelleri Azure Machine Learning'e kaydetmek için MLflow ile günlüğe kaydetme.
- Azure Machine Learning'de kayıtlı modelleri dağıtma ve kullanma.
Önkoşullar
azureml-mlflow
Kimlik doğrulaması da dahil olmak üzere Azure Machine Learning ile bağlantıyı işleyen paketi yükleyin.- Azure Databricks çalışma alanı ve kümesi.
- Azure Machine Learning Çalışma Alanı oluşturma.
- Çalışma alanınızla MLflow işlemlerinizi gerçekleştirmek için hangi erişim izinlerine ihtiyacınız olduğunu görün.
Örnek not defterleri
Azure Databricks'teki Eğitim modelleri ve bunları Azure Machine Learning'de dağıtma, Azure Databricks'te modelleri eğitmeyi ve Azure Machine Learning'de dağıtmayı gösterir. Ayrıca, Azure Databricks'teki MLflow örneğiyle denemeleri ve modelleri izlemek ve dağıtım için Azure Machine Learning'i kullanmak istediğiniz durumları işlemeyi de içerir.
Kitaplıkları yükleme
Kümenize kitaplıkları yüklemek için Kitaplıklar sekmesine gidin ve Yeni Yükle'yi seçin
Paket alanına azureml-mlflow yazın ve yükle'yi seçin. Denemeniz için kümenize başka ek paketler yüklemek için bu adımı gerektiği gibi yineleyin.
MLflow ile Azure Databricks çalıştırmalarını izleme
Azure Databricks, MLflow kullanarak denemeleri izlemek için iki şekilde yapılandırılabilir:
- Hem Azure Databricks çalışma alanında hem de Azure Machine Learning çalışma alanında izleme (çift izleme)
- Yalnızca Azure Machine Learning'de izleme
Varsayılan olarak, Azure Databricks çalışma alanınızı bağladığınızda ikili izleme sizin için yapılandırılır.
Azure Databricks ve Azure Machine Learning'de çift izleme
ADB çalışma alanınızı Azure Machine Learning çalışma alanınıza bağlamak, deneme verilerinizi Azure Machine Learning çalışma alanında ve Azure Databricks çalışma alanında aynı anda izlemenizi sağlar. Buna çift izleme denir.
Uyarı
Özel bağlantının etkinleştirildiği Azure Machine Learning çalışma alanında çift izleme şu an için desteklenmiyor. Bunun yerine Azure Machine Learning çalışma alanınızla özel izleme yapılandırın.
Uyarı
şu anda 21Vianet tarafından sağlanan Microsoft Azure'da çift izleme desteklenmiyor. Bunun yerine Azure Machine Learning çalışma alanınızla özel izleme yapılandırın.
ADB çalışma alanınızı yeni veya mevcut bir Azure Machine Learning çalışma alanına bağlamak için
- Azure portalda oturum açın.
- ADB çalışma alanınızın Genel Bakış sayfasına gidin.
- Sağ alttaki Azure Machine Learning çalışma alanını bağla düğmesini seçin.
Azure Databricks çalışma alanınızı Azure Machine Learning çalışma alanınızla ilişkilendirdikten sonra, MLflow İzleme otomatik olarak aşağıdaki tüm yerlerde izlenecek şekilde ayarlanır:
- Bağlantılı Azure Machine Learning çalışma alanı.
- Özgün ADB çalışma alanınız.
Azure Databricks'te MLflow'ı alışmış olduğunuz şekilde kullanabilirsiniz. Aşağıdaki örnek genellikle Azure Databricks'te yapıldığı için deneme adını ayarlar ve bazı parametreleri günlüğe kaydetmeye başlar:
import mlflow
experimentName = "/Users/{user_name}/{experiment_folder}/{experiment_name}"
mlflow.set_experiment(experimentName)
with mlflow.start_run():
mlflow.log_param('epochs', 20)
pass
Dekont
model kayıt defterleri, izlemenin tam tersi olarak hem Azure Machine Learning hem de Azure Databricks'te modellerin aynı anda kaydedilmesini desteklemez. Birinin veya diğerinin kullanılması gerekir. Daha fazla ayrıntı için kayıt defterindeki modelleri MLflow'a kaydetme bölümünü okuyun.
Yalnızca Azure Machine Learning çalışma alanında izleme
İzlenen denemelerinizi merkezi bir konumda yönetmeyi tercih ediyorsanız, MLflow izlemeyi yalnızca Azure Machine Learning çalışma alanınızda izlemek üzere ayarlayabilirsiniz. Bu yapılandırma, Azure Machine Learning dağıtım seçeneklerini kullanarak daha kolay dağıtım yolunu etkinleştirme avantajına sahiptir.
Uyarı
Özel bağlantı özellikli Azure Machine Learning çalışma alanı için, düzgün bağlantı sağlamak için Azure Databricks'i kendi ağınıza dağıtmanız (VNet ekleme) gerekir.
Aşağıdaki örnekte gösterildiği gibi MLflow izleme URI'sini yalnızca Azure Machine Learning'e işaret eden şekilde yapılandırmanız gerekir:
İzleme URI'lerini yapılandırma
Çalışma alanınız için izleme URI'sini alın:
ŞUNUN IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)
Oturum açın ve çalışma alanınızı yapılandırın:
az account set --subscription <subscription> az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
şu komutu kullanarak izleme URI'sini
az ml workspace
alabilirsiniz:az ml workspace show --query mlflow_tracking_uri
İzleme URI'sini yapılandırma:
Ardından yöntemi
set_tracking_uri()
MLflow izleme URI'sini bu URI'ye işaret eder.import mlflow mlflow.set_tracking_uri(mlflow_tracking_uri)
Bahşiş
Azure Databricks kümesi, Azure Synapse Analytics kümesi veya benzeri paylaşılan ortamlar üzerinde çalışırken, MLflow izleme URI'sini oturum başına yapmak yerine kümede çalışan tüm oturumlar için Azure Machine Learning'e işaret edecek şekilde otomatik olarak yapılandırmak üzere ortam değişkenini
MLFLOW_TRACKING_URI
küme düzeyinde ayarlamak yararlı olur.Ortam değişkeni yapılandırıldıktan sonra, bu kümede çalışan tüm denemeler Azure Machine Learning'de izlenir.
Kimlik doğrulamasını yapılandırma
İzleme yapılandırıldıktan sonra, kimlik doğrulamasının ilişkili çalışma alanında nasıl gerçekleşmesi gerektiğini de yapılandırmanız gerekir. Varsayılan olarak, MLflow için Azure Machine Learning eklentisi kimlik bilgilerini isteyecek varsayılan tarayıcıyı açarak etkileşimli kimlik doğrulaması gerçekleştirir. Bkz . Azure Machine Learning için MLflow yapılandırma: Azure Machine Learning çalışma alanlarında MLflow için kimlik doğrulamasını yapılandırmanın ek yollarını kullanarak kimlik doğrulamasını yapılandırma.
Oturuma bağlı bir kullanıcının bulunduğu etkileşimli işler için Etkileşimli Kimlik Doğrulaması'na güvenebilirsiniz ve bu nedenle başka işlem yapmanız gerekmez.
Uyarı
Etkileşimli tarayıcı kimlik doğrulaması, kimlik bilgileri istenirken kod yürütülmesini engeller. Eğitim işleri gibi katılımsız ortamlarda kimlik doğrulaması için uygun bir seçenek değildir. Diğer kimlik doğrulama modunu yapılandırmanızı öneririz.
Katılımsız yürütmenin gerekli olduğu senaryolarda, Azure Machine Learning ile iletişim kurmak için bir hizmet sorumlusu yapılandırmanız gerekir.
import os
os.environ["AZURE_TENANT_ID"] = "<AZURE_TENANT_ID>"
os.environ["AZURE_CLIENT_ID"] = "<AZURE_CLIENT_ID>"
os.environ["AZURE_CLIENT_SECRET"] = "<AZURE_CLIENT_SECRET>"
Bahşiş
Paylaşılan ortamlar üzerinde çalışırken, işlemde bu ortam değişkenlerinin yapılandırılması önerilir. En iyi uygulama olarak, mümkün olduğunca bunları Azure Key Vault örneğinde gizli diziler olarak yönetin. Örneğin, Azure Databricks'te küme yapılandırmasında aşağıdaki gibi ortam değişkenlerinde gizli dizileri kullanabilirsiniz: AZURE_CLIENT_SECRET={{secrets/<scope-name>/<secret-name>}}
. Azure Databricks'te nasıl yapılacağını öğrenmek için bkz . Ortam değişkeninde gizli diziye başvurma veya platformunuzda benzer belgelere başvurma.
Azure Machine Learning'de deneme adları
MLflow yalnızca Azure Machine Learning çalışma alanında denemeleri izlemek üzere yapılandırıldığında, denemenin adlandırma kuralı Azure Machine Learning tarafından kullanılana uygun olmalıdır. Azure Databricks'te denemeler, denemenin gibi /Users/alice@contoso.com/iris-classifier
kaydedildiği yol ile adlandırılır. Ancak Azure Machine Learning'de deneme adını doğrudan sağlamanız gerekir. Önceki örnekte olduğu gibi, aynı deneme doğrudan adlandırılacaktır iris-classifier
:
mlflow.set_experiment(experiment_name="experiment-name")
Parametreleri, ölçümleri ve yapıtları izleme
Azure Databricks'te MLflow'ı alışmış olduğunuz şekilde kullanabilirsiniz. Ayrıntılar için bkz . Ölçümleri ve günlük dosyalarını günlüğe kaydetme ve görüntüleme.
MLflow ile modelleri günlüğe kaydetme
Modeliniz eğitildikten sonra yöntemiyle izleme sunucusuna mlflow.<model_flavor>.log_model()
kaydedebilirsiniz. <model_flavor>
, modelle ilişkili çerçeveyi ifade eder. Hangi model tatlarının desteklendiği hakkında bilgi edinin. Aşağıdaki örnekte, Spark kitaplığı MLLib ile oluşturulan bir model kaydediliyor:
mlflow.spark.log_model(model, artifact_path = "model")
Bu aromanın spark
Spark kümesinde bir modeli eğitiyor olmamıza karşılık olmadığını, ancak kullanıldığı eğitim çerçevesi nedeniyle (Spark ile TensorFlow kullanarak bir modeli mükemmel bir şekilde eğitebilirsiniz ve bu nedenle kullanılacak lezzet olacaktır tensorflow
).
Modeller, izlenen çalıştırmanın içinde günlüğe kaydedilir. Bu, izleme URI'sini buna işaret etmek üzere yapılandırdıysanız modellerin hem Azure Databricks'te hem de Azure Machine Learning'de (varsayılan) veya yalnızca Azure Machine Learning'de kullanılabilir olduğu anlamına gelir.
Önemli
Burada parametresinin registered_model_name
belirtilmediğinden dikkat edin. Bu parametrenin etkileri ve kayıt defterinin nasıl çalıştığı hakkında daha fazla bilgi için Kayıt defterine modelleri MLflow'a kaydetme bölümünü okuyun.
MLflow ile kayıt defterine model kaydetme
Model kayıt defterleri izlemenin tersi olarak Azure Databricks ve Azure Machine Learning'de aynı anda çalışamaz . Birinin veya diğerinin kullanılması gerekir. Azure Databricks çalışma alanı varsayılan olarak model kayıt defterleri için kullanılır; MLflow İzleme'yi yalnızca Azure Machine Learning çalışma alanınızda izlemek üzere ayarlamayı seçmediğiniz sürece model kayıt defteri Azure Machine Learning çalışma alanıdır.
Ardından, varsayılan yapılandırmayı kullandığınız göz önünde bulundurularak, aşağıdaki satır hem Azure Databricks hem de Azure Machine Learning'in ilgili çalıştırmalarında bir modeli günlüğe kaydeder, ancak yalnızca Azure Databricks'e kaydeder:
mlflow.spark.log_model(model, artifact_path = "model",
registered_model_name = 'model_name')
Adlı kayıtlı bir model yoksa, yöntemi yeni bir model kaydeder, sürüm 1 oluşturur ve bir ModelVersion MLflow nesnesi döndürür.
Adlı kayıtlı bir model zaten varsa, yöntemi yeni bir model sürümü oluşturur ve sürüm nesnesini döndürür.
MLflow ile Azure Machine Learning Kayıt Defteri'ni kullanma
Azure Databricks yerine Azure Machine Learning Model Kayıt Defteri'ni kullanmak istiyorsanız, MLflow İzleme'yi yalnızca Azure Machine Learning çalışma alanınızda izlemek üzere ayarlamanızı öneririz. Bu, modellerin nerede kaydedildiği belirsizliğini ortadan kaldırır ve karmaşıklığı basitleştirir.
Ancak, çift izleme özelliklerini kullanmaya devam etmek ancak Modelleri Azure Machine Learning'e kaydetmek istiyorsanız, MLflow Model Kayıt Defteri URI'sini yapılandırarak MLflow'a model kayıt defterleri için Azure Machine Learning'i kullanmasını isteyebilirsiniz. Bu URI, MLflow izleme URI'sinin tam olarak aynı biçimine ve değerine sahiptir.
mlflow.set_registry_uri(azureml_mlflow_uri)
Dekont
değeri azureml_mlflow_uri
, MLflow İzlemeyi Yalnızca Azure Machine Learning çalışma alanınızda izlemek üzere ayarlama bölümünde de aynı şekilde elde edildi
Bu senaryo hakkında eksiksiz bir örnek için lütfen Azure Databricks'teki Eğitim modellerini inceleyin ve bunları Azure Machine Learning'de dağıtın.
Azure Machine Learning'de kayıtlı modelleri dağıtma ve kullanma
MLflow kullanılarak Azure Machine Learning Hizmeti'ne kaydedilen modeller şu şekilde kullanılabilir:
Azure Machine Learning uç noktası (gerçek zamanlı ve toplu iş): Bu dağıtım, Azure Container Instances (ACI), Azure Kubernetes (AKS) veya Yönetilen Çıkarım Uç Noktalarımızda hem gerçek zamanlı hem de toplu çıkarım için Azure Machine Learning dağıtım özelliklerinden yararlanmanızı sağlar.
Akış veya toplu işlem hatlarında Azure Databricks not defterlerinde kullanılabilen MLFlow model nesneleri veya Pandas UDF'leri.
Modelleri Azure Machine Learning uç noktalarına dağıtma
Azure Machine Learning çalışma alanınıza model dağıtmak için eklentiden azureml-mlflow
yararlanabilirsiniz. Modelleri farklı hedeflere dağıtma hakkında ayrıntılı bilgi için MLflow modellerini dağıtma sayfasına bakın.
Önemli
Modellerin dağıtılabilmesi için Azure Machine Learning kayıt defterine kaydedilmesi gerekir. Modellerinizin Azure Databricks içindeki MLflow örneğine kayıtlı olması durumunda bunları Azure Machine Learning'e yeniden kaydetmeniz gerekir. Bu durumda, lütfen Azure Databricks'teki eğitim modellerini inceleyin ve bunları Azure Machine Learning'de dağıtın
UDF'leri kullanarak toplu puanlama için modelleri ADB'ye dağıtma
Toplu puanlama için Azure Databricks kümelerini seçebilirsiniz. Mlflow'dan yararlanarak, bağlı olduğunuz kayıt defterinden herhangi bir modeli çözümleyebilirsiniz. Genellikle aşağıdaki iki yöntemden birini kullanırsınız:
- Modeliniz Spark kitaplıkları (gibi
MLLib
) ile eğitildiyse ve oluşturulduysa, modeli yüklemek için kullanınmlflow.pyfunc.spark_udf
ve yeni verileri puanlayarak Spark Pandas UDF olarak kullanın. - Modeliniz Spark kitaplıklarıyla eğitilmediyse veya oluşturulmadıysa, modeli küme sürücüsüne yüklemek için veya
mlflow.<flavor>.load_model
kullanınmlflow.pyfunc.load_model
. Bu şekilde, kümede olmasını istediğiniz tüm paralelleştirme veya iş dağıtımının sizin tarafınızdan düzenlemesi gerektiğini fark edin. Ayrıca, MLflow'un modelinizin çalışması için gereken herhangi bir kitaplığı yüklemediğini de fark edin. Bu kitaplıkların çalıştırılmadan önce kümeye yüklenmesi gerekir.
Aşağıdaki örnekte, adlı uci-heart-classifier
kayıt defterinden bir modelin nasıl yüklenip spark pandas UDF olarak yeni verileri puanlayarak nasıl kullanılacağı gösterilmektedir.
from pyspark.sql.types import ArrayType, FloatType
model_name = "uci-heart-classifier"
model_uri = "models:/"+model_name+"/latest"
#Create a Spark UDF for the MLFlow model
pyfunc_udf = mlflow.pyfunc.spark_udf(spark, model_uri)
Bahşiş
Kayıt defterinden modellere başvurmanın diğer yolları için Modelleri kayıt defterinden yükleme'ye bakın.
Model yüklendikten sonra yeni verileri puanlarken kullanabilirsiniz:
#Load Scoring Data into Spark Dataframe
scoreDf = spark.table({table_name}).where({required_conditions})
#Make Prediction
preds = (scoreDf
.withColumn('target_column_name', pyfunc_udf('Input_column1', 'Input_column2', ' Input_column3', …))
)
display(preds)
Kaynakları temizleme
Azure Databricks çalışma alanınızı korumak istiyorsanız ancak artık Azure Machine Learning çalışma alanına ihtiyacınız yoksa Azure Machine Learning çalışma alanını silebilirsiniz. Bu eylem, Azure Databricks çalışma alanınızla Azure Machine Learning çalışma alanının bağlantısının kaldırmasını sağlar.
Çalışma alanınızda günlüğe kaydedilen ölçümleri ve yapıtları kullanmayı planlamıyorsanız, bunları tek tek silme özelliği şu anda kullanılamaz. Bunun yerine, depolama hesabını ve çalışma alanını içeren kaynak grubunu silin; böylece ücret ödemezsiniz:
Azure portalının en sol tarafındaki Kaynak gruplarını seçin.
Listeden oluşturduğunuz kaynak grubunu seçin.
Kaynak grubunu sil'i seçin.
Kaynak grubu adını girin. Ardından Sil'i seçin.
Sonraki adımlar
- MLflow modellerini Azure web hizmeti olarak dağıtma.
- Modellerinizi yönetin.
- MLflow ve Azure Machine Learning ile deneme işlerini izleyin.
- Azure Databricks ve MLflow hakkında daha fazla bilgi edinin.