Distribuera modeller med Azure Machine LearningDeploy models with Azure Machine Learning

gäller för:  Ja Basic Edition  Ja Enterprise Edition                               (Uppgradera till Enterprise Edition) APPLIES TO: yesBasic edition yesEnterprise edition                    (Upgrade to Enterprise edition)

Lär dig hur du distribuerar din Machine Learning-modell som en webb tjänst i Azure-molnet eller Azure IoT Edge enheter.Learn how to deploy your machine learning model as a web service in the Azure cloud or to Azure IoT Edge devices.

Arbetsflödet är ungefär likadant var du än distribuerar din modell:The workflow is similar no matter where you deploy your model:

  1. Registrera modellen.Register the model.
  2. Förbered en konfiguration för en härledningPrepare an inference configuration
  3. Förbereda ett Entry-skript (om du inte använder distribution utan kod)Prepare an entry script (unless using no-code deployment)
  4. Distribuera modellen till beräkningsmålet.Deploy the model to the compute target.
  5. Testa den distribuerade modellen, även kallad en webb tjänst.Test the deployed model, also called a web service.

Mer information om de begrepp som ingår i distributions arbets flödet finns i Hantera, distribuera och övervaka modeller med Azure Machine Learning.For more information on the concepts involved in the deployment workflow, see Manage, deploy, and monitor models with Azure Machine Learning.

FörutsättningarPrerequisites

Anslut till arbetsytanConnect to your workspace

Följ anvisningarna i Azure CLI-dokumentationen för att ställa in din prenumerations kontext.Follow the directions in the Azure CLI documentation for setting your subscription context.

Gör sedan följande:Then do:

az ml workspace list --resource-group=<my resource group>

för att se de arbets ytor som du har åtkomst till.to see the workspaces you have access to.

Registrera din modellRegister your model

En registrerad modell är en logisk behållare för en eller flera filer som utgör din modell.A registered model is a logical container for one or more files that make up your model. Om du till exempel har en modell som lagras i flera filer kan du registrera dem som en enskild modell i arbets ytan.For example, if you have a model that's stored in multiple files, you can register them as a single model in the workspace. När du har registrerat filerna kan du ladda ned eller distribuera den registrerade modellen och ta emot alla filer som du har registrerat.After you register the files, you can then download or deploy the registered model and receive all the files that you registered.

Tips

När du registrerar en modell anger du sökvägen till antingen en moln plats (från en utbildnings körning) eller en lokal katalog.When you register a model, you provide the path of either a cloud location (from a training run) or a local directory. Den här sökvägen är bara till för att hitta filerna som ska laddas upp som en del av registrerings processen.This path is just to locate the files for upload as part of the registration process. Den behöver inte matcha den sökväg som används i Entry-skriptet.It doesn't need to match the path used in the entry script. Mer information finns i hitta modell filer i ditt Entry-skript.For more information, see Locate model files in your entry script.

Machine Learning-modeller registreras i din Azure Machine Learning-arbetsyta.Machine learning models are registered in your Azure Machine Learning workspace. Modellen kan komma från Azure Machine Learning eller från någon annan stans.The model can come from Azure Machine Learning or from somewhere else. När du registrerar en modell kan du välja att ange metadata om modellen.When registering a model, you can optionally provide metadata about the model. De tags properties ord listor som du använder för en modell registrering kan sedan användas för att filtrera modeller.The tags and properties dictionaries that you apply to a model registration can then be used to filter models.

Följande exempel visar hur du registrerar en modell.The following examples demonstrate how to register a model.

Registrera en modell från en Azure ML-utbildningRegister a model from an Azure ML training run

az ml model register -n sklearn_mnist  --asset-path outputs/sklearn_mnist_model.pkl  --experiment-name myexperiment --run-id myrunid --tag area=mnist

Tips

Om du får ett fel meddelande om att tillägget ml inte är installerat använder du följande kommando för att installera det:If you get an error message stating that the ml extension isn't installed, use the following command to install it:

az extension add -n azure-cli-ml

--asset-pathParametern refererar till modellens moln plats.The --asset-path parameter refers to the cloud location of the model. I det här exemplet används sökvägen till en enskild fil.In this example, the path of a single file is used. Om du vill inkludera flera filer i modell registreringen anger --asset-path du sökvägen till en mapp som innehåller filerna.To include multiple files in the model registration, set --asset-path to the path of a folder that contains the files.

