Aracılığıyla paylaş


Azure Machine Learning'de Spark işlerini gönderme

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)Python SDK azure-ai-ml v2 (geçerli)

Azure Machine Learning, tek başına makine öğrenmesi işlerinin gönderilmesini ve birden çok makine öğrenmesi iş akışı adımı içeren makine öğrenmesi işlem hatlarının oluşturulmasını destekler. Azure Machine Learning hem tek başına Spark işi oluşturmayı hem de Azure Machine Learning işlem hatlarının kullanabileceği yeniden kullanılabilir Spark bileşenlerinin oluşturulmasını işler. Bu makalede, spark işlerini göndermeyi şu şekilde öğreneceksiniz:

  • Azure Machine Learning stüdyosu kullanıcı arabirimi
  • Azure Machine Learning CLI
  • Azure Machine Learning SDK’sı

Azure Machine Learning kavramlarında Apache Spark hakkında daha fazla bilgi için bu kaynağa bakın.

Önkoşullar

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

Not

  • Azure Machine Learning sunucusuz Spark işlemini ve ekli Synapse Spark havuzunu kullanırken kaynak erişimi hakkında daha fazla bilgi edinmek için bkz . Spark işlerine kaynak erişimi sağlama.
  • Azure Machine Learning, tüm kullanıcıların sınırlı bir süre için test gerçekleştirmek için işlem kotasına erişebileceği paylaşılan bir kota havuzu sağlar. Sunucusuz Spark işlemini kullandığınızda, Azure Machine Learning bu paylaşılan kotaya kısa bir süre erişmenizi sağlar.

CLI v2 kullanarak kullanıcı tarafından atanan yönetilen kimliği ekleme

  1. Çalışma alanına eklenmesi gereken kullanıcı tarafından atanan yönetilen kimliği tanımlayan bir YAML dosyası oluşturun:
    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. parametresiyle --file , kullanıcı tarafından atanan yönetilen kimliği eklemek için komutundaki az ml workspace update YAML dosyasını kullanın:
    az ml workspace update --subscription <SUBSCRIPTION_ID> --resource-group <RESOURCE_GROUP> --name <AML_WORKSPACE_NAME> --file <YAML_FILE_NAME>.yaml
    

Kullanarak kullanıcı tarafından atanan yönetilen kimliği ekleme ARMClient

  1. Azure Resource Manager API'sini çağıran basit bir komut satırı aracı yükleyin ARMClient.
  2. Çalışma alanına eklenmesi gereken kullanıcı tarafından atanan yönetilen kimliği tanımlayan bir JSON dosyası oluşturun:
    {
        "properties":{
        },
        "location": "<AZURE_REGION>",
        "identity":{
            "type":"SystemAssigned,UserAssigned",
            "userAssignedIdentities":{
                "/subscriptions/<SUBSCRIPTION_ID/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<AML_USER_MANAGED_ID>": { }
            }
        }
    }
    
  3. Kullanıcı tarafından atanan yönetilen kimliği çalışma alanına eklemek için PowerShell isteminde veya komut isteminde aşağıdaki komutu yürütebilirsiniz.
    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'
    

Not

Tek başına Spark işi gönderme

Python betiği parametreleştirmesi için gerekli değişiklikler yaptıktan sonra, etkileşimli veri düzenlemesi tarafından geliştirilen bir Python betiği, daha büyük hacimli verileri işlemek üzere toplu iş göndermek için kullanılabilir. Basit bir veri düzenleme toplu işi tek başına Spark işi olarak gönderilebilir.

Spark işi, etkileşimli veri düzenlemesinden geliştirilen Python kodunun değiştirilmesiyle geliştirilebilen bağımsız değişkenleri alan bir Python betiği gerektirir. Burada örnek bir Python betiği gösterilmiştir.

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

Not

Bu Python kod örneği kullanır pyspark.pandas. Yalnızca Spark çalışma zamanı sürüm 3.2 veya üzeri bunu destekler.

Yukarıdaki betik, sırasıyla giriş verilerinin ve çıkış klasörünün yolunu geçen ve iki bağımsız değişken --titanic_data --wrangled_dataalır.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

İş oluşturmak için tek başına spark işi, komutunda az ml job create parametresiyle --file birlikte kullanılabilecek bir YAML belirtim dosyası olarak tanımlanabilir. YAML dosyasında şu özellikleri tanımlayın:

