Развертывание моделей с помощью Машинное обучение 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 to deploy. (Укажите активы, использование, целевой объект вычислений.)(Specify assets, usage, compute target.)
  3. Разверните модель в целевом объекте вычислений.Deploy the model to the compute target.
  4. Протестируйте развернутую модель, также называемую веб-службой.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, используя сведения, кэшированные в локальной среде разработки:The following code shows how to connect to an Azure Machine Learning workspace by using information cached to the local development environment:

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

    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.

  • Использование интерфейса командной строкиUsing the CLI

    При использовании интерфейса командной строки используйте параметр -w или --workspace-name, чтобы указать рабочую область для команды.When using the CLI, use the -w or --workspace-name parameter to specify the workspace for the command.

  • Использование VS CodeUsing VS Code

    При использовании VS Code рабочую область можно выбрать с помощью графического интерфейса.When you use VS Code, you select the workspace by using a graphical interface. Дополнительные сведения см. в разделе Развертывание моделей и управление ими в документации по расширению VS Code.For more information, see Deploy and manage models in the VS Code extension 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. В следующих примерах показано, как зарегистрировать модель.The following examples demonstrate how to register a model.

Регистрация модели из запуска экспериментаRegister a model from an experiment run

В фрагментах кода в этом разделе показано, как зарегистрировать модель из обучающего запуска:The code snippets in this section demonstrate how to register a model from a training run:

Важно!

Чтобы использовать эти фрагменты кода, необходимо предварительно выполнить обучение и получить доступ к объекту Run (пример пакета SDK) или значению идентификатора запуска (пример с интерфейсом командной строки).To use these snippets, you need to have previously performed a training run and you need to have access to the Run object (SDK example) or the run ID value (CLI example). Дополнительные сведения о моделях обучения см. в разделе Настройка целевых объектов вычислений для обучения модели.For more information on training models, see Set up compute targets for model training.

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

    При использовании пакета 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', 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)
      
          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.

  • Использование интерфейса командной строкиUsing the CLI

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

    Совет

    Если появится сообщение об ошибке, уведомляющее о том, что расширение 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.

  • Использование VS CodeUsing VS Code

    Регистрация моделей с помощью любых файлов или папок модели с помощью расширения VS Code .Register models using any model files or folders by using the VS Code extension.

Регистрация модели из локального файла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.

  • Использование интерфейса командной строкиUsing the CLI

    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.

Оценка времени: приблизительно 10 секунд.Time estimate: Approximately 10 seconds.

Дополнительные сведения см. в документации по классу 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.

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

Для размещения развертывания веб-службы можно использовать следующие целевые объекты вычислений или ресурсы вычислений:You can use the following compute targets, or compute resources, to host your web service deployment:

Целевой объект вычисленияCompute target Область использованияUsed for Поддержка GPUGPU support Поддержка FPGAFPGA support ОписаниеDescription
Локальная служба веб-  Local web service Тестирование и отладкаTesting/debugging     Используется для ограниченного тестирования и устранения неполадок.Use for limited testing and troubleshooting. Аппаратное ускорение зависит от использования библиотек в локальной системе.Hardware acceleration depends on use of libraries in the local system.
Машинное обучение Azure служб вычислительных экземпляров службы веб- Azure 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.
Машинное обучение Azureные кластерыAzure Machine Learning compute clusters Образца Вывод пакетной (Preview) 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 Образца Модуль IoT(Preview) IoT module     Развертывание и обслуживание моделей машинного обучения на устройствах IoT.Deploy and serve ML models on IoT devices.
Что представляет собой Azure Data Box Edge (ознакомительная версия)?Azure Data Box Edge Via IoT EdgeVia IoT Edge   ДАYes Развертывание и обслуживание моделей машинного обучения на устройствах IoT.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.

Подготовка к развертываниюPrepare to deploy

Для развертывания модели вам потребуются следующие элементы:To deploy the model, you need the following items:

  • Скрипт записи.An entry script. Этот скрипт принимает запросы, оценивает запросы с помощью модели и возвращает результаты.This script accepts requests, scores the requests by using the model, and returns the results.

    Важно!

    • Сценарий записи зависит от модели.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.

      Если данные запроса имеют формат, непригодный для использования в вашей модели, скрипт может преобразовать его в допустимый формат.If the request data is in a format that's not usable by your model, the script can transform it into an acceptable format. Он также может преобразовать ответ перед его возвратом клиенту.It can also transform the response before returning it to the client.

    • Пакет SDK для Машинное обучение Azure не предоставляет веб-службам и IoT Edgeным развертываниям доступ к хранилищу данных или наборам DataSet.The Azure Machine Learning SDK doesn't provide a way for web services or IoT Edge deployments to access your data store or datasets. Если развернутой модели требуется доступ к данным, хранящимся за пределами развертывания, например данных в учетной записи хранения Azure, необходимо разработать собственное решение с кодом, используя соответствующий пакет SDK.If your deployed model needs to access data stored outside the deployment, like data in an Azure storage account, you must develop a custom code solution by using the relevant SDK. Например, пакет SDK для службы хранилища Azure для Python.For example, the Azure Storage SDK for Python.

      Альтернативой, который может работать в вашем сценарии, является Прогнозирование пакетной обработки, предоставляющее доступ к хранилищам данных во время оценки.An alternative that might work for your scenario is batch prediction, which does provide access to data stores during scoring.

  • Зависимости, такие как вспомогательные скрипты или пакеты Python или Conda, необходимые для запуска сценария записи или модели.Dependencies, like helper scripts or Python/Conda packages required to run the entry script or model.

  • Конфигурация развертывания для целевого объекта вычислений, в котором развернута модель.The deployment configuration for the compute target that hosts the deployed model. Эта конфигурация описывает такие вещи, как память и требования к ЦП, необходимые для запуска модели.This configuration describes things like memory and CPU requirements needed to run the model.

Эти элементы инкапсулированы в конфигурацию вывода и конфигурацию развертывания.These items are encapsulated into an inference configuration and a deployment configuration. Конфигурация вывода ссылается на скрипт записи и другие зависимости.The inference configuration references the entry script and other dependencies. Эти конфигурации определяются программно при использовании пакета SDK для выполнения развертывания.You define these configurations programmatically when you use the SDK to perform the deployment. Они определяются в файлах JSON при использовании интерфейса командной строки.You define them in JSON files when you use the CLI.

1. определение скрипта записи и зависимостей1. Define your entry script and dependencies