Registrera en modell från en lokal filRegister a model from a local file

az ml model register -n onnx_mnist -p mnist/model.onnx

Om du vill inkludera flera filer i modell registreringen anger -p du sökvägen till en mapp som innehåller filerna.To include multiple files in the model registration, set -p to the path of a folder that contains the files.

Mer information finns i az ml model register referens dokumentationen.For more information on az ml model register, consult the reference documentation.

Definiera ett post skriptDefine an entry script

Startskriptet tar emot data som skickas till en distribuerad webbtjänst och skickar dem vidare till modellen.The entry script receives data submitted to a deployed web service and passes it to the model. Skriptet tar sedan emot svaret som returneras av modellen och returnerar det till klienten.It then takes the response returned by the model and returns that to the client. Skriptet är bara för din modell.The script is specific to your model. Den måste förstå de data som modellen förväntar sig och returnerar.It must understand the data that the model expects and returns.

Skriptet innehåller två funktioner som läser in och kör modellen:The script contains two functions that load and run the model:

  • init(): Den här funktionen laddar normalt modellen till ett globalt objekt.init(): Typically, this function loads the model into a global object. Den här funktionen körs bara en gång, när Docker-behållaren för webb tjänsten startas.This function is run only once, when the Docker container for your web service is started.

  • run(input_data): Den här funktionen använder modellen för att förutsäga ett värde baserat på indata.run(input_data): This function uses the model to predict a value based on the input data. Körningens in- och utdata använder vanligtvis JSON för serialisering och deserialisering.Inputs and outputs of the run typically use JSON for serialization and deserialization. Du kan också arbeta med binärdata i råformat.You can also work with raw binary data. Du kan transformera data innan du skickar dem till modellen eller innan du returnerar dem till klienten.You can transform the data before sending it to the model or before returning it to the client.

I REST API förväntas bröd texten i begäran vara ett JSON-dokument med följande struktur:The REST API expects the body of the request to be a JSON document with the following structure:

{
    "data":
        [
            <model-specific-data-structure>
        ]
}

I följande exempel visas hur du läser in en registrerad scikit-läre modell och visar den med numpy-data:The following example demonstrates how to load a registered scikit-learn model and score it with numpy data:

#Example: scikit-learn and Swagger
import json
import numpy as np
import os
from sklearn.externals import joblib
from sklearn.linear_model import Ridge

from inference_schema.schema_decorators import input_schema, output_schema
from inference_schema.parameter_types.numpy_parameter_type import NumpyParameterType


def init():
    global model
    # AZUREML_MODEL_DIR is an environment variable created during deployment. Join this path with the filename of the model file.
    # It holds the path to the directory that contains the deployed model (./azureml-models/$MODEL_NAME/$VERSION).
    # If there are multiple models, this value is the path to the directory containing all deployed models (./azureml-models).
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'sklearn_mnist_model.pkl')

    # If your model were stored in the same directory as your score.py, you could also use the following:
    # model_path = os.path.abspath(os.path.join(os.path.dirname(__file_), 'sklearn_mnist_model.pkl')

    # Deserialize the model file back into a sklearn model
    model = joblib.load(model_path)


input_sample = np.array([[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]])
output_sample = np.array([3726.995])


@input_schema('data', NumpyParameterType(input_sample))
@output_schema(NumpyParameterType(output_sample))
def run(data):
    try:
        result = model.predict(data)
        # You can return any data type, as long as it is JSON serializable.
        return result.tolist()
    except Exception as e:
        error = str(e)
        return error

Fler exempel finns i följande skript:For more examples, see the following scripts:

Definiera en konfiguration för en härledningDefine an inference configuration

Posterna i inferenceconfig.json dokument översikten till parametrarna för klassen InferenceConfig .The entries in the inferenceconfig.json document map to the parameters for the InferenceConfig class. I följande tabell beskrivs mappningen mellan entiteter i JSON-dokumentet och parametrarna för-metoden:The following table describes the mapping between entities in the JSON document and the parameters for the method:

