Bagikan melalui


Validasi pra-penyebaran untuk Model Serving

Panduan dalam artikel ini dapat membantu Anda menangkap masalah dengan model Anda sebelum menunggu proses penyebaran titik akhir. Databricks merekomendasikan untuk melalui langkah-langkah validasi ini untuk memastikan pengalaman pengembangan yang lebih baik saat menggunakan penyajian model.

Menguji prediksi sebelum penyebaran

Sebelum menyebarkan model Anda ke titik akhir penyajian, uji prediksi offline dengan lingkungan virtual menggunakan contoh mlflow.models.predict dan input. MLflow menyediakan API validasi yang mensimulasikan lingkungan penyebaran dan memungkinkan pengujian dependensi yang dimodifikasi.

Ada dua opsi validasi pra-penyebaran: MLflow Python API dan MLflow CLI. Lihat dokumentasi MLflow untuk menguji prediksi untuk panduan yang lebih rinci.

Anda dapat menentukan parameter berikut:

  • Model model_uri yang disebarkan untuk memodelkan penyajian.
  • Salah satu hal berikut ini:
    • input_data dalam format yang diharapkan untuk mlflow.pyfunc.PyFuncModel.predict() panggilan model.
    • input_path yang menentukan file yang berisi data input yang akan dimuat dan digunakan untuk panggilan ke predict.
  • content_type dalam csv atau json format.
  • output_path Opsional untuk menulis prediksi ke file. Jika Anda menghilangkan parameter ini, prediksi akan dicetak ke stdout.
  • Manajer lingkungan sistem, env_manager, yang digunakan untuk membangun lingkungan sistem untuk menjalankan:
    • Defaultnya adalah virtualenv. Direkomendasikan untuk melayani validasi.
    • local tersedia, tetapi berpotensi rawan kesalahan untuk melayani validasi. Umumnya hanya digunakan untuk penelusuran kesalahan cepat.
  • Apakah akan menginstal versi MLflow saat ini yang ada di lingkungan Anda dengan lingkungan virtual menggunakan install_mlflow. Pengaturan ini secara default adalah False.
  • Apakah perlu memperbarui dan menguji versi dependensi paket yang berbeda untuk pemecahan masalah atau pengecekan kesalahan. Anda dapat menentukan ini sebagai daftar dependensi string yang akan diganti atau ditambahkan menggunakan argumen override, pip_requirements_override.

Contohnya:

import mlflow

run_id = "..."
model_uri = f"runs:/{run_id}/model"

mlflow.models.predict(
  model_uri=model_uri,
  input_data={"col1": 34.2, "col2": 11.2, "col3": "green"},
  content_type="json",
  env_manager="virtualenv",
  install_mlflow=False,
  pip_requirements_override=["pillow==10.3.0", "scipy==1.13.0"],
)

Memperbarui dependensi model

Jika ada masalah dengan dependensi yang ditentukan dengan model yang dicatat, Anda dapat memperbarui persyaratan dengan menggunakan MLflow CLI atau mlflow.models.model.update_model_requirements() di MLflow Python API tanpa harus mencatat model lain.

Contoh berikut menunjukkan cara memperbarui pip_requirements.txt dari model yang dicatat secara langsung.

Anda dapat memperbarui definisi yang ada dengan versi paket tertentu atau menambahkan persyaratan yang tidak ada ke file pip_requirements.txt. File ini berada dalam artefak model MLflow di lokasi yang ditentukan model_uri .

from mlflow.models.model import update_model_requirements

update_model_requirements(
  model_uri=model_uri,
  operation="add",
  requirement_list=["pillow==10.2.0", "scipy==1.12.0"],
)

Memvalidasi input model sebelum penyebaran

Model yang melayani titik akhir mengharapkan format khusus input JSON. Anda dapat memvalidasi bahwa input model Anda berfungsi pada titik akhir penyajian sebelum penyebaran menggunakan validate_serving_input di MLflow.

Berikut ini adalah contoh kode yang dihasilkan secara otomatis di tab artefak eksekusi jika model Anda dicatat dengan contoh input yang valid.

from mlflow.models import validate_serving_input

model_uri = 'runs:/<run_id>/<artifact_path>'

serving_payload = """{
 "messages": [
   {
     "content": "How many product categories are there?",
     "role": "user"
   }
 ]
}
"""

# Validate the serving payload works on the model
validate_serving_input(model_uri, serving_payload)

Anda juga dapat menguji contoh input apa pun terhadap model yang dicatat dengan menggunakan convert_input_example_to_serving_input API untuk menghasilkan input penyajian JSON yang valid.

from mlflow.models import validate_serving_input
from mlflow.models import convert_input_example_to_serving_input

model_uri = 'runs:/<run_id>/<artifact_path>'

# Define INPUT_EXAMPLE with your own input example to the model
# A valid input example is a data instance suitable for pyfunc prediction

serving_payload = convert_input_example_to_serving_input(INPUT_EXAMPLE)

# Validate the serving payload works on the model
validate_serving_input(model_uri, serving_payload)

Uji penyajian model secara manual

Anda dapat menguji perilaku penyajian model secara manual menggunakan langkah-langkah berikut:

  1. Buka notebook dan lampirkan ke kluster All-Purpose yang menggunakan versi Databricks Runtime, bukan Databricks Runtime untuk Pembelajaran Mesin.
  2. Muat model menggunakan MLflow dan coba debugging dari sana.

Anda juga dapat memuat model secara lokal di PC dan debug dari sana. Muat model Anda secara lokal menggunakan yang berikut ini:

import os
import mlflow

os.environ["MLFLOW_TRACKING_URI"] = "databricks://PROFILE"

ARTIFACT_URI = "model_uri"
if '.' in ARTIFACT_URI:
    mlflow.set_registry_uri('databricks-uc')
local_path = mlflow.artifacts.download_artifacts(ARTIFACT_URI)
print(local_path)

conda env create -f local_path/artifact_path/conda.yaml
conda activate mlflow-env

mlflow.pyfunc.load_model(local_path/artifact_path)