Dela via


Riktlinjer för att distribuera MLflow-modeller

GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)

I den här artikeln får du lära dig om distributionen av MLflow-modeller till Azure Machine Learning för både realtids- och batchinferens och om olika verktyg som du kan använda för att hantera distributionerna.

Distribution utan kod

När du distribuerar MLflow-modeller till Azure Machine Learning, till skillnad från distribution av anpassade modeller, behöver du inte ange ett bedömningsskript eller en miljö. Azure Machine Learning genererar automatiskt bedömningsskriptet och miljön. Den här funktionen kallas för distribution utan kod.

För distribution utan kod, Azure Machine Learning:

  • Säkerställer att alla paketberoenden som anges i MLflow-modellen är uppfyllda.
  • Tillhandahåller en MLflow-basavbildning eller en kuraterad miljö som innehåller följande objekt:
    • Paket som krävs för att Azure Machine Learning ska kunna utföra slutsatsdragning, inklusive mlflow-skinny.
    • Ett bedömningsskript för att utföra slutsatsdragning.

Paket och beroenden

Azure Machine Learning genererar automatiskt miljöer för att köra slutsatsdragning på MLflow-modeller. För att skapa miljöerna läser Azure Machine Learning conda-beroendena som anges i MLflow-modellen och lägger till alla paket som krävs för att köra inferensservern. Dessa extra paket varierar beroende på distributionstyp.

I följande exempel conda.yaml-fil visas Conda-beroenden som anges i en MLflow-modell.

channels:
- conda-forge
dependencies:
- python=3.12.3
- pip<=23.1.2
- pip:
  - mlflow
  - scikit-learn==1.6.1
  - psutil==5.9.4
name: mlflow-env

Viktigt!

MLflow identifierar automatiskt paket när den loggar en modell och fäster paketversionerna i modellens Conda-beroenden. Den här automatiska paketidentifieringen kanske inte återspeglar dina avsikter eller krav. Du kan också logga modeller som använder en anpassad signatur, miljö eller exempel.

Modeller som innehåller signaturer

MLflow-modeller kan innehålla en signatur som anger förväntade indata och deras typer. När sådana modeller distribueras till online- eller batchslutpunkter ser Azure Machine Learning till att antalet och typerna av dataindata överensstämmer med signaturen. Om indata inte kan parsas som förväntat misslyckas modellanropet.

Du kan granska en MLflow-modellsignatur genom att öppna MLmodel-filen. Mer information om hur signaturer fungerar i MLflow finns i Signaturer i MLflow.

I följande exempel lyfter MLmodel-filen fram signature.

artifact_path: model
flavors:
  python_function:
    env:
      conda: conda.yaml
      virtualenv: python_env.yaml
    loader_module: mlflow.sklearn
    model_path: model.pkl
    predict_fn: predict
    python_version: 3.12.3
  sklearn:
    code: null
    pickled_model: model.pkl
    serialization_format: cloudpickle
    sklearn_version: 1.1.2
mlflow_version: 2.7.1
model_uuid: 3f725f3264314c02808dd99d5e5b2781
run_id: 70f15bab-cf98-48f1-a2ea-9ad2108c28cd
signature:
  inputs: '[{"name": "age", "type": "double"}, {"name": "sex", "type": "double"},
    {"name": "bmi", "type": "double"}, {"name": "bp", "type": "double"}, {"name":
    "s1", "type": "double"}, {"name": "s2", "type": "double"}, {"name": "s3", "type":
    "double"}, {"name": "s4", "type": "double"}, {"name": "s5", "type": "double"},
    {"name": "s6", "type": "double"}]'
  outputs: '[{"type": "double"}]'

Tips

Signaturer i MLflow-modeller rekommenderas eftersom de är ett bekvämt sätt att identifiera problem med datakompatibilitet. Mer information om hur du loggar modeller som har signaturer finns i Loggmodeller som använder en anpassad signatur, miljö eller exempel.