Сценарий записи получает данные, отправленные в развернутую веб-службу, и передает их в модель.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.

Обнаружение файлов модели в скрипте записиLocate model files in your entry script

Существует два способа определения модели в скрипте записи:There are two ways to locate models in your entry script:

  • AZUREML_MODEL_DIR: переменная среды, содержащая путь к расположению модели.AZUREML_MODEL_DIR: An environment variable containing the path to the model location.
  • Model.get_model_path: API, который возвращает путь к файлу модели, используя имя зарегистрированной модели.Model.get_model_path: An API that returns the path to model file using the registered model name.
AZUREML_MODEL_DIRAZUREML_MODEL_DIR

AZUREML_MODEL_DIR — это переменная среды, созданная во время развертывания службы.AZUREML_MODEL_DIR is an environment variable created during service deployment. Эту переменную среды можно использовать для поиска расположения развернутых моделей.You can use this environment variable to find the location of the deployed model(s).

В следующей таблице описано значение AZUREML_MODEL_DIR в зависимости от числа развернутых моделей:The following table describes the value of AZUREML_MODEL_DIR depending on the number of models deployed:

Развертывание.Deployment Значение переменной средыEnvironment variable value
Одна модельSingle model Путь к папке, содержащей модель.The path to the folder containing the model.
Несколько моделейMultiple models Путь к папке, содержащей все модели.The path to the folder containing all models. Модели расположены по имени и версии в этой папке ($MODEL_NAME/$VERSION)Models are located by name and version in this folder ($MODEL_NAME/$VERSION)

Чтобы получить путь к файлу в модели, объедините переменную среды с искомым именем файла.To get the path to a file in a model, combine the environment variable with the filename you're looking for. Имена файлов модели сохраняются во время регистрации и развертывания.The filenames of the model files are preserved during registration and deployment.

Пример одной моделиSingle model example

model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'sklearn_regression_model.pkl')

Пример с несколькими моделямиMultiple model example

model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'sklearn_model/1/sklearn_regression_model.pkl')
get_model_pathget_model_path

При регистрации модели вы предоставляете имя модели, используемое для управления моделью в реестре.When you register a model, you provide a model name that's used for managing the model in the registry. Это имя используется с методом model. get_model_path () для получения пути к файлу модели или файлам в локальной файловой системе.You use this name with the Model.get_model_path() method to retrieve the path of the model file or files on the local file system. При регистрации папки или коллекции файлов этот API возвращает путь к каталогу, содержащему эти файлы.If you register a folder or a collection of files, this API returns the path of the directory that contains those files.

При регистрации модели ей присваивается имя.When you register a model, you give it a name. Имя соответствует месту размещения модели: локально или во время развертывания службы.The name corresponds to where the model is placed, either locally or during service deployment.

Важно!

Если для обучения модели использовалось автоматическое машинное обучение, в качестве имени модели используется значение model_id.If you used automated machine learning to train a model, a model_id value is used as the model name. Пример регистрации и развертывания модели, обученной в автоматизированном машинном обучении, см. в статье Azure/мачинелеарнингнотебукс на сайте GitHub.For an example of registering and deploying a model trained with automated machine learning, see Azure/MachineLearningNotebooks on GitHub.

В следующем примере возвращается путь к одному файлу с именем sklearn_mnist_model.pkl (который был зарегистрирован с именем sklearn_mnist):The following example will return a path to a single file called sklearn_mnist_model.pkl (which was registered with the name sklearn_mnist):

model_path = Model.get_model_path('sklearn_mnist')

Используемых Автоматическое создание схем(Optional) Automatic schema generation

Чтобы автоматически создать схему для веб-службы, укажите образец входных и (или) выходных данных в конструкторе для одного из объектов определенного типа.To automatically generate a schema for your web service, provide a sample of the input and/or output in the constructor for one of the defined type objects. Тип и образец используются для автоматического создания схемы.The type and sample are used to automatically create the schema. После этого Машинное обучение Azure создает спецификацию OpenAPI (Swagger) для веб-службы во время развертывания.Azure Machine Learning then creates an OpenAPI (Swagger) specification for the web service during deployment.

В настоящее время поддерживаются следующие типы:These types are currently supported:

  • pandas
  • numpy
  • pyspark
  • Стандартный объект PythonStandard Python object

Чтобы использовать формирование схемы, включите пакет inference-schema в файл среды Conda.To use schema generation, include the inference-schema package in your Conda environment file. Дополнительные сведения об этом пакете см. в разделе https://github.com/Azure/InferenceSchema.For more information on this package, see https://github.com/Azure/InferenceSchema.

Пример файла зависимостейExample dependencies file

Следующий YAML является примером файла зависимостей Conda для вывода:The following YAML is an example of a Conda dependencies file for inference:

name: project_environment
dependencies:
  - python=3.6.2
  - scikit-learn=0.20.0
  - pip:
    - azureml-defaults
    - 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.

Если вы хотите использовать автоматическое создание схем, сценарий записи должен импортировать inference-schema пакеты.If you want to use automatic schema generation, your entry script must import the inference-schema packages.

Определите форматы образца входных и выходных данных в переменных input_sample и output_sample, которые представляют форматы запросов и ответов для веб-службы.Define the input and output sample formats in the input_sample and output_sample variables, which represent the request and response formats for the web service. Используйте эти примеры в декораторах входных и выходных функций в функции run().Use these samples in the input and output function decorators on the run() function. В следующем примере scikit-учиться используется создание схемы.The following scikit-learn example uses schema generation.

Пример скрипта записиExample entry script

В следующем примере показано, как принимать и возвращать данные JSON.The following example demonstrates how to accept and return JSON 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).
    # Alternatively: model_path = Model.get_model_path('sklearn_mnist')
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), '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

В следующем примере показано, как определить входные данные как словарь <key: value> с помощью таблицы данных.The following example demonstrates how to define the input data as a <key: value> dictionary by using a DataFrame. Этот метод поддерживается для использования развернутой веб-службы из Power BI.This method is supported for consuming the deployed web service from Power BI. (Дополнительныесведения об использовании веб-службы из Power BI.)(Learn more about how to consume the web service from Power BI.)

import json
import pickle
import numpy as np
import pandas as pd
import azureml.train.automl
from sklearn.externals import joblib
from azureml.core.model import Model

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


def init():
    global model
    # Replace filename if needed.
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'model_file.pkl')
    # Deserialize the model file back into a sklearn model.
    model = joblib.load(model_path)


