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

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

Перед вызовом конечной точки

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

  • У вас есть разрешения на запуск развертывания пакетной конечной точки. Роли Специалист по обработке и анализу данных, участника и владельца AzureML можно использовать для запуска развертывания. Чтобы определения пользовательских ролей считывали авторизацию на конечных точках пакетной службы, чтобы узнать необходимые разрешения.

  • У вас есть действительный маркер идентификатора Microsoft Entra, представляющий субъект безопасности для вызова конечной точки. Этот субъект может быть субъектом-пользователем или субъектом-службой. В любом случае после вызова конечной точки задание пакетного развертывания создается под удостоверением, связанным с маркером. Для тестирования можно использовать собственные учетные данные для вызова, как упоминание ниже.

    Используйте Azure CLI для входа с помощью интерактивной проверки подлинности или кода устройства:

    az login
    

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

  • Вычислительный кластер , в котором развернута конечная точка, имеет доступ для чтения входных данных.

    Совет

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

Основы создания заданий

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

invoke Используйте операцию в конечных точках пакетной службы:

az ml batch-endpoint invoke --name $ENDPOINT_NAME \
                            --input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data

Вызов определенного развертывания

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

Используйте аргумент --deployment-name или -d укажите имя развертывания:

az ml batch-endpoint invoke --name $ENDPOINT_NAME \
                            --deployment-name $DEPLOYMENT_NAME \
                            --input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data

Настройка свойств задания

Вы можете настроить некоторые свойства в созданном задании во время вызова.

Примечание.

Настройка свойств задания доступна только в пакетных конечных точках с развертываниями компонентов конвейера к моменту.

Настройка имени эксперимента

Используйте аргумент --experiment-name , чтобы указать имя эксперимента:

az ml batch-endpoint invoke --name $ENDPOINT_NAME \
                            --experiment-name "my-batch-job-experiment" \
                            --input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data

Общие сведения о входных и выходных данных

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

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

Конечные точки пакетной службы поддерживают два типа входных данных:

  • Входные данные, которые указывают на определенное расположение хранилища или Машинное обучение Azure ресурс.
  • Литеральные входные данные, которые являются литеральными значениями (например, числами или строками), которые необходимо передать в задание.

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

В следующей таблице перечислены входные и выходные данные для пакетных развертываний:

Тип развертывания Число входных данных Поддерживаемые типы входных данных Число выходных данных Поддерживаемые типы выходных данных
Развертывание модели 1 Входные данные 1 Выходные данные
Развертывание компонента конвейера [0.N] Входные данные и литеральные входные данные [0.N] Выходные данные

Совет

Входные и выходные данные всегда именуются. Эти имена служат ключами для их идентификации и передачи фактического значения во время вызова. Для развертываний моделей, так как они всегда требуют одного входного и выходного данных, имя игнорируется во время вызова. Можно назначить имя, которое лучше всего описывает вариант использования, например "sales_estimation".

Входные данные

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

Конечные точки пакетной службы поддерживают чтение файлов, расположенных в следующих вариантах хранения:

  • Машинное обучение Azure ресурсы данных, включая папку (uri_folder) и файл (uri_file).
  • Машинное обучение Azure хранилища данных, включая Хранилище BLOB-объектов Azure, Data Lake Storage 1-го поколения Azure и Azure Data Lake Storage 2-го поколения.
  • учетные записи служба хранилища Azure, включая Data Lake Storage 1-го поколения Azure, Azure Data Lake Storage 2-го поколения и Хранилище BLOB-объектов Azure.
  • Локальные папки и файлы данных (Машинное обучение Azure CLI или пакет SDK Машинное обучение Azure для Python). Однако эта операция приводит к отправке локальных данных в хранилище данных по умолчанию Машинное обучение Azure хранилища данных рабочей области, над которым вы работаете.

Внимание

