Model Sunma için dağıtım öncesi doğrulama

Bu makaledeki kılavuz, modelinizin ve tüm bağımlılıklarının dağıtımdan önce sunum ortamıyla uyumlu olduğunu onaylamanıza yardımcı olabilir, böylece geliştirme sırasında uç nokta dağıtım işlemini beklemek yerine sorunları yakalayabilirsiniz. Databricks, model sunma kullanırken daha iyi bir geliştirme deneyimi sağlamak için bu doğrulama adımlarının izlenmesini önerir. Modelinizin ve bağımlılıklarının sunum simülasyonu yapan bir ortamda çalıştığını doğrulamanın en doğrudan yolu olan test tahminleriyle başlayın.

Dağıtımdan önce tahminleri test edin

Modelinizi sunum uç noktasına dağıtmadan önce, mlflow.models.predict ve giriş örneklerini kullanarak çevrimdışı tahminleri sanal bir ortamla test edin. MLflow, dağıtım ortamını simüle eden ve değiştirilen bağımlılıkların test edilmesine izin veren doğrulama API'leri sağlar. Varsayılan env_manager="virtualenv" ile MLflow, modelinizin kaydedilmiş bağımlılıklarını sunum çalışma zamanını simüle eden yalıtılmış bir ortamda yeniden oluşturur; böylece eksik olan, başka bir paketle çakışan veya yüklenemeyen bir bağımlılık, uç nokta dağıtımı sırasında değil burada ortaya çıkar.

İki dağıtım öncesi doğrulama seçeneği vardır: MLflow Python API ve MLflow CLI. Daha ayrıntılı yönergeler almak için tahminleri test etmek amacıyla MLflow belgelerine bakın.

Aşağıdaki parametreleri belirtebilirsiniz:

  • model sunumuna dağıtılan modelin model_uri
  • Aşağıdakilerden biri:
    • Modelin input_data çağrısı için beklenen biçimdeki mlflow.pyfunc.PyFuncModel.predict().
    • input_path çağrısı için yüklenecek ve kullanılacak giriş verilerini içeren bir dosyayı tanımlayan predict.
  • content_type veya csv biçimindeki json.
  • Tahminleri bir dosyaya yazmak için isteğe bağlı bir output_path. Bu parametreyi belirtmezseniz, tahminler stdout'a yazdırılır.
  • Hizmet vermek için ortamı oluşturmak amacıyla kullanılan bir ortam yöneticisi env_manager:
    • Varsayılan değer: virtualenv. Doğrulama için önerilir.
    • local kullanılabilir, ancak doğrulamaya yönelik olası hatalara açıktır. Genellikle yalnızca hızlı hata ayıklama için kullanılır.
  • install_mlflow kullanarak sanal ortamla, ortamınızda bulunan geçerli MLflow sürümünün yüklenip yüklenmeyeceği. Bu ayar varsayılan olarak olarak ayarlanır False.
  • Sorun giderme veya hata ayıklama için paket bağımlılıklarının farklı sürümlerini güncelleştirme ve test etme. Bunu, override argümanını kullanarak pip_requirements_override, dize bağımlılıkları için override veya ekleme listesi olarak belirtebilirsiniz.

Örneğin:

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"],
)

Model bağımlılıklarını güncelleştirme

Günlüğe kaydedilen modelle belirtilen bağımlılıklarla ilgili herhangi bir sorun varsa, başka bir modeli günlüğe kaydetmek zorunda kalmadan MLflow CLI'sini veya mlflow.models.model.update_model_requirements() MLflow Python API'sini kullanarak gereksinimleri güncelleştirebilirsiniz.

Aşağıdaki örnek, günlüğe kaydedilen bir modelin pip_requirements.txt'sini yerinde güncelleştirmeyi gösterir.

Mevcut tanımları belirtilen paket sürümleriyle güncelleştirebilir veya var olmayan gereksinimleri dosyaya pip_requirements.txt ekleyebilirsiniz. Bu dosya, belirtilen model_uri konumdaki MLflow modeli yapıtı içindedir.

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"],
)

Dağıtımdan önce model girişini doğrulama

Uç noktaları sunan model, özel bir JSON girişi biçimi bekler. MLflow'da kullanarak validate_serving_input dağıtımdan önce model girişinizin bir sunum uç noktasında çalıştığını doğrulayabilirsiniz.

Modeliniz geçerli bir giriş örneğiyle günlüğe kaydedildiyse, çalıştırmanın çıktılar sekmesinde otomatik olarak oluşturulan kodun bir örneği aşağıda verilmiştir.

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)

Ayrıca, geçerli bir JSON servis girişi oluşturmak için convert_input_example_to_serving_input API'yi kullanarak günlüğe alınan modelde herhangi bir giriş örneğini test edebilirsiniz.

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)

Modelin el ile sunumunu test etme

Aşağıdaki adımları kullanarak modelin sunum davranışını el ile test edebilirsiniz:

  1. Bir defter açın ve Databricks Runtime sürümünü kullanan, Machine Learning için Databricks Runtime sürümünü kullanmayan Genel Amaçlı bir kümeye ekleyin.
  2. MLflow kullanarak modeli yükleyin ve oradan hata ayıklamayı deneyin.

Ayrıca modeli bilgisayarınıza yerel olarak yükleyebilir ve oradan hata ayıklayabilirsiniz. Aşağıdakini kullanarak modelinizi yerel olarak yükleyin:

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)