Bagikan melalui


Melacak model ML dengan MLflow dan Azure Machine Learning

BERLAKU UNTUK: Python SDK azureml v1

Dalam artikel ini, pelajari cara mengaktifkan Pelacakan MLflow untuk menghubungkan Azure Machine Learning sebagai backend eksperimen MLflow Anda.

MLflow adalah pustaka sumber terbuka untuk mengelola siklus hidup eksperimen pembelajaran mesin. Pelacakan MLflow adalah komponen MLflow yang mencatat dan melacak metrik dan artefak model eksekusi pelatihan Anda, apa pun lingkungan eksperimen Anda--secara lokal di komputer Anda, pada target komputasi jarak jauh, mesin virtual, atau kluster Azure Databricks.

Lihat MLflow dan Azure Machine Learning untuk semua fungsi MLflow dan Azure Machine Learning yang didukung termasuk dukungan Proyek MLflow (pratinjau) dan penyebaran modelnya.

Tip

Jika Anda ingin melacak eksperimen yang berjalan di Azure Databricks atau Azure Synapse Analytics, lihat artikel khusus Melacak eksperimen Azure Databricks ML dengan MLflow dan Azure Machine Learning atau Melacak eksperimen Azure Synapse Analytics ML dengan MLflow serta Azure Machine Learning.

Catatan

Informasi dalam dokumen ini terutama untuk ilmuwan data dan pengembang yang ingin memantau proses pelatihan model. Jika Anda adalah seorang administrator yang tertarik untuk memantau penggunaan sumber daya dan peristiwa dari Azure Machine Learning, seperti kuota, tugas pelatihan yang telah diselesaikan, atau penyebaran model yang telah diselesaikan, lihat Memantau Azure Machine Learning.

Prasyarat

Melacak eksekusi dari mesin lokal Anda atau komputasi jarak jauh

Pelacakan menggunakan MLflow dengan Azure Machine Learning memungkinkan Anda untuk menyimpan metrik dan artefak yang dicatat yang dijalankan pada mesin lokal Anda ke dalam ruang kerja Azure Machine Learning Anda.

Menyiapkan lingkungan pelacakan

Untuk melacak eksekusi yang tidak berjalan pada komputasi Azure Machine Learning (mulai sekarang disebut sebagai "komputasi lokal"), Anda harus mengarahkan komputasi lokal ke URI Pelacakan MLflow Azure Machine Learning.

Catatan

Saat berjalan di Azure Compute (Azure Notebooks, Jupyter Notebooks yang dihosting di Azure Compute Instances atau Compute Clusters), Anda tidak perlu mengonfigurasi URI pelacakan. Ini secara otomatis dikonfigurasi untuk Anda.

BERLAKU UNTUK: Python SDK azureml v1

Anda bisa mendapatkan URI pelacakan Azure Pembelajaran Mesin MLflow menggunakan Azure Pembelajaran Mesin SDK v1 untuk Python. Pastikan Anda telah menginstal pustaka azureml-sdk di kluster yang Anda gunakan: Sampel berikut mendapatkan URI pelacakan MLFLow unik yang terkait dengan ruang kerja Anda. Kemudian metode set_tracking_uri() tersebut mengarahkan URI pelacakan MLflow ke URI tersebut.

  1. Menggunakan file konfigurasi ruang kerja:

    from azureml.core import Workspace
    import mlflow
    
    ws = Workspace.from_config()
    mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
    

    Tip

    Anda dapat mengunduh file konfigurasi ruang kerja dengan:

    1. Menavigasi ke studio Azure Pembelajaran Mesin
    2. Klik di sudut kanan atas halaman -> Unduh file konfigurasi.
    3. Simpan file config.json di direktori yang sama tempat Anda bekerja.
  2. Menggunakan ID langganan, nama grup sumber daya, dan nama ruang kerja:

    from azureml.core import Workspace
    import mlflow
    
    #Enter details of your Azure Machine Learning workspace
    subscription_id = '<SUBSCRIPTION_ID>'
    resource_group = '<RESOURCE_GROUP>'
    workspace_name = '<AZUREML_WORKSPACE_NAME>'
    
    ws = Workspace.get(name=workspace_name,
                       subscription_id=subscription_id,
                       resource_group=resource_group)
    
    mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
    

Mengatur nama eksperimen

Semua eksekusi MLflow dicatat ke eksperimen aktif. Secara default, eksekusi dicatat ke dalam log eksperimen bernama Default yang dibuat secara otomatis untuk Anda. Untuk mengonfigurasi eksperimen yang ingin Anda kerjakan, gunakan perintah MLflow mlflow.set_experiment().

experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)

Tip

Saat mengirimkan pekerjaan menggunakan Azure Pembelajaran Mesin SDK, Anda dapat mengatur nama eksperimen menggunakan properti experiment_name saat mengirimkannya. Anda tidak perlu mengonfigurasinya pada skrip pelatihan Anda.

Memulai eksekusi pelatihan

Setelah mengatur nama eksperimen MLflow, Anda dapat memulai eksekusi pelatihan dengan start_run(). Kemudian gunakan log_metric() untuk mengaktifkan MLflow logging API dan mulai mencatat metrik eksekusi pelatihan Anda.

import os
from random import random

with mlflow.start_run() as mlflow_run:
    mlflow.log_param("hello_param", "world")
    mlflow.log_metric("hello_metric", random())
    os.system(f"echo 'hello world' > helloworld.txt")
    mlflow.log_artifact("helloworld.txt")

Untuk detail tentang cara mencatat metrik, parameter, dan artefak dalam proses menggunakan tampilan MLflow Cara mencatat dan menampilkan metrik.

Melacak eksekusi alur yang berjalan di Azure Machine Learning

BERLAKU UNTUK: Python SDK azureml v1

Eksekusi jarak jauh (pekerjaan) memungkinkan Anda melatih model Anda dengan cara yang lebih kuat dan berulang. Mereka juga bisa memanfaatkan komputasi yang lebih canggih, seperti kluster Komputasi Pembelajaran Mesin. Lihat Menggunakan target komputasi untuk pelatihan model untuk mempelajari tentang berbagai opsi komputasi.

Saat mengirimkan eksekusi, Azure Machine Learning mengonfigurasi MLflow secara otomatis untuk bekerja dengan ruang kerja tempat eksekusi dijalankan. Ini berarti bahwa tidak perlu mengonfigurasi URI pelacakan MLflow. Selain itu, eksperimen secara otomatis diberi nama berdasarkan detail pengiriman eksperimen.

Penting

Saat mengirimkan pekerjaan pelatihan ke Azure Machine Learning, Anda tidak perlu mengonfigurasi URI pelacakan MLflow pada logika pelatihan Anda karena sudah dikonfigurasikan untuk Anda. Tidak perlu mengonfigurasi nama eksperimen dalam rutinitas pelatihan Anda.

Membuat sebuah rutinitas pelatihan

Pertama, Anda harus membuat subdirektori src dan membuat file dengan kode pelatihan Anda di file train.py pada subdirektori src. Semua kode pelatihan Anda akan masuk ke subdirektori src , termasuk train.py.

Kode pelatihan diambil dari contoh MLfLow ini di repositori contoh Azure Machine Learning.

Salin kode berikut ke dalam file:

# imports
import os
import mlflow

from random import random

# define functions
def main():
    mlflow.log_param("hello_param", "world")
    mlflow.log_metric("hello_metric", random())
    os.system(f"echo 'hello world' > helloworld.txt")
    mlflow.log_artifact("helloworld.txt")


# run functions
if __name__ == "__main__":
    # run main function
    main()

Mengonfigurasi eksperimen

Anda harus menggunakan Python untuk mengirimkan eksperimen ke Azure Machine Learning. Di buku catatan atau file Python, konfigurasikan lingkungan komputasi dan eksekusi latihan Anda dengan kelas Environment.

from azureml.core import Environment
from azureml.core.conda_dependencies import CondaDependencies

env = Environment(name="mlflow-env")

# Specify conda dependencies with scikit-learn and temporary pointers to mlflow extensions
cd = CondaDependencies.create(
    conda_packages=["scikit-learn", "matplotlib"],
    pip_packages=["azureml-mlflow", "pandas", "numpy"]
    )

env.python.conda_dependencies = cd

Kemudian, bangun ScriptRunConfig dengan komputasi jarak jauh Anda sebagai target komputasi.

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory="src",
                      script=training_script,
                      compute_target="<COMPUTE_NAME>",
                      environment=env)

Dengan konfigurasi komputasi dan eksekusi latihan ini, gunakan metode Experiment.submit() untuk mengirim eksekusi. Metode ini secara otomatis mengatur URI pelacakan MLflow dan mengarahkan pencatatan dari MLflow ke Ruang Kerja Anda.

from azureml.core import Experiment
from azureml.core import Workspace
ws = Workspace.from_config()

experiment_name = "experiment_with_mlflow"
exp = Experiment(workspace=ws, name=experiment_name)

