Delen via


Richtlijnen voor het implementeren van MLflow-modellen

VAN TOEPASSING OP: Azure CLI ml-extensie v2 (huidige)

In dit artikel leert u meer over de implementatie van MLflow-modellen in Azure Machine Learning voor zowel realtime als batchdeductie, en over verschillende hulpprogramma's die u kunt gebruiken om de implementaties te beheren.

Implementatie zonder code

Wanneer u MLflow-modellen implementeert in Azure Machine Learning, in tegenstelling tot bij aangepaste modelimplementatie, hoeft u geen scorescript of een omgeving op te geven. Azure Machine Learning genereert automatisch het scorescript en de omgeving. Deze functionaliteit wordt implementatie zonder code genoemd.

Voor implementatie zonder code, Azure Machine Learning:

  • Zorgt ervoor dat aan alle pakketafhankelijkheden in het MLflow-model wordt voldaan.
  • Biedt een MLflow-basisimage of een voorgeconfigureerde omgeving die de volgende items bevat:
    • Pakketten die vereist zijn voor Azure Machine Learning om deductie uit te voeren, waaronder mlflow-skinny.
    • Een scorescript om inferentie uit te voeren.

Pakketten en afhankelijkheden

Azure Machine Learning genereert automatisch omgevingen om deductie uit te voeren op MLflow-modellen. Als u de omgevingen wilt bouwen, leest Azure Machine Learning de Conda-afhankelijkheden die zijn opgegeven in het MLflow-model en voegt u alle pakketten toe die nodig zijn om de deductieserver uit te voeren. Deze extra pakketten variëren afhankelijk van het implementatietype.

In het volgende voorbeeldbestand conda.yaml worden Conda-afhankelijkheden weergegeven die zijn opgegeven in een MLflow-model.

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

Important

MLflow detecteert automatisch pakketten wanneer het een model registreert en maakt de pakketversies vast in de Conda-afhankelijkheden van het model. Deze automatische pakketdetectie komt mogelijk niet overeen met uw bedoelingen of vereisten. U kunt ook modellen vastleggen die gebruikmaken van een aangepaste handtekening, omgeving of voorbeelden.

Modellen met handtekeningen

MLflow-modellen kunnen een handtekening bevatten die de verwachte invoer en hun typen aangeeft. Wanneer dergelijke modellen worden geïmplementeerd op online- of batcheindpunten, zorgt Azure Machine Learning ervoor dat het aantal en de typen gegevensinvoer voldoen aan de handtekening. Als de invoergegevens niet kunnen worden geparseerd zoals verwacht, mislukt de aanroep van het model.

U kunt een MLflow-modelhandtekening inspecteren door het MLmodel-bestand te openen. Zie Handtekeningen in MLflow voor meer informatie over hoe handtekeningen werken in MLflow.

In het volgende voorbeeld van een MLmodel-bestand wordt de signature belicht.

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"}]'

Tip

Handtekeningen in MLflow-modellen worden aanbevolen omdat ze een handige manier bieden om compatibiliteitsproblemen met gegevens te detecteren. Zie Logboekmodellen die gebruikmaken van een aangepaste handtekening, omgeving of voorbeelden voor meer informatie over het vastleggen van modellen met handtekeningen.

Implementatie in de ingebouwde MLflow-server versus implementatie in Azure Machine Learning-deductieserver

Modelontwikkelaars kunnen ingebouwde MLflow-implementatiehulpprogramma's gebruiken om modellen lokaal te testen. U kunt bijvoorbeeld een lokaal exemplaar uitvoeren van een model dat is geregistreerd in het register van de MLflow-server met behulp van mlflow models serve of de MLflow CLI mlflow models predict. Zie Ingebouwde implementatiehulpprogramma's in de MLflow-documentatie voor meer informatie over ingebouwde MLflow-implementatiehulpprogramma's.

Azure Machine Learning biedt ook ondersteuning voor het implementeren van modellen voor zowel online- als batcheindpunten. Deze eindpunten voeren verschillende deductietechnologieën uit die verschillende functies kunnen hebben.

  • Azure Machine Learning Online-eindpunten, vergelijkbaar met de ingebouwde MLflow-server, bieden een schaalbare, synchrone en lichtgewicht manier om modellen voor deductie uit te voeren.

  • Azure Machine Learning-batcheindpunten kunnen asynchrone deductie uitvoeren via langlopende deductieprocessen die kunnen worden geschaald naar grote hoeveelheden gegevens. De MLflow-server mist deze mogelijkheid, hoewel u een vergelijkbare mogelijkheid kunt bereiken met behulp van Spark-taken. Zie MLflow-modellen gebruiken in batchimplementaties voor meer informatie over batcheindpunten en MLflow-modellen.

Invoerindelingen

In de volgende tabel ziet u de invoertypen die worden ondersteund door de ingebouwde MLflow-server en de invoertypen die worden ondersteund door online-eindpunten van Azure Machine Learning.

Invoertype Ingebouwde MLflow-server Online-eindpunt van Azure Machine Learning
Met JSON geserialiseerde Pandas DataFrames in de splitsstand
Met JSON-geserialiseerde Pandas DataFrames in de records-oriëntatie Deprecated
CSV-geserialiseerde pandas DataFrames Batch-inferentie gebruiken. Zie MLflow-modellen implementeren voor batch-eindpunten voor meer informatie.
TensorFlow-invoer als JSON-geserialiseerde lijsten (tensors) en woordenboek van lijsten (benoemde tensors)
TensorFlow-invoer met behulp van de TensorFlow Serving-API

De volgende secties richten zich op MLflow-modellen die zijn geïmplementeerd op online-eindpunten van Azure Machine Learning.