input_sample = pd.DataFrame(data=[{
    # This is a decimal type sample. Use the data type that reflects this column in your data.
    "input_name_1": 5.1,
    # This is a string type sample. Use the data type that reflects this column in your data.
    "input_name_2": "value2",
    # This is an integer type sample. Use the data type that reflects this column in your data.
    "input_name_3": 3
}])

# This is an integer type sample. Use the data type that reflects the expected result.
output_sample = np.array([0])


@input_schema('data', PandasParameterType(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:

Двоичные данныеBinary data

Если модель принимает двоичные данные, например изображение, необходимо изменить файл score.py, используемый для развертывания, чтобы принимать необработанные HTTP-запросы.If your model accepts binary data, like an image, you must modify the score.py file used for your deployment to accept raw HTTP requests. Чтобы принимать необработанные данные, используйте класс AMLRequest в скрипте записи и добавьте @rawhttp декоратора в функцию run().To accept raw data, use the AMLRequest class in your entry script and add the @rawhttp decorator to the run() function.

Ниже приведен пример score.py, который принимает двоичные данные:Here's an example of a score.py that accepts binary data:

from azureml.contrib.services.aml_request import AMLRequest, rawhttp
from azureml.contrib.services.aml_response import AMLResponse


def init():
    print("This is init()")


@rawhttp
def run(request):
    print("This is run()")
    print("Request: [{0}]".format(request))
    if request.method == 'GET':
        # For this example, just return the URL for GETs.
        respBody = str.encode(request.full_path)
        return AMLResponse(respBody, 200)
    elif request.method == 'POST':
        reqBody = request.get_data(False)
        # For a real-world solution, you would load the data from reqBody
        # and send it to the model. Then return the response.

        # For demonstration purposes, this example just returns the posted data as the response.
        return AMLResponse(reqBody, 200)
    else:
        return AMLResponse("bad request", 500)

Важно!

Класс AMLRequest находится в пространстве имен azureml.contrib.The AMLRequest class is in the azureml.contrib namespace. Сущности в этом пространстве имен часто изменяются, так как мы работаем над улучшением службы.Entities in this namespace change frequently as we work to improve the service. Все, что есть в этом пространстве имен, следует рассматривать как предварительную версию, которая не полностью поддерживается корпорацией Майкрософт.Anything in this namespace should be considered a preview that's not fully supported by Microsoft.

Если необходимо протестировать это в локальной среде разработки, можно установить компоненты с помощью следующей команды:If you need to test this in your local development environment, you can install the components by using the following command:

pip install azureml-contrib-services

Общий доступ к ресурсам между источниками (CORS)Cross-origin resource sharing (CORS)

Совместное использование ресурсов в разных источниках позволяет запрашивать ресурсы на веб-странице из другого домена.Cross-origin resource sharing is a way to allow resources on a web page to be requested from another domain. CORS работает через заголовки HTTP, отправленные с клиентским запросом и возвращаемые с ответом службы.CORS works via HTTP headers sent with the client request and returned with the service response. Дополнительные сведения о CORS и допустимых заголовках см. в разделе общий доступ к ресурсам между источниками в Википедии.For more information on CORS and valid headers, see Cross-origin resource sharing in Wikipedia.

Чтобы настроить развертывание модели для поддержки CORS, используйте класс AMLResponse в скрипте записи.To configure your model deployment to support CORS, use the AMLResponse class in your entry script. Этот класс позволяет задать заголовки для объекта ответа.This class allows you to set the headers on the response object.

В следующем примере задается заголовок Access-Control-Allow-Origin для ответа из скрипта записи:The following example sets the Access-Control-Allow-Origin header for the response from the entry script:

from azureml.contrib.services.aml_response import AMLResponse

def init():
    print("This is init()")

def run(request):
    print("This is run()")
    print("Request: [{0}]".format(request))
    if request.method == 'GET':
        # For this example, just return the URL for GETs.
        respBody = str.encode(request.full_path)
        return AMLResponse(respBody, 200)
    elif request.method == 'POST':
        reqBody = request.get_data(False)
        # For a real-world solution, you would load the data from reqBody
        # and send it to the model. Then return the response.

        # For demonstration purposes, this example
        # adds a header and returns the request body.
        resp = AMLResponse(reqBody, 200)
        resp.headers['Access-Control-Allow-Origin'] = "http://www.example.com"
        return resp
    else:
        return AMLResponse("bad request", 500)

Важно!

Класс AMLResponse находится в пространстве имен azureml.contrib.The AMLResponse class is in the azureml.contrib namespace. Сущности в этом пространстве имен часто изменяются, так как мы работаем над улучшением службы.Entities in this namespace change frequently as we work to improve the service. Все, что есть в этом пространстве имен, следует рассматривать как предварительную версию, которая не полностью поддерживается корпорацией Майкрософт.Anything in this namespace should be considered a preview that's not fully supported by Microsoft.

Если необходимо протестировать это в локальной среде разработки, можно установить компоненты с помощью следующей команды:If you need to test this in your local development environment, you can install the components by using the following command:

pip install azureml-contrib-services

2. Определение Инференцеконфиг2. Define your InferenceConfig

Конфигурация вывода описывает, как настроить модель для выполнения прогнозов.The inference configuration describes how to configure the model to make predictions. Эта конфигурация не является частью сценария записи.This configuration isn't part of your entry script. Он ссылается на скрипт записи и используется для размещения всех ресурсов, необходимых для развертывания.It references your entry script and is used to locate all the resources required by the deployment. Он используется позже при развертывании модели.It's used later, when you deploy the model.

Конфигурация вывода может использовать Машинное обучение Azure среды для определения зависимостей программного обеспечения, необходимых для развертывания.Inference configuration can use 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. В следующем примере демонстрируется загрузка среды из рабочей области и ее использование с конфигурацией вывода:The following example demonstrates loading an environment from your workspace and then using it with the inference configuration:

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

deploy_env = Environment.get(workspace=ws,name="myenv",version="1")
inference_config = InferenceConfig(entry_script="x/y/score.py",
                                   environment=deploy_env)

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

Можно также указать зависимости напрямую, не используя среду.You can also directly specify the dependencies without using an environment. В следующем примере показано, как создать конфигурацию вывода, которая загружает зависимости программного обеспечения из файла Conda:The following example demonstrates how to create an inference configuration that loads software dependencies from a Conda file:

from azureml.core.model import InferenceConfig

inference_config = InferenceConfig(runtime="python",
                                   entry_script="x/y/score.py",
                                   conda_file="env/myenv.yml")

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

Сведения об использовании пользовательского образа 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.

Пример Инференцеконфиг в CLICLI example of InferenceConfig

Записи в документе 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.
runtime runtime Необязательный элемент.Optional. Среда выполнения, используемая для образа.Which runtime to use for the image. Текущие поддерживаемые среды выполнения: spark-py и python.Current supported runtimes are spark-py and python. Если параметр environment установлен, он игнорируется.If environment is set, this gets ignored.
condaFile conda_file Необязательный элемент.Optional. Путь к локальному файлу, содержащему определение окружения Conda для использования в образе.Path to a local file that contains a Conda environment definition to use for the image. Если параметр environment установлен, он игнорируется.If environment is set, this gets ignored.
extraDockerFileSteps extra_docker_file_steps Необязательный элемент.Optional. Путь к локальному файлу, который содержит дополнительные шаги DOCKER для запуска при настройке образа.Path to a local file that contains additional Docker steps to run when setting up the image. Если параметр environment установлен, он игнорируется.If environment is set, this gets ignored.
sourceDirectory source_directory Необязательный элемент.Optional. Путь к папкам, содержащим все файлы для создания образа.Path to folders that contain all files to create the image.
enableGpu enable_gpu Необязательный элемент.Optional. Включить ли поддержку GPU в образе.Whether to enable GPU support in the image. Образ GPU должен использоваться в службе Azure, например в экземплярах контейнеров Azure, Машинное обучение Azureных средах выполнения вычислений, виртуальных машинах Azure и службе Azure Kubernetes.The GPU image must be used on an Azure service, like Azure Container Instances, Azure Machine Learning Compute, Azure Virtual Machines, and Azure Kubernetes Service. Значение по умолчанию равно False.The default is False. Если параметр environment установлен, он игнорируется.If environment is set, this gets ignored.
baseImage base_image Необязательный элемент.Optional. Пользовательский образ, используемый в качестве базового образа.Custom image to be used as a base image. Если базовый образ не указан, то образ будет основан на указанном параметре среды выполнения.If no base image is provided, the image will be based on the provided runtime parameter. Если параметр environment установлен, он игнорируется.If environment is set, this gets ignored.
baseImageRegistry base_image_registry Необязательный элемент.Optional. Реестр образов, содержащий базовый образ.Image registry that contains the base image. Если параметр environment установлен, он игнорируется.If environment is set, this gets ignored.
cudaVersion cuda_version Необязательный элемент.Optional. Версия CUDA для установки образов, требующих поддержки GPU.Version of CUDA to install for images that need GPU support. Образ GPU должен использоваться в службе Azure, например в экземплярах контейнеров Azure, Машинное обучение Azureных средах выполнения вычислений, виртуальных машинах Azure и службе Azure Kubernetes.The GPU image must be used on an Azure service, like Azure Container Instances, Azure Machine Learning Compute, Azure Virtual Machines, and Azure Kubernetes Service. Поддерживаемые версии: 9,0, 9,1 и 10,0.Supported versions are 9.0, 9.1, and 10.0. Если задано значение enable_gpu, по умолчанию используется значение 9,1.If enable_gpu is set, the default is 9.1. Если параметр environment установлен, он игнорируется.If environment is set, this gets ignored.
description description Описание изображения.A description for the image. Если параметр environment установлен, он игнорируется.If environment is set, this gets ignored.
environment environment Необязательный элемент.Optional. Средамашинное обучение Azure.Azure Machine Learning environment.

Следующий код JSON — это пример конфигурации вывода для использования с CLI:The following JSON is an example inference configuration for use with the CLI:

{
    "entryScript": "score.py",
    "runtime": "python",
    "condaFile": "myenv.yml",
    "extraDockerfileSteps": null,
    "sourceDirectory": null,
    "enableGpu": false,
    "baseImage": null,
    "baseImageRegistry": null
}

Следующий JSON — это пример конфигурации определения, которая использует существующую среду машинное обучение Azure с определенной версией для использования с CLI:The following JSON is an example inference configuration that uses an existing Azure Machine Learning environment with a specific version for use with the CLI:

{
    "entryScript": "score.py",
    "environment":{
        "name": "myenv",
        "version": "1"
    },
    "condaFile": "myenv.yml",
    "sourceDirectory": null
}

Следующий код JSON — это пример конфигурации определения, которая использует существующую среду машинное обучение Azure с последней версией для использования с CLI:The following JSON is an example inference configuration that uses an existing Azure Machine Learning environment with latest version for use with the CLI:

{
    "entryScript": "score.py",
    "environment":{
        "name": "myenv",
        "version": null
    },
    "condaFile": "myenv.yml",
    "sourceDirectory": null
}

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

  • Для модели требуется Python.That 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.

3. Определение конфигурации развертывания3. Define your 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)
Служба "Экземпляры контейнеров Azure"Azure Container Instances deployment_config = AciWebservice.deploy_configuration(cpu_cores = 1, memory_gb = 1)
Служба Azure KubernetesAzure 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

Профилирование.Profiling

Перед развертыванием модели в качестве службы может потребоваться ее профилирование для определения оптимальных требований к ЦП и памяти.Before you deploy your model as a service, you might want to profile it to determine optimal CPU and memory requirements. Для профилирования модели можно использовать либо пакет SDK, либо интерфейс командной строки.You can use either the SDK or the CLI to profile your model. В следующих примерах показано, как профилировать модель с помощью пакета SDK.The following examples show how to profile a model by using the SDK.

Важно!

При использовании профилирования предоставленная конфигурация вывода не может ссылаться на среду Машинное обучение Azure.When you use profiling, the inference configuration that you provide can't reference an Azure Machine Learning environment. Вместо этого определите зависимости программного обеспечения с помощью параметра conda_file объекта InferenceConfig.Instead, define the software dependencies by using the conda_file parameter of the InferenceConfig object.

import json
test_sample = json.dumps({'data': [
    [1,2,3,4,5,6,7,8,9,10]
]})

profile = Model.profile(ws, "profilemymodel", [model], inference_config, test_data)
profile.wait_for_profiling(True)
profiling_results = profile.get_results()
print(profiling_results)

Этот код отображает результат, аналогичный приведенному ниже:This code displays a result similar to the following output:

{'cpu': 1.0, 'memoryInGB': 0.5}

Результаты профилирования модели создаются как объект Run.Model profiling results are emitted as a Run object.

Дополнительные сведения об использовании профилирования из CLI см. в разделе AZ ML Model Profile.For information on using profiling from the CLI, see az ml model profile.

Дополнительные сведения см. в следующих документах:For more information, see these documents:

Развертывание в целевом объектеDeploy to target

Развертывание использует конфигурацию развертывания конфигурации определения для развертывания моделей.Deployment uses the inference configuration deployment configuration to deploy the models. Процесс развертывания аналогичен, независимо от целевого объекта вычислений.The deployment process is similar regardless of the compute target. Развертывание в AKS немного отличается, так как необходимо предоставить ссылку на кластер AKS.Deploying to AKS is slightly different because you must provide a reference to the AKS cluster.

Защита развертываний с помощью SSLSecuring deployments with SSL

Дополнительные сведения о защите развертывания веб-службы см. в статье использование SSL для защиты веб-службы.For more information on how to secure a web service deployment, see Use SSL to secure a web service.

Локальное развертываниеLocal deployment

Чтобы развернуть модель локально, на локальном компьютере должен быть установлен DOCKER.To deploy a model locally, you need to have Docker installed on your local machine.

Использование пакета SDKUsing the SDK

ззсzzs

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.

Использование интерфейса командной строкиUsing the CLI

Чтобы развернуть модель с помощью интерфейса командной строки, используйте следующую команду.To deploy a model by using the CLI, use the following command. Замените mymodel:1 именем и версией зарегистрированной модели:Replace mymodel:1 with the name and version of the registered model:

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

Записи в документе 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.

Веб-служба виртуальной машины записных книжек (разработка и тестирование)Notebook VM web service (dev/test)

См. статью развертывание модели для машинное обучение Azure виртуальной машины записной книжки.See Deploy a model to Azure Machine Learning Notebook VM.

Экземпляры контейнеров Azure (разработка и тестирование)Azure Container Instances (dev/test)

См. раздел развертывание в службе "экземпляры контейнеров Azure".See Deploy to Azure Container Instances.

Служба Kubernetes Azure (разработка, тестирование и Рабочая среда)Azure Kubernetes Service (dev/test and production)

См. раздел Deploy to Azure Kubernetes Service.See Deploy to Azure Kubernetes Service.

Использование веб-службConsume web services

Каждая развернутая веб-служба предоставляет REST API, что позволяет создавать клиентские приложения на различных языках программирования.Every deployed web service provides a REST API, so you can create client applications in a variety of programming languages. Если для службы включен ключ проверки подлинности, необходимо предоставить ключ службы в качестве маркера в заголовке запроса.If you've enabled key authentication for your service, you need to provide a service key as a token in your request header. Если вы включили проверку подлинности маркеров для службы, необходимо предоставить маркер JWT Машинное обучение Azure в качестве токена носителя в заголовке запроса.If you've enabled token authentication for your service, you need to provide an Azure Machine Learning JWT token as a bearer token in your request header.

Совет

После развертывания службы можно получить документ JSON схемы.You can retrieve the schema JSON document after you deploy the service. Используйте свойство swagger_uri из развернутой веб-службы (например, service.swagger_uri), чтобы получить универсальный код ресурса (URI) для файла Swagger локальной веб-службы.Use the swagger_uri property from the deployed web service (for example, service.swagger_uri) to get the URI to the local web service's Swagger file.

Использование запросов и ответовRequest-response consumption

Ниже приведен пример вызова службы в Python:Here's an example of how to invoke your service in Python:

import requests
import json

headers = {'Content-Type': 'application/json'}

if service.auth_enabled:
    headers['Authorization'] = 'Bearer '+service.get_keys()[0]
elif service.token_auth_enabled:
    headers['Authorization'] = 'Bearer '+service.get_token()[0]

print(headers)

test_sample = json.dumps({'data': [
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
]})

response = requests.post(
    service.scoring_uri, data=test_sample, headers=headers)
print(response.status_code)
print(response.elapsed)
print(response.json())

Дополнительные сведения см. в статье Создание клиентских приложений для использования веб-служб.For more information, see Create client applications to consume web services.

Схема веб-службы (спецификация OpenAPI)Web service schema (OpenAPI specification)

Если вы использовали автоматическое создание схем в развертывании, можно получить адрес спецификации OpenAPI для службы с помощью свойства swagger_uri.If you used automatic schema generation with your deployment, you can get the address of the OpenAPI specification for the service by using the swagger_uri property. (Например, print(service.swagger_uri).) Используйте запрос GET или откройте универсальный код ресурса (URI) в браузере, чтобы получить спецификацию.(For example, print(service.swagger_uri).) Use a GET request or open the URI in a browser to retrieve the specification.

Следующий документ JSON является примером схемы (спецификации OpenAPI), созданной для развертывания:The following JSON document is an example of a schema (OpenAPI specification) generated for a deployment:

{
    "swagger": "2.0",
    "info": {
        "title": "myservice",
        "description": "API specification for Azure Machine Learning myservice",
        "version": "1.0"
    },
    "schemes": [
        "https"
    ],
    "consumes": [
        "application/json"
    ],
    "produces": [
        "application/json"
    ],
    "securityDefinitions": {
        "Bearer": {
            "type": "apiKey",
            "name": "Authorization",
            "in": "header",
            "description": "For example: Bearer abc123"
        }
    },
    "paths": {
        "/": {
            "get": {
                "operationId": "ServiceHealthCheck",
                "description": "Simple health check endpoint to ensure the service is up at any given point.",
                "responses": {
                    "200": {
                        "description": "If service is up and running, this response will be returned with the content 'Healthy'",
                        "schema": {
                            "type": "string"
                        },
                        "examples": {
                            "application/json": "Healthy"
                        }
                    },
                    "default": {
                        "description": "The service failed to execute due to an error.",
                        "schema": {
                            "$ref": "#/definitions/ErrorResponse"
                        }
                    }
                }
            }
        },
        "/score": {
            "post": {
                "operationId": "RunMLService",
                "description": "Run web service's model and get the prediction output",
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "parameters": [
                    {
                        "name": "serviceInputPayload",
                        "in": "body",
                        "description": "The input payload for executing the real-time machine learning service.",
                        "schema": {
                            "$ref": "#/definitions/ServiceInput"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The service processed the input correctly and provided a result prediction, if applicable.",
                        "schema": {
                            "$ref": "#/definitions/ServiceOutput"
                        }
                    },
                    "default": {
                        "description": "The service failed to execute due to an error.",
                        "schema": {
                            "$ref": "#/definitions/ErrorResponse"
                        }
                    }
                }
            }
        }
    },
    "definitions": {
        "ServiceInput": {
            "type": "object",
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "type": "array",
                        "items": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                }
            },
            "example": {
                "data": [
                    [ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]
                ]
            }
        },
        "ServiceOutput": {
            "type": "array",
            "items": {
                "type": "number",
                "format": "double"
            },
            "example": [
                3726.995
            ]
        },
        "ErrorResponse": {
            "type": "object",
            "properties": {
                "status_code": {
                    "type": "integer",
                    "format": "int32"
                },
                "message": {
                    "type": "string"
                }
            }
        }
    }
}

