Lacak eksperimen dan model ML dengan MLflow atau Azure Machine Learning CLI (v2)

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

BERLAKU UNTUK: Python SDK azure-ai-ml v2 (pratinjau)

Dalam artikel ini, pelajari cara mengaktifkan URI pelacakan dan API pencatatan MLflow, yang secara kolektif dikenal sebagai MLflow Tracking, untuk menghubungkan Azure Machine Learning sebagai ujung belakang eksperimen MLflow Anda. Anda dapat mencapai sambungan ini dengan MLflow Python API atau Azure Machine Learning CLI v2 di terminal Anda. Anda juga mempelajari cara menggunakan kemampuan Registri Model MLflow dengan Azure Machine Learning.

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.

Penting

Saat menggunakan Azure Machine Learning SDK v2, tidak ada pencatatan asli yang disediakan. Sebagai gantinya, gunakan kemampuan pelacakan MLflow. Untuk informasi selengkapnya, lihat Cara mencatat dan melihat metrik (v2).

Tip

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

Catatan

Anda dapat menggunakan klien MLflow Skinny yang merupakan paket MLflow ringan tanpa penyimpanan SQL, server, UI, atau dependensi ilmu data. Ini direkomendasikan untuk pengguna yang terutama membutuhkan kemampuan pelacakan dan pencatatan tanpa mengimpor rangkaian lengkap fitur MLflow termasuk penyebaran.

Prasyarat

Melacak eksekusi dari komputer lokal Anda

Pelacakan MLflow dengan Azure Machine Learning memungkinkan Anda menyimpan metrik dan artefak yang tercatat yang dijalankan dari komputer lokal Anda ke ruang kerja Azure Machine Learning Anda.

Menyiapkan lingkungan pelacakan

Untuk melacak eksekusi lokal, Anda perlu mengarahkan komputer lokal Anda ke URI Pelacakan MLflow Azure Machine Learning.

Penting

Pastikan Anda masuk ke akun Azure di komputer lokal Anda, jika tidak, URI pelacakan akan mengembalikan string kosong. Jika Anda menggunakan komputasi Azure ML apa saja lingkungan nama pelacakan dan eksperimen sudah dikonfigurasi..

Kode berikut menggunakan mlflow dan detail ruang kerja Azure Machine Learning Anda untuk membangun URI pelacakan MLFLow unik yang terkait dengan ruang kerja Anda. Kemudian metode set_tracking_uri() tersebut mengarahkan URI pelacakan MLflow ke URI tersebut.

from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
import mlflow

#Enter details of your AML workspace
subscription_id = '<SUBSCRIPTION_ID>'
resource_group = '<RESOURCE_GROUP>'
workspace = '<AML_WORKSPACE_NAME>'

#get a handle to the workspace
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace)

tracking_uri = ml_client.workspaces.get(name=workspace).mlflow_tracking_uri

mlflow.set_tracking_uri(tracking_uri)

print(tracking_uri)

Mengatur nama eksperimen

Semua eksekusi MLflow dicatat ke eksperimen aktif, yang dapat diatur dengan MLflow SDK atau Azure CLI.

Dengan MLflow Anda dapat menggunakan mlflow.set_experiment() perintah.

experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)

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

Lacak eksekusi jarak jauh dengan Azure Machine Learning CLI (v2)

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

Eksekusi jarak jauh (pekerjaan) memungkinkan Anda melatih model Anda pada komputasi yang lebih kuat, seperti mesin virtual dengan kemampuan GPU, atau Kluster komputasi Azure Machine Learning. Lihat Menggunakan target komputasi untuk pelatihan model untuk mempelajari tentang berbagai opsi komputasi.

MLflow Tracking dengan Azure Machine Learning memungkinkan Anda menyimpan metrik dan artefak yang dicatat dari eksekusi jarak jauh Anda ke ruang kerja Azure Machine Learning Anda. Setiap eksekusi dengan kode Pelacakan MLflow di dalamnya akan secara otomatis mencatat metrik ke ruang kerja.

Pertama, Anda harus membuat subdirektori src dan membuat file dengan kode pelatihan Anda di file hello_world.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()

Gunakan CLI Azure Machine Learning (v2) untuk mengirimkan eksekusi jarak jauh. Saat menggunakan CLI Azure Machine Learning (v2), URI pelacakan MLflow dan nama eksperimen diatur secara otomatis dan mengarahkan pengelogan dari MLflow ke ruang kerja Anda. Pelajari lebih lanjut pengelogan eksperimen CLI Azure Machine Learning (v2) dengan MLflow

Buat file YAML dengan definisi pekerjaan Anda dalam file job.yml. File ini harus dibuat di luar direktori src. Salin kode berikut ke dalam file:

$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
command: python hello-mlflow.py
code: src
environment: azureml:AzureML-sklearn-1.0-ubuntu20.04-py38-cpu@latest
compute: azureml:cpu-cluster

Buka terminal Anda dan gunakan kode berikut untuk mengirimkan pekerjaan.

az ml job create -f job.yml --web

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)

Mengambil artefak dengan MLFLow

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", ".")

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

Contoh file

Menggunakan MLflow dan CLI (v2)

Batasan

Metode MLflow berikut tidak sepenuhnya didukung dengan Azure Machine Learning.

  • mlflow.tracking.MlflowClient.create_experiment()
  • mlflow.tracking.MlflowClient.rename_experiment()
  • mlflow.tracking.MlflowClient.search_runs()
  • mlflow.tracking.MlflowClient.download_artifacts()
  • mlflow.tracking.MlflowClient.rename_registered_model()

Langkah berikutnya