Развертывание моделей с помощью Машинного обучения AzureDeploy models with Azure Machine Learning

Применимо к: даБазовый выпуск даКорпоративный выпуск                    (Обновление до выпуска "Корпоративный")APPLIES TO: yesBasic edition yesEnterprise edition                    (Upgrade to Enterprise edition)

Узнайте, как развернуть модель машинного обучения в качестве веб-службы в облаке Azure или на Azure IoT Edge устройствах.Learn how to deploy your machine learning model as a web service in the Azure cloud or to Azure IoT Edge devices.

Последовательность действий всегда одна и та же, независимо от того, где развертывается модель:The workflow is similar no matter where you deploy your model:

  1. регистрация модели;Register the model.
  2. Подготовка конфигурации выводаPrepare an inference configuration
  3. Подготовка скрипта записи (если не используется развертывание без кода)Prepare an entry script (unless using no-code deployment)
  4. развертывание модели в целевом объекте вычислений;Deploy the model to the compute target.
  5. Протестируйте развернутую модель, также называемую веб-службой.Test the deployed model, also called a web service.

Дополнительные сведения об основных понятиях, связанных с рабочим процессом развертывания, см. в разделе Управление моделями, их развертывание и мониторинг с помощью машинное обучение Azure.For more information on the concepts involved in the deployment workflow, see Manage, deploy, and monitor models with Azure Machine Learning.

Предварительные требованияPrerequisites

Подключение к рабочей областиConnect to your workspace

Следуйте указаниям в документации по Azure CLI для настройки контекста подписки.Follow the directions in the Azure CLI documentation for setting your subscription context.

Затем выполните следующие действия.Then do:

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

для просмотра рабочих областей, к которым у вас есть доступ.to see the workspaces you have access to.

Регистрация моделиRegister your model

Зарегистрированная модель — это логический контейнер для одного или нескольких файлов, составляющих эту модель.A registered model is a logical container for one or more files that make up your model. Например, если имеется модель, которая хранится в нескольких файлах, можно зарегистрировать их как единую модель в рабочей области.For example, if you have a model that's stored in multiple files, you can register them as a single model in the workspace. После регистрации файлов можно скачать или развернуть зарегистрированную модель и получить все зарегистрированные файлы.After you register the files, you can then download or deploy the registered model and receive all the files that you registered.

Совет

При регистрации модели вы предоставляете путь к облачному расположению (из обучающего запуска) или к локальному каталогу.When you register a model, you provide the path of either a cloud location (from a training run) or a local directory. Этот путь предназначен только для поиска файлов для отправки в ходе процесса регистрации.This path is just to locate the files for upload as part of the registration process. Он не должен соответствовать пути, используемому в скрипте записи.It doesn't need to match the path used in the entry script. Дополнительные сведения см. в разделе Поиск файлов модели в скрипте записи.For more information, see Locate model files in your entry script.

Модели машинного обучения регистрируются в рабочей области Машинное обучение Azure.Machine learning models are registered in your Azure Machine Learning workspace. Модель может поступать из Машинное обучение Azure или в другом месте.The model can come from Azure Machine Learning or from somewhere else. При регистрации модели можно дополнительно предоставить метаданные о модели.When registering a model, you can optionally provide metadata about the model. tags properties Словари и, применяемые к регистрации модели, затем можно использовать для фильтрации моделей.The tags and properties dictionaries that you apply to a model registration can then be used to filter models.

В следующих примерах показано, как зарегистрировать модель.The following examples demonstrate how to register a model.

Регистрация модели из запуска обучения Azure MLRegister 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

Совет

Если появится сообщение об ошибке, уведомляющее о том, что расширение ML не установлено, выполните следующую команду, чтобы установить его: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-pathПараметр ссылается на расположение в облаке модели.The --asset-path parameter refers to the cloud location of the model. В этом примере используется путь к одному файлу.In this example, the path of a single file is used. Чтобы включить несколько файлов в регистрацию модели, задайте --asset-path путь к папке, содержащей файлы.To include multiple files in the model registration, set --asset-path to the path of a folder that contains the files.

Регистрация модели из локального файлаRegister a model from a local file

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

Чтобы включить несколько файлов в регистрацию модели, задайте -p путь к папке, содержащей файлы.To include multiple files in the model registration, set -p to the path of a folder that contains the files.

Дополнительные сведения о az ml model register см. в справочной документации.For more information on az ml model register, consult the reference documentation.

Определение скрипта записиDefine an entry script

Скрипт входа принимает данные, отправляемые в развернутую веб-службу, и передает их в модель.The entry script receives data submitted to a deployed web service and passes it to the model. Затем он принимает ответ, возвращенный моделью, и возвращает его клиенту.It then takes the response returned by the model and returns that to the client. Сценарий зависит от модели.The script is specific to your model. Он должен понимать данные, которые предположительно и возвращает модель.It must understand the data that the model expects and returns.

Скрипт содержит две функции, которые загружают и запускают модель:The script contains two functions that load and run the model:

  • init(). Как правило, эта функция загружает модель в глобальный объект.init(): Typically, this function loads the model into a global object. Эта функция выполняется только один раз при запуске контейнера DOCKER для веб-службы.This function is run only once, when the Docker container for your web service is started.

  • run(input_data): Эта функция использует модель для прогнозирования значения на основе входных данных.run(input_data): This function uses the model to predict a value based on the input data. Ко входным и выходным данным для запуска обычно применяется формат JSON для сериализации и десериализации.Inputs and outputs of the run typically use JSON for serialization and deserialization. Вы также можете работать с необработанными двоичными данными.You can also work with raw binary data. Вы можете преобразовать данные, прежде чем отправлять их в модель или возвращать клиенту.You can transform the data before sending it to the model or before returning it to the client.

REST API ожидает, что текст запроса содержит документ JSON со следующей структурой:The REST API expects the body of the request to be a JSON document with the following structure:

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

В следующем примере показано, как загрузить зарегистрированную модель scikit-учиться и оценить ее с помощью данных NumPy: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

Дополнительные примеры см. в следующих скриптах:For more examples, see the following scripts:

Определение конфигурации выводаDefine an inference configuration

Записи в inferenceconfig.json документе сопоставляются с параметрами класса инференцеконфиг .The entries in the inferenceconfig.json document map to the parameters for the InferenceConfig class. В следующей таблице описано сопоставление между сущностями в документе JSON и параметрами метода.The following table describes the mapping between entities in the JSON document and the parameters for the method:

Сущность JSONJSON entity Параметр методаMethod parameter ОписаниеDescription
entryScript entry_script Путь к локальному файлу, содержащему код для выполнения для образа.Path to a local file that contains the code to run for the image.
sourceDirectory source_directory Необязательный элемент.Optional. Путь к папкам, содержащим все файлы для создания образа, что упрощает доступ к любым файлам в этой папке или вложенной папке.Path to folders that contain all files to create the image, which makes it easy to access any files within this folder or subfolder. Вы можете отправить всю папку с локального компьютера в качестве зависимостей для веб – службы.You can upload an entire folder from your local machine as dependencies for the Webservice. Примечание. entry_script, conda_file и пути extra_docker_file_steps являются относительными путями к source_directory пути.Note: your entry_script, conda_file, and extra_docker_file_steps paths are relative paths to the source_directory path.
environment environment Необязательный элемент.Optional. Средамашинное обучение Azure.Azure Machine Learning environment.

В файл конфигурации вывода можно включить полные спецификации Машинное обучение Azureной среды .You can include full specifications of an Azure Machine Learning environment in the inference configuration file. Если эта среда не существует в рабочей области, Машинное обучение Azure создаст ее.If this environment doesn't exist in your workspace, Azure Machine Learning will create it. В противном случае при необходимости Машинное обучение Azure обновит среду.Otherwise, Azure Machine Learning will update the environment if necessary. Пример JSON приведен ниже.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"
    }
}

Можно также использовать существующую среду машинное обучение Azure в разделе параметров CLI и удалить ключ "среда" из файла конфигурации вывода.You can also use an existing Azure Machine Learning environment in separated CLI parameters and remove the "environment" key from the inference configuration file. Используйте параметр-e для имени среды и--EV для версии среды.Use -e for the environment name, and --ev for the environment version. Если не указать--EV, будет использоваться последняя версия.If you don't specify --ev, the latest version will be used. Ниже приведен пример файла конфигурации вывода.Here is an example of an inference configuration file:

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

Следующая команда демонстрирует развертывание модели с помощью предыдущего файла конфигурации вывода (с именем myInferenceConfig.jsв).The following command demonstrates how to deploy a model using the previous inference configuration file (named myInferenceConfig.json).

Он также использует последнюю версию существующей среды машинное обучение Azure (с именем AzureML-минимум).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

Следующая команда демонстрирует развертывание модели с помощью интерфейса командной строки.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

В этом примере конфигурация задает следующие параметры.In this example, the configuration specifies the following settings:

  • , Что для модели требуется PythonThat the model requires Python
  • Скрипт записи, используемый для обработки веб-запросов, отправляемых в развернутую службуThe entry script, which is used to handle web requests sent to the deployed service
  • Файл Conda, описывающий пакеты Python, необходимые для вывода.The Conda file that describes the Python packages needed for inference