JSON-entitetJSON entity Metod parameterMethod parameter BeskrivningDescription
entryScript entry_script Sökväg till en lokal fil som innehåller koden som ska köras för avbildningen.Path to a local file that contains the code to run for the image.
sourceDirectory source_directory Valfritt.Optional. Sökväg till mappar som innehåller alla filer för att skapa avbildningen, vilket gör det enkelt att komma åt filer i den här mappen eller undermappen.Path to folders that contain all files to create the image, which makes it easy to access any files within this folder or subfolder. Du kan ladda upp en hel mapp från den lokala datorn som beroenden för WebService.You can upload an entire folder from your local machine as dependencies for the Webservice. Obs! dina entry_script, conda_file och extra_docker_file_steps sökvägar är relativa sökvägar till source_directory sökvägen.Note: your entry_script, conda_file, and extra_docker_file_steps paths are relative paths to the source_directory path.
environment environment Valfritt.Optional. Azure Machine Learnings miljö.Azure Machine Learning environment.

Du kan inkludera fullständiga specifikationer för en Azure Machine Learning miljö i konfigurations filen för konfigurations filen.You can include full specifications of an Azure Machine Learning environment in the inference configuration file. Om den här miljön inte finns i arbets ytan skapas den av Azure Machine Learning.If this environment doesn't exist in your workspace, Azure Machine Learning will create it. Annars kommer Azure Machine Learning uppdatera miljön om det behövs.Otherwise, Azure Machine Learning will update the environment if necessary. Följande JSON är ett exempel:The following JSON is an example:

{
    "entryScript": "score.py",
    "environment": {
        "docker": {
            "arguments": [],
            "baseDockerfile": null,
            "baseImage": "mcr.microsoft.com/azureml/base:intelmpi2018.3-ubuntu16.04",
            "enabled": false,
            "sharedVolumes": true,
            "shmSize": null
        },
        "environmentVariables": {
            "EXAMPLE_ENV_VAR": "EXAMPLE_VALUE"
        },
        "name": "my-deploy-env",
        "python": {
            "baseCondaEnvironment": null,
            "condaDependencies": {
                "channels": [
                    "conda-forge"
                ],
                "dependencies": [
                    "python=3.6.2",
                    {
                        "pip": [
                            "azureml-defaults",
                            "azureml-telemetry",
                            "scikit-learn",
                            "inference-schema[numpy-support]"
                        ]
                    }
                ],
                "name": "project_environment"
            },
            "condaDependenciesFile": null,
            "interpreterPath": "python",
            "userManagedDependencies": false
        },
        "version": "1"
    }
}

Du kan också använda en befintlig Azure Machine Learning miljö i separata CLI-parametrar och ta bort nyckeln "miljö" från konfigurations filen för konfigurations filen.You can also use an existing Azure Machine Learning environment in separated CLI parameters and remove the "environment" key from the inference configuration file. Använd-e för miljö namnet och--ev för miljö versionen.Use -e for the environment name, and --ev for the environment version. Om du inte anger--EV kommer den senaste versionen att användas.If you don't specify --ev, the latest version will be used. Här är ett exempel på en konfigurations fil för uppdelning:Here is an example of an inference configuration file:

{
    "entryScript": "score.py",
    "sourceDirectory": null
}

Följande kommando visar hur du distribuerar en modell med hjälp av den tidigare konfigurations filen för konfiguration (med namnet myInferenceConfig.jspå).The following command demonstrates how to deploy a model using the previous inference configuration file (named myInferenceConfig.json).

Den använder också den senaste versionen av en befintlig Azure Machine Learnings miljö (med namnet azureml – minimal).It also uses the latest version of an existing Azure Machine Learning environment (named AzureML-Minimal).

az ml model deploy -m mymodel:1 --ic myInferenceConfig.json -e AzureML-Minimal --dc deploymentconfig.json

Följande kommando visar hur du distribuerar en modell med hjälp av CLI:The following command demonstrates how to deploy a model by using the CLI:

az ml model deploy -n myservice -m mymodel:1 --ic inferenceconfig.json

I det här exemplet anger konfigurationen följande inställningar:In this example, the configuration specifies the following settings:

  • Som modellen kräver pythonThat the model requires Python
  • Entry-skriptet, som används för att hantera webb förfrågningar som skickas till den distribuerade tjänstenThe entry script, which is used to handle web requests sent to the deployed service
  • Den Conda-fil som beskriver de python-paket som behövs för att kunna utvägarThe Conda file that describes the Python packages needed for inference

Information om hur du använder en anpassad Docker-avbildning med en konfigurations konfiguration finns i distribuera en modell med hjälp av en anpassad Docker-avbildning.For information on using a custom Docker image with an inference configuration, see How to deploy a model using a custom Docker image.

