Udostępnij za pośrednictwem


Przesyłanie zadań platformy Spark w usłudze Azure Machine Learning

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 2 (current)Zestaw PYTHON SDK azure-ai-ml v2 (bieżąca)

Usługa Azure Machine Learning obsługuje autonomiczne przesyłanie zadań uczenia maszynowego oraz tworzenie potoków uczenia maszynowego obejmujących wiele kroków przepływu pracy uczenia maszynowego. Usługa Azure Machine Learning obsługuje zarówno autonomiczne tworzenie zadań platformy Spark, jak i tworzenie składników platformy Spark wielokrotnego użytku, których mogą używać potoki usługi Azure Machine Learning. Z tego artykułu dowiesz się, jak przesyłać zadania platformy Spark za pomocą następujących funkcji:

  • Interfejs użytkownika usługi Azure Machine Learning Studio
  • Interfejs wiersza polecenia usługi Azure Machine Learning
  • Azure Machine Learning SDK

Aby uzyskać więcej informacji na temat platformy Apache Spark w pojęciach związanych z usługą Azure Machine Learning , odwiedź ten zasób.

Wymagania wstępne

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)

Uwaga

  • Aby uzyskać więcej informacji na temat dostępu do zasobów podczas korzystania z bezserwerowych obliczeń platformy Spark w usłudze Azure Machine Learning i dołączonej puli platformy Synapse Spark, odwiedź stronę Zapewnianie dostępu do zasobów dla zadań platformy Spark.
  • Usługa Azure Machine Learning udostępnia udostępnioną pulę przydziałów, z której wszyscy użytkownicy mogą uzyskiwać dostęp do limitu przydziału obliczeniowego w celu przeprowadzania testów przez ograniczony czas. W przypadku korzystania z bezserwerowych obliczeń platformy Spark usługa Azure Machine Learning umożliwia krótki dostęp do tego udostępnionego limitu przydziału.

Dołączanie tożsamości zarządzanej przypisanej przez użytkownika przy użyciu interfejsu wiersza polecenia w wersji 2

  1. Utwórz plik YAML, który definiuje tożsamość zarządzaną przypisaną przez użytkownika, która powinna być dołączona do obszaru roboczego:
    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. Za pomocą parametru --file użyj pliku YAML w poleceniu az ml workspace update , aby dołączyć tożsamość zarządzaną przypisaną przez użytkownika:
    az ml workspace update --subscription <SUBSCRIPTION_ID> --resource-group <RESOURCE_GROUP> --name <AML_WORKSPACE_NAME> --file <YAML_FILE_NAME>.yaml
    

Dołączanie tożsamości zarządzanej przypisanej przez użytkownika przy użyciu polecenia ARMClient

  1. Zainstaluj ARMClientprogram , proste narzędzie wiersza polecenia, które wywołuje interfejs API usługi Azure Resource Manager.
  2. Utwórz plik JSON, który definiuje tożsamość zarządzaną przypisaną przez użytkownika, która powinna być dołączona do obszaru roboczego:
    {
        "properties":{
        },
        "location": "<AZURE_REGION>",
        "identity":{
            "type":"SystemAssigned,UserAssigned",
            "userAssignedIdentities":{
                "/subscriptions/<SUBSCRIPTION_ID/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<AML_USER_MANAGED_ID>": { }
            }
        }
    }
    
  3. Aby dołączyć tożsamość zarządzaną przypisaną przez użytkownika do obszaru roboczego, wykonaj następujące polecenie w wierszu polecenia programu PowerShell lub wierszu polecenia.
    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'
    

Uwaga

  • Aby zapewnić pomyślne wykonanie zadania platformy Spark, przypisz role Współautor i Współautor danych obiektu blob usługi Storage na koncie usługi Azure Storage używanym na potrzeby danych wejściowych i wyjściowych do tożsamości używanej przez zadanie platformy Spark
  • Dostęp do sieci publicznej powinien być włączony w obszarze roboczym usługi Azure Synapse, aby zapewnić pomyślne wykonanie zadania platformy Spark przy użyciu dołączonej puli usługi Synapse Spark.
  • W obszarze roboczym usługi Azure Synapse, który ma skojarzoną zarządzaną sieć wirtualną, jeśli dołączona pula platformy Synapse Spark wskazuje pulę usługi Synapse Spark, należy skonfigurować zarządzany prywatny punkt końcowy na koncie magazynu, aby zapewnić dostęp do danych.
  • Bezserwerowe obliczenia platformy Spark obsługują zarządzaną sieć wirtualną usługi Azure Machine Learning. Jeśli sieć zarządzana jest aprowizowana dla bezserwerowych obliczeń platformy Spark, odpowiednie prywatne punkty końcowe dla konta magazynu powinny być również aprowizowane w celu zapewnienia dostępu do danych.