Spark iş belirtimindeki YAML özellikleri

  • type - olarak sparkayarlayın.

  • code - Bu iş için kaynak kodu ve betikleri içeren klasörün konumunu tanımlar.

  • entry - işin giriş noktasını tanımlar. Bu özelliklerden birini kapsamalıdır:

    • file - İş için giriş noktası olarak hizmet veren Python betiğinin adını tanımlar.
  • py_files- işin başarıyla yürütülmesi için içine yerleştirilecek PYTHONPATH, veya .py dosyalarının listesini .zip.eggtanımlar. Bu özellik isteğe bağlıdır.

  • jars - spark sürücüsüne eklenecek dosyaların listesini .jar ve işin başarıyla yürütülmesi için yürütücüsü CLASSPATHtanımlar. Bu özellik isteğe bağlıdır.

  • files - başarılı bir iş yürütme için her yürütücüsünün çalışma dizinine kopyalanması gereken dosyaların listesini tanımlar. Bu özellik isteğe bağlıdır.

  • archives - başarılı bir iş yürütme için her yürütücüsünün çalışma dizinine ayıklanması gereken arşivlerin listesini tanımlar. Bu özellik isteğe bağlıdır.

  • conf - bu Spark sürücüsü ve yürütücü özelliklerini tanımlar:

    • spark.driver.cores: Spark sürücüsünün çekirdek sayısı.
    • spark.driver.memory: Spark sürücüsü için gigabayt (GB) cinsinden ayrılmış bellek.
    • spark.executor.cores: Spark yürütücüsünün çekirdek sayısı.
    • spark.executor.memory: Spark yürütücüsü için gigabayt (GB) cinsinden bellek ayırma.
    • spark.dynamicAllocation.enabled - yürütücülerin dinamik olarak veya değer olarak True False ayrılması gerekip gerekmediği.
    • Yürütücülerin dinamik ayırması etkinleştirildiyse şu özellikleri tanımlayın:
      • spark.dynamicAllocation.minExecutors - dinamik ayırma için Spark yürütücüsü örneklerinin en az sayısı.
      • spark.dynamicAllocation.maxExecutors - dinamik ayırma için Spark yürütücüsü örneği sayısı üst sınırı.
    • Yürütücülerin dinamik ayırması devre dışı bırakılırsa şu özelliği tanımlayın:
      • spark.executor.instances - Spark yürütücü örneklerinin sayısı.
  • environment - işi çalıştırmak için bir Azure Machine Learning ortamı .

  • args - iş giriş noktası Python betiğine geçirilmesi gereken komut satırı bağımsız değişkenleri. Bir örnek için burada sağlanan YAML belirtim dosyasına bakın.

  • resources - bu özellik, Azure Machine Learning sunucusuz Spark işlem tarafından kullanılacak kaynakları tanımlar. Aşağıdaki özellikleri kullanır:

    • instance_type - Spark havuzu için kullanılacak işlem örneği türü. Şu anda aşağıdaki örnek türleri desteklenmektedir:
      • standard_e4s_v3
      • standard_e8s_v3
      • standard_e16s_v3
      • standard_e32s_v3
      • standard_e64s_v3
    • runtime_version - Spark çalışma zamanı sürümünü tanımlar. Şu anda aşağıdaki Spark çalışma zamanı sürümleri desteklenmektedir:
      • 3.2
      • 3.3

        Önemli

        Apache Spark için Azure Synapse Runtime: Duyurular

        • Apache Spark 3.2 için Azure Synapse Runtime:
          • EOLA Duyuru Tarihi: 8 Temmuz 2023
          • Destek Sonu Tarihi: 8 Temmuz 2024. Bu tarihten sonra çalışma zamanı devre dışı bırakılır.
        • Sürekli destek ve en iyi performans için Apache Spark 3.3'e geçiş önerilir.

    Bu bir örnektir:

    resources:
      instance_type: standard_e8s_v3
      runtime_version: "3.3"
    
  • compute - bu özellik, bu örnekte gösterildiği gibi ekli bir Synapse Spark havuzunun adını tanımlar:

    compute: mysparkpool
    
  • inputs - bu özellik Spark işi için girişleri tanımlar. Spark işinin girişleri değişmez değer veya dosya veya klasörde depolanan veriler olabilir.

    • Değişmez değer bir sayı, boole değeri veya dize olabilir. Burada bazı örnekler gösterilmiştir:
      inputs:
        sampling_rate: 0.02 # a number
        hello_number: 42 # an integer
        hello_string: "Hello world" # a string
        hello_boolean: True # a boolean value
      
    • Bir dosya veya klasörde depolanan veriler şu özellikler kullanılarak tanımlanmalıdır:
      • type- sırasıyla bir dosyada veya uri_folderklasörde bulunan giriş verileri için bu özelliği uri_file, veya olarak ayarlayın.
      • path- , abfss://veya wasbs://gibi azureml://giriş verilerinin URI'sini.
      • mode - bu özelliği olarak directayarlayın. Bu örnek, olarak adlandırılabilir $${inputs.titanic_data}}bir iş girişinin tanımını gösterir:
        inputs:
          titanic_data:
            type: uri_file
            path: azureml://datastores/workspaceblobstore/paths/data/titanic.csv
            mode: direct
        
  • outputs - bu özellik Spark işi çıkışlarını tanımlar. Spark işinin çıkışları, aşağıdaki üç özellik kullanılarak tanımlanan bir dosyaya veya klasör konumuna yazılabilir:

    • type- bu özellik, çıkış verilerini sırasıyla bir dosyaya veya uri_folder klasöre yazmak için veya olarak ayarlanabiliruri_file.
    • path- bu özellik , abfss://veya wasbs://gibi azureml://çıkış konumu URI'sini tanımlar.
    • mode - bu özelliği olarak directayarlayın. Bu örnek, olarak da adlandırılan ${{outputs.wrangled_data}}bir iş çıktısının tanımını gösterir:
      outputs:
        wrangled_data:
          type: uri_folder
          path: azureml://datastores/workspaceblobstore/paths/data/wrangled/
          mode: direct
      
  • identity - bu isteğe bağlı özellik, bu işi göndermek için kullanılan kimliği tanımlar. ve managed değerlerine sahip user_identity olabilir. YAML belirtimi bir kimlik tanımlamıyorsa Spark işi varsayılan kimliği kullanır.

