Riktlinjer för att distribuera MLflow-modeller

GÄLLER FÖR:Azure CLI ml extension v2 (aktuell)

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. Läs även om de olika verktyg som du kan använda för att hantera distributionen.

Distribution av MLflow-modeller jämfört med anpassade modeller

Till skillnad från distribution av anpassade modeller i Azure Machine Learning behöver du inte ange ett bedömningsskript eller en miljö för distribution när du distribuerar MLflow-modeller till Azure Machine Learning. I stället genererar Azure Machine Learning 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.

Python-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. De här extra paketen varierar beroende på distributionstyp.

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

conda.yaml

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

Varning

MLflow identifierar automatiskt paket när du loggar en modell och fäster paketversionerna i modellens conda-beroenden. Den här automatiska paketidentifieringen kanske inte alltid återspeglar dina avsikter eller krav. I sådana fall bör du överväga att logga modeller med en anpassad definition av conda-beroenden.

Konsekvenser av att använda 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 framtvingar Azure Machine Learning att antalet och typerna av dataindata överensstämmer med signaturen. Om indata inte kan parsas som förväntat misslyckas modellanropet.

Du kan inspektera en MLflow-modells signatur genom att öppna MLmodel-filen som är associerad med modellen. Mer information om hur signaturer fungerar i MLflow finns i Signaturer i MLflow.

Följande fil visar MLmodel-filen som är associerad med en MLflow-modell.

MLmodel

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 är valfria men rekommenderas starkt eftersom de ger ett bekvämt sätt att upptäcka problem med datakompatibilitet tidigt. Mer information om hur du loggar modeller med signaturer finns i Loggningsmodeller med en anpassad signatur, miljö eller exempel.

Modeller som distribueras i Azure Machine Learning jämfört med modeller som distribuerats på den inbyggda MLflow-servern

MLflow innehåller inbyggda distributionsverktyg som modellutvecklare kan använda 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 av mlflow models serve -m my_model eller med hjälp av MLflow CLI mlflow models predict.

Slutsatsdragning med batch- och onlineslutpunkter

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

Onlineslutpunkter liknar den inbyggda MLflow-servern eftersom de ger ett skalbart, synkront och enkelt sätt att köra modeller för slutsatsdragning.

Å andra sidan kan batchslutpunkter köra asynkron slutsatsdragning över långvariga inferensprocesser som kan skalas till stora mängder data. MLflow-servern saknar för närvarande den här funktionen, även om en liknande funktion kan uppnås med hjälp av Spark-jobb. Mer information om batchslutpunkter och MLflow-modeller finns i Använda MLflow-modeller i batchdistributioner.

Avsnitten som följer fokuserar mer på MLflow-modeller som distribuerats till Azure Machine Learning-slutpunkter online.

Indataformat

Input type Inbyggd MLflow-server Azure Machine Learning Online-slutpunkter
JSON-serialiserade Pandas DataFrames i delad orientering
JSON-serialiserade Pandas DataFrames i postorienteringen Inaktuell
CSV-serialiserade Pandas DataFrames Använda batch1
Tensor-indataformat som JSON-serialiserade listor (tensorer) och ordlista med listor (med namnet tensorer)
Tensor-indata formaterade som i TF Servings API

1 Överväg att använda batch-slutsatsdragning för att bearbeta filer. Mer information finns i Distribuera MLflow-modeller till batchslutpunkter.

Indatastruktur

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

Viktigt!

MLflow 2.0-rekommendation: Observera att nyttolastens struktur ändrades i MLflow 2.0.

Det här avsnittet visar olika nyttolastexempel och skillnaderna för en modell som distribueras i den inbyggda MLflow-servern jämfört med Azure Machine Learning-inferensservern.

Nyttolastexempel för en 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]
        ]
    }
}

Nyttolastexempel för en 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]
    ]
}

Nyttolastexempel för en namngiven 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]
        ]
    }
}

