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 Mesinazureml-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 membuatMlflowClient
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
, , version
creation_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.