Distribution i den inbyggda MLflow-servern jämfört med distribution i Azure Machine Learning-inferensservern

Modellutvecklare kan använda inbyggda MLflow-distributionsverktyg för att testa modeller lokalt. Du kan till exempel köra en lokal instans av en modell som är registrerad i MLflow-serverregistret med hjälp mlflow models serve av eller MLflow CLI mlflow models predict. Mer information om inbyggda MLflow-distributionsverktyg finns i Inbyggda distributionsverktyg i MLflow-dokumentationen.

Azure Machine Learning stöder även distribution av modeller till både online- och batchslutpunkter. Dessa slutpunkter kör olika slutsatsdragningstekniker som kan ha olika funktioner.

  • Azure Machine Learning-slutpunkter online, som liknar den inbyggda MLflow-servern, ger ett skalbart, synkront och enkelt sätt att köra modeller för slutsatsdragning.

  • Azure Machine Learning-batchslutpunkter kan köra asynkrona slutsatsdragningar över långvariga inferensprocesser som kan skalas till stora mängder data. MLflow-servern saknar den här funktionen, även om du kan uppnå en liknande funktion med hjälp av Spark-jobb. Mer information om batchslutpunkter och MLflow-modeller finns i Använda MLflow-modeller i batchdistributioner.

Indataformaten

I följande tabell visas de indatatyper som stöds av den inbyggda MLflow-servern och de som stöds av Azure Machine Learning-onlineslutpunkter.

Inmatningstyp Inbyggd MLflow-server Azure Machine Learning-slutpunkt online
JSON-serialiserade pandas-DataFrames i delad ordning
JSON-serialiserade Pandas DataFrames i postorienteringen Inaktuell
CSV-serialiserade pandas-dataframes Använd batch-slutsatsdragning. Mer information finns i Distribuera MLflow-modeller till batchslutpunkter.
TensorFlow-indata som JSON-serialiserade listor (tensorer) och ordbok av listor (namngivna tensorer)
TensorFlow-indata med TensorFlow Serving API:et

Följande avsnitt fokuserar på MLflow-modeller som distribueras till Azure Machine Learning-slutpunkter online.

Indatastruktur

Oavsett indatatyp kräver Azure Machine Learning att du anger indata i en JSON-nyttolast i ordlistenyckeln input_data. Den här nyckeln krävs inte när du använder kommandot mlflow models serve för att hantera modeller, så nyttolaster kan inte användas utbytbart för Azure Machine Learning-onlineslutpunkter och den inbyggda MLflow-servern.

Viktigt!

Nyttolaststrukturen ändrades i MLflow 2.0.

Följande nyttolastexempel visar skillnader mellan en modell som distribueras i den inbyggda MLflow-servern jämfört med Azure Machine Learning-inferensservern.

JSON-serialiserad Pandas DataFrame i delad orientering

