Melacak eksperimen Azure Databricks ML dengan MLflow dan Azure Machine Learning

MLflow adalah pustaka sumber terbuka untuk mengelola siklus hidup eksperimen pembelajaran mesin. Anda dapat menggunakan MLflow untuk mengintegrasikan Azure Databricks dengan Azure Pembelajaran Mesin untuk memastikan Anda mendapatkan yang terbaik dari kedua produk.

Dalam artikel ini, Anda akan mempelajari:

Prasyarat

Contoh buku catatan

Model Pelatihan di Azure Databricks dan menyebarkannya di Azure Pembelajaran Mesin menunjukkan cara melatih model di Azure Databricks dan menyebarkannya di Azure Pembelajaran Mesin. Ini juga termasuk cara menangani kasus di mana Anda juga ingin melacak eksperimen dan model dengan instans MLflow di Azure Databricks dan memanfaatkan Azure Pembelajaran Mesin untuk penyebaran.

Menginstal pustaka

Untuk menginstal pustaka pada kluster Anda, navigasi ke tab Pustaka dan pilih Instal Baru

mlflow with azure databricks

Di bidang Paket, ketik azureml-mlflow lalu pilih instal. Ulangi langkah ini seperlunya untuk menginstal paket tambahan lainnya ke kluster Anda sebagai eksperimen.

Azure DB install mlflow library

Lacak Azure Databricks berjalan dengan MLflow

Azure Databricks dapat dikonfigurasi untuk melacak eksperimen menggunakan MLflow dengan dua cara:

Secara default, pelacakan ganda dikonfigurasi untuk Anda saat Anda menautkan ruang kerja Azure Databricks Anda.

Pelacakan ganda di Azure Databricks dan Azure Machine Learning

Menautkan ruang kerja ADB ke ruang kerja Azure Machine Learning memungkinkan Anda melacak data eksperimen di ruang kerja Azure Machine Learning dan ruang kerja Azure Databricks secara bersamaan. Ini disebut sebagai Pelacakan ganda.

Peringatan

Pelacakan ganda tidak didukung di Microsoft Azure yang dioperasikan oleh 21Vianet saat ini. Konfigurasikan pelacakan eksklusif dengan ruang kerja Azure Machine Learning Anda.

Untuk menautkan ruang kerja ADB Anda ke ruang kerja Azure Machine Learning yang baru atau yang sudah ada,

  1. Masuk ke portal Microsoft Azure.
  2. Arahkan ke halaman Ringkasan ruang kerja ADB Anda.
  3. Pilih tombol Tautkan ruang kerja Pembelajaran Mesin Azure di kanan bawah.

Link Azure DB and Azure Machine Learning workspaces

Setelah Anda menautkan ruang kerja Azure Databricks dengan ruang kerja Azure Machine Learning, Pelacakan MLflow secara otomatis diatur untuk dilacak di semua tempat berikut:

  • Ruang kerja Azure Machine Learning yang ditautkan.
  • Ruang kerja ADB asli Anda.

Anda dapat menggunakan MLflow di Azure Databricks dengan cara yang sama seperti yang biasa Anda gunakan. Contoh berikut menetapkan nama eksperimen seperti yang biasanya dilakukan di Azure Databricks dan mulai mencatat beberapa parameter:

import mlflow 

experimentName = "/Users/{user_name}/{experiment_folder}/{experiment_name}" 
mlflow.set_experiment(experimentName) 

with mlflow.start_run():
   mlflow.log_param('epochs', 20)
   pass

Catatan

Berbeda dengan pelacakan, registri model tidak mendukung pendaftaran model secara bersamaan pada Azure Machine Learning dan Azure Databricks. Salah satu dari keduanya harus digunakan. Harap baca bagian Mendaftarkan model di registri dengan MLflow untuk detail selengkapnya.

Melacak secara eksklusif di ruang kerja Azure Machine Learning

Jika Anda lebih suka mengelola eksperimen terlacak di lokasi terpusat, Anda dapat menyetel pelacakan MLflow ke hanya melacak di ruang kerja Azure Machine Learning Anda. Konfigurasi ini memiliki keuntungan mengaktifkan jalur penyebaran yang lebih mudah menggunakan opsi penyebaran Azure Machine Learning.

