Spark-feladatok küldése az Azure Machine Tanulás

ÉRVÉNYES:Azure CLI ml-bővítmény v2 (aktuális)Python SDK azure-ai-ml v2 (aktuális)

Az Azure Machine Tanulás támogatja az önálló gépi tanulási feladatok beküldését és olyan gépi tanulási folyamatok létrehozását, amelyek több gépi tanulási munkafolyamat-lépést is magukban foglalnak. Az Azure Machine Tanulás kezeli az önálló Spark-feladatok létrehozását és az Azure Machine Tanulás-folyamatok által használható újrafelhasználható Spark-összetevők létrehozását. Ebből a cikkből megtudhatja, hogyan küldhet be Spark-feladatokat a következő módon:

  • Azure Machine Tanulás studio felhasználói felülete
  • Azure Machine Learning CLI
  • Azure Machine Learning SDK

Az Azure Machine-beli Apache Spark Tanulás fogalmaival kapcsolatos további információkért tekintse meg ezt az erőforrást.

Előfeltételek

ÉRVÉNYES:Azure CLI ml-bővítmény 2-es verzió (aktuális)

Feljegyzés

  • Az Azure Machine Tanulás kiszolgáló nélküli Spark-számítás és a csatolt Synapse Spark-készlet használata során az erőforrás-hozzáférésről további információt a Spark-feladatok erőforrás-hozzáférésének biztosítása című témakörben talál.
  • Az Azure Machine Tanulás egy megosztott kvótakészletet biztosít, amelyből minden felhasználó hozzáférhet a számítási kvótához, hogy korlátozott ideig tesztelhessen. A kiszolgáló nélküli Spark-számítás használatakor az Azure Machine Tanulás lehetővé teszi a megosztott kvóta rövid ideig való elérését.

Felhasználó által hozzárendelt felügyelt identitás csatolása a CLI v2 használatával

  1. Hozzon létre egy YAML-fájlt, amely meghatározza a munkaterülethez csatolandó, felhasználó által hozzárendelt felügyelt identitást:
    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. A paraméterrel --file a parancs YAML-fájljával az ml workspace update csatolja a felhasználó által hozzárendelt felügyelt identitást:
    az ml workspace update --subscription <SUBSCRIPTION_ID> --resource-group <RESOURCE_GROUP> --name <AML_WORKSPACE_NAME> --file <YAML_FILE_NAME>.yaml
    

Felhasználó által hozzárendelt felügyelt identitás csatolása ARMClient

  1. Telepítsen ARMClientegy egyszerű parancssori eszközt, amely meghívja az Azure Resource Manager API-t.
  2. Hozzon létre egy JSON-fájlt, amely meghatározza a munkaterülethez csatolandó, felhasználó által hozzárendelt felügyelt identitást:
    {
        "properties":{
        },
        "location": "<AZURE_REGION>",
        "identity":{
            "type":"SystemAssigned,UserAssigned",
            "userAssignedIdentities":{
                "/subscriptions/<SUBSCRIPTION_ID/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<AML_USER_MANAGED_ID>": { }
            }
        }
    }
    
  3. A felhasználó által hozzárendelt felügyelt identitás munkaterülethez való csatolásához hajtsa végre a következő parancsot a PowerShell-parancssorban vagy a parancssorban.
    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'
    

Feljegyzés

Önálló Spark-feladat elküldése

Miután elvégezte a Python-szkriptparaméterezéshez szükséges módosításokat, az interaktív adatkonvergálás által kifejlesztett Python-szkriptek felhasználhatók egy kötegelt feladat elküldésére, hogy nagyobb mennyiségű adatot dolgozzanak fel. Egy egyszerű adatkonfiguráló kötegfeladat önálló Spark-feladatként küldhető el.

A Spark-feladatokhoz olyan Python-szkriptre van szükség, amely argumentumokat használ, és amely az interaktív adatmeghatolásból kifejlesztett Python-kód módosításával fejleszthető. Itt egy Python-példaszkript jelenik meg.

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