Сведения об использовании пользовательского образа DOCKER с конфигурацией вывода см. в статье развертывание модели с помощью пользовательского образа DOCKER.For information on using a custom Docker image with an inference configuration, see How to deploy a model using a custom Docker image.

Выбор целевого объекта вычисленийChoose a compute target

Целевой объект вычислений, который вы используете для размещения модели, повлияет на стоимость и доступность развернутой конечной точки.The compute target you use to host your model will affect the cost and availability of your deployed endpoint. Для выбора подходящего целевого объекта вычислений используйте таблицу ниже.Use the table below to choose an appropriate compute target.

Целевой объект вычисленияCompute target Используется дляUsed for Поддержка GPUGPU support Поддержка ППВМFPGA support ОписаниеDescription
Локальная веб службаLocal web service Тестирование и отладкаTesting/debugging     Используется для ограниченного тестирования и устранения неполадок.Use for limited testing and troubleshooting. Аппаратное ускорение зависит от использования библиотек в локальной системе.Hardware acceleration depends on use of libraries in the local system.
Веб служба экземпляра вычислительных экземпляров Машинного обучения AzureAzure Machine Learning compute instance web service Тестирование и отладкаTesting/debugging     Используется для ограниченного тестирования и устранения неполадок.Use for limited testing and troubleshooting.
Служба Azure Kubernetes (AKS)Azure Kubernetes Service (AKS) Вывод в реальном времениReal-time inference Да (развертывание веб-службы)Yes (web service deployment) ДаYes Используется для крупномасштабных рабочих развертываний.Use for high-scale production deployments. Обеспечивает быстрое время отклика и автомасштабирование развернутой службы.Provides fast response time and autoscaling of the deployed service. Автомасштабирование кластера с использованием пакета SDK для Машинного обучения Azure не поддерживается.Cluster autoscaling isn't supported through the Azure Machine Learning SDK. Изменить узлы в кластере AKS можно с помощью пользовательского интерфейса для кластера AKS на портале Azure.To change the nodes in the AKS cluster, use the UI for your AKS cluster in the Azure portal. AKS — единственный доступный вариант для конструктора.AKS is the only option available for the designer.
Экземпляры контейнеров Azure;Azure Container Instances Тестирование или разработкаTesting or development     Используйте для небольших рабочих нагрузок на основе ЦП, которым требуется менее 48 ГБ ОЗУ.Use for low-scale CPU-based workloads that require less than 48 GB of RAM.
Вычислительные кластеры Машинного обучения AzureAzure Machine Learning compute clusters Пакетный выводBatch inference Да (конвейер машинного обучения)Yes (machine learning pipeline)   Выполнение пакетной оценки на основе бессерверных вычислений.Run batch scoring on serverless compute. Поддерживает виртуальные машины с обычным и низким приоритетом.Supports normal and low-priority VMs.
Функции AzureAzure Functions Вывод в реальном времени (предварительная версия)(Preview) Real-time inference      
Azure IoT EdgeAzure IoT Edge Модуль Интернета вещей (предварительная версия)(Preview) IoT module     Развертывание и обслуживание моделей машинного обучения на устройствах Интернета вещей.Deploy and serve ML models on IoT devices.
Что представляет собой Azure Data Box Edge (ознакомительная версия)?Azure Data Box Edge Посредством IoT EdgeVia IoT Edge   ДаYes Развертывание и обслуживание моделей машинного обучения на устройствах Интернета вещей.Deploy and serve ML models on IoT devices.

Примечание

Хотя такие целевые объекты вычислений, как локальные службы, вычислительные экземпляры Машинного обучения Azure и вычислительные кластеры Машинного обучения Azure, поддерживают GPU для обучения и экспериментирования, при развертывании этих объектов в качестве веб-служб использование GPU для вывода поддерживается только в Службе Azure Kubernetes.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.

Если оценка выполняется с помощью конвейера машинного обучения, использование GPU для вывода поддерживается только в Вычислительной среде Машинного обучения Azure.Using a GPU for inference when scoring with a machine learning pipeline is supported only on Azure Machine Learning Compute.

Примечание

  • Экземпляры контейнеров Azure можно использовать только для небольших моделей размером менее 1 ГБ.Azure Container Instances (ACI) are suitable only for small models less than 1 GB in size.
  • Для разработки и тестирования моделей большего размера мы рекомендуем использовать кластеры Службы Azure Kubernetes с одним узлом.We recommend using single-node Azure Kubernetes Service (AKS) clusters for dev-test of larger models.

Определение конфигурации развертыванияDefine a deployment configuration

Параметры, доступные для конфигурации развертывания, зависят от выбранного целевого объекта вычислений.The options available for a deployment configuration differ depending on the compute target you choose.

