Отправка заданий Spark в Машинном обучении Azure (предварительная версия)

Важно!

Эта функция сейчас доступна в виде общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания. Ее не следует использовать для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования предварительных выпусков Microsoft Azure.

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

  • Пользовательский интерфейс Студии машинного обучения Azure
  • Интерфейс командной строки службы "Машинное обучение Azure"
  • пакет SDK для Машинного обучения Azure;

Дополнительные сведения об Apache Spark в Машинном обучении Azure см. в этом ресурсе.

Предварительные требования

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ml для Azure CLI версии 2 (текущая версия)

Обеспечение доступа к ресурсам для заданий Spark

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

Пул Spark Поддерживаемые удостоверения Удостоверение по умолчанию
Управляемые (автоматические) вычисления Spark Удостоверение пользователя и управляемое удостоверение Удостоверение пользователя
Подключенный пул Synapse Spark Удостоверение пользователя и управляемое удостоверение Управляемое удостоверение — вычислительное удостоверение подключенного пула Synapse Spark

Если в коде ИНТЕРФЕЙСА командной строки или пакета SDK определен параметр использования управляемого удостоверения, вычислительная среда Spark Машинного обучения Azure использует управляемое удостоверение, назначаемое пользователем, присоединенное к рабочей области. Управляемое удостоверение, назначаемое пользователем, можно присоединить к существующей рабочей области Машинного обучения Azure с помощью интерфейса командной строки машинного обучения Azure версии 2 или с ARMClientпомощью .

Присоединение управляемого удостоверения, назначаемого пользователем, с помощью CLI версии 2

  1. Создайте ФАЙЛ 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>':
          {}
    
  2. --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

  1. Установите DMClient— простое средство командной строки, которое вызывает API Resource Manager Azure.
  2. Создайте JSON-файл, определяющий назначаемое пользователем управляемое удостоверение, которое должно быть присоединено к рабочей области:
    {
        "properties":{
        },
        "location": "<AZURE_REGION>",
        "identity":{
            "type":"SystemAssigned,UserAssigned",
            "userAssignedIdentities":{
                "/subscriptions/<SUBSCRIPTION_ID/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<AML_USER_MANAGED_ID>": { }
            }
        }
    }
    
  3. Выполните следующую команду в командной строке 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

Скрипт 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>

Приведенную выше команду можно выполнить в следующих разделах:

Отправка автономного задания Spark из пользовательского интерфейса Студии машинного обучения Azure

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

Снимок экрана: создание задания Spark в пользовательском интерфейсе Студии машинного обучения Azure.

  • В области слева выберите + Создать.
  • Выберите Задание Spark (предварительная версия).
  • На экране Вычисление :

