Развертывание моделей для оценки в пакетных конечных точках

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение машинного обучения Azure CLI версии 2 (current)Python SDK azure-ai-ml версии 2 (current)

Конечные точки пакетной службы предоставляют удобный способ развертывания моделей, выполняющих вывод по большим объемам данных. Эти конечные точки упрощают процесс размещения моделей для пакетной оценки, чтобы сосредоточиться на машинном обучении, а не на инфраструктуре.

Используйте пакетные конечные точки для развертывания модели, когда:

  • У вас есть дорогие модели, требующие длительного времени для вывода.
  • Необходимо выполнить вывод больших объемов данных, распределенных в нескольких файлах.
  • У вас нет требований к низкой задержке.
  • Вы можете воспользоваться преимуществами параллелизации.

В этой статье вы используете пакетную конечную точку для развертывания модели машинного обучения, которая решает классическую проблему распознавания цифр MNIST (Измененный Национальный институт стандартов и технологий). После этого развернутая модель выполняет пакетное выводение над большими объемами данных— в этом случае файлы изображений. Начните с создания пакетного развертывания модели, созданной с помощью Torch. Это развертывание становится по умолчанию в конечной точке. Позже вы создадите второе развертывание режима, созданного с помощью TensorFlow (Keras), протестируйте второе развертывание и установите его в качестве развертывания по умолчанию конечной точки.

Чтобы выполнить команды в этой статье локально, ознакомьтесь с примерами кода и файлами, необходимыми для выполнения команд в этой статье, см . раздел "Клонировать примеры репозитория ". Примеры кода и файлы содержатся в репозитории azureml-examples .

Необходимые компоненты

Прежде чем выполнить действия, описанные в этой статье, убедитесь, что у вас есть следующие предварительные требования:

Клонирование репозитория примеров

Пример в этой статье основан на примерах кода, содержащихся в репозитории azureml-examples . Чтобы выполнить команды локально без необходимости копирования и вставки YAML и других файлов, сначала клонируйте репозиторий, а затем измените каталоги в папку:

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli/endpoints/batch/deploy-models/mnist-classifier

Подготовка системы

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

Сначала подключитесь к рабочей области Машинное обучение Azure, в которой вы будете работать.

Если вы еще не задали параметры по умолчанию для Azure CLI, сохраните их. Чтобы избежать передачи значений для подписки, рабочей области, группы ресурсов и расположения несколько раз, выполните следующий код:

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

Создание вычислений

Конечные точки пакетной службы выполняются в вычислительных кластерах и поддерживают как Машинное обучение Azure вычислительные кластеры (AmlCompute), так и кластеры Kubernetes. Кластеры являются общим ресурсом, поэтому один кластер может размещать один или несколько пакетных развертываний (а также другие рабочие нагрузки, если это необходимо).

Создайте вычисление с именем batch-cluster, как показано в следующем коде. Вы можете настроить по мере необходимости и ссылаться на вычислительные ресурсы.azureml:<your-compute-name>

az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5

Примечание.

Вы не взимаете плату за вычислительные ресурсы на этом этапе, так как кластер остается на 0 узлах до вызова конечной точки пакетной службы и отправки задания пакетной оценки. Дополнительные сведения о затратах на вычислительные ресурсы см. в разделе "Управление и оптимизация затрат для AmlCompute".

Создание пакетной конечной точки

Конечная точка пакетной службы — это конечная точка HTTPS, которую клиенты могут вызывать для запуска задания оценки пакетной службы. Пакетное задание оценки — это задание , которое оценивает несколько входных данных. Пакетное развертывание — это набор вычислительных ресурсов, в котором размещается модель, которая выполняет фактическую оценку пакетной службы (или вывод пакетной службы). У одной пакетной конечной точки может быть несколько развертываний пакетной службы. Дополнительные сведения о конечных точках пакетной службы см. в статье "Что такое конечные точки пакетной службы?".

Совет