Feljegyzés

Ez a Python-kódminta a következőt használja pyspark.pandas: . Ezt csak a Spark 3.2-es vagy újabb verziója támogatja.

A fenti szkript két argumentumot --titanic_data használ, amelyek --wrangled_dataa bemeneti adatok és a kimeneti mappa elérési útját adják át.

ÉRVÉNYES:Azure CLI ml-bővítmény 2-es verzió (aktuális)

Feladat létrehozásához az önálló Spark-feladat yaML-specifikációs fájlként definiálható, amely a paraméterrel --file együtt használható a az ml job create parancsban. Adja meg ezeket a tulajdonságokat a YAML-fájlban:

YAML-tulajdonságok a Spark-feladat specifikációjában

  • type - a következőre van sparkállítva: .

  • code - meghatározza a feladat forráskódját és szkripteit tartalmazó mappa helyét.

  • entry - a feladat belépési pontjának meghatározása. A következő tulajdonságok egyikét kell lefednie:

    • file - meghatározza annak a Python-szkriptnek a nevét, amely belépési pontként szolgál a feladathoz.
  • py_files- meghatározza a .zip.eggfeladat sikeres végrehajtásához elhelyezendő PYTHONPATHfájlok vagy .py fájlok listáját. Ez a tulajdonság opcionális.

  • jars - meghatározza a .jar Spark-illesztőprogramon és a végrehajtón CLASSPATHa feladat sikeres végrehajtásához belefoglalandó fájlok listáját. Ez a tulajdonság opcionális.

  • files - meghatározza azoknak a fájloknak a listáját, amelyeket az egyes végrehajtók munkakönyvtárába kell másolni a sikeres feladatvégrehajtás érdekében. Ez a tulajdonság opcionális.

  • archives - meghatározza az archívumok listáját, amelyeket az egyes végrehajtók munkakönyvtárába kell kinyerni a sikeres feladatvégrehajtás érdekében. Ez a tulajdonság opcionális.

  • conf - az alábbi Spark-illesztőprogram- és végrehajtótulajdonságokat határozza meg:

    • spark.driver.cores: a Spark-illesztőprogram magjainak száma.
    • spark.driver.memory: lefoglalt memória a Spark-illesztőprogramhoz gigabájtban (GB).
    • spark.executor.cores: a Spark-végrehajtó magjainak száma.
    • spark.executor.memory: a Spark-végrehajtó memóriafoglalása gigabájtban (GB).
    • spark.dynamicAllocation.enabled- hogy a végrehajtókat dinamikusan kell-e lefoglalni, értékként vagy False értékkéntTrue.
    • Ha engedélyezve van a végrehajtók dinamikus lefoglalása, adja meg az alábbi tulajdonságokat:
      • spark.dynamicAllocation.minExecutors - a Spark-végrehajtópéldányok minimális száma dinamikus lefoglaláshoz.
      • spark.dynamicAllocation.maxExecutors - a Spark-végrehajtó példányok maximális száma dinamikus lefoglaláshoz.
    • Ha a végrehajtók dinamikus lefoglalása le van tiltva, adja meg ezt a tulajdonságot:
      • spark.executor.instances - a Spark-végrehajtópéldányok száma.
  • environment- egy Azure Machine Tanulás környezetet a feladat futtatásához.

  • args - azokat a parancssori argumentumokat, amelyeket át kell adni a feladatbeviteli pont Python-szkriptjének. Példaként tekintse meg az itt megadott YAML-specifikációs fájlt.

  • resources- ez a tulajdonság határozza meg az Azure Machine Tanulás kiszolgáló nélküli Spark-számítás által használandó erőforrásokat. A következő tulajdonságokat használja:

    • instance_type - a Spark-készlethez használandó számítási példány típusa. Jelenleg a következő példánytípusok támogatottak:
      • standard_e4s_v3
      • standard_e8s_v3
      • standard_e16s_v3
      • standard_e32s_v3
      • standard_e64s_v3
    • runtime_version - meghatározza a Spark futtatókörnyezet verzióját. Jelenleg a következő Spark-futtatókörnyezeti verziók támogatottak:
      • 3.2
      • 3.3

        Fontos

        Azure Synapse Runtime for Apache Spark: Announcements

        • Azure Synapse Runtime for Apache Spark 3.2:
          • EOLA közlemény dátuma: 2023. július 8.
          • Támogatási dátum vége: 2024. július 8. A dátum után a futtatókörnyezet le lesz tiltva.
        • A folyamatos támogatás és az optimális teljesítmény érdekében javasoljuk az Apache Spark 3.3-ra való migrálást.

    Ez egy példa:

    resources:
      instance_type: standard_e8s_v3
      runtime_version: "3.3"
    
  • compute - ez a tulajdonság egy csatolt Synapse Spark-készlet nevét határozza meg, az alábbi példában látható módon:

    compute: mysparkpool
    
  • inputs - ez a tulajdonság a Spark-feladat bemeneteit határozza meg. A Spark-feladatok bemenetei lehetnek literálértékek, vagy fájlokban vagy mappákban tárolt adatok.

    • A literális érték lehet szám, logikai érték vagy sztring. Néhány példa itt látható:
      inputs:
        sampling_rate: 0.02 # a number
        hello_number: 42 # an integer
        hello_string: "Hello world" # a string
        hello_boolean: True # a boolean value
      
    • A fájlban vagy mappában tárolt adatokat az alábbi tulajdonságok használatával kell definiálni:
      • type - állítsa be ezt a tulajdonságot uri_fileegy fájlban vagy mappában tárolt bemeneti adatokra, vagy uri_folderállítsa be ezt a tulajdonságot.
      • path - a bemeneti adatok URI-ja, például azureml://: , abfss://vagy wasbs://.
      • mode - állítsa be ezt a tulajdonságot a következőre direct: . Ez a minta egy feladatbemenet definícióját mutatja be, amely a következőnek $${inputs.titanic_data}}nevezhető:
        inputs:
          titanic_data:
            type: uri_file
            path: azureml://datastores/workspaceblobstore/paths/data/titanic.csv
            mode: direct
        
  • outputs - ez a tulajdonság határozza meg a Spark-feladat kimeneteit. A Spark-feladatok kimenetei fájlba vagy mappába írhatók, amely a következő három tulajdonsággal van definiálva:

    • type - ezt a tulajdonságot beállíthatja úgy uri_file , hogy uri_folder a kimeneti adatokat fájlba vagy mappába írja.
    • path - ez a tulajdonság határozza meg a kimeneti hely URI-t, például azureml://: , abfss://vagy wasbs://.
    • mode - állítsa be ezt a tulajdonságot a következőre direct: . Ez a minta egy feladatkimenet definícióját mutatja be, amely a következőnek ${{outputs.wrangled_data}}nevezhető:
      outputs:
        wrangled_data:
          type: uri_folder
          path: azureml://datastores/workspaceblobstore/paths/data/wrangled/
          mode: direct
      
  • identity - ez az opcionális tulajdonság határozza meg a feladat elküldéséhez használt identitást. Lehetnek user_identity és managed lehetnek értékei. Ha a YAML-specifikáció nem definiál identitást, a Spark-feladat az alapértelmezett identitást használja.