Invoer structuur

Ongeacht het invoertype moet u in Azure Machine Learning invoer opgeven in een JSON-nettolading in de woordenlijstsleutel input_data. Deze sleutel is niet vereist wanneer u de opdracht mlflow models serve gebruikt om modellen te bedienen, zodat nettoladingen niet door elkaar kunnen worden gebruikt voor online-eindpunten van Azure Machine Learning en de ingebouwde MLflow-server.

Important

De payloadstructuur is veranderd in MLflow 2.0.

In de volgende payloadvoorbeelden ziet u verschillen tussen een model dat is geïmplementeerd in de ingebouwde MLflow-server ten opzichte van de Azure Machine Learning-deductieserver.

JSON-geserialiseerde Pandas DataFrame in de splitsstand

{
    "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-invoer

{
    "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]
    ]
}

Benoemde tensor-invoer

{
    "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]
        ]
    }
}

Aanpasbaarheid van inferentie voor MLflow-modellen

Scoringscripts passen aan hoe inferentie wordt uitgevoerd voor aangepaste modellen. Maar voor de implementatie van MLflow-modellen wordt de beslissing over het uitvoeren van de deductie gemaakt door de modelbouwer in plaats van door de implementatie-engineer. Elk modelframework kan automatisch specifieke deductieroutines toepassen.

Als u wilt wijzigen hoe deductie wordt uitgevoerd voor een MLflow-model, kunt u een van de volgende acties uitvoeren:

  • Wijzig hoe uw model wordt geregistreerd in de trainingsroutine.
  • Pas deductie aan met behulp van een scorescript tijdens de implementatie.

Wijzigen hoe uw model wordt geregistreerd tijdens de training

Wanneer u een model logt met behulp van een van mlflow.autolog of mlflow.<flavor>.log_model, bepaalt de flavor die wordt gebruikt voor het model hoe inference moet worden uitgevoerd en welke resultaten moeten worden teruggegeven. MLflow dwingt geen specifiek gedrag af voor de manier waarop de predict() functie resultaten genereert.

In sommige gevallen wilt u misschien een voorverwerking of naverwerking uitvoeren voordat en nadat uw model draait. Of misschien wilt u wijzigen wat er wordt geretourneerd, bijvoorbeeld waarschijnlijkheden in plaats van klassen. Een oplossing is het implementeren van machine learning-pijplijnen die rechtstreeks van invoer naar uitvoer worden verplaatst.

sklearn.pipeline.Pipeline Of pyspark.ml.Pipeline zijn populaire manieren om pijplijnen te implementeren en worden soms aanbevolen om de prestaties te verbeteren. U kunt ook aanpassen hoe uw model deductie doet door aangepaste modellen te registreren.

Inferentie aanpassen met behulp van een scoringsscript

Hoewel MLflow-modellen geen scorescript vereisen, kunt u er nog steeds een opgeven om de deductieuitvoering voor MLflow-modellen indien nodig aan te passen. Voor meer informatie over hoe u inferentie kunt aanpassen, zie MLflow-modelimplementaties aanpassen voor online-eindpunten of Modelimplementatie aanpassen met scorescript voor batcheindpunten.

Important

Als u ervoor kiest om een scorescript op te geven voor een implementatie van een MLflow-model, moet u ook een omgeving voor de implementatie opgeven.

Implementatiehulpprogramma's

Azure Machine Learning biedt de volgende hulpprogramma's voor het implementeren van MLflow-modellen in online- en batcheindpunten:

Elk hulpprogramma heeft verschillende mogelijkheden, met name voor welk type rekenproces het kan worden gericht. In de volgende tabel ziet u de ondersteuning voor verschillende MLflow-implementatiescenario's.

Scenario MLflow SDK Azure Machine Learning CLI/SDK of studio
Implementeren naar beheerde online-eindpunten. 1 Supported. Zie de progressieve implementatie van MLflow-modellen voor online-eindpunten. Supported. Zie MLflow-modellen implementeren naar online-eindpunten.
Implementeren op beheerde online-eindpunten met een scorescript. Niet ondersteund. 3 Supported. Zie MLflow-modelimplementaties aanpassen.
Implementeren op batch-eindpunten. Niet ondersteund. 3 Supported. Zie MLflow-modellen gebruiken in batchimplementaties.
Uitrollen naar batch-eindpunten met een beoordelingsscript. Niet ondersteund. 3 Supported. Zie Modelimplementatie aanpassen met scorescript.
Implementeren naar webservices zoals Azure Container Instances of Azure Kubernetes Service (AKS). Verouderde ondersteuning.2 Niet ondersteund.2
Uitvoeren naar webservices zoals Container Instances of AKS met een scoringscript. Niet ondersteund. 3 Verouderde ondersteuning.2

1 Schakel indien mogelijk over naar beheerde online-eindpunten .

2 Opensource MLflow biedt geen ondersteuning voor scorescripts of batchuitvoering.

Een implementatieprogramma kiezen

Gebruik de MLflow SDK als beide waar zijn:

  • U bent bekend met MLflow en wilt dezelfde methoden blijven gebruiken.
  • U gebruikt een platform zoals Azure Databricks dat systeemeigen MLflow ondersteunt.

Gebruik de Azure Machine Learning CLI v2 of SDK voor Python als een van de volgende voorwaarden waar is:

  • U bent bekend met het hulpprogramma.
  • U wilt de implementatie automatiseren met behulp van pijplijnen.
  • U wilt de implementatieconfiguratie opslaan in een Git-opslagplaats.

Gebruik de gebruikersinterface van Azure Machine Learning Studio als u snel modellen wilt implementeren en testen die zijn getraind met MLflow.