Gépi tanulási modell üzembe helyezése Azure Functions (előzetes verzió)Deploy a machine learning model to Azure Functions (preview)

Megtudhatja, hogyan helyezhet üzembe Azure Machine Learning modelleket függvényalkalmazásként a Azure Functions.Learn how to deploy a model from Azure Machine Learning as a function app in Azure Functions.

Fontos

Bár a Azure Machine Learning és a Azure Functions is általánosan elérhetők, a modellek a Machine Learning Functions szolgáltatásból való csomagolásának lehetősége előzetes verzióban érhető el.While both Azure Machine Learning and Azure Functions are generally available, the ability to package a model from the Machine Learning service for Functions is in preview.

A Azure Machine Learning segítségével Docker-rendszerképeket hozhat létre betanított gépi tanulási modellekből.With Azure Machine Learning, you can create Docker images from trained machine learning models. Azure Machine Learning a gépi tanulási modellek függvényalkalmazásokbe való buildelmének előzetes verziója, amely a alkalmazásban Azure Functions.Azure Machine Learning now has the preview functionality to build these machine learning models into function apps, which can be deployed into Azure Functions.

ElőfeltételekPrerequisites

  • Egy Azure Machine Learning-munkaterület.An Azure Machine Learning workspace. További információt a Munkaterület létrehozása cikkben talál.For more information, see the Create a workspace article.

  • Az Azure CLI.The Azure CLI.

  • A munkaterületen regisztrált betanított gépi tanulási modell.A trained machine learning model registered in your workspace. Ha még nem használhatja a modellt, használja a Képbesorolási oktatóanyag: modell betanítása és regisztrálása.If you do not have a model, use the Image classification tutorial: train model to train and register one.

    Fontos

    A cikkben olvasható kódrészletek feltételezik, hogy a következő változókat beállította:The code snippets in this article assume that you have set the following variables:

    • ws – A Azure Machine Learning munkaterülete.ws - Your Azure Machine Learning workspace.
    • model – Az üzembe helyező regisztrált modell.model - The registered model that will be deployed.
    • inference_config – A modell következtetési konfigurációja.inference_config - The inference configuration for the model.

    A változók beállításával kapcsolatos további információkért lásd: Modellek üzembe helyezése a Azure Machine Learning.For more information on setting these variables, see Deploy models with Azure Machine Learning.

Felkészülés az üzembe helyezésrePrepare for deployment

Az üzembe helyezés előtt meg kell határoznia, hogy mi szükséges a modell webszolgáltatásként való futtatásához.Before deploying, you must define what is needed to run the model as a web service. Az alábbi lista az üzembe helyezéshez szükséges alapvető elemeket ismerteti:The following list describes the core items needed for a deployment:

  • Egy bejegyzési szkript.An entry script. Ez a szkript fogadja a kérelmeket, pontokat ad a kérésnek a modell használatával, és visszaadja az eredményeket.This script accepts requests, scores the request using the model, and returns the results.

    Fontos

    A bejegyzési szkript a modellre vonatkozik; Meg kell értenie a bejövő kérelemadatok formátumát, a modell által várt adatok formátumát és az ügyfeleknek visszaadott adatok formátumát.The entry script is specific to your model; it must understand the format of the incoming request data, the format of the data expected by your model, and the format of the data returned to clients.

    Ha a kérelemadatok olyan formátumúak, amelyet a modell nem tud majd használhatóvá alakítani, a szkript elfogadható formátumba tudja alakítani őket.If the request data is in a format that is not usable by your model, the script can transform it into an acceptable format. Emellett átalakíthatja a választ, mielőtt visszatér az ügyfélhez.It may also transform the response before returning to it to the client.

    A függvények csomagolásakor a rendszer alapértelmezés szerint szövegként kezeli a bemenetet.By default when packaging for functions, the input is treated as text. Ha érdekli a bemenet nyers bájtja (például blob-eseményindítók esetén), az AMLRequesthasználatával fogadja el a nyers adatokat.If you are interested in consuming the raw bytes of the input (for instance for Blob triggers), you should use AMLRequest to accept raw data.

További információ a bejegyzési szkriptről: Pontozási kód meghatározásaFor more information on entry script, see Define scoring code

  • Függőségek, például segítő szkriptek vagy Python-/Conda-csomagok, amelyek a belépési szkript vagy modell futtatásához szükségesekDependencies, such as helper scripts or Python/Conda packages required to run the entry script or model

Ezek az entitások egy következtetési konfigurációba vannak beágyazva.These entities are encapsulated into an inference configuration. A következtetési konfiguráció a bejegyzés parancsfájljára és további függőségekre hivatkozik.The inference configuration references the entry script and other dependencies.

Fontos

Amikor következtetési konfigurációt hoz létre a Azure Functions, környezeti objektumot kell használnia.When creating an inference configuration for use with Azure Functions, you must use an Environment object. Vegye figyelembe, hogy ha egyéni környezetet definiál, akkor az azureml-defaults paramétert az >= 1.0.45 verzióval kell hozzáadnia pip-függőségként.Please note that if you are defining a custom environment, you must add azureml-defaults with version >= 1.0.45 as a pip dependency. Ez a csomag tartalmazza a modell webszolgáltatásként való használatához szükséges funkciókat.This package contains the functionality needed to host the model as a web service. Az alábbi példa egy környezeti objektum létrehozását és következtetési konfigurációval való használatát mutatja be:The following example demonstrates creating an environment object and using it with an inference configuration:

from azureml.core.environment import Environment
from azureml.core.conda_dependencies import CondaDependencies

# Create an environment and add conda dependencies to it
myenv = Environment(name="myenv")
# Enable Docker based environment
myenv.docker.enabled = True
# Build conda dependencies
myenv.python.conda_dependencies = CondaDependencies.create(conda_packages=['scikit-learn'],
                                                           pip_packages=['azureml-defaults'])
inference_config = InferenceConfig(entry_script="score.py", environment=myenv)

További információ a környezetekkel kapcsolatban: Környezetek létrehozása és kezelése betanításhoz és üzembe helyezéshez.For more information on environments, see Create and manage environments for training and deployment.

A dedükenciakonfigurációval kapcsolatos további információkért lásd: Modellek üzembe helyezése a Azure Machine Learning.For more information on inference configuration, see Deploy models with Azure Machine Learning.

Fontos

A Functionsben való üzembe helyezéskor nem kell üzembe helyezési konfigurációt létrehoznia.When deploying to Functions, you do not need to create a deployment configuration.

Az SDK előzetes verziójának telepítése függvénytámogatáshozInstall the SDK preview package for functions support

Ha csomagokat Azure Functions, telepítenie kell az SDK előzetes verzióját.To build packages for Azure Functions, you must install the SDK preview package.

pip install azureml-contrib-functions

A rendszerkép létrehozásaCreate the image

A Azure Functions üzembe helyezett Docker-rendszerkép létrehozásához használja az azureml.contrib.functions.package vagy az eseményindító konkrét csomag függvényét.To create the Docker image that is deployed to Azure Functions, use azureml.contrib.functions.package or the specific package function for the trigger you are interested in using. A következő kódrészlet bemutatja, hogyan hozhat létre új csomagot a modellből és a következtetési konfigurációból származó blob-eseményindítóval:The following code snippet demonstrates how to create a new package with a blob trigger from the model and inference configuration:

Megjegyzés

A kódrészlet feltételezi, hogy az tartalmaz egy regisztrált modellt, és tartalmazza a következtetési környezet model inference_config konfigurációját.The code snippet assumes that model contains a registered model, and that inference_config contains the configuration for the inference environment. További információ: Modellek üzembe helyezése a Azure Machine Learning.For more information, see Deploy models with Azure Machine Learning.

from azureml.contrib.functions import package
from azureml.contrib.functions import BLOB_TRIGGER
blob = package(ws, [model], inference_config, functions_enabled=True, trigger=BLOB_TRIGGER, input_path="input/{blobname}.json", output_path="output/{blobname}_out.json")
blob.wait_for_creation(show_output=True)
# Display the package location/ACR path
print(blob.location)

Amikor show_output=True megjelenik a Docker buildfolyamatának kimenete.When show_output=True, the output of the Docker build process is shown. A folyamat befejezése után a rendszerkép a munkaterület Azure Container Registry gombra.Once the process finishes, the image has been created in the Azure Container Registry for your workspace. A rendszerkép kiépítése után megjelenik a Azure Container Registry helye.Once the image has been built, the location in your Azure Container Registry is displayed. A visszaadott hely formátuma <acrinstance>.azurecr.io/package@sha256:<imagename> .The location returned is in the format <acrinstance>.azurecr.io/package@sha256:<imagename>.

Megjegyzés

A függvények csomagolása jelenleg a HTTP-eseményindítókat, a Blob-eseményindítókat és a Service Bus-eseményindítókat támogatja.Packaging for functions currently supports HTTP Triggers, Blob triggers and Service bus triggers. További információ az eseményindítókról: Azure Functions kötések.For more information on triggers, see Azure Functions bindings.

Fontos

Mentse a helyadatokat a lemezkép üzembe helyezésekor használt adatokat.Save the location information, as it is used when deploying the image.

Rendszerkép üzembe helyezése webalkalmazáskéntDeploy image as a web app

  1. A következő paranccsal szerezze be a rendszerképet tartalmazó Azure Container Registry hitelesítő adatait.Use the following command to get the login credentials for the Azure Container Registry that contains the image. Cserélje <myacr> le a helyére a korábban visszaadott blob.location értéket:Replace <myacr> with the value returned previously from blob.location:

    az acr credential show --name <myacr>
    

    A parancs kimenete az alábbi JSON-dokumentumhoz hasonló:The output of this command is similar to the following JSON document:

    {
    "passwords": [
        {
        "name": "password",
        "value": "Iv0lRZQ9762LUJrFiffo3P4sWgk4q+nW"
        },
        {
        "name": "password2",
        "value": "=pKCxHatX96jeoYBWZLsPR6opszr==mg"
        }
    ],
    "username": "myml08024f78fd10"
    }
    

    Mentse a felhasználónév és az egyik jelszó értékét.Save the value for username and one of the passwords.

  2. Ha még nem rendelkezik erőforráscsoporttal vagy App Service-csomagtal a szolgáltatás üzembe helyezéséhez, a következő parancsok bemutatják, hogyan hozhatja létre mindkettőt:If you do not already have a resource group or app service plan to deploy the service, the following commands demonstrate how to create both:

    az group create --name myresourcegroup --location "West Europe"
    az appservice plan create --name myplanname --resource-group myresourcegroup --sku B1 --is-linux
    

    Ebben a példában egy alapszintű Linux tarifacsomagot ( --sku B1 ) használunk.In this example, a Linux basic pricing tier (--sku B1) is used.

    Fontos

    A virtuális gépek által Azure Machine Learning rendszerképek Linuxot használnak, ezért a paramétert --is-linux kell használnia.Images created by Azure Machine Learning use Linux, so you must use the --is-linux parameter.

  3. Hozza létre a webes feladat tárolásához használt tárfiókot, és szerezze be a kapcsolati sztringet.Create the storage account to use for the web job storage and get its connection string. Cserélje <webjobStorage> le a helyére a használni kívánt nevet.Replace <webjobStorage> with the name you want to use.

    az storage account create --name <webjobStorage> --location westeurope --resource-group myresourcegroup --sku Standard_LRS
    
    az storage account show-connection-string --resource-group myresourcegroup --name <webJobStorage> --query connectionString --output tsv
    
  4. A függvényalkalmazás létrehozásához használja a következő parancsot.To create the function app, use the following command. Cserélje <app-name> le a helyére a használni kívánt nevet.Replace <app-name> with the name you want to use. Cserélje <acrinstance> le a és a <imagename> értékeket a korábban package.location visszaadott értékekre.Replace <acrinstance> and <imagename> with the values from returned package.location earlier. Cserélje le a helyére az előző lépésben <webjobStorage> lekért tárfiók nevét:Replace <webjobStorage> with the name of the storage account from the previous step:

    az functionapp create --resource-group myresourcegroup --plan myplanname --name <app-name> --deployment-container-image-name <acrinstance>.azurecr.io/package:<imagename> --storage-account <webjobStorage>
    

    Fontos

    Ezen a ponton létrejött a függvényalkalmazás.At this point, the function app has been created. Mivel azonban nem adott meg kapcsolati sztringet a blob-eseményindítóhoz vagy a hitelesítő Azure Container Registry a képet tartalmazó tárolóhoz, a függvényalkalmazás nem aktív.However, since you haven't provided the connection string for the blob trigger or credentials to the Azure Container Registry that contains the image, the function app is not active. A következő lépésekben meg kell adnia a tároló-beállításjegyzék kapcsolati sztringet és hitelesítési adatait.In the next steps, you provide the connection string and the authentication information for the container registry.

  5. Hozza létre a blob-eseményindító tárolóhoz használt tárfiókot, és szerezze be a kapcsolati sztringet.Create the storage account to use for the blob trigger storage and get its connection string. Cserélje <triggerStorage> le a helyére a használni kívánt nevet.Replace <triggerStorage> with the name you want to use.

    az storage account create --name <triggerStorage> --location westeurope --resource-group myresourcegroup --sku Standard_LRS
    
    az storage account show-connection-string --resource-group myresourcegroup --name <triggerStorage> --query connectionString --output tsv
    

    Jegyezz fel ezt a kapcsolati sztringet, hogy a függvényalkalmazásnak adja meg.Record this connection string to provide to the function app. Később használni fogjuk, amikor a <triggerConnectionString>We will use it later when we ask for <triggerConnectionString>

  6. Hozza létre a tárolókat a tárfiók bemenetéhez és kimenetéhez.Create the containers for the input and output in the storage account. Cserélje <triggerConnectionString> le a helyére a korábban visszaadott kapcsolati sztringet:Replace <triggerConnectionString> with the connection string returned earlier:

    az storage container create -n input --connection-string <triggerConnectionString>
    
    az storage container create -n output --connection-string <triggerConnectionString>
    
  7. Az eseményindító kapcsolati sztringet a következő paranccsal társíthatja a függvényalkalmazáshoz.To associate the trigger connection string with the function app, use the following command. Cserélje <app-name> le a helyére a függvényalkalmazás nevét.Replace <app-name> with the name of the function app. Cserélje <triggerConnectionString> le a helyére a korábban visszaadott kapcsolati sztringet:Replace <triggerConnectionString> with the connection string returned earlier:

    az functionapp config appsettings set --name <app-name> --resource-group myresourcegroup --settings "TriggerConnectionString=<triggerConnectionString>"
    
  8. A létrehozott tárolóhoz társított címkét az alábbi paranccsal kell lekérni.You will need to retrieve the tag associated with the created container using the following command. Cserélje <username> le a helyére a tároló-beállításjegyzékből korábban visszaadott felhasználónevet:Replace <username> with the username returned earlier from the container registry:

    az acr repository show-tags --repository package --name <username> --output tsv
    

    Mentse a visszaadott értéket, mert a következő lépésben a lesz imagetag használva.Save the value returned, it will be used as the imagetag in the next step.

  9. A következő paranccsal használhatja a függvényalkalmazásnak a tároló-beállításjegyzék eléréséhez szükséges hitelesítő adatokat.To provide the function app with the credentials needed to access the container registry, use the following command. Cserélje <app-name> le a helyére a függvényalkalmazás nevét.Replace <app-name> with the name of the function app. Cserélje le a és a értékeket az előző lépésben az <acrinstance> <imagetag> AZ CLI-hívásból származó értékekre.Replace <acrinstance> and <imagetag> with the values from the AZ CLI call in the previous step. Cserélje le a és a adatokat a <username> korábban <password> lekért ACR bejelentkezési adatokra:Replace <username> and <password> with the ACR login information retrieved earlier:

    az functionapp config container set --name <app-name> --resource-group myresourcegroup --docker-custom-image-name <acrinstance>.azurecr.io/package:<imagetag> --docker-registry-server-url https://<acrinstance>.azurecr.io --docker-registry-server-user <username> --docker-registry-server-password <password>
    

    Ez a parancs az alábbi JSON-dokumentumhoz hasonló információkat ad vissza:This command returns information similar to the following JSON document:

    [
    {
        "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE",
        "slotSetting": false,
        "value": "false"
    },
    {
        "name": "DOCKER_REGISTRY_SERVER_URL",
        "slotSetting": false,
        "value": "https://myml08024f78fd10.azurecr.io"
    },
    {
        "name": "DOCKER_REGISTRY_SERVER_USERNAME",
        "slotSetting": false,
        "value": "myml08024f78fd10"
    },
    {
        "name": "DOCKER_REGISTRY_SERVER_PASSWORD",
        "slotSetting": false,
        "value": null
    },
    {
        "name": "DOCKER_CUSTOM_IMAGE_NAME",
        "value": "DOCKER|myml08024f78fd10.azurecr.io/package:20190827195524"
    }
    ]
    

