Validering före distribution för modellhantering

Vägledningen i den här artikeln kan hjälpa dig att fånga upp problem med din modell innan du väntar på slutpunktsdistributionsprocessen. Databricks rekommenderar att du går igenom dessa valideringssteg för att säkerställa en bättre utvecklingsupplevelse när du använder modellservering.

Testa förutsägelser före distribution

Innan du distribuerar din modell till tjänstslutpunkten ska du testa offlineförutsägelser i en virtuell miljö med mlflow.models.predict och indataexempel. MLflow tillhandahåller validerings-API:er som simulerar distributionsmiljön och tillåter testning av ändrade beroenden.

Det finns två valideringsalternativ före distributionen: MLflow Python API och MLflow CLI. Mer detaljerad vägledning finns i MLflow-dokumentation för att testa förutsägelser.

Du kan ange följande parametrar:

  • Den model_uri modell som distribueras till modellservern.
  • Något av följande:
    • I input_data det förväntade formatet för anropet mlflow.pyfunc.PyFuncModel.predict() av modellen.
    • Som input_path definierar en fil som innehåller indata som ska läsas in och användas för anropet till predict.
  • I content_typecsv - eller-formatet json .
  • Ett valfritt output_path alternativ för att skriva förutsägelserna till en fil. Om du utelämnar den här parametern skrivs förutsägelserna ut till stdout.
  • En miljöhanterare, env_manager, som används för att skapa miljön för att betjäna:
    • Standardvärdet är virtualenv. Rekommenderas för att hantera validering.
    • local är tillgänglig, men potentiellt felbenägen för att hantera validering. Används vanligtvis endast för snabb felsökning.
  • Om du vill installera den aktuella versionen av MLflow som finns i din miljö med den virtuella miljön med hjälp av install_mlflow. Den här inställningen är Falsesom standard .
  • Om du vill uppdatera och testa olika versioner av paketberoenden för felsökning eller avlusning. Du kan ange detta som en lista över åsidosättningar eller tillägg för strängberoende med hjälp av åsidosättningsargumentet pip_requirements_override.

Till exempel:

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

Uppdatera modellberoenden

Om det finns problem med de beroenden som anges med en loggad modell kan du uppdatera kraven med hjälp av MLflow CLI eller mlflow.models.model.update_model_requirements() I MLflow Python API utan att behöva logga en annan modell.

I följande exempel visas hur du uppdaterar en loggad modell pip_requirements.txt på plats.

Du kan uppdatera befintliga definitioner med angivna paketversioner eller lägga till icke-existerande krav i filen pip_requirements.txt. Den här filen finns i MLflow-modellartefakten på den angivna model_uri platsen.

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

Verifiera modellindata före distribution

Modell som betjänar slutpunkter förväntar sig ett särskilt format för JSON-indata. Du kan validera att dina modellindata fungerar på en slutpunkt för tjänstgöring innan du implementerar genom att använda validate_serving_input i MLflow.

Följande är ett exempel på den automatiskt genererade koden på fliken körningsartefakter om din modell loggas med ett giltigt indataexempel.

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)

Du kan också testa indataexempel mot den loggade modellen med hjälp av API:et convert_input_example_to_serving_input för att generera en giltig JSON-serveringsindata.

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)

Testa att modellen hanteras manuellt

Du kan testa modellens serveringsbeteende manuellt med hjälp av följande steg:

  1. Öppna en notebook-fil och anslut till ett All-Purpose-kluster som använder en Databricks Runtime-version, inte Databricks Runtime för Machine Learning.
  2. Läs in modellen med MLflow och försök felsöka därifrån.

Du kan också läsa in modellen lokalt på datorn och felsöka därifrån. Läs in din modell lokalt med hjälp av följande:

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)