Przesyłanie autonomicznego zadania platformy Spark

Po wprowadzeniu niezbędnych zmian w parametryzacji skryptów języka Python można użyć skryptu języka Python opracowanego z interakcyjnymi uzdatnianiami danych w celu przesłania zadania wsadowego w celu przetworzenia większej ilości danych. Możesz przesłać zadanie wsadowe rozmieszczania danych jako autonomiczne zadanie platformy Spark.

Zadanie platformy Spark wymaga skryptu języka Python, który przyjmuje argumenty. Możesz zmodyfikować kod w języku Python utworzony na podstawie interakcyjnych uzdatniania danych w celu opracowania tego skryptu. Przykładowy skrypt języka Python jest pokazany tutaj.

# 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")

Uwaga

Ten przykładowy kod w języku Python używa metody pyspark.pandas. Obsługuje to tylko środowisko uruchomieniowe platformy Spark w wersji 3.2 lub nowszej.

Ten skrypt przyjmuje dwa argumenty, które przekazują ścieżkę danych wejściowych i folderu wyjściowego, odpowiednio:

  • --titanic_data
  • --wrangled_data

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)

Aby utworzyć zadanie, możesz zdefiniować autonomiczne zadanie platformy Spark jako plik specyfikacji YAML, którego można użyć w poleceniu az ml job create za pomocą parametru --file . Zdefiniuj te właściwości w pliku YAML:

Właściwości YAML w specyfikacji zadania platformy Spark

  • type - ustaw wartość spark.

  • code — definiuje lokalizację folderu zawierającego kod źródłowy i skrypty dla tego zadania.

  • entry — definiuje punkt wejścia dla zadania. Powinna obejmować jedną z następujących właściwości:

    • file — definiuje nazwę skryptu języka Python, który służy jako punkt wejścia dla zadania.
    • class_name — definiuje nazwę klasy, która serweruje jako punkt wejścia dla zadania.
  • py_files — definiuje listę .zipplików , .egglub .py , które mają zostać umieszczone w PYTHONPATHobiekcie , w celu pomyślnego wykonania zadania. Ta właściwość jest opcjonalna.

  • jars — definiuje listę .jar plików, które mają być uwzględniane w sterowniku Spark, oraz funkcja wykonawcza CLASSPATH, w celu pomyślnego wykonania zadania. Ta właściwość jest opcjonalna.

  • files — definiuje listę plików, które powinny zostać skopiowane do katalogu roboczego każdego wykonawcy, w celu pomyślnego wykonania zadania. Ta właściwość jest opcjonalna.

  • archives — definiuje listę archiwów, które powinny zostać wyodrębnione do katalogu roboczego każdego wykonawcy, w celu pomyślnego wykonania zadania. Ta właściwość jest opcjonalna.

  • conf — definiuje następujące właściwości sterownika i funkcji wykonawczej platformy Spark:

    • spark.driver.cores: liczba rdzeni sterownika Spark.
    • spark.driver.memory: przydzielona pamięć dla sterownika Spark w gigabajtach (GB).
    • spark.executor.cores: liczba rdzeni funkcji wykonawczej platformy Spark.
    • spark.executor.memory: alokacja pamięci dla funkcji wykonawczej platformy Spark w gigabajtach (GB).
    • spark.dynamicAllocation.enabled — określa, czy funkcje wykonawcze powinny być przydzielane dynamicznie, jako True wartość lub False .
    • Jeśli włączono dynamiczną alokację funkcji wykonawczych, zdefiniuj następujące właściwości:
      • spark.dynamicAllocation.minExecutors — minimalna liczba wystąpień funkcji wykonawczych platformy Spark dla alokacji dynamicznej.
      • spark.dynamicAllocation.maxExecutors — maksymalna liczba wystąpień funkcji wykonawczych platformy Spark dla alokacji dynamicznej.
    • Jeśli dynamiczna alokacja funkcji wykonawczych jest wyłączona, zdefiniuj tę właściwość:
      • spark.executor.instances — liczba wystąpień funkcji wykonawczej platformy Spark.
  • environment— środowisko usługi Azure Machine Learning do uruchamiania zadania.

  • args — argumenty wiersza polecenia, które powinny zostać przekazane do skryptu języka Python punktu wejścia zadania. Zapoznaj się z plikiem specyfikacji YAML podanym tutaj, aby zapoznać się z przykładem.

  • resources — ta właściwość definiuje zasoby, które mają być używane przez bezserwerowe obliczenia platformy Spark w usłudze Azure Machine Learning. Używa on następujących właściwości:

    • instance_type — typ wystąpienia obliczeniowego, który ma być używany dla puli Spark. Obecnie obsługiwane są następujące typy wystąpień:
      • standard_e4s_v3
      • standard_e8s_v3
      • standard_e16s_v3
      • standard_e32s_v3
      • standard_e64s_v3
    • runtime_version — definiuje wersję środowiska uruchomieniowego platformy Spark. Obecnie obsługiwane są następujące wersje środowiska uruchomieniowego platformy Spark:
      • 3.3
      • 3.4

        Ważne

        Środowisko uruchomieniowe usługi Azure Synapse dla platformy Apache Spark: anonsy

        • Środowisko uruchomieniowe usługi Azure Synapse dla platformy Apache Spark 3.3:
          • Data ogłoszenia EOLA: 12 lipca 2024 r.
          • Data zakończenia wsparcia technicznego: 31 marca 2025 r. Po tej dacie środowisko uruchomieniowe zostanie wyłączone.
        • Aby zapewnić ciągłą obsługę i optymalną wydajność, zalecamy migrację do platformy Apache Spark 3.4.

    Jest to przykładowy plik YAML:

    resources:
      instance_type: standard_e8s_v3
      runtime_version: "3.4"
    
  • compute — ta właściwość definiuje nazwę dołączonej puli platformy Synapse Spark, jak pokazano w tym przykładzie:

    compute: mysparkpool
    
  • inputs — ta właściwość definiuje dane wejściowe dla zadania platformy Spark. Dane wejściowe zadania platformy Spark mogą być wartością literału lub danymi przechowywanymi w pliku lub folderze.

    • Wartość literału może być liczbą, wartością logiczną lub ciągiem. Poniżej przedstawiono kilka przykładów:
      inputs:
        sampling_rate: 0.02 # a number
        hello_number: 42 # an integer
        hello_string: "Hello world" # a string
        hello_boolean: True # a boolean value
      
    • Dane przechowywane w pliku lub folderze powinny być zdefiniowane przy użyciu następujących właściwości:
      • type - ustaw tę właściwość na uri_file, lub uri_folder, dla danych wejściowych zawartych odpowiednio w pliku lub folderze.
      • path — identyfikator URI danych wejściowych, takich jak azureml://, abfss://lub wasbs://.
      • mode - ustaw tę właściwość na direct. W tym przykładzie przedstawiono definicję danych wejściowych zadania, które mogą być określane jako $${inputs.titanic_data}}:
        inputs:
          titanic_data:
            type: uri_file
            path: azureml://datastores/workspaceblobstore/paths/data/titanic.csv
            mode: direct
        
  • outputs — ta właściwość definiuje dane wyjściowe zadania platformy Spark. Dane wyjściowe zadania platformy Spark można zapisywać w pliku lub w lokalizacji folderu, która jest zdefiniowana przy użyciu następujących trzech właściwości:

    • type — tę właściwość można ustawić na uri_file lub uri_folder, aby zapisywać dane wyjściowe w pliku lub folderze odpowiednio.
    • path — ta właściwość definiuje identyfikator URI lokalizacji wyjściowej, taki jak azureml://, abfss://lub wasbs://.
    • mode - ustaw tę właściwość na direct. W tym przykładzie przedstawiono definicję danych wyjściowych zadania, które można nazwać jako ${{outputs.wrangled_data}}:
      outputs:
        wrangled_data:
          type: uri_folder
          path: azureml://datastores/workspaceblobstore/paths/data/wrangled/
          mode: direct
      
  • identity — ta opcjonalna właściwość definiuje tożsamość używaną do przesyłania tego zadania. Może zawierać user_identity wartości i managed . Jeśli specyfikacja YAML nie definiuje tożsamości, zadanie platformy Spark używa tożsamości domyślnej.

Autonomiczne zadanie platformy Spark

W tym przykładzie specyfikacja YAML przedstawia autonomiczne zadanie platformy Spark. Używa ona bezserwerowych obliczeń platformy Spark w usłudze Azure Machine Learning:

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

Uwaga

Aby użyć dołączonej puli usługi Synapse Spark, zdefiniuj compute właściwość w przykładowym pliku specyfikacji YAML pokazanym wcześniej, a nie we resources właściwości .

Możesz użyć plików YAML pokazanych wcześniej w az ml job create poleceniu z parametrem --file , aby utworzyć autonomiczne zadanie platformy Spark, jak pokazano poniżej:

az ml job create --file <YAML_SPECIFICATION_FILE_NAME>.yaml --subscription <SUBSCRIPTION_ID> --resource-group <RESOURCE_GROUP> --workspace-name <AML_WORKSPACE_NAME>

Powyższe polecenie można wykonać za pomocą polecenia:

Składnik platformy Spark w zadaniu potoku

Składnik platformy Spark zapewnia elastyczność korzystania z tego samego składnika w wielu potokach usługi Azure Machine Learning, co krok potoku.

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure ml w wersji 2 (bieżąca)

Składnia YAML składnika platformy Spark przypomina składnię YAML dla specyfikacji zadania platformy Spark na większość sposobów. Te właściwości są definiowane inaczej w specyfikacji YAML składnika Spark:

  • name — nazwa składnika Spark.

  • version — wersja składnika Spark.

  • display_name — nazwa składnika Spark do wyświetlenia w interfejsie użytkownika i gdzie indziej.

  • description — opis składnika Spark.

  • inputs — ta właściwość przypomina właściwość opisaną inputs w składni YAML specyfikacji zadania platformy Spark, z tą różnicą, że nie definiuje path właściwości. Ten fragment kodu przedstawia przykład właściwości składnika inputs platformy Spark:

    inputs:
      titanic_data:
        type: uri_file
        mode: direct
    
  • outputs — ta właściwość przypomina właściwość opisaną outputs w składni YAML specyfikacji zadania platformy Spark, z tą różnicą, że nie definiuje path właściwości. Ten fragment kodu przedstawia przykład właściwości składnika outputs platformy Spark:

    outputs:
      wrangled_data:
        type: uri_folder
        mode: direct
    

Uwaga

Składnik platformy identitySpark nie definiuje właściwości ani compute resources . Plik specyfikacji YAML potoku definiuje te właściwości.

Ten plik specyfikacji YAML zawiera przykład składnika platformy 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

Możesz użyć składnika Spark zdefiniowanego w powyższym pliku specyfikacji YAML w zadaniu potoku usługi Azure Machine Learning. Odwiedź stronę zasobu schematu YAML zadania potoku, aby dowiedzieć się więcej o składni YAML definiującej zadanie potoku. W tym przykładzie pokazano plik specyfikacji YAML dla zadania potoku z składnikiem Spark i bezserwerowym obliczeniami platformy Spark w usłudze Azure Machine Learning:

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

Uwaga

Aby użyć dołączonej puli platformy Synapse Spark, zdefiniuj compute właściwość w przykładowym pliku specyfikacji YAML pokazanym powyżej zamiast resources właściwości.

Możesz użyć pliku specyfikacji YAML widocznego az ml job create powyżej w poleceniu przy użyciu parametru --file , aby utworzyć zadanie potoku, jak pokazano poniżej:

az ml job create --file <YAML_SPECIFICATION_FILE_NAME>.yaml --subscription <SUBSCRIPTION_ID> --resource-group <RESOURCE_GROUP> --workspace-name <AML_WORKSPACE_NAME>

Powyższe polecenie można wykonać za pomocą polecenia:

  • terminal wystąpienia obliczeniowego usługi Azure Machine Learning.
  • terminal programu Visual Studio Code połączony z wystąpieniem obliczeniowym usługi Azure Machine Learning.
  • komputer lokalny z zainstalowanym interfejsem wiersza polecenia usługi Azure Machine Learning.

Rozwiązywanie problemów z zadaniami platformy Spark

Aby rozwiązać problemy z zadaniem platformy Spark, możesz uzyskać dostęp do dzienników wygenerowanych dla tego zadania w usłudze Azure Machine Learning Studio. Aby wyświetlić dzienniki zadania platformy Spark:

  1. Przejdź do pozycji Zadania z panelu po lewej stronie w interfejsie użytkownika usługi Azure Machine Learning Studio
  2. Wybierz kartę Wszystkie zadania
  3. Wybierz wartość Nazwa wyświetlana zadania
  4. Na stronie szczegółów zadania wybierz kartę Dane wyjściowe i dzienniki
  5. W Eksploratorze plików rozwiń folder logs, a następnie rozwiń folder azureml
  6. Uzyskiwanie dostępu do dzienników zadań platformy Spark wewnątrz folderów sterownika i menedżera biblioteki

Uwaga

Aby rozwiązać problemy z zadaniami platformy Spark utworzonymi podczas interakcyjnego rozmieszczania danych w sesji notesu, wybierz pozycję Szczegóły zadania w prawym górnym rogu interfejsu użytkownika notesu. Zadania platformy Spark z interakcyjnej sesji notesu są tworzone w obszarze nazwa eksperymentu notebook-runs.

Następne kroki