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, dan tentang berbagai alat yang dapat Anda gunakan untuk mengelola penyebaran.
Penyebaran tanpa kode
Saat Anda menyebarkan model MLflow ke Azure Pembelajaran Mesin, tidak seperti penyebaran model kustom, Anda tidak perlu menyediakan skrip penilaian atau lingkungan. 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
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.
Contoh file conda.yaml berikut menunjukkan dependensi conda yang ditentukan dalam model MLflow.
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
Penting
MLflow secara otomatis mendeteksi paket saat mencatat model, dan menyematkan versi paket dalam dependensi conda model. Deteksi paket otomatis ini mungkin tidak mencerminkan niat atau persyaratan Anda. Anda dapat mencatat model dengan tanda tangan, lingkungan, atau sampel kustom.
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 memastikan bahwa jumlah dan jenis input data mematuhi tanda tangan. Jika data input tidak dapat diurai seperti yang diharapkan, pemanggilan model gagal.
Anda dapat memeriksa tanda tangan model MLflow dengan membuka file MLmodel. Untuk informasi selengkapnya tentang cara kerja tanda tangan di MLflow, lihat Tanda Tangan di MLflow.
Contoh file MLmodel berikut menyoroti signature
.
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 direkomendasikan karena menyediakan cara mudah untuk mendeteksi masalah kompatibilitas data. Untuk informasi selengkapnya tentang cara mencatat model dengan tanda tangan, lihat Model pengelogan dengan tanda tangan, lingkungan, atau sampel kustom.
Penyebaran di server bawaan MLflow vs. penyebaran di Azure Pembelajaran Mesin server inferensi
Pengembang model dapat menggunakan alat penyebaran bawaan MLflow untuk menguji model secara lokal. Misalnya, Anda dapat menjalankan instans lokal model yang terdaftar di registri server MLflow dengan menggunakan mlflow models serve
atau MLflow CLI mlflow models predict
. Untuk informasi selengkapnya tentang alat penyebaran bawaan MLflow, lihat Alat penyebaran bawaan dalam dokumentasi MLflow.
Azure Pembelajaran Mesin juga 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 Azure Pembelajaran Mesin, mirip dengan server bawaan MLflow, menyediakan cara yang dapat diskalakan, sinkron, dan ringan untuk menjalankan model untuk inferensi.
Titik akhir azure Pembelajaran Mesin batch dapat menjalankan inferensi asinkron melalui proses inferensi yang berjalan lama yang dapat menskalakan ke sejumlah besar data. Server MLflow tidak memiliki kemampuan ini, meskipun Anda dapat mencapai kemampuan serupa dengan menggunakan pekerjaan Spark. Untuk mempelajari selengkapnya tentang titik akhir batch dan model MLflow, lihat Menggunakan model MLflow dalam penyebaran batch.
Format input
Tabel berikut ini memperlihatkan jenis input yang didukung oleh server bawaan MLflow versus Titik akhir online Azure Pembelajaran Mesin.
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 inferensi batch. Untuk informasi selengkapnya, lihat Menyebarkan model MLflow ke titik akhir batch. |
Input TensorFlow sebagai daftar serial JSON (tensor) dan kamus daftar (tensor bernama) | ✓ | ✓ |
Input TensorFlow menggunakan TensorFlow Serving API | ✓ |
Bagian berikut berfokus pada model MLflow yang disebarkan ke Titik akhir online Azure Pembelajaran Mesin.
Struktur input
Terlepas dari jenis input, Azure Pembelajaran Mesin mengharuskan Anda untuk memberikan input dalam payload JSON di kunci input_data
kamus . Kunci ini tidak diperlukan saat Anda menggunakan perintah mlflow models serve
untuk melayani model, sehingga payload tidak dapat digunakan secara bergantian untuk titik akhir online Azure Pembelajaran Mesin dan server bawaan MLflow.
Penting
Struktur payload berubah dalam MLflow 2.0.
Contoh payload berikut menunjukkan perbedaan antara model yang disebarkan di server bawaan MLflow versus server inferensi Azure Pembelajaran Mesin.
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]
]
}
}
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]
]
}
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]
]
}
}
Kustomisasi inferensi untuk model MLflow
Skrip penilaian menyesuaikan cara menjalankan inferensi untuk model kustom. Tetapi untuk penyebaran model MLflow, keputusan tentang cara menjalankan inferensi dibuat oleh pembuat model daripada oleh teknisi penyebaran. Setiap kerangka kerja model dapat secara otomatis menerapkan rutinitas inferensi tertentu.
Jika Anda perlu mengubah bagaimana inferensi dijalankan untuk model MLflow, Anda dapat melakukan salah satu hal berikut:
- 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 dengan menggunakan mlflow.autolog
atau mlflow.<flavor>.log_model
, ragam yang digunakan untuk model menentukan cara menjalankan inferensi dan hasil apa yang akan dikembalikan. MLflow tidak memberlakukan perilaku tertentu tentang bagaimana predict()
fungsi menghasilkan hasil.
Dalam beberapa kasus, Anda mungkin ingin melakukan beberapa pra-pemrosesan atau pascaproscesing sebelum dan sesudah model Anda dijalankan. Atau, Anda mungkin ingin mengubah apa yang dikembalikan; misalnya, probabilitas alih-alih 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 karena alasan performa. Anda juga dapat menyesuaikan bagaimana model Anda melakukan inferensi dengan mencatat model kustom.
Menyesuaikan inferensi dengan skrip penilaian
Meskipun model MLflow tidak memerlukan skrip penilaian, Anda masih dapat menyediakannya untuk menyesuaikan eksekusi inferensi untuk model MLflow jika diperlukan. Untuk informasi selengkapnya tentang cara menyesuaikan inferensi, lihat Menyesuaikan penyebaran model MLflow untuk titik akhir online atau Menyesuaikan penyebaran model dengan skrip penilaian untuk 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 alat berikut untuk menyebarkan model MLflow ke titik akhir online dan batch:
- MLflow SDK
- Azure Pembelajaran Mesin CLI v2
- SDK Azure Machine Learning untuk Python
- Studio Azure Pembelajaran Mesin
Setiap alat memiliki kemampuan yang berbeda, terutama untuk jenis komputasi mana yang dapat ditargetkannya. Tabel berikut ini memperlihatkan dukungan untuk skenario penyebaran MLflow yang berbeda.
Skenario | MLflow SDK | Azure Pembelajaran Mesin CLI/SDK atau studio |
---|---|---|
Menyebarkan ke titik akhir online terkelola1 | Didukung. Lihat Peluncuran progresif model MLflow ke titik akhir online | Didukung. Lihat Menyebarkan model MLflow ke titik akhir online |
Menyebarkan ke titik akhir online terkelola dengan skrip penilaian | Tidak didukung3 | Didukung. Lihat Mengkustomisasi penyebaran model MLflow |
Menyebarkan ke titik akhir batch | Tidak didukung3 | Didukung. Lihat Menggunakan model MLflow dalam penyebaran batch |
Menyebarkan ke titik akhir batch dengan skrip penilaian | Tidak didukung3 | Didukung. Lihat Menyesuaikan penyebaran model dengan skrip penilaian |
Menyebarkan ke layanan web seperti Azure Container Instances atau Azure Kubernetes Service (AKS) | Dukunganwarisan 2 | Tidak didukung2 |
Menyebarkan ke layanan web seperti Container Instances atau AKS dengan skrip penilaian | Tidak didukung3 | 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 Beralih ke titik akhir online terkelola jika memungkinkan.
3 MLflow sumber terbuka tidak memiliki konsep skrip penilaian dan tidak mendukung eksekusi batch.
Pilih alat penyebaran
Gunakan MLflow SDK jika:
- Anda terbiasa dengan MLflow dan ingin terus menggunakan metode yang sama, dan
- Anda menggunakan platform seperti Azure Databricks yang mendukung MLflow secara asli.
Gunakan Azure Pembelajaran Mesin CLI v2 atau SDK untuk Python jika:
- Anda terbiasa dengan mereka, atau
- Anda ingin mengotomatiskan penyebaran dengan alur, atau
- Anda ingin menyimpan konfigurasi penyebaran di repositori Git.
Gunakan antarmuka pengguna studio Azure Pembelajaran Mesin jika Anda ingin dengan cepat menyebarkan dan menguji model yang dilatih dengan MLflow.