Mencatat metrik, parameter, dan file dengan MLflow

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

Azure Machine Learning mendukung eksperimen pengelogan dan pelacakan menggunakan Pelacakan MLflow. Anda dapat mencatat model, metrik, parameter, dan artefak dengan MLflow, baik secara lokal di komputer Anda atau di lingkungan cloud.

Penting

Tidak seperti Azure Pembelajaran Mesin SDK v1, tidak ada fungsionalitas pengelogan di Azure Pembelajaran Mesin SDK untuk Python (v2). Jika Anda menggunakan Azure Pembelajaran Mesin SDK v1 sebelumnya, kami sarankan Anda memanfaatkan MLflow untuk melacak eksperimen. Lihat Memigrasikan pengelogan dari SDK v1 ke MLflow untuk panduan tertentu.

Log dapat membantu Anda mendiagnosis kesalahan dan peringatan, atau melacak metrik performa seperti parameter dan kinerja model. Artikel ini menjelaskan cara mengaktifkan pengelogan dalam skenario berikut:

  • Mencatat metrik, parameter, dan model saat mengirimkan pekerjaan.
  • Lacak eksekusi saat pelatihan secara interaktif.
  • Lihat informasi diagnostik tentang pelatihan.

Tip

Artikel ini menunjukkan cara memantau proses pelatihan model. Jika Anda tertarik untuk memantau penggunaan sumber daya dan peristiwa dari Azure Pembelajaran Mesin, seperti kuota, pekerjaan pelatihan yang selesai, atau penyebaran model yang selesai, lihat Memantau Azure Pembelajaran Mesin.

Prasyarat

  • Anda harus memiliki ruang kerja Azure Machine Learning. Jika Anda tidak memilikinya, lihat Membuat sumber daya ruang kerja.

  • Anda harus menginstal mlflow paket dan azureml-mlflow . Jika tidak, gunakan perintah berikut untuk menginstalnya di lingkungan pengembangan Anda:

    pip install mlflow azureml-mlflow
    
  • Jika Anda melakukan pelacakan jarak jauh (eksperimen pelacakan yang berjalan di luar Azure Pembelajaran Mesin), konfigurasikan MLflow untuk melacak eksperimen. Untuk informasi selengkapnya, lihat Mengonfigurasi MLflow untuk Azure Pembelajaran Mesin.

  • Untuk mencatat metrik, parameter, artefak, dan model dalam eksperimen Anda di Azure Pembelajaran Mesin menggunakan MLflow, cukup impor MLflow ke dalam skrip Anda:

    import mlflow
    

Mengonfigurasi eksperimen

MLflow mengatur informasi dalam eksperimen dan eksekusi (di Azure Pembelajaran Mesin, eksekusi disebut pekerjaan). Ada beberapa perbedaan dalam cara mengonfigurasinya tergantung pada cara Anda menjalankan kode:

Saat berlatih secara interaktif, seperti di Jupyter Notebook, gunakan pola berikut:

  1. Membuat atau mengatur eksperimen aktif.
  2. Memulai pekerjaan.
  3. Gunakan metode pengelogan untuk mencatat metrik dan informasi lainnya.
  4. Mengakhiri pekerjaan.

Misalnya, cuplikan kode berikut mengonfigurasi eksperimen, lalu log selama pekerjaan:

import mlflow
# Set the experiment
mlflow.set_experiment("mlflow-experiment")

# Start the run
mlflow_run = mlflow.start_run()
# Log metrics or other information
mlflow.log_metric('mymetric', 1)
# End run 
mlflow.end_run()

Tip

Secara teknis Anda tidak perlu memanggil start_run() karena eksekusi baru dibuat jika tidak ada dan Anda memanggil API pengelogan. Dalam hal ini, Anda dapat menggunakan mlflow.active_run() untuk mengambil eksekusi yang saat ini sedang digunakan. Untuk informasi selengkapnya, lihat mlflow.active_run().

Anda juga dapat menggunakan paradigma manajer konteks:

import mlflow
mlflow.set_experiment("mlflow-experiment")

# Start the run, log metrics, end the run
with mlflow.start_run() as run:
    # Run started when context manager is entered, and ended when context manager exits
    mlflow.log_metric('mymetric', 1)
    mlflow.log_metric('anothermetric',1)
    pass

Saat Anda memulai eksekusi baru dengan mlflow.start_run, mungkin berguna untuk menunjukkan parameter run_name, yang kemudian diterjemahkan ke nama eksekusi di antarmuka pengguna Azure Pembelajaran Mesin dan membantu Anda mengidentifikasi eksekusi lebih cepat:

with mlflow.start_run(run_name="iris-classifier-random-forest") as run:
    mlflow.log_metric('mymetric', 1)
    mlflow.log_metric('anothermetric',1)

Untuk informasi selengkapnya tentang API pengelogan MLflow, lihat referensi MLflow.

Parameter log

MLflow mendukung parameter pengelogan yang digunakan oleh eksperimen Anda. Parameter dapat berjenis apa pun, dan dapat dicatat menggunakan sintaks berikut:

mlflow.log_param("num_epochs", 20)

MLflow juga menawarkan cara mudah untuk mencatat beberapa parameter dengan menunjukkan semuanya menggunakan kamus. Beberapa kerangka kerja juga dapat meneruskan parameter ke model menggunakan kamus dan karenanya ini adalah cara yang mudah untuk mencatatnya dalam eksperimen.

params = {
    "num_epochs": 20,
    "dropout_rate": .6,
    "objective": "binary_crossentropy"
}

mlflow.log_params(params)

Metrik log

Metrik, berlawanan dengan parameter, selalu numerik. Tabel berikut ini menjelaskan cara mencatat jenis numerik tertentu:

Nilai yang dicatat Contoh kode Catatan
Mencatat nilai numerik (int atau float) mlflow.log_metric("my_metric", 1)
Mencatat nilai numerik (int atau float) dari waktu ke waktu mlflow.log_metric("my_metric", 1, step=1) Gunakan parameter step untuk menunjukkan langkah di mana Anda mencatat nilai metrik. Ini bisa berupa angka bilangan bulat apa pun. Defaultnya adalah nol.
Log nilai boolean mlflow.log_metric("my_metric", 0) 0 = Benar, 1 = Salah

Penting

Pertimbangan performa: Jika Anda perlu mencatat beberapa metrik (atau beberapa nilai untuk metrik yang sama), hindari melakukan panggilan ke mlflow.log_metric dalam perulangan. Performa yang lebih baik dapat dicapai dengan mencatat batch metrik. Gunakan metode mlflow.log_metrics yang menerima kamus dengan semua metrik yang ingin Anda catat sekaligus atau gunakan MLflowClient.log_batch yang menerima beberapa jenis elemen untuk pengelogan. Lihat Kurva log atau daftar nilai misalnya.

Kurva log atau daftar nilai

Kurva (atau daftar nilai numerik) dapat dicatat dengan MLflow dengan mencatat metrik yang sama beberapa kali. Contoh berikut menunjukkan cara melakukannya:

list_to_log = [1, 2, 3, 2, 1, 2, 3, 2, 1]
from mlflow.entities import Metric
from mlflow.tracking import MlflowClient
import time

client = MlflowClient()
client.log_batch(mlflow.active_run().info.run_id, 
                 metrics=[Metric(key="sample_list", value=val, timestamp=int(time.time() * 1000), step=0) for val in list_to_log])

Gambar log

MLflow mendukung dua cara pembuatan log gambar. Kedua cara mempertahankan gambar yang diberikan sebagai artefak di dalam eksekusi.

Nilai yang dicatat Contoh kode Catatan
Log numpy metrik atau objek gambar PIL mlflow.log_image(img, "figure.png") img harus berupa instans numpy.ndarray atau PIL.Image.Image. figure.png adalah nama artefak yang dihasilkan di dalam eksekusi. Tidak harus berupa file yang sudah ada.
Log plot matlotlib atau file gambar mlflow.log_figure(fig, "figure.png") figure.png adalah nama artefak yang dihasilkan di dalam eksekusi. Tidak harus berupa file yang sudah ada.

File log

Secara umum, file dalam MLflow disebut artefak. Anda dapat mencatat artefak dengan berbagai cara di Mlflow:

Nilai yang dicatat Contoh kode Catatan
Mencatat teks dalam file teks mlflow.log_text("text string", "notes.txt") Teks disimpan di dalam eksekusi dalam file teks dengan nama notes.txt.
Kamus log sebagai file JSON dan YAML mlflow.log_dict(dictionary, "file.yaml" dictionary adalah objek kamus yang berisi semua struktur yang ingin Anda pertahankan sebagai file JSON atau YAML.
Mencatat file kecil yang sudah ada mlflow.log_artifact("path/to/file.pkl") File selalu dicatat di akar eksekusi. Jika artifact_path disediakan, maka file dicatat dalam folder seperti yang ditunjukkan dalam parameter tersebut.
Mencatat semua artefak dalam folder yang ada mlflow.log_artifacts("path/to/folder") Struktur folder disalin ke eksekusi, tetapi folder akar yang ditunjukkan tidak disertakan.

Tip

Saat Anda mencatat file besar dengan log_artifact atau log_model, Anda mungkin mengalami kesalahan waktu habis sebelum pengunggahan file selesai. Pertimbangkan untuk meningkatkan nilai batas waktu dengan menyesuaikan variabel AZUREML_ARTIFACTS_DEFAULT_TIMEOUTlingkungan . Nilai defaultnya adalah 300 (detik).

Model log

MLflow memperkenalkan konsep model sebagai cara untuk mengemas semua artefak yang diperlukan agar model tertentu berfungsi. Model dalam MLflow selalu merupakan folder dengan jumlah file arbitrer, tergantung pada kerangka kerja yang digunakan untuk menghasilkan model. Mencatat model memiliki keuntungan melacak semua elemen model sebagai entitas tunggal yang dapat didaftarkan dan kemudian disebarkan. Selain itu, model MLflow mendapatkan manfaat penyebaran tanpa kode dan dapat digunakan dengan dasbor AI yang Bertanggung Jawab di studio. Untuk informasi selengkapnya, lihat Dari artefak ke model di MLflow.

Untuk menyimpan model dari eksekusi pelatihan, gunakan API log_model() untuk kerangka kerja yang sedang Anda kerjakan. Misalnya, mlflow.sklearn.log_model(). Untuk informasi selengkapnya, lihat Pengelogan model MLflow. Untuk memigrasikan model yang ada ke MLflow, lihat Mengonversi model kustom ke MLflow.

Tip

Saat Anda mencatat model besar, Anda mungkin mengalami kesalahan Failed to flush the queue within 300 seconds. Biasanya, itu berarti operasi kehabisan waktu sebelum pengunggahan artefak model selesai. Pertimbangkan untuk meningkatkan nilai batas waktu dengan menyesuaikan variabel AZUREML_ARTIFACTS_DEFAULT_TIMEOUTlingkungan .

Pengelogan otomatis

Dengan Azure Pembelajaran Mesin dan MLflow, pengguna dapat mencatat metrik, parameter model, dan artefak model secara otomatis saat melatih model. Setiap kerangka kerja memutuskan apa yang harus dilacak secara otomatis bagi Anda. Berbagai pustaka pembelajaran mesin populer didukung. Pelajari lebih lanjut Pengelogan otomatis dengan MLflow.

Untuk mengaktifkan pengelogan otomatis, sisipkan kode berikut sebelum kode pelatihan Anda:

mlflow.autolog()

Tip

Anda dapat mengontrol apa yang dicatat secara otomatis dengan autolog. Misalnya, jika Anda menunjukkan mlflow.autolog(log_models=False), MLflow mencatat semuanya kecuali model untuk Anda. Kontrol tersebut berguna dalam kasus di mana Anda ingin mencatat model secara manual tetapi masih menikmati pengelogan otomatis metrik dan parameter. Perhatikan juga bahwa beberapa kerangka kerja mungkin menonaktifkan pengelogan otomatis model jika model terlatih melampaui batas tertentu. Perilaku seperti itu tergantung pada rasa yang digunakan dan kami sarankan Anda melihat dokumentasi jika ini adalah kasus Anda.

Lihat informasi pekerjaan/eksekusi menggunakan MLflow

Anda dapat melihat informasi yang dicatat dengan MLflow melalui objek MLflow.entities.Run:

import mlflow

run = mlflow.get_run(run_id="<RUN_ID>")

Anda dapat melihat metrik, parameter, dan tag untuk dijalankan di bidang data objek yang dijalankan.

metrics = run.data.metrics
params = run.data.params
tags = run.data.tags

Catatan

Kamus metrik yang ditampilkan pada mlflow.get_run atau mlflow.search_runs hanya mengembalikan nilai yang paling baru dicatat untuk nama metrik tertentu. Misalnya, jika Anda mencatat metrik yang disebut iteration beberapa kali dengan nilai, 1, lalu 2, lalu 3, lalu 4, hanya 4 yang dikembalikan saat memanggil run.data.metrics['iteration'].

Untuk mendapatkan semua metrik yang dicatat untuk nama metrik tertentu, Anda dapat menggunakan MlFlowClient.get_metric_history() seperti yang dijelaskan pada contoh Mendapatkan param serta metrik dari eksekusi.

Tip

MLflow bisa mengambil metrik dan parameter dari beberapa eksekusi secara bersamaan, memungkinkan perbandingan cepat di beberapa uji coba. Untuk mempelajari selengkapnya, lihat Kueri & bandingkan eksperimen dan eksekusi dengan MLflow.

MLflow dapat mengkueri artefak apa pun yang dicatat oleh eksekusi. Artefak tidak dapat diakses menggunakan objek eksekusi itu sendiri, dan harus menggunakan klien MLflow sebagai gantinya:

client = mlflow.tracking.MlflowClient()
client.list_artifacts("<RUN_ID>")

Metode ini mencantumkan semua artefak yang dicatat dalam eksekusi, tetapi tetap disimpan di penyimpanan artefak (penyimpanan Azure Pembelajaran Mesin). Untuk mengunduh salah satunya, gunakan metode download_artifact:

file_path = client.download_artifacts("<RUN_ID>", path="feature_importance_weight.png")

Untuk informasi selengkapnya, lihat Mendapatkan metrik, parameter, artefak, dan model.

Menampilkan informasi pekerjaan/eksekusi pada studio

Anda dapat menelusuri catatan pekerjaan yang telah diselesaikan, termasuk metrik yang dicatat, di studio Azure Machine Learning.

Navigasi ke tab Pekerjaan . Untuk melihat semua pekerjaan Anda di Ruang Kerja di seluruh Eksperimen, pilih tab Semua pekerjaan . Anda dapat menelusuri paling detail pekerjaan untuk eksperimen tertentu dengan menerapkan filter Eksperimen di bilah menu atas. Pilih pekerjaan yang menarik untuk memasukkan tampilan detail, lalu pilih tab Metrik .

Pilih metrik yang dicatat untuk merender bagan di sisi kanan. Anda dapat menyesuaikan bagan dengan menerapkan penghalusan, mengubah warna, atau memplot beberapa metrik pada satu grafik. Anda juga bisa mengubah ukuran dan mengatur ulang tata letak sesuai keinginan. Setelah membuat tampilan yang diinginkan, Anda dapat menyimpannya untuk digunakan di masa mendatang dan membagikannya dengan rekan satu tim Anda menggunakan tautan langsung.

Cuplikan layar tampilan metrik.

Melihat serta mengunduh log diagnostik

File log adalah sumber daya penting untuk men-debug beban kerja Azure Pembelajaran Mesin. Setelah mengirimkan tugas pelatihan, telusuri paling detail proses tertentu untuk melihat log dan outputnya:

  1. Buka tab Pekerjaan.
  2. Pilih runID untuk proses tertentu.
  3. Pilih Output dan log di bagian atas halaman.
  4. Pilih Unduh semua untuk mengunduh semua log Anda ke folder zip.
  5. Anda juga dapat mengunduh file log individu dengan memilih file log dan memilih Unduh

Cuplikan layar bagian Output dan log eksekusi.

Folder user_logs

Folder ini berisi informasi mengenai log yang dihasilkan pengguna. Folder ini terbuka secara default, dan log std_log.txt dipilih. std_log.txt adalah tempat log kode Anda (misalnya, pernyataan cetak) muncul. File ini berisi log stdout dan log stderr dari skrip kontrol dan skrip pelatihan Anda, satu log untuk per prosesnya. Dalam kebanyakan kasus, Anda memantau log di sini.

Folder system_logs

Folder ini berisi log yang dihasilkan oleh Azure Pembelajaran Mesin dan ditutup secara default. Log yang dihasilkan oleh sistem dikelompokkan ke dalam folder yang berbeda, berdasarkan tahapan pekerjaan dalam waktu proses.

Folder lainnya

Untuk pelatihan pekerjaan pada kluster multi-komputasi, log ada untuk setiap simpul IP. Struktur untuk setiap node sama dengan pekerjaan satu node. Ada satu lagi folder log untuk log eksekusi secara keseluruhan, yaitu log stderr dan stdout.

Azure Machine Learning mencatat informasi dari berbagai sumber selama pelatihan, seperti AutoML atau kontainer Docker yang menjalankan tugas pelatihan. Banyak dari log ini tidak didokumentasikan. Jika Anda mengalami masalah dan menghubungi dukungan Microsoft, mereka mungkin dapat menggunakan log ini selama pemecahan masalah.

Langkah berikutnya