Anda harus mengonfigurasi URI pelacakan MLflow untuk mengarahkan secara eksklusif ke Azure Machine Learning, seperti yang ditunjukkan dalam contoh berikut:

Mengonfigurasi URI pelacakan

  1. Dapatkan URI pelacakan untuk ruang kerja Anda:

    BERLAKU UNTUK:ekstensi ml Azure CLI v2 (saat ini)

    1. Masuk dan konfigurasikan ruang kerja Anda:

      az account set --subscription <subscription>
      az configure --defaults workspace=<workspace> group=<resource-group> location=<location> 
      
    2. Anda bisa mendapatkan URI pelacakan menggunakan az ml workspace perintah :

      az ml workspace show --query mlflow_tracking_uri
      
  2. Mengonfigurasi URI pelacakan:

    Kemudian metode set_tracking_uri() tersebut mengarahkan URI pelacakan MLflow ke URI tersebut.

    import mlflow
    
    mlflow.set_tracking_uri(mlflow_tracking_uri)
    

    Tip

    Saat mengerjakan lingkungan bersama, seperti kluster Azure Databricks, kluster Azure Synapse Analytics, atau sejenisnya, berguna untuk mengatur variabel MLFLOW_TRACKING_URI lingkungan di tingkat kluster untuk secara otomatis mengonfigurasi URI pelacakan MLflow untuk menunjuk ke Azure Pembelajaran Mesin untuk semua sesi yang berjalan di kluster daripada melakukannya per sesi.

    Configure the environment variables in an Azure Databricks cluster

    Setelah variabel lingkungan dikonfigurasi, eksperimen apa pun yang berjalan di kluster tersebut akan dilacak di Azure Pembelajaran Mesin.

Mengonfigurasi autentikasi

Setelah pelacakan dikonfigurasi, Anda juga perlu mengonfigurasi bagaimana autentikasi perlu terjadi ke ruang kerja terkait. Secara default, plugin Azure Pembelajaran Mesin untuk MLflow akan melakukan autentikasi interaktif dengan membuka browser default untuk meminta kredensial. Lihat Mengonfigurasi MLflow untuk Azure Pembelajaran Mesin: Mengonfigurasi autentikasi ke cara tambahan untuk mengonfigurasi autentikasi untuk MLflow di ruang kerja Azure Pembelajaran Mesin.

Untuk pekerjaan interaktif di mana ada pengguna yang terhubung ke sesi, Anda dapat mengandalkan Autentikasi Interaktif dan karenanya tidak ada tindakan lebih lanjut yang diperlukan.

Peringatan

Autentikasi browser interaktif akan memblokir eksekusi kode saat meminta kredensial. Ini bukan opsi yang cocok untuk autentikasi di lingkungan tanpa pengawas seperti pekerjaan pelatihan. Sebaiknya konfigurasikan mode autentikasi lainnya.

Untuk skenario di mana eksekusi tanpa pengawas diperlukan, Anda harus mengonfigurasi perwakilan layanan untuk berkomunikasi dengan Azure Pembelajaran Mesin.

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

Tip

Saat bekerja pada lingkungan bersama, disarankan untuk mengonfigurasi variabel lingkungan ini di komputasi. Sebagai praktik terbaik, kelola sebagai rahasia dalam instans Azure Key Vault jika memungkinkan. Misalnya, di Azure Databricks Anda dapat menggunakan rahasia dalam variabel lingkungan sebagai berikut dalam konfigurasi kluster: AZURE_CLIENT_SECRET={{secrets/<scope-name>/<secret-name>}}. Lihat Mereferensikan rahasia dalam variabel lingkungan untuk cara melakukannya di Azure Databricks atau lihat dokumentasi serupa di platform Anda.

Nama eksperimen dalam Azure Machine Learning

Ketika MLflow dikonfigurasi untuk melacak eksperimen secara eksklusif di ruang kerja Azure Machine Learning, konvensi penamaan eksperimen harus mengikuti konvensi penamaan yang digunakan oleh Azure Machine Learning. Di Azure Databricks, eksperimen diberi nama dengan jalur ke tempat eksperimen disimpan seperti /Users/alice@contoso.com/iris-classifier. Namun, dalam Azure Machine Learning, Anda harus memberikan nama eksperimen secara langsung. Seperti dalam contoh sebelumnya, eksperimen yang sama akan dinamai iris-classifier secara langsung:

mlflow.set_experiment(experiment_name="experiment-name")

Parameter pelacakan, metrik, dan artefak

Anda dapat menggunakan MLflow di Azure Databricks dengan cara yang sama seperti yang biasa Anda gunakan. Untuk detailnya, lihat Log & lihat metrik dan file log.

Model pengelogan dengan MLflow

Setelah model Anda dilatih, Anda dapat mencatatnya ke server pelacakan dengan metode mlflow.<model_flavor>.log_model(). <model_flavor>, mengacu pada kerangka kerja yang terkait dengan model. Pelajari rasa model apa yang didukung. Dalam contoh berikut, model yang dibuat dengan pustaka Spark MLLib sedang didaftarkan:

mlflow.spark.log_model(model, artifact_path = "model")

Patut disebutkan bahwa rasa spark tidak sesuai dengan fakta bahwa kami melatih model di kluster Spark tetapi karena kerangka kerja pelatihan yang digunakan (Anda dapat melatih model dengan sempurna menggunakan TensorFlow dengan Spark dan karenanya rasa yang akan digunakan adalah tensorflow).

Model dicatat di dalam eksekusi yang sedang dilacak. Itu artinya bahwa model tersedia baik di Azure Databricks dan Azure Machine Learning (default) atau secara eksklusif di Azure Machine Learning jika Anda mengonfigurasi URI pelacakan untuk mengarah ke Azure Machine Learning.

Penting

Perhatikan bahwa di sini parameter registered_model_name belum ditentukan. Baca bagian Mendaftarkan model di registri dengan MLflow untuk detail selengkapnya tentang implikasi parameter tersebut dan cara kerja registri.

Mendaftarkan model di registri dengan MLflow

Dibandingkan dengan pelacakan, registri model tidak dapat beroperasi secara bersamaan di Azure Databricks dan Azure Machine Learning. Salah satu dari keduanya harus digunakan. Secara default, ruang kerja Azure Databricks digunakan untuk registri model; kecuali Anda memilih untuk mengatur Pelacakan MLFlow agar hanya melacak di ruang kerja Azure Machine Learning Anda, maka registri model adalah ruang kerja Azure Machine Learning.

Kemudian, dengan pertimbangan Anda menggunakan konfigurasi default, baris berikut akan mencatat model di dalam eksekusi Azure Databricks dan Azure Machine Learning yang sesuai, tetapi hanya akan mendaftarkannya di Azure Databricks:

mlflow.spark.log_model(model, artifact_path = "model", 
                       registered_model_name = 'model_name')  
  • Jika model terdaftar dengan nama tidak ada, metode ini mendaftarkan model baru, membuat versi 1, dan mengembalikan objek MLflow ModelVersion.

  • Jika sudah ada model terdaftar dengan nama, metode akan membuat versi model baru dan mengembalikan objek versi.

Menggunakan Azure Machine Learning terdaftar dengan MLflow

Jika Anda ingin menggunakan Azure Machine Learning Model terdaftar alih-alih Azure Databricks, kami sarankan Anda mengatur Pelacakan MLflow untuk hanya melacak di ruang kerja Azure Machine Learning Anda. Ini akan menghapus ambiguitas mengenai tempat model sedang didaftarkan dan menyederhanakan kompleksitas.

Namun, jika Anda ingin terus menggunakan kemampuan pelacakan ganda tetapi mendaftarkan model di Azure Pembelajaran Mesin, Anda dapat menginstruksikan MLflow untuk menggunakan Azure Pembelajaran Mesin untuk registri model dengan mengonfigurasi URI MLflow Model Registry. URI ini memiliki format dan nilai yang sama persis dengan URI pelacakan MLflow.

mlflow.set_registry_uri(azureml_mlflow_uri)

Catatan

Nilai azureml_mlflow_uri diperoleh dengan cara yang sama seperti yang ditunjukkan di Mengatur Pelacakan MLflow untuk hanya melacak di ruang kerja Azure Machine Learning Anda

Untuk contoh lengkap tentang skenario ini, silakan periksa contoh Model pelatihan di Azure Databricks dan sebarkan di Azure Pembelajaran Mesin.

Menyebarkan dan mengonsumsi model yang terdaftar di Azure Machine Learning

Model yang terdaftar di Layanan Azure Machine Learning yang menggunakan MLflow dapat dikonsumsi sebagai:

  • Titik akhir Azure Machine Learning (real-time dan batch): Penyebaran ini memungkinkan Anda memanfaatkan kemampuan penyebaran Azure Machine Learning untuk inferensi real time dan batch dalam Azure Container Instances (ACI) Azure Kubernetes (AKS) atau titik akhir Inferensi Terkelola (MIR) kami.

  • Objek model MLFlow atau UDF Pandas, yang dapat digunakan di buku catatan Azure Databricks dalam alur streaming atau batch.

Menyebarkan model ke titik akhir Azure Machine Learning

Anda dapat memanfaatkan plugin azureml-mlflow untuk menyebarkan model ke ruang kerja Azure Machine Learning Anda. Periksa halaman Cara menyebarkan model MLflow untuk detail lengkap tentang cara menyebarkan model ke target yang berbeda.

Penting

Model perlu didaftarkan di registri Azure Machine Learning untuk menyebarkannya. Jika model Anda terdaftar di instans MLflow di dalam Azure Databricks, Anda harus mendaftarkannya lagi di Azure Machine Learning. Jika demikian, silakan periksa contoh Model pelatihan di Azure Databricks dan sebarkan di Azure Pembelajaran Mesin

Menyebarkan model ke ADB untuk penilaian batch menggunakan UDF

Anda dapat memilih Azure Databricks untuk penilaian batch. Dengan memanfaatkan Mlflow, Anda dapat menyelesaikan model apa pun dari registri yang terhubung dengan Anda. Anda biasanya akan menggunakan salah satu dari dua metode berikut:

  • Jika model Anda dilatih dan dibangun dengan pustaka Spark (seperti MLLib), gunakan mlflow.pyfunc.spark_udf untuk memuat model dan menggunakannya sebagai UDF Spark Pandas untuk menilai data baru.
  • Jika model Anda tidak dilatih atau dibangun dengan pustaka Spark, gunakan mlflow.pyfunc.load_model atau mlflow.<flavor>.load_model untuk memuat model di driver kluster. Perhatikan bahwa dengan cara ini, paralelisasi atau distribusi kerja apa pun yang ingin Anda lakukan di kluster perlu diorkestrasi oleh Anda. Selain itu, perhatikan bahwa MLflow tidak menginstal pustaka apa pun yang diperlukan model Anda untuk dijalankan. Pustaka tersebut perlu diinstal di kluster sebelum menjalankannya.

Contoh berikut menunjukkan cara memuat model dari registri bernama uci-heart-classifier dan menggunakannya sebagai Spark Pandas UDF untuk menilai data baru.

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) 

Tip

Periksa Memuat model dari registri untuk cara lain untuk mereferensikan model dari registri.

Setelah model dimuat, Anda dapat menggunakan untuk menilai data baru:

#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) 

Membersihkan sumber daya

Jika Anda ingin menyimpan ruang kerja Azure Databricks, tetapi tidak lagi memerlukan ruang kerja Azure Pembelajaran Mesin, Anda dapat menghapus ruang kerja Azure Pembelajaran Mesin. Tindakan ini mengakibatkan membatalkan tautan ruang kerja Azure Databricks dan ruang kerja Azure Pembelajaran Mesin.

Jika Anda tidak berencana untuk menggunakan metrik dan artefak yang dicatat di ruang kerja Anda, kemampuan untuk menghapusnya satu per satu tidak tersedia saat ini. Sebagai gantinya, hapus grup sumber daya yang berisi akun penyimpanan dan ruang kerja, sehingga Anda tidak dikenakan biaya apa pun:

  1. Dari portal Microsoft Azure, pilih Grup sumber daya dari sisi sebelah kiri.

    Delete in the Azure portal

  2. Dari daftar, pilih grup sumber daya yang Anda buat.

  3. Pilih Hapus grup sumber daya.

  4. Masukkan nama grup sumber daya. Kemudian pilih Hapus.

Langkah berikutnya