Modelpakketten maken (preview)
Modelpakket is een mogelijkheid in Azure Machine Learning waarmee u alle afhankelijkheden kunt verzamelen die nodig zijn voor het implementeren van een machine learning-model op een dienend platform. Het maken van pakketten voordat u modellen implementeert, biedt robuuste en betrouwbare implementatie en een efficiëntere MLOps-werkstroom. Pakketten kunnen worden verplaatst tussen werkruimten en zelfs buiten Azure Machine Learning.
Belangrijk
Deze functie is momenteel beschikbaar als openbare preview-versie. Deze preview-versie wordt geleverd zonder een service level agreement en we raden deze niet aan voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt.
Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews voor meer informatie.
In dit artikel leert u hoe u een model inpakt voor implementatie.
Vereisten
Voordat u de stappen in dit artikel volgt, moet u ervoor zorgen dat u over de volgende vereisten beschikt:
Een Azure-abonnement. Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint. Probeer de gratis of betaalde versie van Azure Machine Learning.
Een Azure Machine Learning-werkruimte. Als u nog geen werkruimte hebt, gebruikt u de stappen in het artikel Werkruimtenbeheren om er een te maken.
Op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) wordt gebruikt om toegang te verlenen tot bewerkingen in Azure Machine Learning. Als u de stappen in dit artikel wilt uitvoeren, moet aan uw gebruikersaccount de rol eigenaar of inzender voor de Azure Machine Learning-werkruimte of een aangepaste rol worden toegewezen. Zie Toegang tot een Azure Machine Learning-werkruimte beheren voor meer informatie.
Een model dat moet worden verpakt. In dit voorbeeld wordt een MLflow-model gebruikt dat is geregistreerd in de werkruimte.
Let op
Modelverpakkingen worden niet ondersteund voor modellen in de Azure AI-modelcatalogus, inclusief grote taalmodellen. Modellen in de Azure AI-modelcatalogus zijn geoptimaliseerd voor deductie van Azure AI-implementatiedoelen en zijn niet geschikt voor verpakking.
Over dit voorbeeld
In dit voorbeeld leert u hoe u modellen in Azure Machine Learning kunt verpakken.
De opslagplaats klonen
Het voorbeeld in dit artikel is gebaseerd op codevoorbeelden in de opslagplaats azureml-examples . Als u de opdrachten lokaal wilt uitvoeren zonder YAML en andere bestanden te hoeven kopiëren/plakken, kloont u eerst de opslagplaats en wijzigt u vervolgens mappen in de map:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
In deze sectie wordt het voorbeeld gebruikt in de mapeindpunten /online/deploy-packages/custom-model.
Verbinding maken met uw werkruimte
Maak verbinding met de Azure Machine Learning-werkruimte waar u uw werk gaat doen.
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Een model verpakken
U kunt modelpakketten expliciet maken, zodat u kunt bepalen hoe de verpakkingsbewerking wordt uitgevoerd. Gebruik deze werkstroom wanneer:
- U wilt aanpassen hoe het modelpakket wordt gemaakt.
- U wilt het modelpakket buiten Azure Machine Learning implementeren.
- U wilt modelpakketten gebruiken in een MLOps-werkstroom.
U kunt modelpakketten maken door het volgende op te geven:
- Model naar pakket: elk modelpakket kan slechts één model bevatten. Azure Machine Learning biedt geen ondersteuning voor het verpakken van meerdere modellen onder hetzelfde modelpakket.
- Basisomgeving: omgevingen worden gebruikt om de basisinstallatiekopieën aan te geven en in Python-pakketten afhankelijkheden die uw model nodig heeft. Voor MLflow-modellen genereert Azure Machine Learning automatisch de basisomgeving. Voor aangepaste modellen moet u deze opgeven.
- Ondersteunende technologie: De deductiestack die wordt gebruikt om het model uit te voeren.
Het model registreren
Voor modelpakketten moet het model worden geregistreerd in uw werkruimte of in een Azure Machine Learning-register. In dit voorbeeld hebt u al een lokale kopie van het model in de opslagplaats, dus u hoeft het model alleen in het register in de werkruimte te publiceren. U kunt deze sectie overslaan als het model dat u probeert te implementeren al is geregistreerd.
MODEL_NAME='sklearn-regression'
MODEL_PATH='model'
az ml model create --name $MODEL_NAME --path $MODEL_PATH --type custom_model
De basisomgeving maken
Basisomgevingen worden gebruikt om de basisinstallatiekopieën en de python-pakketafhankelijkheden van het model aan te geven. Voor ons model moeten de volgende pakketten worden gebruikt zoals aangegeven in het conda-bestand:
conda.yaml
name: model-env
channels:
- conda-forge
dependencies:
- python=3.9
- numpy=1.23.5
- pip=23.0.1
- scikit-learn=1.2.2
- scipy=1.10.1
- xgboost==1.3.3
Notitie
Hoe verschilt de basisomgeving van de omgeving die u gebruikt voor modelimplementatie naar online- en batcheindpunten? Wanneer u modellen implementeert op eindpunten, moet uw omgeving de afhankelijkheden van het model en de Python-pakketten opnemen die nodig zijn om beheerde online-eindpunten te laten werken. Dit brengt een handmatig proces in de implementatie, waarbij u de vereisten van uw model moet combineren met de vereisten van het ondersteunende platform. Aan de andere kant verwijdert het gebruik van modelpakketten deze wrijving, omdat de vereiste pakketten voor de deductieserver automatisch in het modelpakket worden geïnjecteerd tijdens de verpakking.
Maak de omgeving als volgt:
Maak een omgevingsdefinitie:
sklearn-regression-env.yml
$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: sklearn-regression-env
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04
conda_file: conda.yaml
description: An environment for models built with XGBoost and Scikit-learn.
Maak vervolgens de omgeving:
az ml environment create -f environment/sklearn-regression-env.yml
Een pakketspecificatie maken
U kunt modelpakketten maken in Azure Machine Learning met behulp van de Azure CLI of de Azure Machine Learning SDK voor Python. De specificatie van het aangepaste pakket ondersteunt de volgende kenmerken:
Kenmerk | Type | Beschrijving | Vereist |
---|---|---|---|
target_environment |
str |
De naam van het pakket dat moet worden gemaakt. Het resultaat van een pakketbewerking is een omgeving in Azure Machine Learning. | Ja |
base_environment_source |
object |
De basisinstallatiekopieën die moeten worden gebruikt om het pakket te maken waarin afhankelijkheden voor het model worden opgegeven. | Ja, tenzij het model MLflow is. |
base_environment_source.type |
str |
Het type basisinstallatiekopie. Alleen het gebruik van een andere omgeving omdat de basisinstallatiekopieën worden ondersteund (type: environment_asset ) wordt ondersteund. |
|
base_environment_source.resource_id |
str |
De resource-id van de te gebruiken basisomgeving. Gebruik de indeling azureml:<name>:<version> of een lange resource-id. |
|
inferencing_server |
object |
De deductieserver die moet worden gebruikt. | Ja |
inferencing_server.type |
azureml_online custom |
Gebruik azureml_online deze functie voor de Azure Machine Learning-deductieserver of custom voor een aangepaste onlineserver, zoals TensorFlow-server of Torch Serve. |
Ja |
inferencing_server.code_configuration |
object |
De codeconfiguratie met de deductieroutine. Het moet ten minste één Python-bestand bevatten met methoden init en run . |
Ja, tenzij het model MLflow is. |
model_configuration |
object |
De modelconfiguratie. Gebruik dit kenmerk om te bepalen hoe het model wordt verpakt in de resulterende afbeelding. | Nee |
model_configuration.mode |
download copy |
Geef aan hoe het model in het pakket wordt geplaatst. Mogelijke waarden zijn download (standaard) en copy . Gebruik download dit wanneer u wilt dat het model tijdens de implementatie wordt gedownload uit het modelregister. Met deze optie maakt u kleinere Docker-installatiekopieën omdat het model er niet in is opgenomen. Gebruik copy deze optie als u de verbinding met de installatiekopieën van Azure Machine Learning wilt verbreken. Het model wordt tijdens het pakket gekopieerd in de docker-installatiekopieën. copy wordt niet ondersteund voor werkruimten met private link-functionaliteit. |
Nee |
Maak als volgt een pakketspecificatie:
package-moe.yml
$schema: http://azureml/sdk-2-0/ModelVersionPackage.json base_environment_source: type: environment_asset resource_id: azureml:sklearn-regression-env:1 target_environment: sklearn-regression-online-pkg inferencing_server: type: azureml_online code_configuration: code: src scoring_script: score.py
Start de modelpakketbewerking:
Het resultaat van de pakketbewerking is een omgeving.
Een model verpakken met afhankelijkheden in persoonlijke Python-feeds
Modelpakketten kunnen Python-afhankelijkheden oplossen die beschikbaar zijn in privéfeeds. Als u deze mogelijkheid wilt gebruiken, moet u een verbinding maken vanuit uw werkruimte naar de feed en de pat-tokenconfiguratie opgeven. De volgende Python-code laat zien hoe u de werkruimte kunt configureren waar u de pakketbewerking uitvoert.
from azure.ai.ml.entities import WorkspaceConnection
from azure.ai.ml.entities import PatTokenConfiguration
# fetching secrets from env var to secure access, these secrets can be set outside or source code
git_pat = os.environ["GIT_PAT"]
credentials = PatTokenConfiguration(pat=git_pat)
ws_connection = WorkspaceConnection(
name="<workspace_connection_name>",
target="<git_url>",
type="git",
credentials=credentials,
)
ml_client.connections.create_or_update(ws_connection)
Zodra de verbinding is gemaakt, bouwt u het modelpakket zoals beschreven in de sectie voor Pakket een model. In het volgende voorbeeld gebruikt de basisomgeving van het pakket een privéfeed voor de Python-afhankelijkheid bar
, zoals opgegeven in het volgende Conda-bestand:
conda.yml
name: foo
channels:
- defaults
dependencies:
- python
- pip
- pip:
- --extra-index-url <python_feed_url>
- bar
Als u een MLflow-model gebruikt, worden modelafhankelijkheden in het model zelf aangegeven en is daarom geen basisomgeving nodig. Geef in plaats daarvan afhankelijkheden van privéfeeds op bij het vastleggen van het model, zoals wordt uitgelegd in logboekregistratiemodellen met een aangepaste handtekening, omgeving of voorbeelden.
Een model verpakken dat wordt gehost in een register
Modelpakketten bieden een handige manier om afhankelijkheden te verzamelen vóór de implementatie. Wanneer modellen echter worden gehost in registers, is het implementatiedoel meestal een andere werkruimte. Wanneer u pakketten in deze installatie maakt, gebruikt u de target_environment
eigenschap om de volledige locatie op te geven waar u het modelpakket wilt maken, in plaats van alleen de naam.
Met de volgende code wordt een pakket van het t5-base
model gemaakt op basis van een register:
Maak verbinding met het register waar het model zich bevindt en de werkruimte waarin u het modelpakket moet maken:
Haal een verwijzing op naar het model dat u wilt verpakken. In dit geval verpakken we het model
t5-base
uitazureml
het register.Configureer een pakketspecificatie. Omdat het model dat we willen verpakken MLflow is, is de basisomgeving en het scorescript optioneel.
Start de bewerking om het modelpakket te maken:
Het pakket wordt nu gemaakt in de doelwerkruimte en kan worden geïmplementeerd.
Pakketmodellen die buiten Azure Machine Learning moeten worden geïmplementeerd
Modelpakketten kunnen indien nodig buiten Azure Machine Learning worden geïmplementeerd. Om de draagbaarheid te garanderen, hoeft u er alleen voor te zorgen dat de modelconfiguratie in uw pakket is ingesteld copy
op de modus zodat het model zelf wordt gekopieerd in de gegenereerde Docker-installatiekopieën in plaats van te verwijzen uit het modelregister in Azure Machine Learning.
De volgende code laat zien hoe u configureert copy
in een modelpakket:
package-external.yml
$schema: http://azureml/sdk-2-0/ModelVersionPackage.json
base_environment_source:
type: environment_asset
resource_id: azureml:sklearn-regression-env:1
target_environment: sklearn-regression-docker-pkg
inferencing_server:
type: azureml_online
code_configuration:
code: src
scoring_script: score.py
model_configuration:
mode: copy