Уведомление об отмене: наборы данных типа FileDataset (V1) устарели и будут прекращены в будущем. Существующие конечные точки пакетной службы, основанные на этой функции, будут работать, но конечные точки пакетной службы, созданные с помощью GA CLIv2 (2.4.0 и более поздней версии) или REST API GA (2022-05-01 и более поздней версии) не поддерживают набор данных V1.

Литеральные входные данные

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

  • string
  • boolean
  • float
  • integer

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

Наборы выходных данных

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

Внимание

Конечные точки пакетной службы поддерживают только запись выходных данных в Хранилище BLOB-объектов Azure хранилищах данных. Если необходимо записать в учетную запись хранения с включенными иерархическими пространствами имен (также известной как Azure Datalake 2-го поколения или ADLS 2-го поколения), обратите внимание, что такая служба хранения может быть зарегистрирована в качестве хранилища данных Хранилище BLOB-объектов Azure, так как службы полностью совместимы. Таким образом можно записывать выходные данные из пакетных конечных точек в ADLS 2-го поколения.

Создание заданий с входными данными

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

Входные данные из ресурса данных

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

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

Ресурсы данных типа Table (MLTable) в настоящее время не поддерживаются.

  1. Сначала создайте ресурс данных. Этот ресурс данных состоит из папки с несколькими CSV-файлами, которые будут обрабатываться параллельно с помощью пакетных конечных точек. Этот шаг можно пропустить, если данные уже зарегистрированы в качестве ресурса данных.

    Создание определения ресурса данных в YAML:

    heart-dataset-unlabeled.yml

    $schema: https://azuremlschemas.azureedge.net/latest/data.schema.json
    name: heart-dataset-unlabeled
    description: An unlabeled dataset for heart classification.
    type: uri_folder
    path: heart-classifier-mlflow/data
    

    Затем создайте ресурс данных:

    az ml data create -f heart-dataset-unlabeled.yml
    
  2. Создайте входные данные или запрос:

    DATASET_ID=$(az ml data show -n heart-dataset-unlabeled --label latest | jq -r .id)
    

    Примечание.

    Идентификатор ресурсов данных будет выглядеть следующим /subscriptions/<subscription>/resourcegroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/data/<data-asset>/versions/<version>образом. Можно также использовать azureml:/<datasset_name>@latest в качестве способа указания входных данных.

  3. Запустите конечную точку:

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

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$DATASET_ID
    

    Для конечной точки, которая служит развертыванием модели, можно использовать --input аргумент для указания входных данных, так как для развертывания модели всегда требуется только один вход данных.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $DATASET_ID
    

    Аргумент --set , как правило, создает длинные команды при указании нескольких входных данных. В таких случаях поместите входные данные в YAML файл и используйте --file для указания входных данных, необходимых для вызова конечной точки.

    inputs.yml

    inputs:
      heart_dataset: azureml:/<datasset_name>@latest
    
    az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
    

Входные данные из хранилищ данных

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

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

    DATASTORE_ID=$(az ml datastore show -n workspaceblobstore | jq -r '.id')
    

    Примечание.

    Идентификатор хранилища данных будет выглядеть следующим /subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/datastores/<data-store>образом.

    Совет

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

  2. Необходимо передать некоторые примеры данных в хранилище данных. В этом примере предполагается, что вы уже отправили образец данных, включенных в репозиторий в папке в папке sdk/python/endpoints/batch/deploy-models/heart-classifier-mlflow/dataheart-disease-uci-unlabeled в учетной записи хранения BLOB-объектов. Убедитесь, что вы сделали это, прежде чем двигаться вперед.

  3. Создайте входные данные или запрос:

    Поместите путь к файлу в следующую переменную:

    DATA_PATH="heart-disease-uci-unlabeled"
    INPUT_PATH="$DATASTORE_ID/paths/$DATA_PATH"
    

    Примечание.

    Узнайте, как путь paths добавляется к идентификатору ресурса хранилища данных, чтобы указать, что ниже приведен путь внутри него.

    Совет

    Можно также использовать azureml://datastores/<data-store>/paths/<data-path> в качестве способа указания входных данных.

  4. Запустите конечную точку:

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

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$INPUT_PATH
    

    Для конечной точки, которая служит развертыванием модели, можно использовать --input аргумент для указания входных данных, так как для развертывания модели всегда требуется только один вход данных.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $INPUT_PATH --input-type uri_folder
    

    Аргумент --set , как правило, создает длинные команды при указании нескольких входных данных. В таких случаях поместите входные данные в YAML файл и используйте --file для указания входных данных, необходимых для вызова конечной точки.

    inputs.yml

    inputs:
      heart_dataset:
        type: uri_folder
        path: azureml://datastores/<data-store>/paths/<data-path>
    
    az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
    

    Если данные являются файлом, используйте uri_file вместо него тип.