Дополнительные сведения см. в статье Спецификация OpenAPI.For more information, see OpenAPI specification.

Сведения о программе, которая может создавать клиентские библиотеки из спецификации, см. в разделе Swagger-CodeGen.For a utility that can create client libraries from the specification, see swagger-codegen.

Вывод пакета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.

Обновление веб-службUpdate web services

Чтобы обновить веб-службу, используйте метод update.To update a web service, use the update method. Можно обновить веб-службу, чтобы использовать новую модель, новый скрипт записи или новые зависимости, которые можно указать в конфигурации вывода.You can update the web service to use a new model, a new entry script, or new dependencies that can be specified in an inference configuration. Дополнительные сведения см. в документации по WebService. Update.For more information, see the documentation for Webservice.update.

Важно!

При создании новой версии модели необходимо вручную обновить каждую службу, которая будет использовать ее.When you create a new version of a model, you must manually update each service that you want to use it.

Использование пакета SDKUsing the SDK

В следующем коде показано, как использовать пакет SDK для обновления сценария модели, среды и входа для веб-службы.The following code shows how to use the SDK to update the model, environment, and entry script for a web service:

from azureml.core import Environment
from azureml.core.webservice import Webservice
from azureml.core.model import Model, InferenceConfig

# Register new model.
new_model = Model.register(model_path="outputs/sklearn_mnist_model.pkl",
                           model_name="sklearn_mnist",
                           tags={"key": "0.1"},
                           description="test",
                           workspace=ws)

