Dependensi model log
Dalam artikel ini, Anda mempelajari cara mencatat model dan dependensinya sebagai artefak model, sehingga tersedia di lingkungan Anda untuk tugas produksi seperti penyajian model.
Dependensi model paket Python Log
MLflow memiliki dukungan asli untuk beberapa pustaka Python ML, di mana MLflow dapat mencatat dependensi dengan andal untuk model yang menggunakan pustaka ini. Lihat rasa model bawaan.
Misalnya, MLflow mendukung scikit-learn dalam modul mlflow.sklearn, dan perintah mlflow.sklearn.log_model mencatat versi sklearn. Hal yang sama berlaku untuk autologging dengan pustaka ML tersebut. Lihat repositori github MLflow untuk contoh tambahan.
Catatan
Untuk mengaktifkan pengelogan jejak untuk beban kerja AI generatif, MLflow mendukung autologging OpenAI.
Untuk pustaka ML yang dapat diinstal dengan pip install PACKAGE_NAME==VERSION
, tetapi tidak memiliki ragam model MLflow bawaan, Anda dapat mencatat paket tersebut menggunakan metode mlflow.pyfunc.log_model . Pastikan untuk mencatat persyaratan dengan versi pustaka yang tepat, misalnya, f"nltk=={nltk.__version__}"
alih-alih hanya nltk
.
mlflow.pyfunc.log_model
mendukung pengelogan untuk:
- Pustaka publik dan kustom dikemas sebagai file telur Python atau roda Python.
- Paket publik pada PyPI dan paket yang dihosting secara privat di server PyPI Anda sendiri.
Dengan mlflow.pyfunc.log_model, MLflow mencoba menyimpulkan dependensi secara otomatis. MLflow menyimpulkan dependensi menggunakan mlflow.models.infer_pip_requirements, dan mencatatnya ke requirements.txt
file sebagai artefak model.
Dalam versi yang lebih lama, MLflow terkadang tidak mengidentifikasi semua persyaratan Python secara otomatis, terutama jika pustaka bukan rasa model bawaan. Dalam kasus ini, Anda dapat menentukan dependensi tambahan dengan extra_pip_requirements
parameter dalam log_model
perintah . Lihat contoh penggunaan parameter extra_pip_requirements.
Penting
Anda juga dapat menimpa seluruh set persyaratan dengan conda_env
parameter dan pip_requirements
, tetapi melakukannya umumnya tidak dianjurkan karena ini mengambil alih dependensi yang diambil MLflow secara otomatis. Lihat contoh cara menggunakan pip_requirements
parameter untuk menimpa persyaratan.
Pengelogan model yang disesuaikan
Untuk skenario di mana pengelogan model yang lebih disesuaikan diperlukan, Anda dapat:
- Tulis model Python kustom. Melakukannya memungkinkan Anda untuk subkelas untuk menyesuaikan inisialisasi
mlflow.pyfunc.PythonModel
dan prediksi. Pendekatan ini berfungsi dengan baik untuk penyesuaian model khusus Python.- Untuk contoh sederhana, lihat contoh tambahkan model N.
- Untuk contoh yang lebih kompleks, lihat contoh model XGBoost kustom.
- Tulis rasa kustom. Dalam skenario ini, Anda dapat menyesuaikan pengelogan lebih dari rasa generik
pyfunc
, tetapi melakukannya membutuhkan lebih banyak pekerjaan untuk diterapkan.
Kode Python kustom
Anda mungkin memiliki dependensi kode Python yang tidak dapat diinstal menggunakan %pip install
perintah , seperti satu atau beberapa .py
file.
Saat mencatat model, Anda dapat memberi tahu MLflow bahwa model dapat menemukan dependensi tersebut pada jalur tertentu dengan menggunakan code_path
parameter di mlflow.pyfunc.log_model. MLflow menyimpan file atau direktori apa pun yang diteruskan menggunakan code_path
sebagai artefak bersama dengan model dalam direktori kode. Saat memuat model, MLflow menambahkan file atau direktori ini ke jalur Python. Rute ini juga berfungsi dengan file roda Python kustom, yang dapat disertakan dalam model menggunakan code_path
, seperti .py
file.
mlflow.pyfunc.log_model( artifact_path=artifact_path,
code_path=[filename.py],
data_path=data_path,
conda_env=conda_env,
)
Mencatat dependensi model paket non-Python
MLflow tidak secara otomatis mengambil dependensi non-Python, seperti paket Java, paket R, dan paket asli (seperti paket Linux). Untuk paket ini, Anda perlu mencatat data tambahan.
- Daftar dependensi: Databricks merekomendasikan pengelogan artefak dengan model yang menentukan dependensi non-Python ini. Ini bisa menjadi file atau
.json
sederhana.txt
. mlflow.pyfunc.log_model memungkinkan Anda menentukan artefak tambahan ini menggunakanartifacts
argumen . - Paket kustom: Sama seperti untuk dependensi Python kustom di atas, Anda perlu memastikan bahwa paket tersedia di lingkungan penyebaran Anda. Untuk paket di lokasi pusat seperti Maven Central atau repositori Anda sendiri, pastikan lokasi tersedia pada waktu penilaian atau penyajian. Untuk paket privat yang tidak dihosting di tempat lain, Anda dapat mencatat paket bersama dengan model sebagai artefak.
Menyebarkan model dengan dependensi
Saat menyebarkan model dari MLflow Tracking Server atau Model Registry, Anda perlu memastikan bahwa lingkungan penyebaran memiliki dependensi yang tepat yang diinstal. Jalur paling sederhana mungkin bergantung pada mode penyebaran Anda: batch/streaming atau penyajian online, dan pada jenis dependensi.
Untuk semua mode penyebaran, Databricks merekomendasikan untuk menjalankan inferensi pada versi runtime yang sama dengan yang Anda gunakan selama pelatihan, karena Databricks Runtime tempat Anda membuat model memiliki berbagai pustaka yang sudah diinstal. MLflow di Databricks secara otomatis menyimpan versi runtime tersebut MLmodel
dalam file metadata di databricks_runtime
bidang, seperti databricks_runtime: 10.2.x-cpu-ml-scala2.12
.
Penyajian online: Model AI Mosaik Melayani
Databricks menawarkan Model Serving, di mana model pembelajaran mesin MLflow Anda diekspos sebagai titik akhir REST API yang dapat diskalakan.
Untuk dependensi Python dalam requirements.txt
file, Databricks dan MLflow menangani semuanya untuk dependensi PyPI publik. Demikian pula, jika Anda menentukan .py
file atau file roda Python saat mencatat model dengan menggunakan code_path
argumen , MLflow memuat dependensi tersebut untuk Anda secara otomatis.
Untuk skenario penyajian model ini, lihat yang berikut ini:
- Menggunakan pustaka Python kustom dengan Model Serving
- Mengemas artefak dan file kustom untuk Model Serving
Untuk dependensi Python dalam requirements.txt
file, Databricks dan MLflow menangani semuanya untuk dependensi PyPI publik. Demikian pula, jika Anda menentukan .py
file atau file roda Python saat mencatat model dengan menggunakan code_path
argumen , MLflow memuat dependensi tersebut untuk Anda secara otomatis.
Penyajian online: sistem pihak ketiga atau kontainer Docker
Jika skenario Anda mengharuskan melayani solusi penyajian pihak ketiga atau solusi berbasis Docker Anda sendiri, Anda dapat mengekspor model Anda sebagai kontainer Docker.
Databricks merekomendasikan hal berikut untuk penyajian pihak ketiga yang secara otomatis menangani dependensi Python. Namun, untuk dependensi non-Python, kontainer perlu dimodifikasi untuk menyertakannya.
Integrasi Docker MLflow untuk solusi penyajian berbasis Docker: Model MLflow build-docker
Integrasi MLflow Azure Pembelajaran Mesin:
Pekerjaan batch dan streaming
Penilaian batch dan streaming harus dijalankan sebagai Pekerjaan Databricks. Pekerjaan notebook sering kali cukup, dan cara paling sederhana untuk menyiapkan kode adalah dengan menggunakan Databricks Model Registry untuk menghasilkan buku catatan penilaian.
Berikut ini menjelaskan proses dan langkah-langkah yang harus diikuti untuk memastikan dependensi diinstal dan diterapkan dengan sesuai:
Mulai kluster penilaian Anda dengan versi Databricks Runtime yang sama yang digunakan selama pelatihan.
databricks_runtime
Baca bidang dariMLmodel
file metadata, dan mulai kluster dengan versi runtime tersebut.Selanjutnya, instal dependensi non-Python apa pun. Untuk memastikan dependensi non-Python Anda dapat diakses oleh lingkungan penyebaran, Anda dapat:
- Instal dependensi non-Python model Anda secara manual pada kluster Databricks sebagai bagian dari konfigurasi kluster sebelum menjalankan inferensi.
- Atau, Anda dapat menulis logika kustom dalam penyebaran pekerjaan penilaian Anda untuk mengotomatiskan penginstalan dependensi ke kluster Anda. Dengan asumsi Anda menyimpan dependensi non-Python sebagai artefak seperti yang dijelaskan dalam Dependensi model paket non-Python Log, otomatisasi ini dapat menginstal pustaka menggunakan API Pustaka. Atau, Anda dapat menulis kode tertentu untuk menghasilkan skrip inisialisasi cakupan kluster untuk menginstal dependensi.
Pekerjaan penilaian Anda menginstal dependensi Python di lingkungan eksekusi pekerjaan. Di Databricks, Registri Model memungkinkan Anda membuat buku catatan untuk inferensi yang melakukan ini untuk Anda.
- Saat Anda menggunakan Registri Model Databricks untuk menghasilkan buku catatan penilaian, buku catatan berisi kode untuk menginstal dependensi Python dalam file model
requirements.txt
. Untuk pekerjaan notebook Anda untuk penilaian batch atau streaming, kode ini menginisialisasi lingkungan notebook Anda, sehingga dependensi model diinstal dan siap untuk model Anda.
- Saat Anda menggunakan Registri Model Databricks untuk menghasilkan buku catatan penilaian, buku catatan berisi kode untuk menginstal dependensi Python dalam file model
MLflow menangani kode Python kustom apa pun yang disertakan
code_path
dalam parameter dilog_model
. Kode ini ditambahkan ke jalur Python ketika metode modelpredict()
dipanggil. Anda juga dapat melakukan ini secara manual dengan:- Memanggil mlflow.pyfunc.spark_udf dengan
env_manager=['virtualenv'/'conda']
argumen . - Mengekstrak persyaratan menggunakan mlflow.pyfunc.get_model_dependencies dan menginstalnya menggunakan penginstalan %pip.
Catatan
Jika Anda menentukan
.py
file atau file roda Python saat mencatat model menggunakancode_path
argumen , MLflow memuat dependensi tersebut untuk Anda secara otomatis.- Memanggil mlflow.pyfunc.spark_udf dengan