Отправка заданий Spark в Машинное обучение Azure

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

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

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

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

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

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

Примечание.

  • Дополнительные сведения о доступе к ресурсам при использовании Машинное обучение Azure бессерверных вычислений Spark и присоединенного пула Synapse Spark см. в статье "Обеспечение доступа к ресурсам для заданий Spark".
  • Машинное обучение Azure предоставляет общий пул квот, из которого все пользователи могут получить доступ к квоте вычислений для выполнения тестирования в течение ограниченного времени. При использовании бессерверных вычислений Spark Машинное обучение Azure позволяет получить доступ к этой общей квоте в течение короткого времени.

Присоединение управляемого удостоверения, назначаемого пользователем, с помощью 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. Установите ARMClientпростое средство командной строки, которое вызывает API Azure Resource Manager.
  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передает путь входных данных и выходной папки соответственно.

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

Чтобы создать задание, автономное задание Spark можно определить как файл спецификации YAML, который можно использовать в команде az ml job create с параметром --file . Определите эти свойства в файле YAML:

Свойства YAML в спецификации задания Spark

  • type — задано значение spark.

  • code — определяет расположение папки, содержащей исходный код и скрипты для этого задания.

  • entry — определяет точку входа для задания. Он должен охватывать одно из следующих свойств:

    • file — определяет имя скрипта Python, который служит точкой входа для задания.
  • 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— это свойство определяет ресурсы, используемые Машинное обучение Azure бессерверным вычислением Spark. В нем используются следующие свойства:

    • instance_type — тип вычислительного экземпляра, используемый для пула Spark. В настоящее время поддерживаются следующие типы экземпляров:
      • standard_e4s_v3
      • standard_e8s_v3
      • standard_e16s_v3
      • standard_e32s_v3
      • standard_e64s_v3
    • runtime_version — определяет версию среды выполнения Spark. В настоящее время поддерживаются следующие версии среды выполнения Spark:
      • 3.2
      • 3.3

        Важно!

        Среда выполнения Azure Synapse для Apache Spark: объявления

        • Среда выполнения Azure Synapse для Apache Spark 3.2:
          • Дата объявления EOLA: 8 июля 2023 г.
          • Дата окончания поддержки: 8 июля 2024 г. После этой даты среда выполнения будет отключена.
        • Для непрерывной поддержки и оптимальной производительности рекомендуется перенести в Apache Spark 3.3.

    Пример:

    resources:
      instance_type: standard_e8s_v3
      runtime_version: "3.3"
    
  • 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 использует удостоверение по умолчанию.

Автономное задание Spark

В этом примере спецификации YAML показано автономное задание Spark. Он использует Машинное обучение Azure бессерверные вычисления Spark:

$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.3"

Примечание.

Чтобы использовать подключенный пул 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 в задании конвейера

Компонент Spark обеспечивает гибкость использования одного компонента в нескольких конвейерах Машинное обучение Azure в качестве шага конвейера.

ОБЛАСТЬ ПРИМЕНЕНИЯ:расширение Машинного обучения для 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 не определяет identitycompute или 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 и Машинное обучение Azure бессерверным вычислением Spark:

$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.3"

Примечание.

Чтобы использовать подключенный пул 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>

Из следующей команды можно выполнить следующую команду:

Устранение неполадок заданий Spark

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

  1. Перейдите к заданиям слева на панели в пользовательском интерфейсе Студия машинного обучения Azure
  2. Выберите вкладку "Все задания"
  3. Выберите значение отображаемого имени для задания
  4. На странице сведений о задании перейдите на вкладку "Выходные данные и журналы"
  5. В проводнике разверните папку журналов и разверните папку azureml.
  6. Доступ к журналам заданий Spark в папках диспетчера драйверов и библиотек

Примечание.

Чтобы устранить неполадки с заданиями Spark, созданными во время интерактивной обработки данных в сеансе записной книжки, выберите сведения о задании в правом верхнем углу пользовательского интерфейса записной книжки. Задания Spark из интерактивного сеанса записной книжки создаются под именем записной книжки эксперимента.

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