Одно из пакетных развертываний служит развертыванием по умолчанию для конечной точки. При вызове конечной точки развертывание по умолчанию выполняет фактическую оценку пакетной службы. Дополнительные сведения о конечных точках и развертываниях пакетной службы см. в разделе "Конечные точки пакетной службы" и "Пакетное развертывание".

  1. Назовите конечную точку. Имя конечной точки должно быть уникальным в пределах региона Azure, так как имя входит в универсальный код ресурса (URI) конечной точки. Например, в ней может быть только одна конечная точка пакетной службы с именем mybatchendpointwestus2.

    Поместите имя конечной точки в переменную, чтобы можно было легко ссылаться на нее позже.

    ENDPOINT_NAME="mnist-batch"
    
  2. Настройка конечной точки пакетной службы

    Следующий ФАЙЛ YAML определяет конечную точку пакетной службы. Этот файл можно использовать с командой CLI для создания пакетной конечной точки.

    endpoint.yml

    $schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json
    name: mnist-batch
    description: A batch endpoint for scoring images from the MNIST dataset.
    tags:
      type: deep-learning
    

    В следующей таблице описываются ключевые свойства конечной точки. Полная схема YAML для пакетной конечной точки приведена в разделе Схема YAML для пакетной конечной точки CLI (версия 2).

    Ключ. Description
    name Имя учетной записи пакетной конечной точки. Должно быть уникальным на уровне региона Azure.
    description Описание конечной точки пакетной службы. Это необязательное свойство.
    tags Теги для включения в конечную точку. Это необязательное свойство.
  3. Создание конечной точки:

    Выполните следующий код, чтобы создать конечную точку пакетной службы.

    az ml batch-endpoint create --file endpoint.yml  --name $ENDPOINT_NAME
    

Создание развертывания пакетной службы