Önálló Spark-feladat

Ez a példa YAML-specifikáció egy különálló Spark-feladatot mutat be. Egy Azure Machine-Tanulás kiszolgáló nélküli Spark-számítást használ:

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

Feljegyzés

Csatolt Synapse Spark-készlet használatához a compute tulajdonság helyett a korábban bemutatott YAML-specifikációs fájlban adja meg a resources tulajdonságot.

A korábban bemutatott YAML-fájlok a az ml job create paraméterrel --file együtt használhatók önálló Spark-feladat létrehozásához a következő módon:

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

A fenti parancsot a következő forrásból hajthatja végre:

Spark-összetevő egy folyamatfeladatban

A Spark-összetevők rugalmasan használhatják ugyanazt az összetevőt több Azure Machine-Tanulás-folyamatban is, folyamatlépésként.

ÉRVÉNYES:Azure CLI ml-bővítmény 2-es verzió (aktuális)

A Spark-összetevők YAML-szintaxisa a Legtöbb módon hasonlít a Spark-feladat specifikációjának YAML-szintaxisára. Ezek a tulajdonságok eltérően vannak definiálva a Spark-összetevő YAML-specifikációjában:

  • name - a Spark-összetevő neve.

  • version - a Spark-összetevő verziója.

  • display_name - a felhasználói felületen és máshol megjelenítendő Spark-összetevő neve.

  • description - a Spark-összetevő leírása.

  • inputs- ez a tulajdonság hasonló a Spark-feladat specifikációjának YAML-szintaxisában leírt tulajdonsághozinputs, azzal a kivételt leszámítva, hogy nem határozza meg a tulajdonságotpath. Ez a kódrészlet a Spark-összetevő inputs tulajdonság egy példáját mutatja be:

    inputs:
      titanic_data:
        type: uri_file
        mode: direct
    
  • outputs- ez a tulajdonság hasonló a outputs Spark-feladat specifikációjának YAML-szintaxisában leírt tulajdonsághoz, azzal a kivételt leszámítva, hogy nem határozza meg a tulajdonságotpath. Ez a kódrészlet a Spark-összetevő outputs tulajdonság egy példáját mutatja be:

    outputs:
      wrangled_data:
        type: uri_folder
        mode: direct
    