# Use version 3 of the environment.
deploy_env = Environment.get(workspace=ws,name="myenv",version="3")
inference_config = InferenceConfig(entry_script="score.py",
                                   environment=deploy_env)

service_name = 'myservice'
# Retrieve existing service.
service = Webservice(name=service_name, workspace=ws)



# Update to new model(s).
service.update(models=[new_model], inference_config=inference_config)
print(service.state)
print(service.get_logs())

Использование интерфейса командной строкиUsing the CLI

Вы также можете обновить веб-службу с помощью интерфейса командной строки ML.You can also update a web service by using the ML CLI. В следующем примере демонстрируется регистрация новой модели и обновление веб-службы для использования новой модели.The following example demonstrates registering a new model and then updating a web service to use the new model:

az ml model register -n sklearn_mnist  --asset-path outputs/sklearn_mnist_model.pkl  --experiment-name myexperiment --output-metadata-file modelinfo.json
az ml service update -n myservice --model-metadata-file modelinfo.json

Совет

В этом примере документ JSON используется для передачи сведений о модели из команды регистрации в команду Update.In this example, a JSON document is used to pass the model information from the registration command into the update command.

Чтобы обновить службу для использования нового скрипта записи или среды, создайте файл конфигурации вывода и укажите его с помощью параметра ic.To update the service to use a new entry script or environment, create an inference configuration file and specify it with the ic parameter.