Развертывание модели — это набор ресурсов, необходимых для размещения модели, которая выполняет фактическое вывод. Чтобы создать развертывание пакетной модели, вам потребуется следующее:

  • Зарегистрированная модель в рабочей области
  • Код для оценки модели
  • Среда с установленными зависимостями модели
  • Предварительно созданные параметры вычислений и ресурсов
  1. Начните с регистрации модели для развертывания — модель Факела для проблемы с распознаванием популярных цифр (MNIST). Пакетные развертывания могут развертывать только модели, зарегистрированные в рабочей области. Этот шаг можно пропустить, если модель, которую вы хотите развернуть, уже зарегистрирована.

    Совет

    Модели связаны с развертыванием, а не с конечной точкой. Это означает, что одна конечная точка может обслуживать разные модели (или версии модели) в одной конечной точке, при условии, что различные модели (или версии модели) развертываются в разных развертываниях.

    MODEL_NAME='mnist-classifier-torch'
    az ml model create --name $MODEL_NAME --type "custom_model" --path "deployment-torch/model"
    
  2. Теперь пришло время создать скрипт оценки. Для пакетных развертываний требуется скрипт оценки, указывающий, как должна выполняться данная модель и как должны обрабатываться входные данные. Конечные точки пакетной службы поддерживают скрипты, созданные в Python. В этом случае вы развертываете модель, которая считывает файлы изображений, представляющие цифры и выводит соответствующую цифру. Скрипт оценки выглядит следующим образом:

    Примечание.

    Для моделей MLflow Машинное обучение Azure автоматически создает скрипт оценки, поэтому его не требуется. Если модель является моделью MLflow, можно пропустить этот шаг. Дополнительные сведения о работе конечных точек пакетной службы с моделями MLflow см. в статье об использовании моделей MLflow в пакетных развертываниях.

    Предупреждение

    Если вы развертываете модель автоматического машинного обучения (AutoML) в конечной точке пакетной службы, обратите внимание, что скрипт оценки, который AutoML предоставляет только для сетевых конечных точек и не предназначен для пакетного выполнения. Сведения о создании скрипта оценки для пакетного развертывания см. в статье "Создание скриптов оценки для пакетных развертываний".

    deployment-torch/code/batch_driver.py

    import os
    import pandas as pd
    import torch
    import torchvision
    import glob
    from os.path import basename
    from mnist_classifier import MnistClassifier
    from typing import List
    
    
    def init():
        global model
        global device
    
        # AZUREML_MODEL_DIR is an environment variable created during deployment
        # It is the path to the model folder
        model_path = os.environ["AZUREML_MODEL_DIR"]
        model_file = glob.glob(f"{model_path}/*/*.pt")[-1]
    
        model = MnistClassifier()
        model.load_state_dict(torch.load(model_file))
        model.eval()
    
        device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    
    
    def run(mini_batch: List[str]) -> pd.DataFrame:
        print(f"Executing run method over batch of {len(mini_batch)} files.")
    
        results = []
        with torch.no_grad():
            for image_path in mini_batch:
                image_data = torchvision.io.read_image(image_path).float()
                batch_data = image_data.expand(1, -1, -1, -1)
                input = batch_data.to(device)
    
                # perform inference
                predict_logits = model(input)
    
                # Compute probabilities, classes and labels
                predictions = torch.nn.Softmax(dim=-1)(predict_logits)
                predicted_prob, predicted_class = torch.max(predictions, axis=-1)
    
                results.append(
                    {
                        "file": basename(image_path),
                        "class": predicted_class.numpy()[0],
                        "probability": predicted_prob.numpy()[0],
                    }
                )
    
        return pd.DataFrame(results)
    
  3. Создайте среду, в которой будет выполняться пакетное развертывание. Среда должна включать пакеты azureml-core и azureml-dataset-runtime[fuse], которые требуются конечными точками пакетной службы, а также любые зависимости, необходимые для выполнения кода. В этом случае зависимости были записаны в conda.yaml файле:

    deployment-torch/environment/conda.yaml

    name: mnist-env
    channels:
      - conda-forge
    dependencies:
      - python=3.8.5
      - pip<22.0
      - pip:
        - torch==1.13.0
        - torchvision==0.14.0
        - pytorch-lightning
        - pandas
        - azureml-core
        - azureml-dataset-runtime[fuse]
    

    Внимание

    Пакеты azureml-core и azureml-dataset-runtime[fuse] необходимы для пакетных развертываний и должны быть включены в зависимости среды.

    Укажите среду следующим образом:

    Определение среды будет включено в определение развертывания как анонимная среда. В развертывании вы увидите следующие строки:

    environment:
      name: batch-torch-py38
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    

    Предупреждение

    Курируемые среды не поддерживаются в пакетных развертываниях. Необходимо указать собственную среду. Для упрощения процесса всегда можно использовать базовый образ курированной среды.

  4. Создание определения развертывания

    deployment-torch/deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json
    name: mnist-torch-dpl
    description: A deployment using Torch to solve the MNIST classification dataset.
    endpoint_name: mnist-batch
    type: model
    model:
      name: mnist-classifier-torch
      path: model
    code_configuration:
      code: code
      scoring_script: batch_driver.py
    environment:
      name: batch-torch-py38
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    compute: azureml:batch-cluster
    resources:
      instance_count: 1
    settings:
      max_concurrency_per_instance: 2
      mini_batch_size: 10
      output_action: append_row
      output_file_name: predictions.csv
      retry_settings:
        max_retries: 3
        timeout: 30
      error_threshold: -1
      logging_level: info
    

    В следующей таблице описываются ключевые свойства пакетного развертывания. Полная схема YAML для развертывания пакетной службы приведена в разделе Схема YAML для развертывания пакетной службы CLI (версия 2).

    Ключ. Description
    name Имя развертывания.
    endpoint_name Имя конечной точки для создания развертывания.
    model Модель, используемая для пакетной оценки. В примере определяется встроенная модель с использованием path . Это определение позволяет автоматически отправлять и регистрировать файлы модели с автоматически созданным именем и версией. Дополнительные параметры см. в схеме модели. В сценариях для рабочей среды рекомендуется создавать модель отдельно и ссылаться на нее здесь. Чтобы сослаться на существующую модель, используйте синтаксис azureml:<model-name>:<model-version>.
    code_configuration.code Локальный каталог, содержащий весь исходный код Python для оценки модели.
    code_configuration.scoring_script Файл Python в каталоге code_configuration.code . В этом файле должны быть функции init() и run(). Используйте функцию init() для любой дорогостоящей или обычной подготовки (например, для загрузки модели в памяти). init() будет вызываться только один раз в начале процесса. Метод run(mini_batch) позволяет оценить каждую запись; значение mini_batch представляет собой список путей к файлам. Функция run() должна возвращать объект DataFrame Pandas или массив. Каждый возвращаемый элемент обозначает один успешный запуск входного элемента в mini_batch. Дополнительные сведения о создании скрипта оценки см. в разделе "Общие сведения о скрипте оценки".
    environment Среда для оценки модели. В примере определяется встроенная среда с использованием conda_file и image. Зависимости conda_file будут установлены поверх image. Среда будет автоматически зарегистрирована с автоматически сформированными именем и версией. Дополнительные параметры см. в схеме среды. В сценариях для рабочей среды рекомендуется создавать среду отдельно и ссылаться на нее здесь. Чтобы сослаться на существующую среду, используйте синтаксис azureml:<environment-name>:<environment-version>.
    compute Вычисление для выполнения оценки пакетной службы. В примере используется batch-cluster созданный в начале и ссылается на него с помощью синтаксиса azureml:<compute-name> .
    resources.instance_count Количество экземпляров, используемых для каждого задания оценки пакетной службы.
    settings.max_concurrency_per_instance [Необязательно]: Максимальное количество параллельных запусков scoring_script на экземпляр.
    settings.mini_batch_size [Необязательно]: число файлов, которые scoring_script может обрабатывать в одном вызове run().
    settings.output_action [Необязательно]: Как выходные данные должны быть упорядочены в выходном файле. append_row объединит все run() возвращенные выходные результаты в один файл с именем output_file_name. summary_only не будет объединять выходные результаты и будет вычислять error_thresholdтолько.
    settings.output_file_name [Необязательно]: Имя выходного файла оценки пакетной службы для append_rowoutput_action.
    settings.retry_settings.max_retries [Необязательно]: Максимальное количество попыток при сбое scoring_scriptrun().
    settings.retry_settings.timeout [Необязательно]: Время ожидания в секундах для scoring_scriptrun() для оценки мини-пакета.
    settings.error_threshold [Необязательно]: Количество сбоев оценки входных файлов, которое следует игнорировать. Если общее количество ошибок для всего объема входных данных превысит это значение, задание по оценке пакетной службы будет прервано. В примере используется -1, что означает, что любое количество ошибок разрешено без завершения задания пакетной оценки.
    settings.logging_level [Необязательно]: уровень детализации журнала. Значения уровня детализации в порядке увеличения: WARNING, INFO и DEBUG.
    settings.environment_variables [Необязательно] Словарь пар "имя-значение среды", которые задаются для каждого задания оценки пакетной оценки.
  5. Создание развертывания:

    Выполните следующий код, чтобы создать пакетное развертывание в конечной точке пакетной службы и задать его как развертывание по умолчанию.

    az ml batch-deployment create --file deployment-torch/deployment.yml --endpoint-name $ENDPOINT_NAME --set-default
    

    Совет

    Параметр --set-default задает вновь созданное развертывание в качестве развертывания конечной точки по умолчанию. Это удобный способ создания нового развертывания конечной точки по умолчанию, особенно для первого создания развертывания. Для рабочих сценариев рекомендуется создать новое развертывание, не задав его в качестве значения по умолчанию. Убедитесь, что развертывание работает должным образом, а затем обновите развертывание по умолчанию позже. Дополнительные сведения о реализации этого процесса см. в разделе "Развертывание новой модели ".

  6. Проверьте сведения о конечной точке пакетной службы и развертывании.

    Используется show для проверка сведений о конечной точке и развертывании. Чтобы проверить развертывание пакетной службы, выполните следующий код:

    DEPLOYMENT_NAME="mnist-torch-dpl"
    az ml batch-deployment show --name $DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME
    

