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

Ö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

mlflow with azure databricks

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.

Azure DB install mlflow library

MLflow ile Azure Databricks çalıştırmalarını izleme

Azure Databricks, MLflow kullanarak denemeleri izlemek için iki şekilde yapılandırılabilir:

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

  1. Azure portalda oturum açın.
  2. ADB çalışma alanınızın Genel Bakış sayfasına gidin.
  3. Sağ alttaki Azure Machine Learning çalışma alanını bağla düğmesini seçin.

Link Azure DB and Azure Machine Learning workspaces

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.

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

  1. Ç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)

    1. 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> 
      
    2. şu komutu kullanarak izleme URI'sini az ml workspace alabilirsiniz:

      az ml workspace show --query mlflow_tracking_uri
      
  2. İ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.

    Configure the environment variables in an Azure Databricks cluster

    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-classifierkaydedildiğ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ın mlflow.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:

  1. Azure portalının en sol tarafındaki Kaynak gruplarını seçin.

    Delete in the Azure portal

  2. Listeden oluşturduğunuz kaynak grubunu seçin.

  3. Kaynak grubunu sil'i seçin.

  4. Kaynak grubu adını girin. Ardından Sil'i seçin.

Sonraki adımlar