Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menjelaskan dukungan untuk model kustom menggunakan Mosaic AI Model Serving. Ini menyediakan detail tentang opsi pengelogan model dan jenis komputasi yang didukung, cara mengemas dependensi model untuk penyajian, dan harapan untuk pembuatan dan penskalaan titik akhir.
Apa itu model kustom?
Model Melayani dapat menyebarkan model Python atau kode kustom apa pun sebagai API tingkat produksi menggunakan sumber daya komputasi CPU atau GPU. Databricks mengacu pada model seperti model kustom. Model ML ini dapat dilatih menggunakan pustaka ML standar seperti transformator scikit-learn, XGBoost, PyTorch, dan HuggingFace dan dapat menyertakan kode Python apa pun.
Untuk menyebarkan model kustom,
- Catat model atau kode dalam format MLflow, menggunakan rasa bawaan MLflow asli atau pyfunc.
- Setelah model dicatat, daftarkan di Unity Catalog (disarankan) atau registri ruang kerja.
- Dari sini, Anda dapat membuat model yang melayani titik akhir untuk menyebarkan dan mengkueri model Anda.
Untuk tutorial lengkap tentang cara menyajikan model kustom di Databricks, lihat Tutorial penyajian model.
Databricks juga mendukung penyajian model dasar untuk aplikasi AI generatif, lihat Foundation Model API dan Model eksternal untuk model dan penawaran komputasi yang didukung.
Model ML log
Ada berbagai metode untuk mencatat model ML Anda untuk penyajian model. Daftar berikut ini meringkas metode dan contoh yang didukung.
Autologging Metode ini diaktifkan secara otomatis saat menggunakan Databricks Runtime untuk ML.
import mlflow from sklearn.ensemble import RandomForestRegressor from sklearn.datasets import load_iris iris = load_iris() model = RandomForestRegressor() model.fit(iris.data, iris.target)Catat menggunakan varian bawaan MLflow. Anda dapat menggunakan metode ini jika Anda ingin mencatat model secara manual untuk kontrol yang lebih rinci.
import mlflow from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import load_iris iris = load_iris() model = RandomForestClassifier() model.fit(iris.data, iris.target) with mlflow.start_run(): mlflow.sklearn.log_model(model, "random_forest_classifier")Pengelogan kustom dengan
pyfunc. Anda dapat menggunakan metode ini untuk menyebarkan model kode python arbitrer atau menyebarkan kode tambahan bersama model Anda.import mlflow import mlflow.pyfunc class Model(mlflow.pyfunc.PythonModel): def predict(self, context, model_input): return model_input * 2 with mlflow.start_run(): mlflow.pyfunc.log_model("custom_model", python_model=Model())
Contoh tanda tangan dan input
Menambahkan contoh tanda tangan dan input ke MLflow disarankan. Tanda tangan diperlukan untuk pengelogan model ke Unity Catalog.
Berikut ini adalah contoh tanda tangan:
from mlflow.models.signature import infer_signature
signature = infer_signature(training_data, model.predict(training_data))
mlflow.sklearn.log_model(model, "model", signature=signature)
Berikut ini adalah contoh input:
input_example = {"feature1": 0.5, "feature2": 3}
mlflow.sklearn.log_model(model, "model", input_example=input_example)
Tipe komputasi
Mosaic AI Model Serving menyediakan berbagai opsi CPU dan GPU untuk menyebarkan model Anda. Saat menyebarkan dengan GPU, Anda harus memastikan bahwa kode Anda disiapkan sehingga prediksi dijalankan pada GPU, menggunakan metode yang disediakan oleh kerangka kerja Anda. MLflow melakukan ini secara otomatis untuk model yang dicatat dengan rasa PyTorch atau Transformers.
| Tipe beban kerja | Instans GPU | Memory |
|---|---|---|
CPU |
4GB per konkurensi | |
GPU_SMALL |
1xT4 | 16GB |
GPU_LARGE |
1xA100 | 80GB |
GPU_LARGE_2 |
2xA100 | 160GB |
GPU_LARGE_4 |
4xA100 | 320GB |
Kontainer penyebaran dan dependensi
Selama penyebaran, kontainer tingkat produksi dibangun dan disebarkan sebagai titik akhir. Kontainer ini mencakup pustaka yang diambil secara otomatis atau ditentukan dalam model MLflow. Gambar dasar mungkin mencakup beberapa dependensi tingkat sistem, tetapi dependensi tingkat aplikasi harus ditentukan secara eksplisit dalam model MLflow Anda.
Jika tidak semua dependensi yang diperlukan disertakan dalam model, Anda mungkin mengalami kesalahan dependensi selama penyebaran. Saat mengalami masalah penyebaran model, Databricks menyarankan Anda menguji model secara lokal.
Dependensi paket dan kode
Pustaka kustom atau privat dapat ditambahkan ke penyebaran Anda. Lihat Menggunakan pustaka Python kustom dengan Model Serving.
Untuk model rasa asli MLflow, dependensi paket yang diperlukan diambil secara otomatis.
Untuk model kustom pyfunc , dependensi dapat ditambahkan secara eksplisit. Untuk informasi terperinci tentang persyaratan pengelogan dan praktik terbaik, lihat dokumentasi Model MLflow dan referensi MLflow Python API.
Anda dapat menambahkan dependensi paket menggunakan:
Parameter
pip_requirements:mlflow.sklearn.log_model(model, "sklearn-model", pip_requirements = ["scikit-learn", "numpy"])Parameter
conda_env:conda_env = { 'channels': ['defaults'], 'dependencies': [ 'python=3.7.0', 'scikit-learn=0.21.3' ], 'name': 'mlflow-env' } mlflow.sklearn.log_model(model, "sklearn-model", conda_env = conda_env)Untuk menyertakan persyaratan tambahan di luar apa yang diambil secara otomatis, gunakan
extra_pip_requirements.mlflow.sklearn.log_model(model, "sklearn-model", extra_pip_requirements = ["sklearn_req"])
Jika Anda memiliki dependensi kode, ini dapat ditentukan menggunakan code_path.
mlflow.sklearn.log_model(model, "sklearn-model", code_path=["path/to/helper_functions.py"],)
Untuk informasi tentang memvalidasi dan memperbarui dependensi sebelum penyebaran, lihat Validasi pra-penyebaran untuk Model Melayani.
Ekspektasi dan batasan
Catatan
Informasi di bagian ini tidak berlaku untuk titik akhir yang melayani model fondasi atau model eksternal.
Bagian berikut menjelaskan ekspektasi dan batasan yang diketahui untuk melayani model kustom menggunakan Model Serving.
Ekspektasi pembuatan dan pembaruan endpoint
- Waktu penyebaran: Menyebarkan versi model yang baru terdaftar melibatkan pengemasan model dan lingkungan modelnya dan memprovisikan titik akhir model itu sendiri. Proses ini dapat memakan waktu sekitar 10 menit, tetapi mungkin memakan waktu lebih lama tergantung pada kompleksitas model, ukuran, dan dependensi.
- Pembaruan waktu henti nol: Azure Databricks melakukan pembaruan titik akhir tanpa waktu henti dengan menjaga konfigurasi titik akhir yang ada tetap aktif hingga yang baru siap. Melakukannya mengurangi risiko gangguan untuk titik akhir yang sedang digunakan. Selama proses pembaruan ini, Anda ditagih untuk konfigurasi titik akhir lama dan baru hingga transisi selesai.
- Batas waktu permintaan: Jika komputasi model membutuhkan waktu lebih dari 297 detik, permintaan akan kehabisan waktu.
Penting
Databricks melakukan pembaruan dan pemeliharaan sistem nol-downtime sesekali pada titik akhir Model Serving yang ada. Selama pemeliharaan, Databricks memuat ulang model. Jika model gagal dimuat ulang, pembaruan titik akhir ditandai sebagai gagal dan konfigurasi titik akhir yang ada terus melayani permintaan. Pastikan model yang disesuaikan kuat dan dapat dimuat ulang kapan saja.
Ekspektasi penskalaan titik akhir
Melayani titik akhir secara otomatis diskalakan berdasarkan lalu lintas dan kapasitas unit konkurensi yang disediakan.
- Konkurensi yang disediakan: Jumlah maksimum permintaan paralel yang dapat ditangani sistem. Perkirakan konkurensi yang diperlukan menggunakan rumus: konkurensi yang disediakan = kueri per detik (QPS) * waktu eksekusi model (s). Untuk memvalidasi konfigurasi konkurensi Anda, lihat Pengujian beban untuk melayani titik akhir.
- Perilaku penskalakan: Titik akhir segera ditingkatkan dengan peningkatan lalu lintas dan penurunan skala setiap lima menit untuk mencocokkan lalu lintas yang berkurang.
- Skalakan ke nol: Skala ke nol adalah fitur opsional untuk titik akhir yang memungkinkannya menurunkan skala menjadi nol setelah 30 menit tidak aktif. Permintaan pertama setelah penskalaan ke nol mengalami "cold start," yang mengarah ke latensi yang lebih tinggi. Peningkatan skala dari nol biasanya membutuhkan waktu 10-20 detik, tetapi terkadang dapat memakan waktu beberapa menit. Tidak ada SLA dalam skala yang dimulai dari latensi nol.
- Pengoptimalan rute: Untuk QPS tinggi dan kasus penggunaan latensi rendah, pengoptimalan rute adalah opsi optimal dan direkomendasikan untuk meningkatkan performa.
- Penyebaran yang dioptimalkan tanpa server: Untuk kecepatan penyebaran titik akhir yang lebih cepat, gunakan penyebaran yang dioptimalkan tanpa server.
Peringatan
Skala ke nol tidak boleh digunakan untuk beban kerja produksi yang memerlukan waktu aktif yang konsisten atau waktu respons yang dijamin. Untuk aplikasi atau titik akhir yang sensitif terhadap latensi yang membutuhkan ketersediaan berkelanjutan, nonaktifkan skala ke nol.
Batasan beban kerja GPU
Berikut ini adalah batasan untuk melayani titik akhir dengan beban kerja GPU:
- Pembuatan gambar kontainer untuk penyajian GPU membutuhkan waktu lebih lama daripada pembuatan gambar untuk penyajian CPU karena ukuran model dan peningkatan persyaratan penginstalan untuk model yang disajikan pada GPU.
- Saat menyebarkan model yang sangat besar, proses penyebaran mungkin habis waktu jika pembuatan kontainer dan penyebaran model melebihi durasi 60 menit, atau pembuatan kontainer mungkin gagal dengan kesalahan "Tidak ada ruang tersisa di perangkat" karena keterbatasan penyimpanan. Untuk model bahasa besar, gunakan API Model Foundation sebagai gantinya.
- Penskalaan otomatis untuk penyajian GPU membutuhkan waktu lebih lama daripada untuk penyajian CPU.
- Kapasitas GPU tidak dijamin saat menskalakan ke nol. Titik akhir GPU mungkin mengharapkan latensi ekstra tinggi untuk permintaan pertama setelah penskalaan ke nol.
Pemberitahuan lisensi Anaconda untuk model-model lama
Catatan
Bagian ini hanya berlaku untuk model yang dicatat dengan MLflow v1.17 atau yang lebih lama (Databricks Runtime 8.3 ML atau yang lebih lama). Jika Anda menggunakan versi yang lebih baru, Anda dapat melewati bagian ini.
Pemberitahuan berikut ditujukan untuk pelanggan yang mengandalkan Anaconda dengan model lama.
Penting
Anaconda Inc. memperbarui ketentuan layanan untuk alur anaconda.org. Berdasarkan ketentuan layanan baru, Anda mungkin memerlukan lisensi komersial jika Anda mengandalkan pengemasan dan distribusi Anaconda. Lihat FAQ Anaconda Commercial Edition untuk informasi lebih lanjut. Penggunaan Anda atas setiap saluran Anaconda diatur oleh persyaratan layanan mereka.
Model MLflow yang dicatat sebelum v1.18 (Databricks Runtime 8.3 ML atau lebih lama) secara default dicatat dengan saluran conda defaults (https://repo.anaconda.com/pkgs/) sebagai dependensi. Karena perubahan lisensi ini, Databricks telah menghentikan penggunaan saluran defaults untuk model yang dicatat menggunakan MLflow v1.18 dan di atasnya. Saluran default yang dicatat sekarang adalah conda-forge, yang menunjuk pada komunitas yang dikelola https://conda-forge.org/.
Jika Anda mencatat model sebelum MLflow v1.18 tanpa mengecualikan saluran defaults dari lingkungan conda untuk model tersebut, model tersebut mungkin memiliki dependensi pada saluran defaults yang mungkin tidak Anda maksudkan.
Untuk mengonfirmasi secara manual apakah model memiliki dependensi ini, Anda dapat memeriksa nilai channel dalam file conda.yaml yang dikemas dengan model yang dicatat. Misalnya, model conda.yaml dengan saluran yang memiliki ketergantungan defaults mungkin terlihat seperti ini:
channels:
- defaults
dependencies:
- python=3.8.8
- pip
- pip:
- mlflow
- scikit-learn==0.23.2
- cloudpickle==1.6.0
name: mlflow-env
Karena Databricks tidak dapat menentukan apakah penggunaan Anda atas repositori Anaconda untuk berinteraksi dengan model Anda diizinkan berdasarkan hubungan Anda dengan Anaconda, Databricks tidak memaksa pelanggannya untuk membuat perubahan apa pun. Jika penggunaan Anda atas repositori Anaconda.com melalui penggunaan Databricks diizinkan berdasarkan persyaratan Anaconda, Anda tidak perlu mengambil tindakan apa pun.
Jika Anda ingin mengubah saluran yang digunakan di lingkungan model, Anda dapat mendaftarkan ulang model ke registri model dengan baru conda.yaml. Anda dapat melakukannya dengan menentukan saluran di parameter conda_env dari log_model().
Untuk informasi selengkapnya tentang log_model() API, lihat dokumentasi MLflow untuk ragam model yang sedang Anda kerjakan, misalnya, log_model untuk scikit-learn.
Untuk informasi selengkapnya tentang conda.yaml file, lihat dokumentasi MLflow.
Sumber Daya Tambahan:
- Membuat model kustom yang melayani titik akhir
- Kueri yang melayani titik akhir untuk model kustom
- panduan debugging untuk Model Serving
- Menggunakan pustaka Python kustom dengan Model Serving
- Mengemas artefak kustom untuk Model Serving
- Menyebarkan kode Python dengan Model Serving
- Pengoptimalan rute pada titik akhir penyajian
- Penyebaran yang dioptimalkan tanpa server untuk model yang melayani titik akhir
- Mengonfigurasi akses ke sumber daya dari titik akhir penyajian model