run = exp.submit(src)

Melihat metrik dan artefak di ruang kerja Anda

Metrik dan artefak dari pengelogan MLflow dilacak di ruang kerja Anda. Untuk melihatnya kapan saja, buka ruang kerja Anda dan temukan eksperimen berdasarkan nama di ruang kerja Anda di studio Azure Machine Learning. Atau jalankan kode di bawah ini.

Ambil metrik eksekusi menggunakan get_run() MLflow.

from mlflow.tracking import MlflowClient

# Use MlFlow to retrieve the run that was just completed
client = MlflowClient()
run_id = mlflow_run.info.run_id
finished_mlflow_run = MlflowClient().get_run(run_id)

metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params

print(metrics,tags,params)

Untuk melihat artefak sebuah eksekusi, Anda dapat menggunakan MlFlowClient.list_artifacts()

client.list_artifacts(run_id)

Untuk mengunduh artefak ke direktori saat ini, Anda dapat menggunakan MLFlowClient.download_artifacts()

client.download_artifacts(run_id, "helloworld.txt", ".")

Untuk detail selengkapnya tentang cara mengambil informasi dari eksperimen dan eksekusi di Azure Machine Learning menggunakan tampilan MLflow Kelola eksperimen dan jalankan dengan MLflow.

Membandingkan dan membuat kueri

Bandingkan dan buat kueri untuk semua eksekusi MLflow di ruang kerja Azure Machine Learning Anda dengan kode berikut. Pelajari selengkapnya cara membuat kueri eksekusi dengan MLflow.

from mlflow.entities import ViewType

all_experiments = [exp.experiment_id for exp in MlflowClient().list_experiments()]
query = "metrics.hello_metric > 0"
runs = mlflow.search_runs(experiment_ids=all_experiments, filter_string=query, run_view_type=ViewType.ALL)

runs.head(10)

Pengelogan otomatis

Dengan Azure Machine Learning dan MLFlow, pengguna dapat mencatat metrik, parameter model, dan artefak model secara otomatis saat melatih model. Berbagai pustaka pembelajaran mesin populer didukung.

Untuk mengaktifkan pengelogan otomatis masukkan kode berikut sebelum kode pelatihan Anda:

mlflow.autolog()

Pelajari lebih lanjut Pengelogan otomatis dengan MLflow.

Mengelola model

Daftarkan dan lacak model Anda dengan registri model Azure Machine Learning yang mendukung registri model MLflow. Model Azure Machine Learning selaras dengan skema model MLflow sehingga memudahkan ekspor dan impor model ini di berbagai alur kerja. Metadata terkait MLflow seperti, ID eksekusi juga dilacak dengan model terdaftar untuk keterlacakan. Pengguna dapat mengirim eksekusi pelatihan, mendaftar, dan menyebarkan model yang dihasilkan dari eksekusi MLflow.

Jika Anda ingin menyebarkan dan mendaftarkan model siap produksi Anda dalam satu langkah, lihat Menyebarkan dan mendaftarkan model MLflow.

Untuk mendaftar dan melihat model dari eksekusi, gunakan langkah-langkah berikut:

  1. Setelah eksekusi selesai, panggil metode register_model().

    # the model folder produced from a run is registered. This includes the MLmodel file, model.pkl and the conda.yaml.
    model_path = "model"
    model_uri = 'runs:/{}/{}'.format(run_id, model_path) 
    mlflow.register_model(model_uri,"registered_model_name")
    
  2. Lihat model terdaftar di ruang kerja Anda dengan studio Azure Machine Learning.

    Dalam contoh berikut, model terdaftar my-model memiliki metadata pelacakan MLflow yang diberi tag.

    register-mlflow-model

  3. Pilih tab Artefak untuk melihat semua file model yang selaras dengan skema model MLflow (conda.yaml, MLmodel, model.pkl).

    model-schema

  4. Pilih MLmodel untuk melihat file MLmodel yang dihasilkan oleh eksekusi.

    MLmodel-schema

Membersihkan sumber daya

Jika Anda tidak berencana untuk menggunakan metrik dan artefak yang dicatat di ruang kerja Anda, saat ini tidak tersedia kemampuan untuk menghapusnya satu per satu. 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.

    Menghapus di portal Microsoft Azure

  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.

Contoh buku catatan

MLflow dengan notebook Azure Machine Learning menunjukkan dan memperluas konsep yang disajikan dalam artikel ini. Lihat juga repositori berbasis komunitas, AzureML-Examples.

Langkah berikutnya