Запуск конечных точек пакетной службы и результатов доступа

При вызове пакетной конечной точки запускается задание пакетной оценки. Задание name возвращается из ответа вызова и может использоваться для отслеживания хода выполнения пакетной оценки. При выполнении моделей оценки в пакетных конечных точках необходимо указать путь к входным данным, чтобы конечные точки могли найти данные, которые нужно оценить. В следующем примере показано, как запустить новое задание по образцу данных набора данных MNIST, хранящегося в учетной записи служба хранилища Azure.

Вы можете запускать и вызывать пакетную конечную точку с помощью Azure CLI, Машинное обучение Azure sdk или конечных точек REST. Дополнительные сведения об этих параметрах см. в разделе "Создание заданий" и входных данных для конечных точек пакетной службы.

Примечание.

Как работает параллелизация?

Пакетные развертывания распределяют работу на уровне файлов, что означает, что папка, содержащая 100 файлов с мини-пакетами из 10 файлов, создаст 10 пакетов из 10 файлов. Обратите внимание, что это происходит независимо от размера участвующих файлов. Если файлы слишком большие для обработки в больших мини-пакетах, мы рекомендуем разделить файлы на небольшие файлы, чтобы обеспечить более высокий уровень параллелизма или уменьшить количество файлов на мини-пакет. В настоящее время пакетные развертывания не могут учитывать изменения в распределении размера файла.

JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --input-type uri_folder --query name -o tsv)

Конечные точки пакетной службы поддерживают чтение файлов или папок, расположенных в разных расположениях. Дополнительные сведения о поддерживаемых типах и их указании см. в статье "Доступ к данным из заданий пакетных конечных точек".

Мониторинг хода выполнения пакетного задания

Задание пакетной оценки обычно занимает некоторое время, необходимое для обработки всего набора входных данных.