Välj ett beräknings målChoose a compute target

Det beräknings mål som du använder för att vara värd för din modell påverkar kostnaden och tillgängligheten för den distribuerade slut punkten.The compute target you use to host your model will affect the cost and availability of your deployed endpoint. Använd tabellen nedan för att välja ett lämpligt beräknings mål.Use the table below to choose an appropriate compute target.

BeräkningsmålCompute target Används förUsed for GPU-stödGPU support FPGA-stödFPGA support DescriptionDescription
Lokal   webb   tjänstLocal web service Testning/fel sökningTesting/debugging     Används för begränsad testning och fel sökning.Use for limited testing and troubleshooting. Maskin varu accelerationen beror på användningen av bibliotek i det lokala systemet.Hardware acceleration depends on use of libraries in the local system.
Azure Machine Learning Compute instance   -   webbtjänstAzure Machine Learning compute instance web service Testning/fel sökningTesting/debugging     Används för begränsad testning och fel sökning.Use for limited testing and troubleshooting.
Azure Kubernetes Service (AKS)Azure Kubernetes Service (AKS) Real tids härledningReal-time inference Ja (webb tjänst distribution)Yes (web service deployment) JaYes Använd för storskaliga produktions distributioner.Use for high-scale production deployments. Ger snabb svars tid och automatisk skalning av den distribuerade tjänsten.Provides fast response time and autoscaling of the deployed service. Automatisk skalning i kluster stöds inte via Azure Machine Learning SDK.Cluster autoscaling isn't supported through the Azure Machine Learning SDK. Om du vill ändra noderna i AKS-klustret använder du användar gränssnittet för ditt AKS-kluster i Azure Portal.To change the nodes in the AKS cluster, use the UI for your AKS cluster in the Azure portal. AKS är det enda tillgängliga alternativet för designern.AKS is the only option available for the designer.
Azure Container InstancesAzure Container Instances Testning eller utvecklingTesting or development     Använd för processorbaserade CPU-baserade arbets belastningar som kräver mindre än 48 GB RAM-minne.Use for low-scale CPU-based workloads that require less than 48 GB of RAM.
Azure Machine Learning-beräkningsklusterAzure Machine Learning compute clusters Batch-   härledningBatch inference Ja (Machine Learning-pipeline)Yes (machine learning pipeline)   Kör batch-poängsättning vid Server lös beräkning.Run batch scoring on serverless compute. Stöder normal och låg prioritet för virtuella datorer.Supports normal and low-priority VMs.
Azure FunctionsAzure Functions Förhandsgranskningsvyn Real tids härledning(Preview) Real-time inference      
Azure IoT EdgeAzure IoT Edge Förhandsgranskningsvyn IoT-   modul(Preview) IoT module     Distribuera och hantera ML-modeller på IoT-enheter.Deploy and serve ML models on IoT devices.
Azure Data Box EdgeAzure Data Box Edge Via IoT EdgeVia IoT Edge   YesYes Distribuera och hantera ML-modeller på IoT-enheter.Deploy and serve ML models on IoT devices.

Anteckning

Även om Compute-mål som lokala, Azure Machine Learning beräknings instans och Azure Machine Learning beräknings kluster stöder GPU för utbildning och experimentering, kan du använda GPU: n för en härledning när den distribueras som en webb tjänst endast stöds i Azure Kubernetes-tjänsten.Although compute targets like local, Azure Machine Learning compute instance, and Azure Machine Learning compute clusters support GPU for training and experimentation, using GPU for inference when deployed as a web service is supported only on Azure Kubernetes Service.

Användning av en GPU för härledning när poäng med en Machine Learning-pipeline stöds endast på Azure Machine Learning Compute.Using a GPU for inference when scoring with a machine learning pipeline is supported only on Azure Machine Learning Compute.

Anteckning

  • Azure Container Instances (ACI) passar bara för små modeller som är mindre än 1 GB i storlek.Azure Container Instances (ACI) are suitable only for small models less than 1 GB in size.
  • Vi rekommenderar att du använder AKS-kluster (Single-Node Azure Kubernetes service) för utveckling och testning av större modeller.We recommend using single-node Azure Kubernetes Service (AKS) clusters for dev-test of larger models.

Definiera en distributions konfigurationDefine a deployment configuration

Vilka alternativ som är tillgängliga för en distributions konfiguration beror på vilket beräknings mål du väljer.The options available for a deployment configuration differ depending on the compute target you choose.