Снимок экрана: экран выбора вычислений для нового задания Spark в пользовательском интерфейсе Студии машинного обучения Azure.

  1. В разделе Выбор типа вычислений выберите Автоматические вычисления Spark (предварительная версия) для параметра Управляемые (автоматические) вычисления Spark или Подключенные вычисления для подключенного пула Synapse Spark.

  2. Если вы выбрали автоматические вычисления Spark (предварительная версия), выполните следующие действия.

    1. Выберите Размер виртуальной машины.
    2. Выберите Версия среды выполнения Spark.
  3. Если вы выбрали Подключенные вычислительные ресурсы:

    1. Выберите подключенный пул Synapse Spark в меню Выбор подключенных вычислительных ресурсов Машинного обучения Azure .
  4. Выберите Далее.

  5. На экране Среда :

    1. Выберите одну из доступных сред из списка. Выбор среды является необязательным.
    2. Выберите Далее.
  6. На экране параметров задания :

    1. Укажите имя задания. Можно использовать имя задания, которое создается по умолчанию.
    2. Выберите Имя эксперимента в раскрывающемся меню.
    3. В разделе Добавление тегов укажите Имя и Значение, а затем нажмите кнопку Добавить. Добавление тегов является необязательным.
    4. В разделе Код :
      1. Выберите параметр в раскрывающемся списке Выберите расположение кода . Выберите Отправить локальный файл или Хранилище BLOB-объектов по умолчанию в рабочей области Машинного обучения Azure.

      2. Если вы выбрали Выбрать расположение кода:

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

        1. В разделе Путь к файлу кода для отправки выберите Обзор.
        2. Во всплывающем окне Выбор пути выберите путь к файлам кода в хранилище BLOB-объектов рабочей области по умолчанию.
        3. Щелкните Сохранить.
      4. Введите имя файла записи для автономного задания. Этот файл должен содержать код Python, который принимает аргументы.

      5. Чтобы добавить любые другие файлы Python, необходимые автономному заданию во время выполнения, выберите + Добавить файл в разделе Файлы Py и введите имя .zipфайла PYTHONPATH , .eggили .py для успешного выполнения задания. Можно добавить несколько файлов.

      6. Чтобы добавить jar-файлы, необходимые автономному заданию во время выполнения, выберите + Добавить файл в разделе Jars и введите имя .jar файла, который будет включен в драйвер Spark, и исполнителя CLASSPATH для успешного выполнения задания. Можно добавить несколько файлов.

      7. Чтобы добавить архивы, которые должны быть извлечены в рабочий каталог каждого исполнителя для успешного выполнения задания, выберите + Добавить файл в разделе Архивы и введите имя архива. Можно добавить несколько архивов.

      8. Добавление файлов Py, JAR и архивов является необязательным.

      9. Чтобы добавить входные данные, выберите + Добавить входные данные в разделе Входные данные и

        1. Введите имя входных данных. Входные данные должны ссылаться на это имя далее в аргументах.
        2. Выберите тип входных данных.
        3. Для типа Data:
          1. Выберите Тип данныхФайл или Папка.
          2. Выберите Источник данныхдля параметра Отправить из локального, URI или Datastore.
            • Для параметра Отправить из локальной папки выберите Обзор в разделе Путь для отправки, чтобы выбрать входной файл или папку.
            • В поле URI введите URI данных хранилища (например, abfss:// или wasbs:// URI) или ресурс azureml://данных .
            • Для хранилища данных:
              1. Выберите хранилище данных в раскрывающемся меню.
              2. В разделе Путь к данным выберите Обзор.
              3. На всплывающем экране с названием Выбор пути выберите путь к файлам кода в хранилище BLOB-объектов рабочей области по умолчанию.
              4. Щелкните Сохранить.
        4. Для типа Integer введите целочисленное значение в качестве входного значения.
        5. В поле Тип Числовведите числовое значение в качестве входного значения.
        6. Для типа Boolean выберите Значение True или Falseв качестве входного значения.
        7. В поле Тип Строка введите строку в качестве входного значения.
      10. Чтобы добавить входные данные, выберите + Добавить выходные данные в разделе Выходные данные и

        1. Введите имя выходных данных. Выходные данные должны ссылаться на это имя далее в аргументах .
        2. Выберите Тип выходных данныхФайл или Папка.
        3. В поле Назначение URI вывода введите URI данных хранилища (например, abfss:// или wasbs:// URI) или ресурс azureml://данных .
      11. Введите аргументы , используя имена, определенные в полях Имя входных данных и Имя выходных данных на предыдущих шагах, а также имена входных и выходных аргументов, используемых в файле входа скрипта 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}}.

    1. В разделе Конфигурации Spark :
      1. Для размера исполнителя:
        1. Введите количество ядер исполнителя и памяти исполнителя (ГБ) в гигабайтах.
        2. Для динамически выделенных исполнителей выберите параметр Отключено или Включено .
      • Если динамическое выделение исполнителей отключено, введите количество экземпляров исполнителя.
      • Если динамическое выделение исполнителей включено, используйте ползунок, чтобы выбрать минимальное и максимальное количество исполнителей.
      1. Для параметра Размер драйвера:
        1. Введите число ядер драйвера и память драйвера (ГБ) в гигабайтах.
        2. Введите пары Имя и Значение для дополнительных конфигураций, а затем нажмите кнопку Добавить. Предоставление дополнительных конфигураций является необязательным.
    2. Выберите Далее.
  7. На экране Рецензирование :

    1. Перед отправкой спецификации задания просмотрите его.
    2. Выберите Создать , чтобы отправить автономное задание 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>

Приведенную выше команду можно выполнить в следующих разделах:

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