Richtlijnen voor het implementeren van MLflow-modellen
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidige)
In dit artikel vindt u meer informatie over de implementatie van MLflow-modellen in Azure Machine Learning voor zowel realtime als batchdeductie. Meer informatie over de verschillende hulpprogramma's die u kunt gebruiken om de implementatie te beheren.
Implementatie van MLflow-modellen versus aangepaste modellen
In tegenstelling tot aangepaste modelimplementatie in Azure Machine Learning hoeft u bij het implementeren van MLflow-modellen in Azure Machine Learning geen scorescript of een omgeving voor implementatie op te geven. In plaats daarvan genereert Azure Machine Learning 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.
- Pakketten die vereist zijn voor Azure Machine Learning om deductie uit te voeren, waaronder
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.
Python-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 uw implementatietype.
In het volgende conda.yaml-bestand ziet u een voorbeeld van conda-afhankelijkheden die zijn opgegeven in een MLflow-model.
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
Waarschuwing
MLflow detecteert automatisch pakketten bij het vastleggen van een model en maakt de pakketversies vast in de conda-afhankelijkheden van het model. Deze automatische pakketdetectie weerspiegelt echter mogelijk niet altijd uw intenties of vereisten. In dergelijke gevallen kunt u overwegen om modellen te registreren met een aangepaste definitie van conda-afhankelijkheden.
Gevolgen van het gebruik van 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, dwingt Azure Machine Learning af dat het aantal en de typen gegevensinvoer voldoen aan de handtekening. Als de invoergegevens niet kunnen worden geparseerd zoals verwacht, mislukt het aanroepen van het model.
U kunt de handtekening van een MLflow-model inspecteren door het MLmodel-bestand te openen dat aan het model is gekoppeld. Zie Handtekeningen in MLflow voor meer informatie over hoe handtekeningen werken in MLflow.
In het volgende bestand ziet u het MLmodel-bestand dat is gekoppeld aan een MLflow-model.
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"}]'
Tip
Handtekeningen in MLflow-modellen zijn optioneel, maar sterk aanbevolen, omdat ze een handige manier bieden om problemen met gegevenscompatibiliteit vroeg te detecteren. Zie Modellen vastleggen met een aangepaste handtekening, omgeving of voorbeelden voor meer informatie over het vastleggen van modellen met handtekeningen.
Modellen die zijn geïmplementeerd in Azure Machine Learning versus modellen die zijn geïmplementeerd op de ingebouwde MLflow-server
MLflow bevat ingebouwde implementatiehulpprogramma's die modelontwikkelaars kunnen 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 -m my_model
van of met behulp van de MLflow CLI mlflow models predict
.
Deductie met batch- versus online-eindpunten
Azure Machine Learning biedt ondersteuning voor het implementeren van modellen voor zowel online- als batcheindpunten. Deze eindpunten voeren verschillende deductietechnologieën uit die verschillende functies kunnen hebben.
Online-eindpunten zijn vergelijkbaar met de ingebouwde MLflow-server , omdat ze een schaalbare, synchrone en lichtgewicht manier bieden om modellen voor deductie uit te voeren.
Aan de andere kant kunnen batcheindpunten asynchrone deductie uitvoeren via langlopende deductieprocessen die kunnen worden geschaald naar grote hoeveelheden gegevens. De MLflow-server ontbreekt momenteel aan deze mogelijkheid, hoewel een vergelijkbare mogelijkheid kan worden bereikt met behulp van Spark-taken. Zie MLflow-modellen gebruiken in batchimplementaties voor meer informatie over batcheindpunten en MLflow-modellen.
De secties die volgen, richten zich meer op MLflow-modellen die zijn geïmplementeerd op online-eindpunten van Azure Machine Learning.
Invoerindelingen
Input type | Ingebouwde MLflow-server | Azure Machine Learning Online-eindpunten |
---|---|---|
Met JSON geserialiseerde Pandas DataFrames in de splitsstand | ✓ | ✓ |
Met JSON geserialiseerde Pandas DataFrames in de afdrukstand records | Afgeschaft | |
Csv-geserialiseerde pandas DataFrames | ✓ | Batch1 gebruiken |
Tensor-invoerindeling als JSON-geserialiseerde lijsten (tensors) en woordenlijst van lijsten (benoemde tensors) | ✓ | ✓ |
Tensor-invoer die is opgemaakt als in de API van TF Serving | ✓ |
1 Overweeg batchdeductie te gebruiken om bestanden te verwerken. Zie MLflow-modellen implementeren voor batch-eindpunten voor meer informatie.
Invoerstructuur
Ongeacht het invoertype dat wordt gebruikt, moet u in Azure Machine Learning invoer opgeven in een JSON-nettolading, binnen de woordenlijstsleutel input_data
. Omdat deze sleutel niet vereist is wanneer u de opdracht mlflow models serve
gebruikt om modellen te bedienen, kunnen nettoladingen niet door elkaar worden gebruikt voor online-eindpunten van Azure Machine Learning en de ingebouwde MLflow-server.
Belangrijk
MLflow 2.0 advies: U ziet dat de structuur van de nettolading is gewijzigd in MLflow 2.0.
In deze sectie ziet u verschillende voorbeelden van nettoladingen en de verschillen voor een model dat is geïmplementeerd in de ingebouwde MLflow-server en de Azure Machine Learning-deductieserver.
Voorbeeld van nettolading voor een met JSON geserialiseerd 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]
]
}
}
Voorbeeld van nettolading voor een 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]
]
}
Voorbeeld van nettolading voor een 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]
]
}
}
Deductie aanpassen bij het implementeren van MLflow-modellen
U kunt worden gebruikt voor het ontwerpen van scorescripts om aan te passen hoe deductie wordt uitgevoerd voor uw aangepaste modellen. Bij het implementeren van MLflow-modellen in Azure Machine Learning wordt de beslissing over hoe deductie moet worden uitgevoerd echter uitgevoerd door de modelbouwer (de persoon die het model heeft gebouwd), in plaats van door de DevOps-engineer (de persoon die het probeert te implementeren). Elk modelframework kan automatisch specifieke deductieroutines toepassen.
Als u op elk moment wilt wijzigen hoe deductie van een MLflow-model wordt uitgevoerd, kunt u een van de volgende twee 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 mlflow.autolog
een of mlflow.<flavor>.log_model
, bepaalt de smaak die wordt gebruikt voor het model hoe deductie moet worden uitgevoerd en welke resultaten het model retourneert. MLflow dwingt geen specifiek gedrag af voor de manier waarop de predict()
functie resultaten genereert.
In sommige gevallen wilt u echter mogelijk een voorverwerking of naverwerking uitvoeren voor en nadat uw model is uitgevoerd. Op andere momenten wilt u mogelijk wijzigen wat er wordt geretourneerd (bijvoorbeeld waarschijnlijkheden versus 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 voor prestatieoverwegingen. Een ander alternatief is om aan te passen hoe uw model deductie doet, met behulp van een aangepaste modelsmaak.
Deductie aanpassen met een scorescript
Hoewel MLflow-modellen geen scorescript vereisen, kunt u er zo nodig nog steeds een opgeven. U kunt het scorescript gebruiken om aan te passen hoe deductie wordt uitgevoerd voor MLflow-modellen. Zie MLflow-modelimplementaties (online-eindpunten) aanpassen en MLflow-modelimplementaties (batcheindpunten) aanpassen voor meer informatie over het aanpassen van 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 veel manieren om MLflow-modellen te implementeren op online- en batcheindpunten. U kunt modellen implementeren met behulp van de volgende hulpprogramma's:
- MLflow SDK
- Azure Machine Learning CLI
- Azure Machine Learning-SDK voor Python
- Azure Machine Learning Studio
Elke werkstroom heeft verschillende mogelijkheden, met name om welk type rekenproces ze zich kunnen richten. In de volgende tabel ziet u de verschillende mogelijkheden.
Scenario | MLflow SDK | Azure Machine Learning CLI/SDK | Azure Machine Learning Studio |
---|---|---|---|
Implementeren naar beheerde online-eindpunten | Zie voorbeeld1 | Zie voorbeeld1 | Zie voorbeeld1 |
Implementeren naar beheerde online-eindpunten (met een scorescript) | Niet ondersteund3 | Zie het voorbeeld | Zie het voorbeeld |
Implementeren naar batch-eindpunten | Niet ondersteund3 | Zie het voorbeeld | Zie het voorbeeld |
Implementeren naar batch-eindpunten (met een scorescript) | Niet ondersteund3 | Zie het voorbeeld | Zie het voorbeeld |
Implementeren in webservices (ACI/AKS) | Verouderde ondersteuning2 | Niet ondersteund2 | Niet ondersteund2 |
Implementeren in webservices (ACI/AKS - met een scorescript) | Niet ondersteund3 | Verouderde ondersteuning2 | 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 U wordt aangeraden over te schakelen naar beheerde online-eindpunten .
3 MLflow (OSS) heeft niet het concept van een scorescript en biedt momenteel geen ondersteuning voor batchuitvoering.
Welk implementatieprogramma moet worden gebruikt?
Gebruik de MLflow SDK als beide voorwaarden van toepassing zijn:
- U bent bekend met MLflow of u gebruikt een platform dat systeemeigen MLflow ondersteunt (zoals Azure Databricks).
- U wilt dezelfde set methoden van MLflow blijven gebruiken.
Gebruik de Azure Machine Learning CLI v2 als een van deze voorwaarden van toepassing is:
- U bent vertrouwd met de Azure Machine Learning CLI v2.
- U wilt implementaties automatiseren met behulp van automatiseringspijplijnen.
- U wilt de implementatieconfiguratie in een Git-opslagplaats behouden.
Gebruik de Azure Machine Learning-studio UI-implementatie als u snel modellen wilt implementeren en testen die zijn getraind met MLflow.