Дополнительные сведения см. в документации по AZ ML Service Update .For more information, see the az ml service update documentation.

Непрерывное развертывание моделейContinuously deploy models

Вы можете непрерывно развертывать модели с помощью расширения Машинное обучение для Azure DevOps.You can continuously deploy models by using the Machine Learning extension for Azure DevOps. Вы можете использовать расширение Машинное обучение для Azure DevOps, чтобы активировать конвейер развертывания при регистрации новой модели машинного обучения в Машинное обучение Azure рабочей области.You can use the Machine Learning extension for Azure DevOps to trigger a deployment pipeline when a new machine learning model is registered in an Azure Machine Learning workspace.

  1. Подпишитесь на Azure pipelines, что обеспечивает непрерывную интеграцию и доставку приложения на любую платформу или облако.Sign up for Azure Pipelines, which makes continuous integration and delivery of your application to any platform or cloud possible. (Обратите внимание, что Azure Pipelines не так же, как машинное обучение конвейеры).(Note that Azure Pipelines isn't the same as Machine Learning pipelines.)

  2. Создайте проект Azure DevOps.Create an Azure DevOps project.

  3. Установите расширение машинное обучение для Azure pipelines.Install the Machine Learning extension for Azure Pipelines.

  4. Используйте подключения к службам, чтобы настроить подключение субъекта-службы к рабочей области Машинное обучение Azure, чтобы получить доступ к артефактам.Use service connections to set up a service principal connection to your Azure Machine Learning workspace so you can access your artifacts. Последовательно выберите пункты Параметры проекта, подключения к службеи Azure Resource Manager:Go to project settings, select Service connections, and then select Azure Resource Manager:

    выберите Azure Resource ManagerSelect Azure Resource Manager

  5. В списке область уровня области выберите азуремлворкспацеи введите остальные значения:In the Scope level list, select AzureMLWorkspace, and then enter the rest of the values:

    Выбор Азуремлворкспаце

  6. Чтобы непрерывно развернуть модель машинного обучения с помощью Azure Pipelines, в разделе конвейеры выберите выпуск.To continuously deploy your machine learning model by using Azure Pipelines, under pipelines, select release. Добавьте новый артефакт, а затем выберите артефакт модели AzureML и созданное ранее подключение службы.Add a new artifact, and then select the AzureML Model artifact and the service connection that you created earlier. Выберите модель и версию для активации развертывания:Select the model and version to trigger a deployment:

    выбрать модель AzureMLSelect AzureML Model

  7. Включите триггер модели для артефакта модели.Enable the model trigger on your model artifact. При включении триггера каждый раз, когда указанная версия (то есть самая последняя версия) в этой модели регистрируется в рабочей области, инициируется конвейер выпуска Azure DevOps.When you turn on the trigger, every time the specified version (that is, the newest version) of that model is registered in your workspace, an Azure DevOps release pipeline is triggered.

    включения триггера моделиEnable the model trigger

Дополнительные примеры проектов и примеры см. в этих примерах репозиториев в GitHub:For more sample projects and examples, see these sample repos in GitHub:

Загрузка моделиDownload a model

Если вы хотите загрузить модель для использования в собственной среде выполнения, это можно сделать с помощью следующих команд SDK/CLI:If you want to download your model to use it in your own execution environment, you can do so with the following SDK / CLI commands:

Пакет SDK :SDK:

model_path = Model(ws,'mymodel').download()

CLI:CLI:

az ml model download --model-id mymodel:1 --target-dir model_folder

Образца Развертывание модели без кода(Preview) No-code model deployment

Развертывание модели без кода сейчас находится на этапе предварительной версии и поддерживает следующие платформы машинного обучения:No-code model deployment is currently in preview and supports the following machine learning frameworks:

Формат Саведмодел TensorflowTensorflow SavedModel format

Модели Tensorflow необходимо зарегистрировать в формате саведмодел для работы без развертывания модели кода.Tensorflow models need to be registered in SavedModel format to work with no-code model deployment.

Сведения о том, как создать Саведмодел, см. по этой ссылке .Please see this link for information on how to create a SavedModel.

from azureml.core import Model

model = Model.register(workspace=ws,
                       model_name='flowers',                        # Name of the registered model in your workspace.
                       model_path='./flowers_model',                # Local Tensorflow SavedModel folder to upload and register as a model.
                       model_framework=Model.Framework.TENSORFLOW,  # Framework used to create the model.
                       model_framework_version='1.14.0',            # Version of Tensorflow used to create the model.
                       description='Flowers model')

service_name = 'tensorflow-flower-service'
service = Model.deploy(ws, service_name, [model])

Модели ONNXONNX models

Регистрация и развертывание модели ONNX поддерживаются для любого графа вывода ONNX.ONNX model registration and deployment is supported for any ONNX inference graph. Этапы предварительной обработки и выполнения процессов в настоящее время не поддерживаются.Preprocess and postprocess steps are not currently supported.

Ниже приведен пример регистрации и развертывания модели MNIST ONNX.Here is an example of how to register and deploy an MNIST ONNX model:

from azureml.core import Model

model = Model.register(workspace=ws,
                       model_name='mnist-sample',                  # Name of the registered model in your workspace.
                       model_path='mnist-model.onnx',              # Local ONNX model to upload and register as a model.
                       model_framework=Model.Framework.ONNX ,      # Framework used to create the model.
                       model_framework_version='1.3',              # Version of ONNX used to create the model.
                       description='Onnx MNIST model')

service_name = 'onnx-mnist-service'
service = Model.deploy(ws, service_name, [model])

Модели scikit-learnScikit-learn models

Не поддерживается развертывание модели кода для всех встроенных типов моделей scikit-учиться.No code model deployment is supported for all built-in scikit-learn model types.

Ниже приведен пример регистрации и развертывания модели sklearn без дополнительного кода.Here is an example of how to register and deploy a sklearn model with no extra code:

from azureml.core import Model
from azureml.core.resource_configuration import ResourceConfiguration

model = Model.register(workspace=ws,
                       model_name='my-sklearn-model',                # Name of the registered model in your workspace.
                       model_path='./sklearn_regression_model.pkl',  # Local file to upload and register as a model.
                       model_framework=Model.Framework.SCIKITLEARN,  # Framework used to create the model.
                       model_framework_version='0.19.1',             # Version of scikit-learn used to create the model.
                       resource_configuration=ResourceConfiguration(cpu=1, memory_in_gb=0.5),
                       description='Ridge regression model to predict diabetes progression.',
                       tags={'area': 'diabetes', 'type': 'regression'})
                       
service_name = 'my-sklearn-service'
service = Model.deploy(ws, service_name, [model])

Примечание. Эти зависимости включены в готовый контейнер вывода sklearn:NOTE: These dependencies are included in the prebuilt sklearn inference container:

    - azureml-defaults
    - inference-schema[numpy-support]
    - scikit-learn
    - numpy

Модели пакетовPackage models

В некоторых случаях может потребоваться создать образ DOCKER без развертывания модели (например, если планируется развертывание в службе приложений Azure).In some cases, you might want to create a Docker image without deploying the model (if, for example, you plan to deploy to Azure App Service). Также можно загрузить образ и запустить его в локальной установке DOCKER.Or you might want to download the image and run it on a local Docker installation. Может даже потребоваться загрузить файлы, используемые для создания образа, проверить их, изменить и создать образ вручную.You might even want to download the files used to build the image, inspect them, modify them, and build the image manually.

Упаковка модели позволяет выполнять эти задачи.Model packaging enables you to do these things. Он упаковывает все ресурсы, необходимые для размещения модели в качестве веб-службы, и позволяет скачать полностью созданный образ DOCKER или файлы, необходимые для его создания.It packages all the assets needed to host a model as a web service and allows you to download either a fully built Docker image or the files needed to build one. Существует два способа использования упаковки модели.There are two ways to use model packaging:

Скачайте упакованную модель: Скачайте образ DOCKER, содержащий модель и другие файлы, необходимые для размещения его в качестве веб-службы.Download a packaged model: Download a Docker image that contains the model and other files needed to host it as a web service.

Создайте Dockerfile: Скачайте Dockerfile, модель, сценарий входа и другие ресурсы, необходимые для создания образа DOCKER.Generate a Dockerfile: Download the Dockerfile, model, entry script, and other assets needed to build a Docker image. Затем можно проверить файлы или внести изменения, прежде чем создавать образ локально.You can then inspect the files or make changes before you build the image locally.

Оба пакета можно использовать для получения образа локального DOCKER.Both packages can be used to get a local Docker image.

Совет

Создание пакета аналогично развертыванию модели.Creating a package is similar to deploying a model. Вы используете зарегистрированную модель и конфигурацию вывода.You use a registered model and an inference configuration.

Важно!

Чтобы загрузить полностью собранный образ или создать образ локально, необходимо установить DOCKER в среде разработки.To download a fully built image or build an image locally, you need to have Docker installed in your development environment.

Загрузка упакованной моделиDownload a packaged model

В следующем примере создается образ, который регистрируется в реестре контейнеров Azure для вашей рабочей области:The following example builds an image, which is registered in the Azure container registry for your workspace:

package = Model.package(ws, [model], inference_config)
package.wait_for_creation(show_output=True)

После создания пакета можно использовать package.pull() для извлечения образа в локальную среду DOCKER.After you create a package, you can use package.pull() to pull the image to your local Docker environment. Выходные данные этой команды будут отображать имя изображения.The output of this command will display the name of the image. Пример.For example:

Status: Downloaded newer image for myworkspacef78fd10.azurecr.io/package:20190822181338.Status: Downloaded newer image for myworkspacef78fd10.azurecr.io/package:20190822181338.

После загрузки модели используйте команду docker images, чтобы вывести список локальных образов:After you download the model, use the docker images command to list the local images:

REPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE
myworkspacef78fd10.azurecr.io/package    20190822181338      7ff48015d5bd        4 minutes ago       1.43GB

Чтобы запустить локальный контейнер на основе этого образа, используйте следующую команду для запуска именованного контейнера из оболочки или командной строки.To start a local container based on this image, use the following command to start a named container from the shell or command line. Замените <imageid> значение ИДЕНТИФИКАТОРом образа, возвращенным командой docker images.Replace the <imageid> value with the image ID returned by the docker images command.

docker run -p 6789:5001 --name mycontainer <imageid>

Эта команда запускает последнюю версию образа с именем myimage.This command starts the latest version of the image named myimage. Он сопоставляет локальный порт 6789 с портом в контейнере, прослушиваемом веб-службой (5001).It maps local port 6789 to the port in the container on which the web service is listening (5001). Он также назначает имя mycontainer контейнеру, что делает контейнер более легким для его завершения.It also assigns the name mycontainer to the container, which makes the container easier to stop. После запуска контейнера можно отправлять запросы в http://localhost:6789/score.After the container is started, you can submit requests to http://localhost:6789/score.

Создание Dockerfile и зависимостейGenerate a Dockerfile and dependencies

В следующем примере показано, как загрузить Dockerfile, модель и другие ресурсы, необходимые для создания образа локально.The following example shows how to download the Dockerfile, model, and other assets needed to build an image locally. Параметр generate_dockerfile=True указывает, что требуется, чтобы файлы, а не полностью построенные образы.The generate_dockerfile=True parameter indicates that you want the files, not a fully built image.

package = Model.package(ws, [model], inference_config, generate_dockerfile=True)
package.wait_for_creation(show_output=True)
# Download the package.
package.save("./imagefiles")
# Get the Azure container registry that the model/Dockerfile uses.
acr=package.get_container_registry()
print("Address:", acr.address)
print("Username:", acr.username)
print("Password:", acr.password)

Этот код скачивает файлы, необходимые для сборки образа, в каталог imagefiles.This code downloads the files needed to build the image to the imagefiles directory. Dockerfile, включаемые в сохраненные файлы, ссылаются на базовый образ, хранящийся в реестре контейнеров Azure.The Dockerfile included in the saved files references a base image stored in an Azure container registry. При создании образа в локальной установке DOCKER необходимо использовать адрес, имя пользователя и пароль для проверки подлинности в реестре.When you build the image on your local Docker installation, you need to use the address, user name, and password to authenticate to the registry. Выполните следующие действия, чтобы создать образ с помощью локальной установки docker:Use the following steps to build the image by using a local Docker installation:

  1. Чтобы проверить подлинность DOCKER с помощью реестра контейнеров Azure, из оболочки или сеанса командной строки используйте следующую команду.From a shell or command-line session, use the following command to authenticate Docker with the Azure container registry. Замените <address>, <username>и <password> значениями, полученными с помощью package.get_container_registry().Replace <address>, <username>, and <password> with the values retrieved by package.get_container_registry().

    docker login <address> -u <username> -p <password>
    
  2. Чтобы создать образ, используйте следующую команду.To build the image, use the following command. Замените <imagefiles> на путь к каталогу, в котором package.save() сохранить файлы.Replace <imagefiles> with the path of the directory where package.save() saved the files.

    docker build --tag myimage <imagefiles>
    

    Эта команда задает имя образа для myimage.This command sets the image name to myimage.

Чтобы убедиться, что образ построен, используйте команду docker images.To verify that the image is built, use the docker images command. Вы должны увидеть изображение myimage в списке:You should see the myimage image in the list:

REPOSITORY      TAG                 IMAGE ID            CREATED             SIZE
<none>          <none>              2d5ee0bf3b3b        49 seconds ago      1.43GB
myimage         latest              739f22498d64        3 minutes ago       1.43GB

Чтобы запустить новый контейнер на основе этого образа, используйте следующую команду:To start a new container based on this image, use the following command:

docker run -p 6789:5001 --name mycontainer myimage:latest

Эта команда запускает последнюю версию образа с именем myimage.This command starts the latest version of the image named myimage. Он сопоставляет локальный порт 6789 с портом в контейнере, прослушиваемом веб-службой (5001).It maps local port 6789 to the port in the container on which the web service is listening (5001). Он также назначает имя mycontainer контейнеру, что делает контейнер более легким для его завершения.It also assigns the name mycontainer to the container, which makes the container easier to stop. После запуска контейнера можно отправлять запросы в http://localhost:6789/score.After the container is started, you can submit requests to http://localhost:6789/score.

Пример клиента для тестирования локального контейнераExample client to test the local container

Следующий код является примером клиента Python, который можно использовать с контейнером:The following code is an example of a Python client that can be used with the container:

import requests
import json

# URL for the web service.
scoring_uri = 'http://localhost:6789/score'

# Two sets of data to score, so we get two results back.
data = {"data":
        [
            [ 1,2,3,4,5,6,7,8,9,10 ],
            [ 10,9,8,7,6,5,4,3,2,1 ]
        ]
        }
# Convert to JSON string.
input_data = json.dumps(data)

# Set the content type.
headers = {'Content-Type': 'application/json'}

# Make the request and display the response.
resp = requests.post(scoring_uri, input_data, headers=headers)
print(resp.text)

Примеры клиентов на других языках программирования см. в разделе Использование моделей, развернутых в качестве веб-служб.For example clients in other programming languages, see Consume models deployed as web services.

Останавливает контейнер DOCKERStop the Docker container

Чтобы прерывать контейнер, используйте следующую команду из другой оболочки или командной строки:To stop the container, use the following command from a different shell or command line:

docker kill mycontainer

Очистка ресурсовClean up 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().

Дальнейшие действияNext steps