{
    "input_data": {
        "columns": [
            "age", "sex", "trestbps", "chol", "fbs", "restecg", "thalach", "exang", "oldpeak", "slope", "ca", "thal"
        ],
        "index": [1],
        "data": [
            [1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
        ]
    }
}

Tensor-indata

{
    "input_data": [
          [1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
          [1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
          [1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
          [1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
    ]
}

Namngivna inmatningar med tensorer

{
    "input_data": {
        "tokens": [
          [0, 655, 85, 5, 23, 84, 23, 52, 856, 5, 23, 1]
        ],
        "mask": [
          [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
        ]
    }
}

Anpassning av slutsatsdragning för MLflow-modeller

Bedömningsskript anpassar hur du kör slutsatsdragning för anpassade modeller. Men för MLflow-modelldistribution fattas beslutet om hur inferensen ska köras av modellverktyget i stället för av distributionsteknikern. Varje modellramverk kan automatiskt tillämpa specifika slutsatsdragningsrutiner.

Om du behöver ändra hur slutsatsdragning körs för en MLflow-modell kan du utföra någon av följande åtgärder:

  • Ändra hur din modell loggas i träningsrutinen.
  • Anpassa slutsatsdragning med hjälp av ett bedömningsskript vid distributionstillfället.

Ändra hur din modell loggas under träningen

När du loggar en modell med antingen mlflow.autolog eller mlflow.<flavor>.log_modelavgör den smak som används för modellen hur slutsatsdragning ska köras och vilka resultat som ska returneras. MLflow tillämpar inte något specifikt beteende för hur predict() funktionen genererar resultat.

I vissa fall kanske du vill utföra viss förbearbetning eller efterbearbetning före och efter att din modell har körts. Eller så kanske du vill ändra vad som returneras, till exempel sannolikheter i stället för klasser. En lösning är att implementera maskininlärningspipelines som flyttas från indata till utdata direkt.

Till exempel, sklearn.pipeline.Pipeline eller pyspark.ml.Pipeline är populära sätt att implementera pipelines och rekommenderas ibland för att förbättra prestanda. Du kan också anpassa hur din modell härleder genom att logga anpassade modeller.

Anpassa slutsatsdragning med hjälp av ett bedömningsskript

Även om MLflow-modeller inte kräver ett bedömningsskript kan du fortfarande tillhandahålla ett för att anpassa slutsatsdragningskörning för MLflow-modeller om det behövs. Mer information om hur du anpassar slutsatsdragning finns i Anpassa MLflow-modelldistributioner för onlineslutpunkter eller Anpassa modelldistribution med bedömningsskript för batchslutpunkter.

Viktigt!

Om du väljer att ange ett bedömningsskript för en MLflow-modelldistribution måste du även ange en miljö för distributionen.

Distributionsverktyg

Azure Machine Learning innehåller följande verktyg för att distribuera MLflow-modeller till online- och batchslutpunkter:

Varje verktyg har olika funktioner, särskilt för vilken typ av beräkning det kan rikta in sig på. I följande tabell visas stöd för olika MLflow-distributionsscenarier.

Scenarium MLflow SDK Azure Machine Learning CLI/SDK eller studio
Distribuera till hanterade onlineslutpunkter. 1 Stöds. Se Progressiv distribution av MLflow-modeller till onlineslutpunkter. Stöds. Se Distribuera MLflow-modeller till onlineslutpunkter.
Distribuera till hanterade onlineslutpunkter med ett bedömningsskript. Stöds inte. 3 Stöds. Se Anpassa MLflow-modelldistributioner.
Distribuera till batchslutpunkter. Stöds inte. 3 Stöds. Se Använda MLflow-modeller i batchdistributioner.
Distribuera till batchslutpunkter med ett bedömningsskript. Stöds inte. 3 Stöds. Se Anpassa modelldistribution med bedömningsskript.
Distribuera till webbtjänster som Azure Container Instances eller Azure Kubernetes Service (AKS). Äldre stöd. 2 Stöds inte. 2
Distribuera till webbtjänster som Container Instances eller AKS med ett bedömningsskript. Stöds inte. 3 Äldre stöd. 2

1 Växla till hanterade onlineslutpunkter om möjligt.

2 MLflow med öppen källkod stöder inte bedömningsskript eller batchkörning.

Välj ett distributionsverktyg

Använd MLflow SDK om båda följande är sanna:

  • Du är bekant med MLflow och vill fortsätta använda samma metoder.
  • Du använder en plattform som Azure Databricks som stöder MLflow internt.

Använd Azure Machine Learning CLI v2 eller SDK för Python om något av följande är sant:

  • Du är bekant med verktyget.
  • Du vill automatisera distributionen med hjälp av pipelines.
  • Du vill lagra distributionskonfigurationen på en Git-lagringsplats.

Använd Azure Machine Learning-studio användargränssnittet om du snabbt vill distribuera och testa modeller som tränats med MLflow.