Следующий код проверка состояние задания и выводит ссылку на Студия машинного обучения Azure для получения дополнительных сведений.

az ml job show -n $JOB_NAME --web

Проверка результатов пакетной оценки

Выходные данные задания хранятся в облачном хранилище либо в хранилище BLOB-объектов рабочей области по умолчанию, либо в указанном хранилище. Сведения об изменении значений по умолчанию см. в разделе "Настройка расположения выходных данных". Следующие шаги позволяют просматривать результаты оценки в служба хранилища Azure Обозреватель при завершении задания:

  1. Выполните следующий код, чтобы открыть задание оценки пакетной службы в Студия машинного обучения Azure. Ссылка на студию содержится в ответе invoke в виде значения interactionEndpoints.Studio.endpoint.

    az ml job show -n $JOB_NAME --web
    
  2. На графике задания выберите шаг batchscoring.

  3. Перейдите на вкладку Выходные данные + журналы и выберите Показать выходные данные.

  4. Из выходных данных выберите значок, чтобы открыть Обозреватель службы хранилища.

    Снимок экрана Студии, показывающий расположение выходных данных.

    Результаты оценки в обозревателе службы хранилища похожи на следующий образец страницы:

    Снимок экрана: выходные данные оценки.

Настройка расположения вывода

По умолчанию результаты пакетной оценки хранятся в хранилище BLOB-объектов рабочей области по умолчанию в папке с именем задания (идентификатор GUID, созданный системой). Вы можете настроить место хранения выходных данных оценки пакетной службы при вызове пакетной конечной точки.

Используйте output-path для настройки любой папки в зарегистрированном хранилище данных Машинного обучения Azure. Синтаксис для --output-path такой же, как --input при указании папки, т. е. azureml://datastores/<datastore-name>/paths/<path-on-datastore>/. С помощью --set output_file_name=<your-file-name> укажите новое имя выходного файла.

OUTPUT_FILE_NAME=predictions_`echo $RANDOM`.csv
OUTPUT_PATH="azureml://datastores/workspaceblobstore/paths/$ENDPOINT_NAME"

JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --output-path $OUTPUT_PATH --set output_file_name=$OUTPUT_FILE_NAME --query name -o tsv)

Предупреждение

Используйте новое (уникальное) расположение выходных данных. Если такой выходной файл существует, задание пакетной оценки завершится ошибкой.

Внимание

В отличие от входных данных, выходные данные могут храниться только в Машинное обучение Azure хранилищах данных, которые выполняются в учетных записях хранения BLOB-объектов.

Перезапись конфигурации развертывания для каждого задания

При вызове пакетной конечной точки некоторые параметры можно перезаписать, чтобы лучше использовать вычислительные ресурсы и повысить производительность. Следующие параметры можно настроить на основе каждого задания:

  • Количество экземпляров: используйте этот параметр для перезаписи количества экземпляров для запроса из вычислительного кластера. Например, для больших объемов входных данных может потребоваться больше экземпляров для ускорения обработки до завершения оценки пакетной службы.
  • Мини-пакетный размер: используйте этот параметр для перезаписи количества файлов для включения в каждый мини-пакет. Количество мини-пакетов определяется общим количеством входных файлов и мини-пакетным размером. Меньший мини-пакетный размер создает больше мини-пакетов. Мини-пакеты можно запускать параллельно, но при этом могут возникнуть дополнительные затраты на планирование и вызов.
  • Другие параметры, такие как максимальные повторные попытки, время ожидания и порог ошибки, могут быть перезаписаны. Эти параметры могут повлиять на комплексное время оценки пакетной службы для разных рабочих нагрузок.
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --mini-batch-size 20 --instance-count 5 --query name -o tsv)

Добавление развертываний в конечную точку

После создания пакетной конечной точки с развертыванием можно продолжить уточнение модели и добавить новые развертывания. Конечные точки пакетной службы будут продолжать обслуживать развертывание по умолчанию при разработке и развертывании новых моделей в той же конечной точке. Развертывания не влияют друг на друга.

В этом примере вы добавите второе развертывание, которое использует модель, созданную с помощью Keras и TensorFlow , для решения той же проблемы MNIST.

