Bagikan melalui


Mengelola registri model di Azure Pembelajaran Mesin dengan MLflow

Azure Pembelajaran Mesin mendukung MLflow untuk manajemen model saat tersambung ke ruang kerja. Pendekatan ini adalah cara mudah untuk mendukung seluruh siklus hidup model bagi pengguna yang terbiasa dengan klien MLFlow.

Artikel ini menjelaskan kemampuan untuk mengelola registri model dengan MLflow dan bagaimana metode ini dibandingkan dengan opsi manajemen lainnya.

Prasyarat

  • Instal paket mlflow MLflow SDK dan plug-in Azure Pembelajaran Mesin azureml-mlflow untuk MLflow:

    pip install mlflow azureml-mlflow
    

    Tip

    Anda dapat menggunakan mlflow-skinny paket, yang merupakan paket MLflow ringan tanpa penyimpanan SQL, server, UI, atau dependensi ilmu data. mlflow-skinny disarankan untuk pengguna yang terutama membutuhkan kemampuan pelacakan dan pengelogan MLflow tanpa mengimpor rangkaian fitur lengkap, termasuk penyebaran.

  • Ruang kerja Azure Machine Learning. Untuk membuat ruang kerja, lihat tutorial Membuat sumber daya pembelajaran mesin. Tinjau izin akses yang Anda butuhkan untuk melakukan operasi MLflow di ruang kerja Anda.

  • Jika Anda melakukan pelacakan jarak jauh (yaitu, melacak eksperimen yang berjalan di luar Azure Pembelajaran Mesin), konfigurasikan MLflow untuk mengarahkan ke URI pelacakan ruang kerja Azure Pembelajaran Mesin Anda. Untuk informasi selengkapnya tentang cara menyambungkan MLflow ke ruang kerja Anda, lihat Mengonfigurasi MLflow untuk Azure Pembelajaran Mesin.

  • Prosedur dalam artikel ini menggunakan client objek untuk merujuk ke klien MLflow.

    Beberapa operasi dapat dijalankan langsung dengan menggunakan API fasih MLflow, mlflow.<method>. Operasi lain memerlukan klien MLflow untuk mengaktifkan komunikasi dengan Pembelajaran Mesin dalam protokol MLflow. Kode berikut membuat MlflowClient objek:

    import mlflow
    
    client = mlflow.tracking.MlflowClient()
    

Batasan

  • Azure Pembelajaran Mesin tidak mendukung penggantian nama model.

  • Pembelajaran Mesin tidak mendukung penghapusan seluruh kontainer model.

  • Registri organisasi tidak didukung untuk manajemen model dengan MLflow.

  • Penyebaran model dari tahap model tertentu saat ini tidak didukung dalam Pembelajaran Mesin.

  • Operasi lintas ruang kerja saat ini tidak didukung di Pembelajaran Mesin.

Mendaftarkan model baru

Registri model menawarkan cara yang nyaman dan terpusat untuk mengelola model di ruang kerja. Setiap ruang kerja memiliki registri model independennya sendiri. Bagian berikut menunjukkan dua cara Anda dapat mendaftarkan model di registri dengan menggunakan MLflow SDK.

Membuat model dari eksekusi yang ada

Jika Anda memiliki model MLflow yang dicatat di dalam eksekusi, dan Anda ingin mendaftarkannya di registri, gunakan ID eksekusi dan jalur tempat model dicatat. Anda bisa mengkueri informasi ini dengan mengikuti instruksi dalam Mengelola eksperimen dan berjalan dengan MLflow.

mlflow.register_model(f"runs:/{run_id}/{artifact_path}", model_name)

Catatan

Model hanya dapat didaftarkan ke registri di ruang kerja yang sama tempat proses tersebut dilacak. Operasi lintas ruang kerja saat ini tidak didukung di Azure Pembelajaran Mesin.

Tip

Daftarkan model dari eksekusi atau dengan menggunakan mlflow.<flavor>.log_model metode dari dalam eksekusi. Pendekatan ini mempertahankan silsilah data dari pekerjaan yang menghasilkan aset.

Membuat model dari aset

Jika Anda memiliki folder dengan model MLflow MLModel , Anda dapat mendaftarkannya secara langsung. Model tidak perlu selalu dalam konteks eksekusi. Untuk pendekatan ini, Anda dapat menggunakan skema file://path/to/model URI untuk mendaftarkan model MLflow yang disimpan dalam sistem file lokal.

Kode berikut membuat model sederhana dengan menggunakan scikit-learn paket dan menyimpan model dalam format MLflow di penyimpanan lokal:

from sklearn import linear_model

reg = linear_model.LinearRegression()
reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])

mlflow.sklearn.save_model(reg, "./regressor")

Tip

Metode ini save_model() bekerja dengan cara yang sama seperti log_model() metode . log_model() Saat metode menyimpan model di dalam eksekusi aktif, save_model() metode ini menggunakan sistem file lokal untuk menyimpan model.

Kode berikut mendaftarkan model dengan menggunakan jalur lokal:

import os

model_local_path = os.path.abspath("./regressor")
mlflow.register_model(f"file://{model_local_path}", "local-model-test")

Registri model kueri

Anda dapat menggunakan MLflow SDK untuk mengkueri dan mencari model yang terdaftar di registri. Bagian berikut menunjukkan dua cara untuk mengkueri model.

Mengkueri semua model dalam registri

Anda dapat mengkueri semua model terdaftar di registri dengan menggunakan klien MLflow.

Kode berikut mencetak nama semua model dalam registri:

for model in client.search_registered_models():
    print(f"{model.name}")

order_by Gunakan metode untuk mengatur output dengan properti tertentu, seperti name, , versioncreation_timestamp, atau last_updated_timestamp:

client.search_registered_models(order_by=["name ASC"])

Catatan

Untuk versi MLflow yang lebih lama dari 2.0, gunakan metode sebagai gantinya MlflowClient.list_registered_models() .

Mendapatkan versi model tertentu

Metode ini search_registered_models() mengambil objek model, yang berisi semua versi model. Untuk mendapatkan versi model terdaftar terakhir untuk model tertentu, Anda dapat menggunakan get_registered_model() metode :

client.get_registered_model(model_name)

Untuk mendapatkan versi model tertentu, gunakan kode berikut:

client.get_model_version(model_name, version=2)

Memuat model dari registri

Anda dapat memuat model langsung dari registri untuk memulihkan objek model yang dicatat. Untuk tugas ini, gunakan fungsi mlflow.<flavor>.load_model() atau mlflow.pyfunc.load_model() dan tunjukkan URI model yang akan dimuat.

Anda dapat menerapkan fungsi-fungsi ini dengan sintaks berikut:

  • models:/<model-name>/latest: Muat versi terakhir model.
  • models:/<model-name>/<version-number>: Muat versi model tertentu.
  • models:/<model-name>/<stage-name>: Muat versi tertentu dalam tahap tertentu untuk model. Untuk informasi selengkapnya, lihat Bekerja dengan tahap model.

Untuk memahami perbedaan antara fungsi mlflow.<flavor>.load_model() dan , lihat Alur kerja untuk memuat model MLflowmlflow.pyfunc.load_model().

Bekerja dengan tahap model

MLflow mendukung tahapan model untuk mengelola siklus hidup model. Versi model dapat beralih dari satu tahap ke tahap lainnya. Tahapan ditetapkan ke versi tertentu untuk model. Model dapat memiliki beberapa versi pada tahap yang berbeda.

Penting

Tahapan hanya dapat diakses dengan menggunakan MLflow SDK. Mereka tidak terlihat di studio Azure Pembelajaran Mesin. Tahapan tidak dapat diambil dengan menggunakan Azure Pembelajaran Mesin SDK, Azure Pembelajaran Mesin CLI, atau Azure Pembelajaran Mesin REST API. Penyebaran dari tahap model tertentu saat ini tidak didukung.

Tahapan model kueri

Kode berikut menggunakan klien MLflow untuk memeriksa semua tahapan yang mungkin untuk model:

client.get_model_version_stages(model_name, version="latest")

Anda dapat melihat versi model untuk setiap tahap model dengan mengambil model dari registri. Kode berikut mendapatkan versi model yang saat ini Staging dalam tahap:

client.get_latest_versions(model_name, stages=["Staging"])

Beberapa versi model dapat berada dalam tahap yang sama pada saat yang sama di MLflow. Dalam contoh sebelumnya, metode mengembalikan versi terbaru (terbaru) di antara semua versi untuk tahap tersebut.

Penting

Di MLflow SDK, nama tahap peka huruf besar/kecil.

Versi model transisi

