Panduan untuk menyebarkan model MLflow
BERLAKU UNTUK: Ekstensi ml Azure CLI v2 (saat ini)
Dalam artikel ini, pelajari tentang penyebaran model MLflow ke Azure Pembelajaran Mesin untuk inferensi real time dan batch. Pelajari juga tentang berbagai alat yang dapat Anda gunakan untuk mengelola penyebaran.
Penyebaran model MLflow vs. model kustom
Tidak seperti penyebaran model kustom di Azure Pembelajaran Mesin, saat Anda menyebarkan model MLflow ke Azure Pembelajaran Mesin, Anda tidak perlu menyediakan skrip penilaian atau lingkungan untuk penyebaran. Sebagai gantinya, Azure Pembelajaran Mesin secara otomatis menghasilkan skrip penilaian dan lingkungan untuk Anda. Fungsionalitas ini disebut penyebaran tanpa kode.
Untuk penyebaran tanpa kode, Azure Pembelajaran Mesin:
- Memastikan bahwa semua dependensi paket yang ditunjukkan dalam model MLflow terpenuhi.
- Menyediakan gambar dasar MLflow atau lingkungan yang dikumpulkan yang berisi item berikut:
- Paket yang diperlukan agar Azure Pembelajaran Mesin melakukan inferensi, termasuk
mlflow-skinny
. - Skrip penilaian untuk melakukan inferensi.
- Paket yang diperlukan agar Azure Pembelajaran Mesin melakukan inferensi, termasuk
Tip
Ruang kerja tanpa akses jaringan publik: Sebelum Anda dapat menyebarkan model MLflow ke titik akhir online tanpa konektivitas keluar, Anda harus mengemas model (pratinjau). Dengan menggunakan kemasan model, Anda dapat menghindari kebutuhan akan koneksi internet, yang diwajibkan azure Pembelajaran Mesin untuk menginstal paket Python yang diperlukan secara dinamis untuk model MLflow.
Paket dan dependensi Python
Azure Pembelajaran Mesin secara otomatis menghasilkan lingkungan untuk menjalankan inferensi pada model MLflow. Untuk membangun lingkungan, Azure Pembelajaran Mesin membaca dependensi conda yang ditentukan dalam model MLflow dan menambahkan paket apa pun yang diperlukan untuk menjalankan server inferensi. Paket tambahan ini bervariasi, tergantung pada jenis penyebaran Anda.
File conda.yaml berikut menunjukkan contoh dependensi conda yang ditentukan dalam model MLflow.
conda.yaml
channels:
- conda-forge
dependencies:
- python=3.10.11
- pip<=23.1.2
- pip:
- mlflow==2.7.1
- cloudpickle==1.6.0
- dataclasses==0.6
- lz4==4.0.0
- numpy==1.23.5
- packaging==23.0
- psutil==5.9.0
- pyyaml==6.0
- scikit-learn==1.1.2
- scipy==1.10.1
- uuid==1.30
name: mlflow-env
Peringatan
MLflow secara otomatis mendeteksi paket saat mencatat model dan menyematkan versi paket dalam dependensi conda model. Namun, deteksi paket otomatis ini mungkin tidak selalu mencerminkan niat atau persyaratan Anda. Dalam kasus seperti itu, pertimbangkan untuk mencatat model dengan definisi dependensi conda kustom.
Implikasi penggunaan model dengan tanda tangan
Model MLflow dapat menyertakan tanda tangan yang menunjukkan input dan jenis yang diharapkan. Ketika model tersebut disebarkan ke titik akhir online atau batch, Azure Pembelajaran Mesin memberlakukan bahwa jumlah dan jenis input data mematuhi tanda tangan. Jika data input tidak dapat diurai seperti yang diharapkan, pemanggilan model akan gagal.
Anda dapat memeriksa tanda tangan model MLflow dengan membuka file MLmodel yang terkait dengan model. Untuk informasi selengkapnya tentang cara kerja tanda tangan di MLflow, lihat Tanda Tangan di MLflow.
File berikut menunjukkan file MLmodel yang terkait dengan model MLflow.
MLmodel
artifact_path: model
flavors:
python_function:
env:
conda: conda.yaml
virtualenv: python_env.yaml
loader_module: mlflow.sklearn
model_path: model.pkl
predict_fn: predict
python_version: 3.10.11
sklearn:
code: null
pickled_model: model.pkl
serialization_format: cloudpickle
sklearn_version: 1.1.2
mlflow_version: 2.7.1
model_uuid: 3f725f3264314c02808dd99d5e5b2781
run_id: 70f15bab-cf98-48f1-a2ea-9ad2108c28cd
signature:
inputs: '[{"name": "age", "type": "double"}, {"name": "sex", "type": "double"},
{"name": "bmi", "type": "double"}, {"name": "bp", "type": "double"}, {"name":
"s1", "type": "double"}, {"name": "s2", "type": "double"}, {"name": "s3", "type":
"double"}, {"name": "s4", "type": "double"}, {"name": "s5", "type": "double"},
{"name": "s6", "type": "double"}]'
outputs: '[{"type": "double"}]'
Tip
Tanda tangan dalam model MLflow bersifat opsional tetapi sangat disarankan, karena memberikan cara mudah untuk mendeteksi masalah kompatibilitas data lebih awal. Untuk informasi selengkapnya tentang cara mencatat model dengan tanda tangan, lihat Model pengelogan dengan tanda tangan, lingkungan, atau sampel kustom.
Model yang disebarkan di Azure Pembelajaran Mesin vs. model yang disebarkan di server bawaan MLflow
MLflow mencakup alat penyebaran bawaan yang dapat digunakan pengembang model untuk menguji model secara lokal. Misalnya, Anda dapat menjalankan instans lokal model yang terdaftar di registri server MLflow, menggunakan mlflow models serve -m my_model
atau menggunakan MLflow CLI mlflow models predict
.
Inferensi dengan titik akhir batch vs. online
Azure Pembelajaran Mesin mendukung penyebaran model ke titik akhir online dan batch. Titik akhir ini menjalankan berbagai teknologi inferensi yang dapat memiliki fitur yang berbeda.
Titik akhir online mirip dengan server bawaan MLflow karena menyediakan cara yang dapat diskalakan, sinkron, dan ringan untuk menjalankan model untuk inferensi.
Di sisi lain, titik akhir batch mampu menjalankan inferensi asinkron melalui proses inferensi yang berjalan lama yang dapat menskalakan ke sejumlah besar data. Server MLflow saat ini tidak memiliki kemampuan ini, meskipun kemampuan serupa dapat dicapai dengan menggunakan pekerjaan Spark. Untuk mempelajari selengkapnya tentang titik akhir batch dan model MLflow, lihat Menggunakan model MLflow dalam penyebaran batch.
Bagian yang mengikuti lebih fokus pada model MLflow yang disebarkan ke Titik akhir online Azure Pembelajaran Mesin.
Format input
Jenis input | Server bawaan MLflow | Titik Akhir Online Azure Pembelajaran Mesin |
---|---|---|
DataFrame pandas berseri JSON dalam orientasi terpisah | ✓ | ✓ |
DataFrame pandas berseri JSON dalam orientasi rekaman | Tidak digunakan lagi | |
DataFrame pandas berseri CSV | ✓ | Gunakan batch1 |
Format input tensor sebagai daftar berseri JSON (tensor) dan kamus daftar (tensor bernama) | ✓ | ✓ |
Input tensor diformat seperti dalam API TF Serving | ✓ |
1 Pertimbangkan untuk menggunakan inferensi batch untuk memproses file. Untuk informasi selengkapnya, lihat Menyebarkan model MLflow ke titik akhir batch.
Struktur input
Terlepas dari jenis input yang digunakan, Azure Pembelajaran Mesin mengharuskan Anda untuk memberikan input dalam payload JSON, dalam kunci input_data
kamus . Karena kunci ini tidak diperlukan saat menggunakan perintah mlflow models serve
untuk melayani model, payload tidak dapat digunakan secara bergantian untuk titik akhir online Azure Pembelajaran Mesin dan server bawaan MLflow.
Penting
Saran MLflow 2.0: Perhatikan bahwa struktur payload berubah di MLflow 2.0.
Bagian ini memperlihatkan contoh payload yang berbeda dan perbedaan untuk model yang disebarkan di server bawaan MLflow versus server inferensi Azure Pembelajaran Mesin.
Contoh payload untuk DataFrame pandas berseri JSON dalam orientasi terpisah
{
"input_data": {
"columns": [
"age", "sex", "trestbps", "chol", "fbs", "restecg", "thalach", "exang", "oldpeak", "slope", "ca", "thal"
],
"index": [1],
"data": [
[1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
]
}
}
Contoh payload untuk input tensor
{
"input_data": [
[1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
[1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
[1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
[1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
]
}
Contoh payload untuk input tensor bernama
{
"input_data": {
"tokens": [
[0, 655, 85, 5, 23, 84, 23, 52, 856, 5, 23, 1]
],
"mask": [
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
]
}
}
Untuk informasi selengkapnya tentang alat penyebaran bawaan MLflow, lihat Alat penyebaran bawaan dalam dokumentasi MLflow.
Menyesuaikan inferensi saat menyebarkan model MLflow
Anda mungkin terbiasa menulis skrip penilaian untuk menyesuaikan bagaimana inferensi dijalankan untuk model kustom Anda. Namun, saat menyebarkan model MLflow ke Azure Pembelajaran Mesin, keputusan tentang bagaimana inferensi harus dijalankan oleh pembuat model (orang yang membangun model), daripada oleh teknisi DevOps (orang yang mencoba menyebarkannya). Setiap kerangka kerja model mungkin secara otomatis menerapkan rutinitas inferensi tertentu.
Pada titik mana pun, jika Anda perlu mengubah bagaimana inferensi model MLflow dijalankan, Anda dapat melakukan salah satu dari dua hal:
- Ubah bagaimana model Anda dicatat dalam rutinitas pelatihan.
- Kustomisasi inferensi dengan skrip penilaian pada waktu penyebaran.
Mengubah cara model Anda dicatat selama pelatihan
Saat Anda mencatat model, menggunakan mlflow.autolog
atau mlflow.<flavor>.log_model
, rasa yang digunakan untuk model memutuskan bagaimana inferensi harus dijalankan dan hasil apa yang dikembalikan model. MLflow tidak memberlakukan perilaku tertentu tentang bagaimana predict()
fungsi menghasilkan hasil.
Namun, dalam beberapa kasus, Anda mungkin ingin melakukan beberapa praproses atau pasca-pemrosesan sebelum dan sesudah model Anda dijalankan. Di lain waktu, Anda mungkin ingin mengubah apa yang dikembalikan (misalnya, probabilitas versus kelas). Salah satu solusinya adalah menerapkan alur pembelajaran mesin yang berpindah dari input ke output secara langsung. Misalnya, sklearn.pipeline.Pipeline
atau pyspark.ml.Pipeline
merupakan cara populer untuk menerapkan alur, dan terkadang direkomendasikan untuk pertimbangan performa. Alternatif lain adalah menyesuaikan bagaimana model Anda melakukan inferensi, dengan menggunakan rasa model kustom.
Menyesuaikan inferensi dengan skrip penilaian
Meskipun model MLflow tidak memerlukan skrip penilaian, Anda masih dapat menyediakannya, jika diperlukan. Anda dapat menggunakan skrip penilaian untuk menyesuaikan bagaimana inferensi dijalankan untuk model MLflow. Untuk informasi selengkapnya tentang cara menyesuaikan inferensi, lihat Menyesuaikan penyebaran model MLflow (titik akhir online) dan Menyesuaikan penyebaran model MLflow (titik akhir batch).
Penting
Jika Anda memilih untuk menentukan skrip penilaian untuk penyebaran model MLflow, Anda juga perlu menyediakan lingkungan untuk penyebaran.
Alat penyebaran
Azure Pembelajaran Mesin menawarkan banyak cara untuk menyebarkan model MLflow ke titik akhir online dan batch. Anda dapat menyebarkan model, menggunakan alat berikut:
- MLflow SDK
- Azure Machine Learning CLI
- SDK Azure Machine Learning untuk Python
- Studio Azure Machine Learning
Setiap alur kerja memiliki kemampuan yang berbeda, terutama di sekitar jenis komputasi mana yang dapat mereka targetkan. Tabel berikut ini memperlihatkan kemampuan yang berbeda.
Skenario | MLflow SDK | Azure Pembelajaran Mesin CLI/SDK | Studio Azure Machine Learning |
---|---|---|---|
Menyebarkan ke titik akhir online terkelola | Lihat contoh1 | Lihat contoh1 | Lihat contoh1 |
Menyebarkan ke titik akhir online terkelola (dengan skrip penilaian) | Tidak didukung3 | Lihat contoh | Lihat contoh |
Menyebarkan ke titik akhir batch | Tidak didukung3 | Lihat contoh | Lihat contoh |
Menyebarkan ke titik akhir batch (dengan skrip penilaian) | Tidak didukung3 | Lihat contoh | Lihat contoh |
Menyebarkan ke layanan web (ACI/AKS) | Dukunganwarisan 2 | Tidak didukung2 | Tidak didukung2 |
Menyebarkan ke layanan web (ACI/AKS - dengan skrip penilaian) | Tidak didukung3 | Dukunganwarisan 2 | Dukunganwarisan 2 |
1 Penyebaran ke titik akhir online yang berada di ruang kerja dengan tautan privat diaktifkan mengharuskan Anda mengemas model sebelum penyebaran (pratinjau).
2 Sebaiknya alihkan ke titik akhir online terkelola sebagai gantinya.
3 MLflow (OSS) tidak memiliki konsep skrip penilaian dan saat ini tidak mendukung eksekusi batch.
Alat penyebaran mana yang akan digunakan?
Gunakan MLflow SDK jika kedua kondisi ini berlaku:
- Anda terbiasa dengan MLflow, atau Anda menggunakan platform yang mendukung MLflow secara asli (seperti Azure Databricks).
- Anda ingin terus menggunakan serangkaian metode yang sama dari MLflow.
Gunakan Azure Pembelajaran Mesin CLI v2 jika salah satu kondisi ini berlaku:
- Anda lebih terbiasa dengan Azure Pembelajaran Mesin CLI v2.
- Anda ingin mengotomatiskan penyebaran, menggunakan alur otomatisasi.
- Anda ingin menyimpan konfigurasi penyebaran di repositori git.
Gunakan penyebaran antarmuka pengguna studio Azure Pembelajaran Mesin jika Anda ingin dengan cepat menyebarkan dan menguji model yang dilatih dengan MLflow.
Konten terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk