Artefak dan model dalam MLflow
Artikel ini menjelaskan artefak MLflow dan model MLflow, dan perbedaan model MLflow dengan artefak lainnya. Artikel ini juga menjelaskan bagaimana Azure Pembelajaran Mesin menggunakan karakteristik model MLflow untuk mengaktifkan alur kerja penyebaran yang disederhanakan.
Artefak dan model
Dalam MLflow, ada beberapa perbedaan mendasar antara pengelogan artefak file sederhana dan pengelogan model MLflow.
Artefak
Artefak adalah file apa pun yang dihasilkan dan diambil dari eksekusi atau pekerjaan eksperimen. Artefak dapat berupa model yang diserialisasikan sebagai file acar, bobot model PyTorch atau TensorFlow, atau file teks yang berisi koefisien regresi linier. Beberapa artefak tidak ada hubungannya dengan model itu sendiri tetapi berisi konfigurasi eksekusi, informasi pra-pemrosesan, atau data sampel. Artefak dapat memiliki berbagai format.
Contoh berikut mencatat artefak file.
filename = 'model.pkl'
with open(filename, 'wb') as f:
pickle.dump(model, f)
mlflow.log_artifact(filename)
Model
Model MLflow adalah artefak yang Anda buat asumsi yang lebih kuat yang memberikan kontrak yang jelas antara file yang disimpan dan apa artinya. Namun, jika Anda mencatat file model hanya sebagai artefak, Anda perlu tahu apa arti masing-masing file dan cara memuatnya untuk inferensi.
Anda dapat mencatat model MLflow dengan menggunakan MLflow SDK, misalnya:
import mlflow
mlflow.sklearn.log_model(sklearn_estimator, "classifier")
Mencatat model MLflow di Azure Pembelajaran Mesin memiliki keuntungan berikut:
- Anda dapat menyebarkan model MLflow ke titik akhir real time atau batch tanpa menyediakan skrip penilaian atau lingkungan.
- Saat Anda menyebarkan model MLflow, penyebaran secara otomatis menghasilkan file swagger, sehingga Anda dapat menggunakan fitur Uji di studio Azure Pembelajaran Mesin.
- Anda dapat menggunakan model MLflow secara langsung sebagai input alur.
- Anda dapat menggunakan dasbor AI bertanggung jawab dengan model MLflow.
Format MLModel
Untuk model yang dicatat sebagai file artefak sederhana, Anda perlu mengetahui apa yang dimaksudkan pembuat model untuk setiap file sebelum Anda dapat memuat model untuk inferensi. Tetapi untuk model MLflow, Anda memuat model dengan menggunakan format MLmodel untuk menentukan kontrak antara artefak dan apa yang diwakilinya.
Format MLmodel menyimpan aset dalam folder yang tidak memiliki persyaratan penamaan tertentu. Di antara aset adalah file bernama MLmodel yang merupakan sumber kebenaran tunggal tentang cara memuat dan menggunakan model.
Gambar berikut menunjukkan folder model MLflow yang disebut credit_defaults_model di studio Azure Pembelajaran Mesin. Folder berisi file MLmodel dan artefak model lainnya.
Contoh berikut menunjukkan file MLmodel untuk model visi komputer yang dilatih dengan fastai
:
artifact_path: classifier
flavors:
fastai:
data: model.fastai
fastai_version: 2.4.1
python_function:
data: model.fastai
env: conda.yaml
loader_module: mlflow.fastai
python_version: 3.8.12
model_uuid: e694c68eba484299976b06ab9058f636
run_id: e13da8ac-b1e6-45d4-a9b2-6a0a5cfac537
signature:
inputs: '[{"type": "tensor",
"tensor-spec":
{"dtype": "uint8", "shape": [-1, 300, 300, 3]}
}]'
outputs: '[{"type": "tensor",
"tensor-spec":
{"dtype": "float32", "shape": [-1,2]}
}]'
Ragam model
Mengingat banyaknya kerangka kerja pembelajaran mesin yang tersedia, MLflow memperkenalkan konsep rasa sebagai cara untuk memberikan kontrak unik untuk semua kerangka kerja pembelajaran mesin. Rasa menunjukkan apa yang diharapkan model tertentu yang dibuat dengan kerangka kerja tertentu. Misalnya, TensorFlow memiliki rasanya sendiri, yang menentukan cara bertahan dan memuat model TensorFlow.
Karena setiap ragam model menunjukkan cara mempertahankan dan memuat model untuk kerangka kerja tertentu, format MLmodel tidak memberlakukan mekanisme serialisasi tunggal yang harus didukung semua model. Oleh karena itu, setiap rasa dapat menggunakan metode yang memberikan performa terbaik atau dukungan terbaik sesuai dengan praktik terbaiknya, tanpa mengorbankan kompatibilitas dengan standar MLmodel.
Contoh berikut menunjukkan bagian flavors
untuk fastai
model.
flavors:
fastai:
data: model.fastai
fastai_version: 2.4.1
python_function:
data: model.fastai
env: conda.yaml
loader_module: mlflow.fastai
python_version: 3.8.12
Tanda tangan model
Tanda tangan model MLflow adalah bagian penting dari spesifikasi model, karena berfungsi sebagai kontrak data antara model dan server yang menjalankan model. Tanda tangan model juga penting untuk mengurai dan memberlakukan jenis input model pada waktu penyebaran. Jika tanda tangan tersedia, MLflow memberlakukan jenis input saat data dikirimkan ke model Anda. Untuk informasi selengkapnya, lihat Penerapan tanda tangan MLflow.
Tanda tangan ditunjukkan pada saat model dicatat, dan disimpan di bagian signature
file MLmodel . Fitur Autolog di MLflow secara otomatis melakukan upaya terbaik untuk menyimpulkan tanda tangan. Namun, Anda dapat mencatat model secara manual jika tanda tangan yang disimpulkan bukan yang Anda butuhkan. Untuk informasi selengkapnya, lihat Cara mencatat model dengan tanda tangan.
Ada dua jenis tanda tangan:
- Tanda tangan berbasis kolom beroperasi pada data tabular. Untuk model dengan jenis tanda tangan ini, MLflow menyediakan
pandas.DataFrame
objek sebagai input. - Tanda tangan berbasis tensor beroperasi dengan array atau tensor n-dimensi. Untuk model dengan tanda tangan ini, MLflow memasok
numpy.ndarray
sebagai input, atau kamusnumpy.ndarray
untuk tensor bernama.
Contoh berikut menunjukkan bagian signature
untuk model visi komputer yang dilatih dengan fastai
. Model ini menerima batch gambar yang diwakili sebagai tensor bentuk (300, 300, 3)
dengan representasi RGB mereka sebagai bilangan bulat yang tidak ditandatangani. Model menghasilkan batch prediksi sebagai probabilitas untuk dua kelas.
signature:
inputs: '[{"type": "tensor",
"tensor-spec":
{"dtype": "uint8", "shape": [-1, 300, 300, 3]}
}]'
outputs: '[{"type": "tensor",
"tensor-spec":
{"dtype": "float32", "shape": [-1,2]}
}]'
Tip
Azure Pembelajaran Mesin menghasilkan file swagger untuk penyebaran model MLflow yang memiliki tanda tangan yang tersedia. File ini memudahkan pengujian penyebaran menggunakan Azure Pembelajaran Mesin studio.
Lingkungan model
Persyaratan untuk model yang akan dijalankan ditentukan dalam file conda.yaml . MLflow dapat secara otomatis mendeteksi dependensi, atau Anda dapat menunjukkannya secara manual dengan memanggil mlflow.<flavor>.log_model()
metode . Memanggil metode dapat berguna jika pustaka yang disertakan MLflow dalam lingkungan Anda bukan yang ingin Anda gunakan.
Contoh conda.yaml berikut menunjukkan lingkungan untuk model yang dibuat dengan fastai
kerangka kerja:
channels:
- conda-forge
dependencies:
- python=3.8.5
- pip
- pip:
- mlflow
- astunparse==1.6.3
- cffi==1.15.0
- configparser==3.7.4
- defusedxml==0.7.1
- fastai==2.4.1
- google-api-core==2.7.1
- ipython==8.2.0
- psutil==5.9.0
name: mlflow-env
Catatan
Lingkungan MLflow beroperasi pada tingkat model, tetapi lingkungan Azure Pembelajaran Mesin beroperasi di tingkat ruang kerja untuk lingkungan terdaftar atau tingkat pekerjaan/penyebaran untuk lingkungan anonim. Saat Anda menyebarkan model MLflow, Azure Pembelajaran Mesin membangun lingkungan model dan menggunakannya untuk penyebaran. Anda dapat menggunakan Azure Pembelajaran Mesin CLI untuk mengambil alih perilaku ini dan menyebarkan model MLflow ke lingkungan Azure Pembelajaran Mesin tertentu.
Memprediksi fungsi
Semua model MLflow berisi predict
fungsi, yang dipanggil saat model disebarkan dengan menggunakan penyebaran tanpa kode. predict
Apa yang dikembalikan fungsi, misalnya kelas, probabilitas, atau prakiraan, tergantung pada kerangka kerja atau rasa yang digunakan untuk pelatihan. Dokumentasi setiap rasa menjelaskan apa yang dikembalikannya.
Anda dapat menyesuaikan predict
fungsi untuk mengubah cara inferensi dijalankan. Anda dapat mencatat model dengan perilaku yang berbeda, atau mencatat ragam model kustom.
Alur kerja untuk memuat model MLflow
Anda dapat memuat model MLflow dari lokasi berikut:
- Langsung dari eksekusi tempat model dicatat
- Dari sistem file tempat model disimpan
- Dari registri model tempat model didaftarkan
MLflow menyediakan cara yang konsisten untuk memuat model ini terlepas dari lokasinya.
Ada dua alur kerja untuk memuat model:
Muat kembali objek dan jenis yang sama yang dicatat. Anda dapat memuat model menggunakan MLflow SDK dan mendapatkan instans model dengan jenis milik pustaka pelatihan. Misalnya, model Open Neural Network Exchange (ONNX) mengembalikan
ModelProto
, sementara model pohon keputusan yang dilatih denganscikit-learn
mengembalikanDecisionTreeClassifier
objek. Gunakanmlflow.<flavor>.load_model()
untuk memuat kembali objek dan jenis model yang sama yang dicatat.Muat kembali model untuk menjalankan inferensi. Anda dapat memuat model menggunakan MLflow SDK dan mendapatkan pembungkus yang memiliki fungsi terjamin
predict
. Tidak masalah rasa mana yang Anda gunakan, karena setiap model MLflow memilikipredict
fungsi.MLflow menjamin bahwa Anda dapat memanggil fungsi ini dengan menggunakan argumen jenis
pandas.DataFrame
, ,numpy.ndarray
ataudict[string, numpyndarray]
, tergantung pada tanda tangan model. MLflow menangani konversi jenis ke jenis input yang diharapkan model. Gunakanmlflow.pyfunc.load_model()
untuk memuat kembali model untuk menjalankan inferensi.