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 mer om distribution 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 åt dig. 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.

Dricks

Arbetsytor utan åtkomst till offentligt nätverk: Innan du kan distribuera MLflow-modeller till onlineslutpunkter utan utgående anslutning måste du paketera modellerna (förhandsversion). Genom att använda modellpaketering kan du undvika behovet av en internetanslutning, som Azure Machine Learning annars skulle kräva för att dynamiskt installera nödvändiga Python-paket för MLflow-modellerna.

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 de conda-beroenden 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.

Följande exempel conda.yaml-fil visar conda-beroenden som anges i en MLflow-modell.

channels:
- conda-forge
dependencies:
- python=3.10.11
- pip<=23.1.2
- pip:
  - mlflow==2.7.1
  - cloudpickle==1.6.0
  - dataclasses==0.6
  - lz4==4.0.0
  - numpy==1.23.5
  - packaging==23.0
  - psutil==5.9.0
  - pyyaml==6.0
  - scikit-learn==1.1.2
  - scipy==1.10.1
  - uuid==1.30
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 med en anpassad signatur, miljö eller exempel.

Modeller med 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 visar MLmodel-filen 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.10.11
  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"}]'

Dricks

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 med signaturer finns i Loggningsmodeller med 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.

Indataformat

I följande tabell visas de indatatyper som stöds av den inbyggda MLflow-servern jämfört med Azure Machine Learning-slutpunkter online.

Input type Inbyggd MLflow-server Azure Machine Learning-slutpunkt online
JSON-serialiserade Pandas DataFrames i delad orientering
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 ordlista med listor (med namnet tensorer)
TensorFlow-indata med tensorflow-server-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 tensor-indata

{
    "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-modelldistributionen fattas beslutet om hur inferens 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 göra något av följande:

  • Ändra hur din modell loggas i träningsrutinen.
  • Anpassa slutsatsdragning med 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 av prestandaskäl. Du kan också anpassa hur din modell härleder genom att logga anpassade modeller.

Anpassa slutsatsdragning med 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 erbjuder 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.

Scenario MLflow SDK Azure Machine Learning CLI/SDK eller studio
Distribuera till hanterade onlineslutpunkter1 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ödsinte 3 Stöds. Se Anpassa MLflow-modelldistributioner
Distribuera till batchslutpunkter Stödsinte 3 Stöds. Se Använda MLflow-modeller i batchdistributioner
Distribuera till batchslutpunkter med ett bedömningsskript Stödsinte 3 Stöds. Se Anpassa modelldistribution med bedömningsskript
Distribuera till webbtjänster som Azure Container Instances eller Azure Kubernetes Service (AKS) Äldre stöd2 Stödsinte 2
Distribuera till webbtjänster som Container Instances eller AKS med ett bedömningsskript Stödsinte 3 Äldre stöd2

1 Distribution till onlineslutpunkter som finns på arbetsytor med privat länk aktiverad kräver att du paketera modeller före distributionen (förhandsversion).

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

3 MLflow med öppen källkod har inte begreppet bedömningsskript och stöder inte batchkörning.

Välj ett distributionsverktyg

Använd MLflow SDK om:

  • Du är bekant med MLflow och vill fortsätta använda samma metoder och
  • 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:

  • Du är bekant med dem, eller
  • Du vill automatisera distributionen med pipelines, eller
  • Du vill behålla 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.