Mer information om inbyggda MLflow-distributionsverktyg finns i Inbyggda distributionsverktyg i MLflow-dokumentationen.

Anpassa slutsatsdragning vid distribution av MLflow-modeller

Du kan vara van vid att redigera bedömningsskript för att anpassa hur inferens körs för dina anpassade modeller. När du distribuerar MLflow-modeller till Azure Machine Learning utförs dock beslutet om hur slutsatsdragning ska utföras av modellverktyget (den person som skapade modellen) i stället för av DevOps-teknikern (den person som försöker distribuera den). Varje modellramverk kan automatiskt tillämpa specifika slutsatsdragningsrutiner.

Om du behöver ändra hur slutsatsdragningen för en MLflow-modell ska köras kan du göra en av två saker:

  • Ä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_model, avgör den smak som används för modellen hur slutsatsdragning ska köras och vilka resultat modellen returnerar. MLflow tillämpar inte något specifikt beteende för hur predict() funktionen genererar resultat.

I vissa fall kanske du dock vill utföra viss förbearbetning eller efterbearbetning före och efter att din modell har körts. Vid andra tillfällen kanske du vill ändra vad som returneras (till exempel sannolikheter jämfört med 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 prestandaöverväganden. Ett annat alternativ är att anpassa hur din modell gör slutsatsdragning med hjälp av en anpassad modellsmak.

Anpassa slutsatsdragning med ett bedömningsskript

Även om MLflow-modeller inte kräver ett bedömningsskript kan du fortfarande ange ett, om det behövs. Du kan använda bedömningsskriptet för att anpassa hur slutsatsdragning körs för MLflow-modeller. Mer information om hur du anpassar slutsatsdragning finns i Anpassa MLflow-modelldistributioner (onlineslutpunkter) och Anpassa MLflow-modelldistributioner (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 många sätt att distribuera MLflow-modeller till online- och batchslutpunkter. Du kan distribuera modeller med hjälp av följande verktyg:

  • MLflow SDK
  • Azure Machine Learning CLI
  • Azure Machine Learning-SDK för Python
  • Azure Machine Learning Studio

Varje arbetsflöde har olika funktioner, särskilt kring vilken typ av beräkning de kan rikta in sig på. I följande tabell visas de olika funktionerna.

Scenario MLflow SDK Azure Machine Learning CLI/SDK Azure Machine Learning Studio
Distribuera till hanterade onlineslutpunkter Se exempel1 Se exempel1 Se exempel1
Distribuera till hanterade onlineslutpunkter (med ett bedömningsskript) Stödsinte 3 Se exempel Se exempel
Distribuera till batchslutpunkter Stödsinte 3 Se exempel Se exempel
Distribuera till batchslutpunkter (med ett bedömningsskript) Stödsinte 3 Se exempel Se exempel
Distribuera till webbtjänster (ACI/AKS) Äldre stöd2 Stödsinte 2 Stödsinte 2
Distribuera till webbtjänster (ACI/AKS – med ett bedömningsskript) Stödsinte 3 Äldre stöd2 Ä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 Vi rekommenderar att du växlar till hanterade onlineslutpunkter i stället.

3 MLflow (OSS) har inte begreppet bedömningsskript och stöder för närvarande inte batchkörning.

Vilket distributionsverktyg ska användas?

  • Använd MLflow SDK om båda dessa villkor gäller:

    • Du är bekant med MLflow, eller så använder du en plattform som stöder MLflow internt (till exempel Azure Databricks).
    • Du vill fortsätta använda samma uppsättning metoder från MLflow.
  • Använd Azure Machine Learning CLI v2 om något av dessa villkor gäller:

    • Du är mer bekant med Azure Machine Learning CLI v2.
    • Du vill automatisera distributioner med hjälp av automatiseringspipelines.
    • Du vill behålla distributionskonfigurationen på en git-lagringsplats.
  • Använd distributionen Azure Machine Learning-studio användargränssnittet om du snabbt vill distribuera och testa modeller som tränats med MLflow.