Feljegyzés

A Spark-összetevők nem határoznak meg vagy computeresources nem határoznak meg identitytulajdonságokat. A folyamat YAML specifikációs fájlja határozza meg ezeket a tulajdonságokat.

Ez a YAML-specifikációs fájl egy Spark-összetevőre mutat példát:

$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

A fenti YAML-specifikációs fájlban definiált Spark-összetevő egy Azure Machine-Tanulás folyamatfeladatban használható. A folyamatfeladat YAML-sémája további információt a folyamatfeladatot meghatározó YAML-szintaxisról talál. Ez a példa egy folyamatfeladat YAML-specifikációs fájlját mutatja be Egy Spark-összetevővel és egy Azure Machine-Tanulás kiszolgáló nélküli Spark-számítással:

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

Feljegyzés

Csatolt Synapse Spark-készlet használatához tulajdonság helyett resources adja meg a compute tulajdonságot a fent látható YAML-mintafájlban.

A fenti YAML-specifikációs fájl a paraméterrel --file használható a az ml job create parancsban egy folyamatfeladat létrehozásához az alábbi módon:

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

A fenti parancsot a következő forrásból hajthatja végre:

Spark-feladatok hibaelhárítása

A Spark-feladatok hibaelhárításához hozzáférhet a feladathoz létrehozott naplókhoz az Azure Machine Tanulás Studióban. Spark-feladat naplóinak megtekintése:

  1. Navigáljon a Feladatok lapra az Azure Machine Tanulás studio felhasználói felületén a bal oldali panelen
  2. A Minden feladat lap kiválasztása
  3. Válassza ki a feladat megjelenítendő névértékét
  4. A feladat részletei lapon válassza a Kimenet + naplók lapot
  5. A fájlkezelőben bontsa ki a naplók mappát, majd bontsa ki az azureml mappát
  6. A Spark-feladatnaplók elérése az illesztőprogram és a tárkezelő mappájában

Feljegyzés

A jegyzetfüzet-munkamenetben az interaktív adatátvétel során létrehozott Spark-feladatok hibaelhárításához válassza a jegyzetfüzet felhasználói felületének jobb felső sarkában található Feladat részletei lehetőséget. Az interaktív jegyzetfüzet-munkamenetekből létrehozott Spark-feladatok jegyzetfüzetfuttatások néven jönnek létre.

Következő lépések