Записи в deploymentconfig.json документе соответствуют параметрам для локалвебсервице. deploy_configuration.The entries in the deploymentconfig.json document map to the parameters for LocalWebservice.deploy_configuration. В следующей таблице описывается сопоставление между сущностями в документе JSON и параметрами метода.The following table describes the mapping between the entities in the JSON document and the parameters for the method:

Сущность JSONJSON entity Параметр методаMethod parameter ОписаниеDescription
computeType Н/ДNA Целевой объект вычисления.The compute target. Для локальных целевых объектов значение должно быть local .For local targets, the value must be local.
port port Локальный порт, на который будет предоставляться конечная точка HTTP службы.The local port on which to expose the service's HTTP endpoint.

Этот формат JSON является примером конфигурации развертывания для использования с CLI:This JSON is an example deployment configuration for use with the CLI:

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

Дополнительные сведения см. в документации по AZ ml для развертывания модели .For more information, see the az ml model deploy documentation.

Развертывание моделиDeploy your model

Теперь вы готовы к развертыванию модели.You are now ready to deploy your model.

Использование зарегистрированной моделиUsing a registered model

Если вы зарегистрировали модель в рабочей области Машинное обучение Azure, замените "MyModel: 1" именем модели и ее номером версии.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

Использование локальной моделиUsing a local model

Если вы предпочитаете не регистрировать модель, можно передать параметр "sourceDirectory" в inferenceconfig.js, чтобы указать локальный каталог, из которого будет обслуживаться модель.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

Удаление ресурсовDelete resources

Чтобы удалить развернутую WebService, используйте az ml service <name of webservice> .To delete a deployed webservice, use az ml service <name of webservice>.

Чтобы удалить зарегистрированную модель из рабочей области, используйтеaz ml model delete <model id>To delete a registered model from your workspace, use az ml model delete <model id>

Узнайте больше об удалении WebService и удалении модели .Read more about deleting a webservice and deleting a model

Предварительные требованияPrerequisites

Подключение к рабочей областиConnect to your workspace

from azureml.core import Workspace
ws = Workspace.from_config(path=".file-path/ws_config.json")

Дополнительные сведения об использовании пакета SDK для подключения к рабочей области см. в документации по машинное обучение Azure SDK для Python .For more information on using the SDK to connect to a workspace, see the Azure Machine Learning SDK for Python documentation.

Регистрация моделиRegister your model

Зарегистрированная модель — это логический контейнер для одного или нескольких файлов, составляющих эту модель.A registered model is a logical container for one or more files that make up your model. Например, если имеется модель, которая хранится в нескольких файлах, можно зарегистрировать их как единую модель в рабочей области.For example, if you have a model that's stored in multiple files, you can register them as a single model in the workspace. После регистрации файлов можно скачать или развернуть зарегистрированную модель и получить все зарегистрированные файлы.After you register the files, you can then download or deploy the registered model and receive all the files that you registered.

Совет

При регистрации модели вы предоставляете путь к облачному расположению (из обучающего запуска) или к локальному каталогу.When you register a model, you provide the path of either a cloud location (from a training run) or a local directory. Этот путь предназначен только для поиска файлов для отправки в ходе процесса регистрации.This path is just to locate the files for upload as part of the registration process. Он не должен соответствовать пути, используемому в скрипте записи.It doesn't need to match the path used in the entry script. Дополнительные сведения см. в разделе Поиск файлов модели в скрипте записи.For more information, see Locate model files in your entry script.

Модели машинного обучения регистрируются в рабочей области Машинное обучение Azure.Machine learning models are registered in your Azure Machine Learning workspace. Модель может поступать из Машинное обучение Azure или в другом месте.The model can come from Azure Machine Learning or from somewhere else. При регистрации модели можно дополнительно предоставить метаданные о модели.When registering a model, you can optionally provide metadata about the model. tags properties Словари и, применяемые к регистрации модели, затем можно использовать для фильтрации моделей.The tags and properties dictionaries that you apply to a model registration can then be used to filter models.

В следующих примерах показано, как зарегистрировать модель.The following examples demonstrate how to register a model.

Регистрация модели из запуска обучения Azure MLRegister a model from an Azure ML training run

