Logga, läsa in, registrera och distribuera MLflow-modeller

En MLflow-modell är ett standardformat för att paketera maskininlärningsmodeller som kan användas i en mängd olika nedströmsverktyg, till exempel batchinferens för Apache Spark eller realtidshantering via ett REST-API. Formatet definierar en konvention som gör att du kan spara en modell i olika smaker (python-function, pytorch, sklearn och så vidare), som kan förstås av olika modelltjänst - och slutsatsdragningsplattformar.

Logg- och inläsningsmodeller

När du loggar en modell loggar requirements.txt och conda.yaml filer MLflow automatiskt. Du kan använda dessa filer för att återskapa modellutvecklingsmiljön och installera om beroenden med hjälp av virtualenv (rekommenderas) eller conda.

Viktigt!

Anaconda Inc. uppdaterade sina tjänstvillkor för anaconda.org kanaler. Baserat på de nya tjänstvillkoren kan du kräva en kommersiell licens om du förlitar dig på Anacondas paketering och distribution. Mer information finns i Vanliga frågor och svar om Anaconda Commercial Edition. Din användning av Anaconda-kanaler styrs av deras användarvillkor.

MLflow-modeller som loggades före v1.18 (Databricks Runtime 8.3 ML eller tidigare) loggades som standard med conda-kanalen defaults (https://repo.anaconda.com/pkgs/) som ett beroende. På grund av den här licensändringen defaults har Databricks stoppat användningen av kanalen för modeller som loggats med MLflow v1.18 och senare. Standardkanalen som loggas är nu conda-forge, som pekar på den communityhanterade https://conda-forge.org/.

Om du loggade en modell före MLflow v1.18 utan att utesluta defaults kanalen från conda-miljön för modellen, kan den modellen ha ett beroende av den defaults kanal som du kanske inte har tänkt dig. För att manuellt bekräfta om en modell har det här beroendet kan du undersöka channel värdet i conda.yaml filen som är paketerad med den loggade modellen. En modell med conda.yaml ett defaults kanalberoende kan till exempel se ut så här:

channels:
- defaults
dependencies:
- python=3.8.8
- pip
- pip:
    - mlflow
    - scikit-learn==0.23.2
    - cloudpickle==1.6.0
      name: mlflow-env

Eftersom Databricks inte kan avgöra om din användning av Anaconda-lagringsplatsen för att interagera med dina modeller är tillåten under din relation med Anaconda, tvingar Databricks inte sina kunder att göra några ändringar. Om din användning av Anaconda.com lagringsplats genom användning av Databricks är tillåten enligt Anacondas villkor behöver du inte vidta några åtgärder.

Om du vill ändra den kanal som används i en modells miljö kan du registrera om modellen till modellregistret med en ny conda.yaml. Du kan göra detta genom att ange kanalen i parametern conda_envlog_model()för .

Mer information om API:et finns i log_model() MLflow-dokumentationen för modellsmaken som du arbetar med, till exempel log_model för scikit-learn.

Mer information om conda.yaml filer finns i MLflow-dokumentationen.

API-kommandon

Om du vill logga en modell till MLflow-spårningsservern använder du mlflow.<model-type>.log_model(model, ...).

Om du vill läsa in en tidigare loggad modell för slutsatsdragning eller vidareutveckling använder du mlflow.<model-type>.load_model(modelpath), där modelpath är något av följande:

  • en körningsrelativ sökväg (till exempel runs:/{run_id}/{model-path})
  • en DBFS-sökväg
  • en registrerad modellsökväg (till exempel models:/{model_name}/{model_stage}).

En fullständig lista över alternativ för inläsning av MLflow-modeller finns i Referera till artefakter i MLflow-dokumentationen.

För Python MLflow-modeller är ytterligare ett alternativ att använda mlflow.pyfunc.load_model() för att läsa in modellen som en allmän Python-funktion. Du kan använda följande kodfragment för att läsa in modellen och poängsätta datapunkter.

model = mlflow.pyfunc.load_model(model_path)
model.predict(model_input)

Alternativt kan du exportera modellen som en Apache Spark UDF som ska användas för bedömning i ett Spark-kluster, antingen som ett batchjobb eller som ett Spark Streaming-jobb i realtid.

# load input data table as a Spark DataFrame
input_data = spark.table(input_table_name)
model_udf = mlflow.pyfunc.spark_udf(spark, model_path)
df = input_data.withColumn("prediction", model_udf())

Loggmodellberoenden

Om du vill läsa in en modell korrekt bör du se till att modellberoendena läses in med rätt versioner i notebook-miljön. I Databricks Runtime 10.5 ML och senare varnar MLflow dig om ett matchningsfel identifieras mellan den aktuella miljön och modellens beroenden.

Ytterligare funktioner för att förenkla återställningen av modellberoenden ingår i Databricks Runtime 11.0 ML och senare. I Databricks Runtime 11.0 ML och senare kan du för smakmodeller anropa mlflow.pyfunc.get_model_dependencies för pyfunc att hämta och ladda ned modellberoendena. Den här funktionen returnerar en sökväg till beroendefilen som du sedan kan installera med hjälp %pip install <file-path>av . När du läser in en modell som en PySpark UDF anger du env_manager="virtualenv" i anropet mlflow.pyfunc.spark_udf . Detta återställer modellberoenden i kontexten för PySpark UDF och påverkar inte miljön utanför.

Du kan också använda den här funktionen i Databricks Runtime 10.5 eller senare genom att manuellt installera MLflow version 1.25.0 eller senare:

%pip install "mlflow>=1.25.0"

Mer information om hur du loggar modellberoenden (Python och icke-Python) och artefakter finns i Loggmodellberoenden.

Lär dig hur du loggar modellberoenden och anpassade artefakter för modellservering:

Automatiskt genererade kodfragment i MLflow-användargränssnittet

När du loggar en modell i en Azure Databricks-notebook-fil genererar Azure Databricks automatiskt kodfragment som du kan kopiera och använda för att läsa in och köra modellen. Så här visar du följande kodfragment:

  1. Gå till skärmen Körningar för körningen som genererade modellen. (Se Visa notebook-experiment för att visa skärmen Körningar.)
  2. Rulla till avsnittet Artefakter .
  3. Klicka på namnet på den loggade modellen. En panel öppnas till höger med kod som du kan använda för att läsa in den loggade modellen och göra förutsägelser på Spark eller Pandas DataFrames.

Kodfragment i artefaktpanel

Exempel

Exempel på loggningsmodeller finns i exemplen i Spåra exempel på maskininlärningsträningskörningar. Ett exempel på hur du läser in en loggad modell för slutsatsdragning finns i exemplet modellinferens.

Registrera modeller i modellregistret

Du kan registrera modeller i MLflow Model Registry, ett centraliserat modellarkiv som tillhandahåller ett användargränssnitt och en uppsättning API:er för att hantera hela livscykeln för MLflow-modeller. Anvisningar om hur du använder modellregistret för att hantera modeller i Databricks Unity Catalog finns i Hantera modelllivscykel i Unity Catalog. Information om hur du använder arbetsytemodellregistret finns i Hantera modelllivscykel med hjälp av Workspace Model Registry (äldre).

Om du vill registrera en modell med hjälp av API:et använder du mlflow.register_model("runs:/{run_id}/{model-path}", "{registered-model-name}").

Spara modeller i DBFS

Om du vill spara en modell lokalt använder du mlflow.<model-type>.save_model(model, modelpath). modelpath måste vara en DBFS-sökväg . Om du till exempel använder en DBFS-plats dbfs:/my_project_models för att lagra ditt projektarbete måste du använda modellsökvägen /dbfs/my_project_models:

modelpath = "/dbfs/my_project_models/model-%f-%f" % (alpha, l1_ratio)
mlflow.sklearn.save_model(lr, modelpath)

Använd ML-pipelinesför MLlib-modeller.

Ladda ned modellartefakter

Du kan ladda ned loggade modellartefakter (till exempel modellfiler, diagram och mått) för en registrerad modell med olika API:er.

Python API-exempel :

from mlflow.store.artifact.models_artifact_repo import ModelsArtifactRepository

model_uri = MlflowClient.get_model_version_download_uri(model_name, model_version)
ModelsArtifactRepository(model_uri).download_artifacts(artifact_path="")

Java API-exempel :

MlflowClient mlflowClient = new MlflowClient();
// Get the model URI for a registered model version.
String modelURI = mlflowClient.getModelVersionDownloadUri(modelName, modelVersion);

// Or download the model artifacts directly.
File modelFile = mlflowClient.downloadModelVersion(modelName, modelVersion);

CLI-kommandoexempel :

mlflow artifacts download --artifact-uri models:/<name>/<version|stage>

Distribuera modeller för onlineservering

Du kan använda Modellservering för att vara värd för maskininlärningsmodeller från modellregistret som REST-slutpunkter. Dessa slutpunkter uppdateras automatiskt baserat på tillgängligheten för modellversioner och deras faser.

Du kan också distribuera en modell till ramverk från tredje part med hjälp av MLflows inbyggda distributionsverktyg. Se följande exempel.