Отправка заданий Spark в Машинном обучении Azure (предварительная версия)
Важно!
Эта функция сейчас доступна в виде общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания. Ее не следует использовать для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования предварительных выпусков Microsoft Azure.
Машинное обучение Azure поддерживает отправку автономных заданий машинного обучения и создание конвейеров машинного обучения, которые включают несколько этапов рабочего процесса машинного обучения. Машинное обучение Azure обрабатывает как создание автономных заданий Spark, так и повторно используемых компонентов Spark, которые могут использовать конвейеры Машинного обучения Azure. Из этой статьи вы узнаете, как отправлять задания Spark с помощью:
- Пользовательский интерфейс Студии машинного обучения Azure
- Интерфейс командной строки службы "Машинное обучение Azure"
- пакет SDK для Машинного обучения Azure;
Дополнительные сведения об Apache Spark в Машинном обучении Azure см. в этом ресурсе.
Предварительные требования
ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ml для Azure CLI версии 2 (текущая версия)
- Подписка Azure; Если у вас нет подписки Azure, создайте бесплатную учетную запись , прежде чем начинать работу.
- Рабочая область машинного обучения Azure. См. статью Создание ресурсов рабочей области.
- Создайте вычислительный экземпляр Машинного обучения Azure.
- Установите ИНТЕРФЕЙС командной строки Машинного обучения Azure.
- (Необязательно): подключенный пул Synapse Spark в рабочей области Машинного обучения Azure.
Обеспечение доступа к ресурсам для заданий Spark
Задания Spark могут использовать сквозную передачу удостоверения пользователя или управляемое удостоверение для доступа к данным и другим ресурсам. В следующей таблице перечислены различные механизмы доступа к ресурсам при использовании управляемых (автоматических) вычислений Spark Машинного обучения Azure и подключенного пула Synapse Spark.
Пул Spark | Поддерживаемые удостоверения | Удостоверение по умолчанию |
---|---|---|
Управляемые (автоматические) вычисления Spark | Удостоверение пользователя и управляемое удостоверение | Удостоверение пользователя |
Подключенный пул Synapse Spark | Удостоверение пользователя и управляемое удостоверение | Управляемое удостоверение — вычислительное удостоверение подключенного пула Synapse Spark |
Если в коде ИНТЕРФЕЙСА командной строки или пакета SDK определен параметр использования управляемого удостоверения, вычислительная среда Spark Машинного обучения Azure использует управляемое удостоверение, назначаемое пользователем, присоединенное к рабочей области. Управляемое удостоверение, назначаемое пользователем, можно присоединить к существующей рабочей области Машинного обучения Azure с помощью интерфейса командной строки машинного обучения Azure версии 2 или с ARMClient
помощью .
Присоединение управляемого удостоверения, назначаемого пользователем, с помощью CLI версии 2
- Создайте ФАЙЛ YAML, определяющий управляемое удостоверение, назначаемое пользователем, которое должно быть присоединено к рабочей области:
identity: type: system_assigned,user_assigned tenant_id: <TENANT_ID> user_assigned_identities: '/subscriptions/<SUBSCRIPTION_ID/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<AML_USER_MANAGED_ID>': {}
--file
С помощью параметра используйте YAML-файл в командеaz ml workspace update
, чтобы присоединить управляемое удостоверение, назначаемое пользователем:az ml workspace update --subscription <SUBSCRIPTION_ID> --resource-group <RESOURCE_GROUP> --name <AML_WORKSPACE_NAME> --file <YAML_FILE_NAME>.yaml
Присоединение управляемого удостоверения, назначаемого пользователем, с помощью ARMClient
- Установите DMClient— простое средство командной строки, которое вызывает API Resource Manager Azure.
- Создайте JSON-файл, определяющий назначаемое пользователем управляемое удостоверение, которое должно быть присоединено к рабочей области:
{ "properties":{ }, "location": "<AZURE_REGION>", "identity":{ "type":"SystemAssigned,UserAssigned", "userAssignedIdentities":{ "/subscriptions/<SUBSCRIPTION_ID/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<AML_USER_MANAGED_ID>": { } } } }
- Выполните следующую команду в командной строке PowerShell или командной строке, чтобы присоединить управляемое удостоверение, назначаемое пользователем, к рабочей области.
armclient PATCH https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.MachineLearningServices/workspaces/<AML_WORKSPACE_NAME>?api-version=2022-05-01 '@<JSON_FILE_NAME>.json'
Примечание
- Чтобы обеспечить успешное выполнение задания Spark, назначьте роли Участник и Участник данных BLOB-объектов хранилища в учетной записи хранения Azure, используемой для ввода и вывода данных, для удостоверения, используемого заданием Spark.
- Если подключенный пул Synapse Spark указывает на пул Synapse Spark, в рабочей области Azure Synapse с управляемой виртуальной сетью, связанной с ней, следует настроить управляемую частную конечную точку для учетной записи хранения, чтобы обеспечить доступ к данным.
Отправка автономного задания Spark
Скрипт Python, разработанный с помощью интерактивной первичной обработки данных , можно использовать для отправки пакетного задания для обработки большего объема данных после внесения необходимых изменений для параметризации скрипта Python. Простое пакетное задание первичной обработки данных можно отправить как автономное задание Spark.
Для задания Spark требуется скрипт Python, который принимает аргументы, которые можно разработать с изменением кода Python, разработанного на основе интерактивной первичной обработки данных. Пример скрипта Python показан здесь.
# titanic.py
import argparse
from operator import add
import pyspark.pandas as pd
from pyspark.ml.feature import Imputer
parser = argparse.ArgumentParser()
parser.add_argument("--titanic_data")
parser.add_argument("--wrangled_data")
args = parser.parse_args()
print(args.wrangled_data)
print(args.titanic_data)
df = pd.read_csv(args.titanic_data, index_col="PassengerId")
imputer = Imputer(inputCols=["Age"], outputCol="Age").setStrategy(
"mean"
) # Replace missing values in Age column with the mean value
df.fillna(
value={"Cabin": "None"}, inplace=True
) # Fill Cabin column with value "None" if missing
df.dropna(inplace=True) # Drop the rows which still have any missing value
df.to_csv(args.wrangled_data, index_col="PassengerId")
Примечание
В этом примере кода Python используется pyspark.pandas
, который поддерживается только средой выполнения Spark версии 3.2.
Приведенный выше скрипт принимает два аргумента --titanic_data
и --wrangled_data
, которые передают путь к входным данным и выходной папке соответственно.
ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ml для Azure CLI версии 2 (текущая версия)
Чтобы создать задание, автономное задание Spark можно определить как файл спецификации YAML, который можно использовать в команде az ml job create
с параметром --file
. Определите эти свойства в файле YAML следующим образом:
Свойства YAML в спецификации задания Spark
type
— задайте для значениеspark
.code
— определяет расположение папки, содержащей исходный код и скрипты для этого задания.entry
— определяет точку входа для задания. Он должен охватывать одно из следующих свойств:file
— определяет имя скрипта Python, который служит точкой входа для задания.class_name
— определяет имя класса, который служит точкой входа для задания.
py_files
— определяет список.zip
файлов ,.egg
или.py
, которые будут помещены вPYTHONPATH
для успешного выполнения задания. Это необязательное свойство.jars
— определяет список.jar
файлов для включения в драйвер Spark и исполнителяCLASSPATH
для успешного выполнения задания. Это необязательное свойство.files
— определяет список файлов, которые должны быть скопированы в рабочий каталог каждого исполнителя для успешного выполнения задания. Это необязательное свойство.archives
— определяет список архивов, которые должны быть извлечены в рабочий каталог каждого исполнителя для успешного выполнения задания. Это необязательное свойство.conf
— определяет следующие свойства драйвера и исполнителя Spark:spark.driver.cores
: количество ядер для драйвера Spark.spark.driver.memory
: выделенная память для драйвера Spark в гигабайтах (ГБ).spark.executor.cores
: количество ядер для исполнителя Spark.spark.executor.memory
: выделение памяти для исполнителя Spark в гигабайтах (ГБ).spark.dynamicAllocation.enabled
— следует ли динамически выделять исполнителей в видеTrue
значения илиFalse
.- Если динамическое выделение исполнителей включено, определите следующие свойства:
spark.dynamicAllocation.minExecutors
— минимальное количество экземпляров исполнителей Spark для динамического выделения.spark.dynamicAllocation.maxExecutors
— максимальное количество экземпляров исполнителей Spark для динамического выделения.
- Если динамическое выделение исполнителей отключено, определите это свойство:
spark.executor.instances
— количество экземпляров исполнителя Spark.
environment
— среда Машинного обучения Azure для выполнения задания.args
— аргументы командной строки, которые должны передаваться в скрипт или класс Python точки входа задания. Пример см. в файле спецификации YAML, приведенном здесь.resources
— это свойство определяет ресурсы, которые будут использоваться управляемыми (автоматическими) вычислительными ресурсами Spark в Машинном обучении Azure. В нем используются следующие свойства:instance_type
— тип вычислительного экземпляра, используемый для пула Spark. В настоящее время поддерживаются следующие типы экземпляров:standard_e4s_v3
standard_e8s_v3
standard_e16s_v3
standard_e32s_v3
standard_e64s_v3
runtime_version
— определяет версию среды выполнения Spark. В настоящее время поддерживаются следующие версии среды выполнения Spark:3.1
3.2
Пример показан далее:
resources: instance_type: standard_e8s_v3 runtime_version: "3.2"
compute
— это свойство определяет имя присоединенного пула Synapse Spark, как показано в следующем примере:compute: mysparkpool
inputs
— это свойство определяет входные данные для задания Spark. Входные данные для задания Spark могут быть либо литеральным значением, либо данными, хранящимися в файле или папке.- Литеральное значение может быть числом, логическим значением или строкой. Ниже приведены некоторые примеры.
inputs: sampling_rate: 0.02 # a number hello_number: 42 # an integer hello_string: "Hello world" # a string hello_boolean: True # a boolean value
- Данные , хранящиеся в файле или папке, должны определяться с помощью следующих свойств:
type
— присвойте этому свойству значениеuri_file
илиuri_folder
для входных данных, содержащихся в файле или папке соответственно.path
— универсальный код ресурса (URI) входных данных, напримерazureml://
,abfss://
илиwasbs://
.mode
— присвойте этому свойству значениеdirect
. В этом примере показано определение входных данных задания, которое может называться$${inputs.titanic_data}}
:inputs: titanic_data: type: uri_file path: azureml://datastores/workspaceblobstore/paths/data/titanic.csv mode: direct
- Литеральное значение может быть числом, логическим значением или строкой. Ниже приведены некоторые примеры.
outputs
— это свойство определяет выходные данные задания Spark. Выходные данные задания Spark можно записать в файл или папку, которая определяется с помощью следующих трех свойств:type
— этому свойству можно присвоить значениеuri_file
илиuri_folder
для записи выходных данных в файл или папку соответственно.path
— это свойство определяет URI расположения выходных данных, напримерazureml://
,abfss://
илиwasbs://
.mode
— присвойте этому свойству значениеdirect
. В этом примере показано определение выходных данных задания, которое может называться${{outputs.wrangled_data}}
:outputs: wrangled_data: type: uri_folder path: azureml://datastores/workspaceblobstore/paths/data/wrangled/ mode: direct
identity
— это необязательное свойство определяет удостоверение, используемое для отправки этого задания. Он может иметьuser_identity
значения иmanaged
. Если в спецификации YAML не определено удостоверение, будет использоваться удостоверение по умолчанию.
Автономное задание Spark
В этом примере спецификации YAML показано автономное задание Spark. В нем используется управляемое (автоматическое) вычисление Spark в Машинном обучении Azure:
$schema: http://azureml/sdk-2-0/SparkJob.json
type: spark
code: ./
entry:
file: titanic.py
conf:
spark.driver.cores: 1
spark.driver.memory: 2g
spark.executor.cores: 2
spark.executor.memory: 2g
spark.executor.instances: 2
inputs:
titanic_data:
type: uri_file
path: azureml://datastores/workspaceblobstore/paths/data/titanic.csv
mode: direct
outputs:
wrangled_data:
type: uri_folder
path: azureml://datastores/workspaceblobstore/paths/data/wrangled/
mode: direct
args: >-
--titanic_data ${{inputs.titanic_data}}
--wrangled_data ${{outputs.wrangled_data}}
identity:
type: user_identity
resources:
instance_type: standard_e4s_v3
runtime_version: "3.2"
Примечание
Чтобы использовать подключенный пул Synapse Spark, определите compute
свойство в примере файла спецификации YAML, показанном resources
выше, вместо свойства .
Файлы YAML, показанные выше, можно использовать в az ml job create
команде с параметром --file
для создания автономного задания Spark, как показано ниже:
az ml job create --file <YAML_SPECIFICATION_FILE_NAME>.yaml --subscription <SUBSCRIPTION_ID> --resource-group <RESOURCE_GROUP> --workspace-name <AML_WORKSPACE_NAME>
Приведенную выше команду можно выполнить в следующих разделах:
- терминал вычислительного экземпляра Машинного обучения Azure.
- терминал Visual Studio Code подключен к вычислительному экземпляру Машинного обучения Azure.
- локальный компьютер с установленным интерфейсом командной строки Машинного обучения Azure .
Отправка автономного задания Spark из пользовательского интерфейса Студии машинного обучения Azure
Чтобы отправить автономное задание Spark с помощью пользовательского интерфейса Студии машинного обучения Azure, выполните следующие действия.
- В области слева выберите + Создать.
- Выберите Задание Spark (предварительная версия).
- На экране Вычисление :
В разделе Выбор типа вычислений выберите Автоматические вычисления Spark (предварительная версия) для параметра Управляемые (автоматические) вычисления Spark или Подключенные вычисления для подключенного пула Synapse Spark.
Если вы выбрали автоматические вычисления Spark (предварительная версия), выполните следующие действия.
- Выберите Размер виртуальной машины.
- Выберите Версия среды выполнения Spark.
Если вы выбрали Подключенные вычислительные ресурсы:
- Выберите подключенный пул Synapse Spark в меню Выбор подключенных вычислительных ресурсов Машинного обучения Azure .
Выберите Далее.
На экране Среда :
- Выберите одну из доступных сред из списка. Выбор среды является необязательным.
- Выберите Далее.
На экране параметров задания :
- Укажите имя задания. Можно использовать имя задания, которое создается по умолчанию.
- Выберите Имя эксперимента в раскрывающемся меню.
- В разделе Добавление тегов укажите Имя и Значение, а затем нажмите кнопку Добавить. Добавление тегов является необязательным.
- В разделе Код :
Выберите параметр в раскрывающемся списке Выберите расположение кода . Выберите Отправить локальный файл или Хранилище BLOB-объектов по умолчанию в рабочей области Машинного обучения Azure.
Если вы выбрали Выбрать расположение кода:
- Нажмите кнопку Обзор и перейдите в расположение, содержащее файлы кода на локальном компьютере.
Если вы выбрали хранилище BLOB-объектов по умолчанию для рабочей области Машинного обучения Azure:
- В разделе Путь к файлу кода для отправки выберите Обзор.
- Во всплывающем окне Выбор пути выберите путь к файлам кода в хранилище BLOB-объектов рабочей области по умолчанию.
- Щелкните Сохранить.
Введите имя файла записи для автономного задания. Этот файл должен содержать код Python, который принимает аргументы.
Чтобы добавить любые другие файлы Python, необходимые автономному заданию во время выполнения, выберите + Добавить файл в разделе Файлы Py и введите имя
.zip
файлаPYTHONPATH
,.egg
или.py
для успешного выполнения задания. Можно добавить несколько файлов.Чтобы добавить jar-файлы, необходимые автономному заданию во время выполнения, выберите + Добавить файл в разделе Jars и введите имя
.jar
файла, который будет включен в драйвер Spark, и исполнителяCLASSPATH
для успешного выполнения задания. Можно добавить несколько файлов.Чтобы добавить архивы, которые должны быть извлечены в рабочий каталог каждого исполнителя для успешного выполнения задания, выберите + Добавить файл в разделе Архивы и введите имя архива. Можно добавить несколько архивов.
Добавление файлов Py, JAR и архивов является необязательным.
Чтобы добавить входные данные, выберите + Добавить входные данные в разделе Входные данные и
- Введите имя входных данных. Входные данные должны ссылаться на это имя далее в аргументах.
- Выберите тип входных данных.
- Для типа Data:
- Выберите Тип данныхФайл или Папка.
- Выберите Источник данныхдля параметра Отправить из локального, URI или Datastore.
- Для параметра Отправить из локальной папки выберите Обзор в разделе Путь для отправки, чтобы выбрать входной файл или папку.
- В поле URI введите URI данных хранилища (например,
abfss://
илиwasbs://
URI) или ресурсazureml://
данных . - Для хранилища данных:
- Выберите хранилище данных в раскрывающемся меню.
- В разделе Путь к данным выберите Обзор.
- На всплывающем экране с названием Выбор пути выберите путь к файлам кода в хранилище BLOB-объектов рабочей области по умолчанию.
- Щелкните Сохранить.
- Для типа Integer введите целочисленное значение в качестве входного значения.
- В поле Тип Числовведите числовое значение в качестве входного значения.
- Для типа Boolean выберите Значение True или Falseв качестве входного значения.
- В поле Тип Строка введите строку в качестве входного значения.
Чтобы добавить входные данные, выберите + Добавить выходные данные в разделе Выходные данные и
- Введите имя выходных данных. Выходные данные должны ссылаться на это имя далее в аргументах .
- Выберите Тип выходных данныхФайл или Папка.
- В поле Назначение URI вывода введите URI данных хранилища (например,
abfss://
илиwasbs://
URI) или ресурсazureml://
данных .
Введите аргументы , используя имена, определенные в полях Имя входных данных и Имя выходных данных на предыдущих шагах, а также имена входных и выходных аргументов, используемых в файле входа скрипта Python. Например, если имя входных данных и имя выходных данных определены как
job_input
иjob_output
, аргументы добавляются в файл Entry , как показано ниже.import argparse parser = argparse.ArgumentParser() parser.add_argument("--input_param") parser.add_argument("--output_param")
затем введите Аргументы как
--input_param ${{inputs.job_input}} --output_param ${{outputs.job_output}}
.- В разделе Конфигурации Spark :
- Для размера исполнителя:
- Введите количество ядер исполнителя и памяти исполнителя (ГБ) в гигабайтах.
- Для динамически выделенных исполнителей выберите параметр Отключено или Включено .
- Если динамическое выделение исполнителей отключено, введите количество экземпляров исполнителя.
- Если динамическое выделение исполнителей включено, используйте ползунок, чтобы выбрать минимальное и максимальное количество исполнителей.
- Для параметра Размер драйвера:
- Введите число ядер драйвера и память драйвера (ГБ) в гигабайтах.
- Введите пары Имя и Значение для дополнительных конфигураций, а затем нажмите кнопку Добавить. Предоставление дополнительных конфигураций является необязательным.
- Для размера исполнителя:
- Выберите Далее.
На экране Рецензирование :
- Перед отправкой спецификации задания просмотрите его.
- Выберите Создать , чтобы отправить автономное задание Spark.
Компонент Spark в задании конвейера
Компонент Spark обеспечивает гибкость использования одного и того же компонента в нескольких конвейерах Машинного обучения Azure в качестве шага конвейера.
ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ML для Azure CLI версии 2 (текущая версия)
Синтаксис YAML для компонента Spark в большинстве случаев напоминает синтаксис YAML для спецификации задания Spark . Эти свойства определяются по-разному в спецификации YAML компонента Spark:
name
— имя компонента Spark.version
— версия компонента Spark.display_name
— имя компонента Spark для отображения в пользовательском интерфейсе и в других местах.description
— описание компонента Spark.inputs
— это свойство похоже наinputs
свойство, описанное в синтаксисе YAML для спецификации задания Spark, за исключением того, что оно не определяетpath
свойство . В этом фрагменте кода показан пример свойства компонентаinputs
Spark:inputs: titanic_data: type: uri_file mode: direct
outputs
— это свойство похоже наoutputs
свойство, описанное в синтаксисе YAML для спецификации задания Spark, за исключением того, что оно не определяетpath
свойство . В этом фрагменте кода показан пример свойства компонентаoutputs
Spark:outputs: wrangled_data: type: uri_folder mode: direct
Примечание
Компонент Spark не определяет identity
свойства , compute
или resources
. Эти свойства определяются в файле спецификации YAML конвейера.
Этот файл спецификации YAML содержит пример компонента Spark:
$schema: http://azureml/sdk-2-0/SparkComponent.json
name: titanic_spark_component
type: spark
version: 1
display_name: Titanic-Spark-Component
description: Spark component for Titanic data
code: ./src
entry:
file: titanic.py
inputs:
titanic_data:
type: uri_file
mode: direct
outputs:
wrangled_data:
type: uri_folder
mode: direct
args: >-
--titanic_data ${{inputs.titanic_data}}
--wrangled_data ${{outputs.wrangled_data}}
conf:
spark.driver.cores: 1
spark.driver.memory: 2g
spark.executor.cores: 2
spark.executor.memory: 2g
spark.dynamicAllocation.enabled: True
spark.dynamicAllocation.minExecutors: 1
spark.dynamicAllocation.maxExecutors: 4
Компонент Spark, определенный в приведенном выше файле спецификации YAML, можно использовать в задании конвейера Машинного обучения Azure. Дополнительные сведения о синтаксисе YAML, определяющем задание конвейера, см. в разделе Схема YAML задания конвейера. В этом примере показан файл спецификации YAML для задания конвейера с компонентом Spark и управляемым (автоматическим) вычислением Spark Машинного обучения Azure:
$schema: http://azureml/sdk-2-0/PipelineJob.json
type: pipeline
display_name: Titanic-Spark-CLI-Pipeline
description: Spark component for Titanic data in Pipeline
jobs:
spark_job:
type: spark
component: ./spark-job-component.yaml
inputs:
titanic_data:
type: uri_file
path: azureml://datastores/workspaceblobstore/paths/data/titanic.csv
mode: direct
outputs:
wrangled_data:
type: uri_folder
path: azureml://datastores/workspaceblobstore/paths/data/wrangled/
mode: direct
identity:
type: managed
resources:
instance_type: standard_e8s_v3
runtime_version: "3.2"
Примечание
Чтобы использовать подключенный пул Synapse Spark, определите compute
свойство в примере файла спецификации YAML, показанном выше, а не resources
свойство .
Приведенный выше файл спецификации YAML можно использовать в az ml job create
команде --file
с помощью параметра , чтобы создать задание конвейера, как показано ниже:
az ml job create --file <YAML_SPECIFICATION_FILE_NAME>.yaml --subscription <SUBSCRIPTION_ID> --resource-group <RESOURCE_GROUP> --workspace-name <AML_WORKSPACE_NAME>
Приведенную выше команду можно выполнить в следующих разделах:
- терминал вычислительного экземпляра Машинного обучения Azure.
- терминал Visual Studio Code подключен к вычислительному экземпляру Машинного обучения Azure.
- локальный компьютер, на котором установлен интерфейс командной строки Машинного обучения Azure .