При использовании пакета SDK для обучения модели можно получить либо объект запуска , либо объект аутомлрун в зависимости от того, как была обучена модель.When you use the SDK to train a model, you can receive either a Run object or an AutoMLRun object, depending on how you trained the model. Каждый объект можно использовать для регистрации модели, созданной с помощью запуска эксперимента.Each object can be used to register a model created by an experiment run.

  • Зарегистрировать модель из azureml.core.Run объекта:Register a model from an azureml.core.Run object:

    model = run.register_model(model_name='sklearn_mnist',
                               tags={'area': 'mnist'},
                               model_path='outputs/sklearn_mnist_model.pkl')
    print(model.name, model.id, model.version, sep='\t')
    

    model_pathПараметр ссылается на расположение в облаке модели.The model_path parameter refers to the cloud location of the model. В этом примере используется путь к одному файлу.In this example, the path of a single file is used. Чтобы включить несколько файлов в регистрацию модели, задайте model_path путь к папке, содержащей файлы.To include multiple files in the model registration, set model_path to the path of a folder that contains the files. Дополнительные сведения см. в документации по Run. register_model .For more information, see the Run.register_model documentation.

  • Зарегистрировать модель из azureml.train.automl.run.AutoMLRun объекта:Register a model from an azureml.train.automl.run.AutoMLRun object:

        description = 'My AutoML Model'
        model = run.register_model(description = description,
                                   tags={'area': 'mnist'})
    
        print(run.model_id)
    

    В этом примере metric iteration Параметры и не указаны, поэтому будет зарегистрирована итерация с лучшей основной метрикой.In this example, the metric and iteration parameters aren't specified, so the iteration with the best primary metric will be registered. model_idЗначение, возвращаемое при выполнении, используется вместо имени модели.The model_id value returned from the run is used instead of a model name.

    Дополнительные сведения см. в документации по аутомлрун. register_model .For more information, see the AutoMLRun.register_model documentation.

Регистрация модели из локального файлаRegister a model from a local file

Вы можете зарегистрировать модель, указав локальный путь к модели.You can register a model by providing the local path of the model. Можно указать путь либо к папке, либо к одному файлу.You can provide the path of either a folder or a single file. С помощью этого метода можно регистрировать модели, обученные Машинное обучение Azure, а затем загружать их.You can use this method to register models trained with Azure Machine Learning and then downloaded. Этот метод также можно использовать для регистрации моделей, обученных за пределами Машинное обучение Azure.You can also use this method to register models trained outside of Azure Machine Learning.

Важно!

Следует использовать только модели, созданные или получаемые из надежного источника.You should use only models that you create or obtain from a trusted source. Сериализованные модели следует рассматривать как код, так как в некоторых популярных форматах были обнаружены уязвимости системы безопасности.You should treat serialized models as code, because security vulnerabilities have been discovered in a number of popular formats. Кроме того, модели могут быть намеренно обучены вредоносным намерением для предоставления смещенных или неточных выходных данных.Also, models might be intentionally trained with malicious intent to provide biased or inaccurate output.

  • Использование пакета SDK и ONNXUsing the SDK and ONNX

    import os
    import urllib.request
    from azureml.core.model import Model
    # Download model
    onnx_model_url = "https://www.cntk.ai/OnnxModels/mnist/opset_7/mnist.tar.gz"
    urllib.request.urlretrieve(onnx_model_url, filename="mnist.tar.gz")
    os.system('tar xvzf mnist.tar.gz')
    # Register model
    model = Model.register(workspace = ws,
                            model_path ="mnist/model.onnx",
                            model_name = "onnx_mnist",
                            tags = {"onnx": "demo"},
                            description = "MNIST image classification CNN from ONNX Model Zoo",)
    

    Чтобы включить несколько файлов в регистрацию модели, задайте model_path путь к папке, содержащей файлы.To include multiple files in the model registration, set model_path to the path of a folder that contains the files.

Дополнительные сведения см. в документации по классу Model.For more information, see the documentation for the Model class.

Дополнительные сведения о работе с моделями, обученными вне Машинное обучение Azure, см. в разделе Развертывание существующей модели.For more information on working with models trained outside Azure Machine Learning, see How to deploy an existing model.

Определение скрипта записиDefine an entry script

Скрипт входа принимает данные, отправляемые в развернутую веб-службу, и передает их в модель.The entry script receives data submitted to a deployed web service and passes it to the model. Затем он принимает ответ, возвращенный моделью, и возвращает его клиенту.It then takes the response returned by the model and returns that to the client. Сценарий зависит от модели.The script is specific to your model. Он должен понимать данные, которые предположительно и возвращает модель.It must understand the data that the model expects and returns.

Скрипт содержит две функции, которые загружают и запускают модель:The script contains two functions that load and run the model:

  • init(). Как правило, эта функция загружает модель в глобальный объект.init(): Typically, this function loads the model into a global object. Эта функция выполняется только один раз при запуске контейнера DOCKER для веб-службы.This function is run only once, when the Docker container for your web service is started.

  • run(input_data): Эта функция использует модель для прогнозирования значения на основе входных данных.run(input_data): This function uses the model to predict a value based on the input data. Ко входным и выходным данным для запуска обычно применяется формат JSON для сериализации и десериализации.Inputs and outputs of the run typically use JSON for serialization and deserialization. Вы также можете работать с необработанными двоичными данными.You can also work with raw binary data. Вы можете преобразовать данные, прежде чем отправлять их в модель или возвращать клиенту.You can transform the data before sending it to the model or before returning it to the client.