Transisi versi model ke tahap tertentu dapat dilakukan dengan menggunakan klien MLflow:

client.transition_model_version_stage(model_name, version=3, stage="Staging")

Saat Anda mentransisikan versi model ke tahap tertentu, jika tahapan sudah memiliki versi model lain, versi yang ada tetap tidak berubah. Perilaku ini berlaku secara default.

Pendekatan lain adalah mengatur archive_existing_versions=True parameter selama transisi. Pendekatan ini menginstruksikan MLflow untuk memindahkan versi model yang ada ke tahap Archived:

client.transition_model_version_stage(
    model_name, version=3, stage="Staging", archive_existing_versions=True
)

Memuat model dari tahapan

Anda dapat memuat model dalam tahap tertentu langsung dari Python dengan menggunakan load_model fungsi dan format URI berikut. Agar metode ini berhasil, semua pustaka dan dependensi harus diinstal di lingkungan kerja Anda.

Muat model dari Staging tahap:

model = mlflow.pyfunc.load_model(f"models:/{model_name}/Staging")

Mengedit dan menghapus model

Mengedit model terdaftar didukung di Pembelajaran Mesin MLflow dan Azure, tetapi ada beberapa perbedaan penting. Bagian berikut ini menjelaskan beberapa opsi.

Catatan

Mengganti nama model tidak didukung di Azure Pembelajaran Mesin karena objek model tidak dapat diubah.

Mengedit deskripsi dan tag model

Anda dapat mengedit deskripsi dan tag model dengan menggunakan MLflow SDK:

client.update_model_version(model_name, version=1, description="My classifier description")

Untuk mengedit tag, gunakan set_model_version_tag metode dan remove_model_version_tag :

client.set_model_version_tag(model_name, version="1", key="type", value="classification")

Untuk menghapus tag, gunakan delete_model_version_tag metode :

client.delete_model_version_tag(model_name, version="1", key="type")

Menghapus versi model

Anda dapat menghapus versi model apa pun di registri dengan menggunakan klien MLflow:

client.delete_model_version(model_name, version="2")

Catatan

Pembelajaran Mesin tidak mendukung penghapusan seluruh kontainer model. Untuk mencapai tugas ini, hapus semua versi model untuk model tertentu.

Meninjau kemampuan yang didukung untuk mengelola model

Klien MLflow mengekspos beberapa metode untuk mengambil dan mengelola model. Tabel berikut mencantumkan metode yang saat ini didukung di MLflow saat tersambung ke Azure Pembelajaran Mesin. Tabel ini juga membandingkan MLflow dengan kemampuan manajemen model lain di Azure Pembelajaran Mesin.


Deskripsi fitur
Hanya MLflow Pembelajaran Mesin dengan MLflow Pembelajaran Mesin CLI v2 studio Pembelajaran Mesin
Mendaftarkan model dalam format MLflow
Mendaftarkan model yang tidak dalam format MLflow
Mendaftarkan model dari output/artefak eksekusi ✓ 1 ✓ 2
Mendaftarkan model dari output/artefak eksekusi di server/ruang kerja pelacakan yang berbeda ✓ 5 ✓ 5
Mencari/mencantumkan model terdaftar
Mengambil detail versi model terdaftar
Mengedit deskripsi versi model terdaftar
Mengedit tag versi model terdaftar
Mengganti nama model terdaftar 3 3 3
Menghapus model terdaftar (kontainer) 3 3 3
Menghapus versi model terdaftar
Mengelola tahap model MLflow
Cari model terdaftar berdasarkan nama ✓ 4
Cari model terdaftar dengan menggunakan komparator LIKE string dan ILIKE ✓ 4
Cari model terdaftar berdasarkan tag ✓ 4
Dukungan registri organisasi

Catatan kaki tabel:

  • 1 Gunakan Pengidentifikasi Sumber Daya Seragam (URI) dengan format runs:/<ruin-id>/<path>.
  • 2 Gunakan URI dengan format azureml://jobs/<job-id>/outputs/artifacts/<path>.
  • 3 Model terdaftar adalah objek yang tidak dapat diubah di Azure Pembelajaran Mesin.
  • 4 Gunakan kotak pencarian di studio Azure Pembelajaran Mesin. Pencocokan parsial didukung.
  • 5 Gunakan registri untuk memindahkan model di berbagai ruang kerja dan mempertahankan silsilah data.