Posterna i deploymentconfig.json dokument översikten till parametrarna för LocalWebservice. deploy_configuration.The entries in the deploymentconfig.json document map to the parameters for LocalWebservice.deploy_configuration. I följande tabell beskrivs mappningen mellan entiteterna i JSON-dokumentet och parametrarna för-metoden:The following table describes the mapping between the entities in the JSON document and the parameters for the method:

JSON-entitetJSON entity Metod parameterMethod parameter BeskrivningDescription
computeType NANA Beräkningsmålet.The compute target. För lokala mål måste värdet vara local .For local targets, the value must be local.
port port Den lokala porten där tjänstens HTTP-slutpunkt ska exponeras.The local port on which to expose the service's HTTP endpoint.

Denna JSON är en exempel distributions konfiguration för användning med CLI:This JSON is an example deployment configuration for use with the CLI:

{
    "computeType": "local",
    "port": 32267
}

Mer information finns i dokumentationen för AZ ml-modellen Deploy .For more information, see the az ml model deploy documentation.

Distribuera din modellDeploy your model

Nu är du redo att distribuera din modell.You are now ready to deploy your model.

Använda en registrerad modellUsing a registered model

Om du har registrerat din modell i Azure Machine Learning arbets ytan ersätter du "modell: 1" med namnet på din modell och dess versions nummer.If you registered your model in your Azure Machine Learning workspace, replace "mymodel:1" with the name of your model and its version number.

az ml model deploy -m mymodel:1 --ic inferenceconfig.json --dc deploymentconfig.json

Använda en lokal modellUsing a local model

Om du föredrar att inte registrera din modell kan du skicka parametern "sourceDirectory" i din inferenceconfig.jspå för att ange en lokal katalog som din modell ska användas från.If you would prefer not to register your model, you can pass the "sourceDirectory" parameter in your inferenceconfig.json to specify a local directory from which to serve your model.

az ml model deploy --ic inferenceconfig.json --dc deploymentconfig.json

Förstå tjänst tillståndUnderstanding service state

Under modell distributionen kan tjänst tillstånds ändringen visas när den distribueras fullständigt.During model deployment, you may see the service state change while it fully deploys.

I följande tabell beskrivs de olika tjänst tillstånden:The following table describes the different service states:

Webservice-tillståndWebservice state BeskrivningDescription Slutligt tillstånd?Final state?
ÖvergårTransitioning Tjänsten håller på att distribueras.The service is in the process of deployment. NejNo
OhälsosamtUnhealthy Tjänsten har distribuerats men är för närvarande inte tillgänglig.The service has deployed but is currently unreachable. NejNo
UnschedulableUnschedulable Det går inte att distribuera tjänsten för tillfället på grund av bristande resurser.The service cannot be deployed at this time due to lack of resources. NejNo
MisslyckadFailed Det gick inte att distribuera tjänsten på grund av ett fel eller en krasch.The service has failed to deploy due to an error or crash. JaYes
FelfriHealthy Tjänsten är felfri och slut punkten är tillgänglig.The service is healthy and the endpoint is available. JaYes

Batch-härledningBatch inference

Azure Machine Learning beräknings mål skapas och hanteras av Azure Machine Learning.Azure Machine Learning Compute targets are created and managed by Azure Machine Learning. De kan användas för batch förutsägelse från Azure Machine Learning pipeliner.They can be used for batch prediction from Azure Machine Learning pipelines.

En genom gång av batch-härledning med Azure Machine Learning Compute finns i så här kör du batch-förutsägelser.For a walkthrough of batch inference with Azure Machine Learning Compute, see How to run batch predictions.

IoT Edge-härledningIoT Edge inference

Stöd för att distribuera till Edge är i för hands version.Support for deploying to the edge is in preview. Mer information finns i distribuera Azure Machine Learning som en IoT Edge modul.For more information, see Deploy Azure Machine Learning as an IoT Edge module.

Ta bort resurserDelete resources

Använd om du vill ta bort en distribuerad WebService az ml service <name of webservice> .To delete a deployed webservice, use az ml service <name of webservice>.

Om du vill ta bort en registrerad modell från din arbets yta använder duaz ml model delete <model id>To delete a registered model from your workspace, use az ml model delete <model id>

Läs mer om att ta bort en WebService och ta bort en modell.Read more about deleting a webservice and deleting a model.

Nästa stegNext steps