Delen via


Richtlijnen voor het implementeren van MLflow-modellen

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

In dit artikel vindt u informatie 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 voor u. 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-basisinstallatiekopieën of een gecureerde 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 deductie uit te voeren.

Tip

Werkruimten zonder openbare netwerktoegang: Voordat u MLflow-modellen kunt implementeren naar online-eindpunten zonder uitgaande connectiviteit, moet u de modellen verpakken (preview).< Door modelverpakkingen te gebruiken, kunt u voorkomen dat er een internetverbinding nodig is, waarvoor azure Machine Learning anders de benodigde Python-pakketten voor de MLflow-modellen dynamisch moet installeren.

Pakketten en afhankelijkheden

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

In het volgende voorbeeld van het conda.yaml-bestand worden conda-afhankelijkheden weergegeven die zijn opgegeven in een MLflow-model.

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

Belangrijk

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 met 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 het MLmodel-bestand wordt het signaturebestand gemarkeerd.

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

Tip

Handtekeningen in MLflow-modellen worden aanbevolen omdat ze een handige manier bieden om compatibiliteitsproblemen met gegevens te detecteren. Zie Modellen vastleggen met 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 mlflow models serve van 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 versus azure Machine Learning-online-eindpunten.

Input type Ingebouwde MLflow-server Online-eindpunt van Azure Machine Learning
Met JSON geserialiseerde Pandas DataFrames in de splitsstand
Met JSON geserialiseerde Pandas DataFrames in de afdrukstand records Afgeschaft
Csv-geserialiseerde pandas DataFrames Batchdeductie gebruiken. Zie MLflow-modellen implementeren voor batch-eindpunten voor meer informatie.
TensorFlow-invoer als JSON-geserialiseerde lijsten (tensors) en woordenlijst 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.

Invoerstructuur

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.

Belangrijk

De nettoladingstructuur is gewijzigd 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]
        ]
    }
}

Aanpassing van deductie voor MLflow-modellen

Scorescripts passen het uitvoeren van deductie voor aangepaste modellen aan. 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 dingen doen:

  • Wijzig hoe uw model wordt geregistreerd in de trainingsroutine.
  • Deductie aanpassen met een scorescript tijdens de implementatie.

Wijzigen hoe uw model wordt geregistreerd tijdens de training

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

In sommige gevallen wilt u misschien wat voorverwerking of naverwerking uitvoeren voor en nadat uw model is uitgevoerd. 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 prestatieredenen. U kunt ook aanpassen hoe uw model deductie doet door aangepaste modellen te registreren.

Deductie aanpassen met een scorescript

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

Belangrijk

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.

Implementatiehulpmiddelen

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-eindpunten1 Ondersteund. Zie de progressieve implementatie van MLflow-modellen voor online-eindpunten Ondersteund. Zie MLflow-modellen implementeren naar online-eindpunten
Implementeren naar beheerde online-eindpunten met een scorescript Niet ondersteund3 Ondersteund. Zie MLflow-modelimplementaties aanpassen
Implementeren naar batch-eindpunten Niet ondersteund3 Ondersteund. Zie MLflow-modellen gebruiken in batchimplementaties
Implementeren naar batch-eindpunten met een scorescript Niet ondersteund3 Ondersteund. Zie Modelimplementatie aanpassen met scorescript
Implementeren naar webservices zoals Azure Container Instances of Azure Kubernetes Service (AKS) Verouderde ondersteuning2 Niet ondersteund2
Implementeren naar webservices zoals Container Instances of AKS met een scorescript Niet ondersteund3 Verouderde ondersteuning2

1 Implementatie naar online-eindpunten die zich in werkruimten bevinden waarvoor Private Link is ingeschakeld, vereist dat u modellen vóór implementatie (preview) verpakt.

2 Schakel indien mogelijk over naar beheerde online-eindpunten .

3 Opensource MLflow heeft niet het concept van een scorescript en biedt geen ondersteuning voor batchuitvoering.

Een implementatieprogramma kiezen

Gebruik de MLflow SDK als:

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

Gebruik de Azure Machine Learning CLI v2 of SDK voor Python als:

  • U bent bekend met hen of
  • U wilt de implementatie automatiseren met pijplijnen of
  • U wilt de implementatieconfiguratie in een Git-opslagplaats behouden.

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