Добавление второго развертывания

  1. Создайте среду, в которой будет выполняться пакетное развертывание. Включите в среду любую зависимость, требуемую для выполнения кода. Кроме того, необходимо добавить библиотеку azureml-core, так как она необходима для работы пакетных развертываний. В следующем определении среды есть необходимые библиотеки для запуска модели с TensorFlow.

    Определение среды включается в определение развертывания как анонимная среда.

    environment:
      name: batch-tensorflow-py38
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    

    Используемый файл conda выглядит следующим образом:

    deployment-keras/environment/conda.yaml

    name: tensorflow-env
    channels:
      - conda-forge
    dependencies:
      - python=3.8.5
      - pip
      - pip:
        - pandas
        - tensorflow
        - pillow
        - azureml-core
        - azureml-dataset-runtime[fuse]
    
  2. Создайте скрипт оценки для модели:

    deployment-keras/code/batch_driver.py

    import os
    import numpy as np
    import pandas as pd
    import tensorflow as tf
    from typing import List
    from os.path import basename
    from PIL import Image
    from tensorflow.keras.models import load_model
    
    
    def init():
        global model
    
        # AZUREML_MODEL_DIR is an environment variable created during deployment
        model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model")
    
        # load the model
        model = load_model(model_path)
    
    
    def run(mini_batch: List[str]) -> pd.DataFrame:
        print(f"Executing run method over batch of {len(mini_batch)} files.")
    
        results = []
        for image_path in mini_batch:
            data = Image.open(image_path)
            data = np.array(data)
            data_batch = tf.expand_dims(data, axis=0)
    
            # perform inference
            pred = model.predict(data_batch)
    
            # Compute probabilities, classes and labels
            pred_prob = tf.math.reduce_max(tf.math.softmax(pred, axis=-1)).numpy()
            pred_class = tf.math.argmax(pred, axis=-1).numpy()
    
            results.append(
                {
                    "file": basename(image_path),
                    "class": pred_class[0],
                    "probability": pred_prob,
                }
            )
    
        return pd.DataFrame(results)
    
  3. Создание определения развертывания

    deployment-keras/deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json
    name: mnist-keras-dpl
    description: A deployment using Keras with TensorFlow to solve the MNIST classification dataset.
    endpoint_name: mnist-batch
    type: model
    model: 
      name: mnist-classifier-keras
      path: model
    code_configuration:
      code: code
      scoring_script: batch_driver.py
    environment:
      name: batch-tensorflow-py38
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    compute: azureml:batch-cluster
    resources:
      instance_count: 1
    settings:
      max_concurrency_per_instance: 2
      mini_batch_size: 10
      output_action: append_row
      output_file_name: predictions.csv
    
  4. Создание развертывания:

    Выполните следующий код, чтобы создать пакетное развертывание в конечной точке пакетной службы и задать его как развертывание по умолчанию.

    az ml batch-deployment create --file deployment-keras/deployment.yml --endpoint-name $ENDPOINT_NAME
    

    Совет

    В --set-default этом случае параметр отсутствует. Для рабочих сценариев рекомендуется создать новое развертывание, не задав его в качестве значения по умолчанию. Затем проверьте его и обновите развертывание по умолчанию позже.

Тестирование развертывания пакета, не используемое по умолчанию

Чтобы протестировать новое развертывание, отличное от по умолчанию, необходимо знать имя развертывания, которое требуется запустить.

DEPLOYMENT_NAME="mnist-keras-dpl"
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --deployment-name $DEPLOYMENT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --input-type uri_folder --query name -o tsv)

Уведомление --deployment-name используется для указания развертывания для выполнения. Этот параметр позволяет выполнять invoke развертывание, отличное от по умолчанию, без обновления развертывания пакетной конечной точки по умолчанию.

Обновление развертывания пакетной службы по умолчанию

Хотя вы можете вызвать определенное развертывание внутри конечной точки, обычно требуется вызвать саму конечную точку и разрешить конечной точке решить, какое развертывание следует использовать — развертывание по умолчанию. Вы можете изменить развертывание по умолчанию (и, следовательно, изменить модель, обслуживающую развертывание), не изменив контракт с пользователем, вызывающим конечную точку. Используйте следующий код для обновления развертывания по умолчанию:

az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME

Удаление пакетной конечной точки и развертывания

Если вы не будете использовать старое пакетное развертывание, удалите его, выполнив следующий код. --yes используется для подтверждения удаления.

az ml batch-deployment delete --name mnist-torch-dpl --endpoint-name $ENDPOINT_NAME --yes

Выполните следующий код, чтобы удалить конечную точку пакетной службы и все его базовые развертывания. Задания оценки пакетной службы не будут удалены.

az ml batch-endpoint delete --name $ENDPOINT_NAME --yes