Tek başına Spark işi

Bu örnek YAML belirtimi tek başına spark işini gösterir. Azure Machine Learning sunucusuz Spark işlem kullanır:

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

Not

Ekli bir Synapse Spark havuzu kullanmak için özelliğini özelliği yerine resources daha önce gösterilen örnek YAML belirtim dosyasında tanımlayıncompute.

Daha önce gösterilen YAML dosyaları komutunda az ml job create parametresiyle birlikte --file , gösterildiği gibi tek başına bir Spark işi oluşturmak için kullanılabilir:

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

Yukarıdaki komutu şu kaynaktan yürütebilirsiniz:

İşlem hattı işinde Spark bileşeni

Spark bileşeni, işlem hattı adımı olarak aynı bileşeni birden çok Azure Machine Learning işlem hattında kullanma esnekliği sunar.

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)

Spark bileşeninin YAML söz dizimi, Spark iş belirtiminin YAML söz dizimine benzer. Bu özellikler Spark bileşeni YAML belirtiminde farklı şekilde tanımlanır:

  • name - Spark bileşeninin adı.

  • version - Spark bileşeninin sürümü.

  • display_name - Kullanıcı arabiriminde ve başka bir yerde görüntülenecek Spark bileşeninin adı.

  • description - Spark bileşeninin açıklaması.

  • inputs- bu özellik Spark iş belirtimi için YAML söz diziminde açıklanan özelliğe benzerinputs, ancak özelliği tanımlamazpath. Bu kod parçacığı Spark bileşeni inputs özelliğinin bir örneğini gösterir:

    inputs:
      titanic_data:
        type: uri_file
        mode: direct
    
  • outputs- bu özellik Spark iş belirtimi için YAML söz diziminde açıklanan özelliğe benzeroutputs, ancak özelliği tanımlamazpath. Bu kod parçacığı Spark bileşeni outputs özelliğinin bir örneğini gösterir:

    outputs:
      wrangled_data:
        type: uri_folder
        mode: direct
    

Not

Spark bileşeni, veya compute resources özelliklerini tanımlamazidentity. İşlem hattı YAML belirtim dosyası bu özellikleri tanımlar.

Bu YAML belirtim dosyası bir Spark bileşeni örneği sağlar:

$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

Yukarıdaki YAML belirtim dosyasında tanımlanan Spark bileşeni bir Azure Machine Learning işlem hattı işinde kullanılabilir. İşlem hattı işini tanımlayan YAML söz dizimi hakkında daha fazla bilgi edinmek için bkz . işlem hattı işi YAML şeması . Bu örnekte Spark bileşeni ve Azure Machine Learning sunucusuz Spark işlemi içeren bir işlem hattı işi için YAML belirtim dosyası gösterilmektedir:

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

Not

Ekli bir Synapse Spark havuzu kullanmak için özelliği, özellik yerine resources yukarıda gösterilen örnek YAML belirtim dosyasında tanımlayıncompute.

Yukarıdaki YAML belirtim dosyası komutunda az ml job create parametresi kullanılarak --file kullanılabilir ve gösterildiği gibi bir işlem hattı işi oluşturulabilir:

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

Yukarıdaki komutu şu kaynaktan yürütebilirsiniz:

Spark işlerinin sorunlarını giderme

Spark işinin sorunlarını gidermek için bu iş için oluşturulan günlüklere Azure Machine Learning stüdyosu'de erişebilirsiniz. Spark işinin günlüklerini görüntülemek için:

  1. Azure Machine Learning stüdyosu kullanıcı arabiriminin sol panelinden İşler'e gidin
  2. Tüm işler sekmesini seçin
  3. İş için Görünen ad değerini seçin
  4. İş ayrıntıları sayfasında Çıkış + günlükler sekmesini seçin
  5. Dosya gezgininde logs klasörünü genişletin ve ardından azureml klasörünü genişletin
  6. Sürücü ve kitaplık yöneticisi klasörlerinin içindeki Spark iş günlüklerine erişme

Not

Bir not defteri oturumunda etkileşimli veri düzenleme sırasında oluşturulan Spark işlerinin sorunlarını gidermek için not defteri kullanıcı arabiriminin sağ üst köşesindeki İş ayrıntıları'nı seçin. Etkileşimli bir not defteri oturumundan Spark işleri, deneme adı not defteri çalıştırmaları altında oluşturulur.

Sonraki adımlar