Ezen a ponton a függvényalkalmazás megkezdi a kép betöltését.At this point, the function app begins loading the image.

Fontos

A rendszerkép betöltése több percig is eltarthat.It may take several minutes before the image has loaded. A folyamat előrehaladását az Azure Portalon követheti nyomon.You can monitor progress using the Azure Portal.

Az üzemelő példány teszteléseTest the deployment

Miután a rendszerkép betöltődött, és az alkalmazás elérhetővé vált, a következő lépésekkel aktiválhatja az alkalmazást:Once the image has loaded and the app is available, use the following steps to trigger the app:

  1. Hozzon létre egy szövegfájlt, amely a score.py várt adatokat tartalmazza.Create a text file that contains the data that the score.py file expects. Az alábbi példa egy olyan score.py, amely 10 számból várja a tömböt:The following example would work with a score.py that expects an array of 10 numbers:

    {"data": [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]]}
    

    Fontos

    Az adatok formátuma attól függ, hogy a score.py és a modell mit vár.The format of the data depends on what your score.py and model expects.

  2. A következő paranccsal töltse fel ezt a fájlt a korábban létrehozott tároló eseményindító tárolójában található bemeneti tárolóba.Use the following command to upload this file to the input container in the trigger storage blob created earlier. Cserélje <file> le a helyére az adatokat tartalmazó fájl nevét.Replace <file> with the name of the file containing the data. Cserélje <triggerConnectionString> le a helyére a korábban visszaadott kapcsolati sztringet.Replace <triggerConnectionString> with the connection string returned earlier. Ebben a példában input a korábban létrehozott bemeneti tároló neve.In this example, input is the name of the input container created earlier. Ha más nevet használt, cserélje le ezt az értéket:If you used a different name, replace this value:

    az storage blob upload --container-name input --file <file> --name <file> --connection-string <triggerConnectionString>
    

    A parancs kimenete az alábbi JSON-hoz hasonló:The output of this command is similar to the following JSON:

    {
    "etag": "\"0x8D7C21528E08844\"",
    "lastModified": "2020-03-06T21:27:23+00:00"
    }
    
  3. A függvény által előállított kimenet megtekintéséhez használja a következő parancsot a létrehozott kimeneti fájlok listához.To view the output produced by the function, use the following command to list the output files generated. Cserélje <triggerConnectionString> le a helyére a korábban visszaadott kapcsolati sztringet.Replace <triggerConnectionString> with the connection string returned earlier. Ebben a példában output a korábban létrehozott kimeneti tároló neve.In this example, output is the name of the output container created earlier. Ha más nevet használt, cserélje le ezt az értéket:If you used a different name, replace this value:

    az storage blob list --container-name output --connection-string <triggerConnectionString> --query '[].name' --output tsv
    

    A parancs kimenete a következőre sample_input_out.json hasonlít: .The output of this command is similar to sample_input_out.json.

  4. A fájl letöltéséhez és a tartalom vizsgálathoz használja a következő parancsot.To download the file and inspect the contents, use the following command. Cserélje <file> le a helyére az előző parancs által visszaadott fájlnevet.Replace <file> with the file name returned by the previous command. Cserélje <triggerConnectionString> le a helyére a korábban visszaadott kapcsolati sztringet:Replace <triggerConnectionString> with the connection string returned earlier:

    az storage blob download --container-name output --file <file> --name <file> --connection-string <triggerConnectionString>
    

    Ha a parancs befejeződött, nyissa meg a fájlt.Once the command completes, open the file. A modell által visszaadott adatokat tartalmazza.It contains the data returned by the model.

A blob-eseményindítók használatával kapcsolatos további információkért tekintse meg az Azure Blob Storage által aktivált függvények létrehozása cikket.For more information on using blob triggers, see the Create a function triggered by Azure Blob storage article.

Következő lépésekNext steps