Создание заданий и входных данных для пакетных конечных точек
Конечные точки пакетной службы можно использовать для выполнения длительных пакетных операций с большими объемами данных. Такие данные могут размещаться в разных местах. Некоторые типы конечных точек пакетной службы также могут получать литеральные параметры в качестве входных данных. В этом руководстве мы рассмотрим, как указать эти входные данные, а также поддерживаемые различные типы или расположения.
Перед вызовом конечной точки
Чтобы успешно вызвать конечную точку пакетной службы и создать задания, убедитесь в следующем:
У вас есть разрешения на запуск развертывания пакетной конечной точки. Роли Специалист по обработке и анализу данных, участника и владельца 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
) в настоящее время не поддерживаются.
Сначала создайте ресурс данных. Этот ресурс данных состоит из папки с несколькими 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
Создайте входные данные или запрос:
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
в качестве способа указания входных данных.Запустите конечную точку:
--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, а затем запускаете пакетное развертывание. Выполните следующие действия, чтобы выполнить задание пакетной конечной точки с помощью данных, хранящихся в хранилище данных.
Доступ к хранилищу данных по умолчанию в рабочей области Машинное обучение 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. Этот шаг можно пропустить, если вы уже знаете идентификатор ресурса хранилища данных по умолчанию в рабочей области.
Необходимо передать некоторые примеры данных в хранилище данных. В этом примере предполагается, что вы уже отправили образец данных, включенных в репозиторий в папке в папке
sdk/python/endpoints/batch/deploy-models/heart-classifier-mlflow/data
heart-disease-uci-unlabeled
в учетной записи хранения BLOB-объектов. Убедитесь, что вы сделали это, прежде чем двигаться вперед.Создайте входные данные или запрос:
Поместите путь к файлу в следующую переменную:
DATA_PATH="heart-disease-uci-unlabeled" INPUT_PATH="$DATASTORE_ID/paths/$DATA_PATH"
Примечание.
Узнайте, как путь
paths
добавляется к идентификатору ресурса хранилища данных, чтобы указать, что ниже приведен путь внутри него.Совет
Можно также использовать
azureml://datastores/<data-store>/paths/<data-path>
в качестве способа указания входных данных.Запустите конечную точку:
--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 хранилища.
Создайте входные данные или запрос:
Запустите конечную точку:
--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
.
Используйте хранилище данных по умолчанию в рабочей области Машинное обучение 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>
образом.Создайте выходные данные:
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
добавляется к идентификатору ресурса хранилища данных, чтобы указать, что ниже приведен путь внутри него.Запустите развертывание: