Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 die vereist zijn voor Azure Machine Learning om deductie uit te voeren, waaronder
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:
- MLflow SDK
- Azure Machine Learning CLI v2
- Azure Machine Learning SDK voor Python
- Azure Machine Learning Studio
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.