REST API ожидает, что текст запроса содержит документ JSON со следующей структурой:The REST API expects the body of the request to be a JSON document with the following structure:

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

В следующем примере показано, как загрузить зарегистрированную модель scikit-учиться и оценить ее с помощью данных NumPy: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

Дополнительные примеры см. в следующих скриптах:For more examples, see the following scripts:

Определение конфигурации выводаDefine an inference configuration

Конфигурация вывода описывает, как настроить веб-службу, содержащую модель.An inference configuration describes how to set up the web-service containing your model. Он используется позже при развертывании модели.It's used later, when you deploy the model.

Конфигурация вывода использует среды Машинное обучение Azure для определения зависимостей программного обеспечения, необходимых для развертывания.Inference configuration uses Azure Machine Learning environments to define the software dependencies needed for your deployment. Среды позволяют создавать, администрировать и повторно использовать зависимости программного обеспечения, необходимые для обучения и развертывания.Environments allow you to create, manage, and reuse the software dependencies required for training and deployment. Среду можно создать из пользовательских файлов зависимостей или с помощью одной из проверенных Машинное обучение Azure сред.You can create an environment from custom dependency files or use one of the curated Azure Machine Learning environments. Следующий YAML является примером файла зависимостей Conda для вывода.The following YAML is an example of a Conda dependencies file for inference. Обратите внимание, что необходимо указать значения azureml-Default с версии >= 1.0.45 в качестве зависимости PIP, так как она содержит функции, необходимые для размещения модели в качестве веб-службы.Note that you must indicate azureml-defaults with verion >= 1.0.45 as a pip dependency, because it contains the functionality needed to host the model as a web service. Если вы хотите использовать автоматическое создание схем, сценарий записи также должен импортировать inference-schema пакеты.If you want to use automatic schema generation, your entry script must also import the inference-schema packages.


name: project_environment
dependencies:
    - python=3.6.2
    - scikit-learn=0.20.0
    - pip:
        # You must list azureml-defaults as a pip dependency
    - azureml-defaults>=1.0.45
    - inference-schema[numpy-support]

Важно!

Если зависимость доступна с помощью Conda и PIP (из PyPi), корпорация Майкрософт рекомендует использовать версию Conda, так как Conda пакеты обычно поставляются с предварительно созданными двоичными файлами, которые делают установку более надежной.If your dependency is available through both Conda and pip (from PyPi), Microsoft recommends using the Conda version, as Conda packages typically come with pre-built binaries that make installation more reliable.

Дополнительные сведения см. в разделе Основные сведения о Conda и PIP.For more information, see Understanding Conda and Pip.

Чтобы проверить, доступна ли зависимость через Conda, используйте conda search <package-name> команду или используйте индексы пакетов по адресу https://anaconda.org/anaconda/repo и https://anaconda.org/conda-forge/repo .To check if your dependency is available through Conda, use the conda search <package-name> command, or use the package indexes at https://anaconda.org/anaconda/repo and https://anaconda.org/conda-forge/repo.

Файл зависимостей можно использовать для создания объекта среды и сохранения его в рабочей области для будущего использования:You can use the dependencies file to create an environment object and save it to your workspace for future use:

from azureml.core.environment import Environment
myenv = Environment.from_conda_specification(name = 'myenv',
                                                file_path = 'path-to-conda-specification-file'
myenv.register(workspace=ws)

Подробное описание использования и настройки сред Python с помощью Машинное обучение Azure см. в разделе создание & использование программных сред в машинное обучение AzureFor a thorough discussion of using and customizing Python environments with Azure Machine Learning, see Create & use software environments in Azure Machine Learning

Сведения об использовании пользовательского образа DOCKER с конфигурацией вывода см. в статье развертывание модели с помощью пользовательского образа DOCKER.For information on using a custom Docker image with an inference configuration, see How to deploy a model using a custom Docker image.

В следующем примере демонстрируется загрузка среды из рабочей области и ее использование с конфигурацией вывода:The following example demonstrates loading an environment from your workspace and then using it with the inference configuration:

from azureml.core.environment import Environment
from azureml.core.model import InferenceConfig


myenv = Environment.get(workspace=ws, name='myenv', version='1')
inference_config = InferenceConfig(entry_script='path-to-score.py',
                                    environment=myenv)

Дополнительные сведения о средах см. в статье создание сред для обучения и развертывания и управление ими.For more information on environments, see Create and manage environments for training and deployment.

Дополнительные сведения о конфигурации вывода см. в документации по классу инференцеконфиг .For more information on inference configuration, see the InferenceConfig class documentation.

Выбор целевого объекта вычисленийChoose a compute target

Целевой объект вычислений, который вы используете для размещения модели, повлияет на стоимость и доступность развернутой конечной точки.The compute target you use to host your model will affect the cost and availability of your deployed endpoint. Для выбора подходящего целевого объекта вычислений используйте таблицу ниже.Use the table below to choose an appropriate compute target.

Целевой объект вычисленияCompute target Используется дляUsed for Поддержка GPUGPU support Поддержка ППВМFPGA support ОписаниеDescription
Локальная веб службаLocal web service Тестирование и отладкаTesting/debugging     Используется для ограниченного тестирования и устранения неполадок.Use for limited testing and troubleshooting. Аппаратное ускорение зависит от использования библиотек в локальной системе.Hardware acceleration depends on use of libraries in the local system.
Веб служба экземпляра вычислительных экземпляров Машинного обучения AzureAzure Machine Learning compute instance web service Тестирование и отладкаTesting/debugging     Используется для ограниченного тестирования и устранения неполадок.Use for limited testing and troubleshooting.
Служба Azure Kubernetes (AKS)Azure Kubernetes Service (AKS) Вывод в реальном времениReal-time inference Да (развертывание веб-службы)Yes (web service deployment) ДаYes Используется для крупномасштабных рабочих развертываний.Use for high-scale production deployments. Обеспечивает быстрое время отклика и автомасштабирование развернутой службы.Provides fast response time and autoscaling of the deployed service. Автомасштабирование кластера с использованием пакета SDK для Машинного обучения Azure не поддерживается.Cluster autoscaling isn't supported through the Azure Machine Learning SDK. Изменить узлы в кластере AKS можно с помощью пользовательского интерфейса для кластера AKS на портале Azure.To change the nodes in the AKS cluster, use the UI for your AKS cluster in the Azure portal. AKS — единственный доступный вариант для конструктора.AKS is the only option available for the designer.
Экземпляры контейнеров Azure;Azure Container Instances Тестирование или разработкаTesting or development     Используйте для небольших рабочих нагрузок на основе ЦП, которым требуется менее 48 ГБ ОЗУ.Use for low-scale CPU-based workloads that require less than 48 GB of RAM.
Вычислительные кластеры Машинного обучения AzureAzure Machine Learning compute clusters Пакетный выводBatch inference Да (конвейер машинного обучения)Yes (machine learning pipeline)   Выполнение пакетной оценки на основе бессерверных вычислений.Run batch scoring on serverless compute. Поддерживает виртуальные машины с обычным и низким приоритетом.Supports normal and low-priority VMs.
Функции AzureAzure Functions Вывод в реальном времени (предварительная версия)(Preview) Real-time inference      
Azure IoT EdgeAzure IoT Edge Модуль Интернета вещей (предварительная версия)(Preview) IoT module     Развертывание и обслуживание моделей машинного обучения на устройствах Интернета вещей.Deploy and serve ML models on IoT devices.
Что представляет собой Azure Data Box Edge (ознакомительная версия)?Azure Data Box Edge Посредством IoT EdgeVia IoT Edge   ДаYes Развертывание и обслуживание моделей машинного обучения на устройствах Интернета вещей.Deploy and serve ML models on IoT devices.

Примечание

Хотя такие целевые объекты вычислений, как локальные службы, вычислительные экземпляры Машинного обучения Azure и вычислительные кластеры Машинного обучения Azure, поддерживают GPU для обучения и экспериментирования, при развертывании этих объектов в качестве веб-служб использование GPU для вывода поддерживается только в Службе Azure Kubernetes.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.

Если оценка выполняется с помощью конвейера машинного обучения, использование GPU для вывода поддерживается только в Вычислительной среде Машинного обучения Azure.Using a GPU for inference when scoring with a machine learning pipeline is supported only on Azure Machine Learning Compute.

Примечание

  • Экземпляры контейнеров Azure можно использовать только для небольших моделей размером менее 1 ГБ.Azure Container Instances (ACI) are suitable only for small models less than 1 GB in size.
  • Для разработки и тестирования моделей большего размера мы рекомендуем использовать кластеры Службы Azure Kubernetes с одним узлом.We recommend using single-node Azure Kubernetes Service (AKS) clusters for dev-test of larger models.

Определение конфигурации развертыванияDefine a deployment configuration

Перед развертыванием модели необходимо определить конфигурацию развертывания.Before deploying your model, you must define the deployment configuration. Конфигурация развертывания зависит от целевого объекта вычислений, в котором будет размещена веб-служба.The deployment configuration is specific to the compute target that will host the web service. Например, при локальном развертывании модели необходимо указать порт, на котором служба принимает запросы.For example, when you deploy a model locally, you must specify the port where the service accepts requests. Конфигурация развертывания не является частью скрипта записи.The deployment configuration isn't part of your entry script. Он используется для определения характеристик целевого объекта вычислений, в котором будет размещаться скрипт модели и входа.It's used to define the characteristics of the compute target that will host the model and entry script.

Вам также может потребоваться создать вычислительный ресурс, если, например, у вас еще нет экземпляра Azure Kubernetes Service (AKS), связанного с вашей рабочей областью.You might also need to create the compute resource, if, for example, you don't already have an Azure Kubernetes Service (AKS) instance associated with your workspace.

В следующей таблице приведен пример создания конфигурации развертывания для каждого целевого объекта вычислений.The following table provides an example of creating a deployment configuration for each compute target:

Целевой объект вычисленияCompute target Пример конфигурации развертыванияDeployment configuration example
ЛокальнаяLocal deployment_config = LocalWebservice.deploy_configuration(port=8890)
Экземпляры контейнеров AzureAzure Container Instances deployment_config = AciWebservice.deploy_configuration(cpu_cores = 1, memory_gb = 1)
Служба контейнеров AzureAzure Kubernetes Service deployment_config = AksWebservice.deploy_configuration(cpu_cores = 1, memory_gb = 1)

Классы для локальных объектов, экземпляров контейнеров Azure и веб-служб AKS можно импортировать из azureml.core.webservice :The classes for local, Azure Container Instances, and AKS web services can be imported from azureml.core.webservice:

from azureml.core.webservice import AciWebservice, AksWebservice, LocalWebservice

Развертывание моделиDeploy your model

Теперь вы готовы к развертыванию модели.You are now ready to deploy your model. В приведенном ниже примере демонстрируется локальное развертывание.The example below demonstrates a local deployment. Синтаксис будет зависеть от целевого объекта вычислений, выбранного на предыдущем шаге.The syntax will vary depending on the compute target you chose in the previous step.

from azureml.core.webservice import LocalWebservice, Webservice

deployment_config = LocalWebservice.deploy_configuration(port=8890)
service = Model.deploy(ws, "myservice", [model], inference_config, deployment_config)
service.wait_for_deployment(show_output = True)
print(service.state)

Дополнительные сведения см. в документации по локалвебсервице, model. deploy ()и WebService.For more information, see the documentation for LocalWebservice, Model.deploy(), and Webservice.

Удаление ресурсовDelete resources

Для удаления развернутой веб-службы используйте service.delete().To delete a deployed web service, use service.delete(). Чтобы удалить зарегистрированную модель, используйте model.delete().To delete a registered model, use model.delete().

Дополнительные сведения см. в документации по WebService. Delete () и model. Delete ().For more information, see the documentation for WebService.delete() and Model.delete().

Основные сведения о состоянии службыUnderstanding service state

Во время развертывания модели изменение состояния службы может отображаться, пока оно полностью развернуто.During model deployment, you may see the service state change while it fully deploys.

В следующей таблице описаны различные состояния службы.The following table describes the different service states:

Состояние WebServiceWebservice state Описание:Description Конечное состояние?Final state?
ПереходTransitioning Служба находится в процессе развертывания.The service is in the process of deployment. НетNo
UnhealthyUnhealthy Служба была развернута, но сейчас недоступна.The service has deployed but is currently unreachable. НетNo
НепланируемыйUnschedulable В настоящее время служба не может быть развернута из-за нехватки ресурсов.The service cannot be deployed at this time due to lack of resources. НетNo
СбойFailed Не удалось выполнить развертывание службы из-за ошибки или сбоя.The service has failed to deploy due to an error or crash. ДаYes
РаботоспособноHealthy Служба работоспособна, и доступна конечная точка.The service is healthy and the endpoint is available. ДаYes

Вывод пакетаBatch inference

Машинное обучение Azure целевые объекты вычислений создаются и управляются с помощью Машинное обучение Azure.Azure Machine Learning Compute targets are created and managed by Azure Machine Learning. Их можно использовать для прогнозирования пакетной службы из Машинное обучение Azure конвейеров.They can be used for batch prediction from Azure Machine Learning pipelines.

Пошаговое руководство по выводу пакетов с помощью Машинное обучение Azure COMPUTE см. в разделе Выполнение пакетных прогнозов.For a walkthrough of batch inference with Azure Machine Learning Compute, see How to run batch predictions.

Вывод IoT EdgeIoT Edge inference

Поддержка развертывания на границе доступна в предварительной версии.Support for deploying to the edge is in preview. Дополнительные сведения см. в разделе развертывание машинное обучение Azure как модуля IOT Edge.For more information, see Deploy Azure Machine Learning as an IoT Edge module.

Дальнейшие шагиNext steps