Входные данные из учетных записей служба хранилища Azure

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

Примечание.

Ознакомьтесь с разделом о настройке вычислительных кластеров для доступа к данным, чтобы узнать больше о дополнительной конфигурации, необходимой для успешного чтения данных из accoutns хранилища.

  1. Создайте входные данные или запрос:

    INPUT_DATA = "https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data"
    

    Если данные являются файлом:

    INPUT_DATA = "https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data/heart.csv"
    
  2. Запустите конечную точку:

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

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.type="uri_folder" inputs.heart_dataset.path=$INPUT_DATA
    

    Для конечной точки, которая служит развертыванием модели, можно использовать --input аргумент для указания входных данных, так как для развертывания модели всегда требуется только один вход данных.

    az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $INPUT_DATA --input-type uri_folder
    

    Аргумент --set , как правило, создает длинные команды при указании нескольких входных данных. В таких случаях поместите входные данные в YAML файл и используйте --file для указания входных данных, необходимых для вызова конечной точки.

    inputs.yml

    inputs:
      heart_dataset:
        type: uri_folder
        path: https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data
    
    az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
    

    Если данные являются файлом, используйте uri_file вместо него тип.

Создание заданий с помощью литеральных входных данных

Развертывания компонентов конвейера могут принимать литеральные входные данные. В следующем примере показано, как указать входные данные с именем score_modeтипа stringс значением append:

Поместите входные данные в файл и используйте --file для указания входных данных, необходимых для вызова конечной YAML точки.

inputs.yml

inputs:
  score_mode:
    type: string
    default: append
az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml

Аргумент можно также использовать --set для указания значения. Однако при указании нескольких входных данных, как правило, создаются длинные команды:

az ml batch-endpoint invoke --name $ENDPOINT_NAME \
    --set inputs.score_mode.type="string" inputs.score_mode.default="append"

Создание заданий с выходными данными

В следующем примере показано, как изменить расположение размещения выходных данных score . Для полноты эти примеры также настраивают входные данные с именем heart_dataset.

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

    DATASTORE_ID=$(az ml datastore show -n workspaceblobstore | jq -r '.id')
    

    Примечание.

    Идентификатор хранилища данных будет выглядеть следующим /subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace>/datastores/<data-store>образом.

  2. Создайте выходные данные:

    DATA_PATH="batch-jobs/my-unique-path"
    OUTPUT_PATH="$DATASTORE_ID/paths/$DATA_PATH"
    

    Для полноты также создайте входные данные:

    INPUT_PATH="https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data"
    

    Примечание.

    Узнайте, как путь paths добавляется к идентификатору ресурса хранилища данных, чтобы указать, что ниже приведен путь внутри него.

  3. Запустите развертывание:

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

    az ml batch-endpoint invoke --name $ENDPOINT_NAME \
        --set inputs.heart_dataset.path=$INPUT_PATH \
        --set outputs.score.path=$OUTPUT_PATH
    

Следующие шаги