إرسال مهام Spark في Azure التعلم الآلي

ينطبق على:ملحق ML Azure CLI v2 (الحالي)Python SDK azure-ai-ml v2 (الحالي)

يدعم Azure التعلم الآلي إرسال مهام التعلم الآلي المستقلة وإنشاء مسارات التعلم الآلي التي تتضمن خطوات سير عمل متعددة للتعلم الآلي. يعالج Azure التعلم الآلي كل من إنشاء وظيفة Spark المستقلة وإنشاء مكونات Spark القابلة لإعادة الاستخدام التي يمكن أن تستخدمها البنية الأساسية لبرنامج ربط العمليات التجارية Azure التعلم الآلي. في هذه المقالة، ستتعلم كيفية إرسال مهام Spark باستخدام:

  • واجهة مستخدم استوديو Azure التعلم الآلي
  • واجهة سطر أوامر التعلم الآلي من Azure
  • مجموعة SDK للتعلم الآلي من Azure

لمزيد من المعلومات حول Apache Spark في مفاهيم Azure التعلم الآلي، راجع هذا المورد.

المتطلبات الأساسية

ينطبق على:ملحق CLI للتعلم الآلي من Microsoft Azure v2 (الحالي)

إشعار

  • لمعرفة المزيد حول الوصول إلى الموارد أثناء استخدام Azure التعلم الآلي حساب Spark بلا خادم وتجمع Synapse Spark المرفق، راجع ضمان الوصول إلى الموارد لوظائف Spark.
  • يوفر Azure التعلم الآلي مجموعة حصص مشتركة يمكن من خلالها لجميع المستخدمين الوصول إلى الحصة النسبية للحساب لإجراء الاختبار لفترة محدودة. عند استخدام حساب Spark بلا خادم، يسمح لك Azure التعلم الآلي بالوصول إلى هذه الحصة النسبية المشتركة لفترة قصيرة.

إرفاق هوية مدارة معينة من قبل المستخدم باستخدام CLI v2

  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، أداة سطر أوامر بسيطة تستدعي واجهة برمجة تطبيقات 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، قم بتعيين أدوار المساهم ومساهم بيانات Blob التخزين، على حساب تخزين Azure المستخدم لإدخال البيانات وإخراجها، إلى الهوية التي تستخدمها مهمة Spark
  • يجب تمكين الوصول إلى الشبكة العامة في مساحة عمل Azure Synapse لضمان التنفيذ الناجح لمهمة Spark باستخدام تجمع Synapse Spark مرفق.
  • إذا كان تجمع Synapse Spark المرفق يشير إلى تجمع Synapse Spark، في مساحة عمل Azure Synapse التي تحتوي على شبكة ظاهرية مدارة مقترنة به، يجب تكوين نقطة نهاية خاصة مدارة لحساب التخزين لضمان الوصول إلى البيانات.
  • يدعم حساب Spark بلا خادم الشبكة الظاهرية المدارة من Azure التعلم الآلي. إذا تم توفير شبكة مدارة لحساب Spark بلا خادم، يجب أيضا توفير نقاط النهاية الخاصة المقابلة لحساب التخزين لضمان الوصول إلى البيانات.

إرسال وظيفة 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")

إشعار

يستخدم pyspark.pandasنموذج التعليمات البرمجية Python هذا . يدعم هذا فقط الإصدار 3.2 من وقت تشغيل Spark أو أحدث.

يأخذ البرنامج النصي أعلاه وسيطتين --titanic_data و --wrangled_data، والتي تمرر مسار بيانات الإدخال ومجلد الإخراج على التوالي.

ينطبق على:ملحق CLI للتعلم الآلي من Microsoft Azure v2 (الحالي)

لإنشاء وظيفة، يمكن تعريف وظيفة 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، بالجيجابايت (GB).
    • spark.executor.cores: عدد الذاكرات الأساسية لمنفذ Spark.
    • spark.executor.memory: تخصيص الذاكرة لمنفذ Spark، بالجيجابايت (GB).
    • 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_identitymanaged وقيم. إذا لم تحدد مواصفات 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 التعلم الآلي المتعددة، كخطوة مسار.

ينطبق على:ملحق CLI للتعلم الآلي من Microsoft Azure v2 (الحالي)

يشبه بناء جملة 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
    

إشعار

لا يعرف identityمكون Spark الخصائص أو 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.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 التعلم الآلي studio. لعرض سجلات وظيفة Spark:

  1. انتقل إلى Jobs من اللوحة اليسرى في واجهة مستخدم Azure التعلم الآلي studio
  2. حدد علامة التبويب كافة المهام
  3. حدد قيمة اسم العرض للوظيفة
  4. في صفحة تفاصيل المهمة، حدد علامة التبويب Output + logs
  5. في مستكشف الملفات، قم بتوسيع مجلد السجلات، ثم قم بتوسيع مجلد azureml
  6. الوصول إلى سجلات مهام Spark داخل مجلدات مدير المكتبة وبرنامج التشغيل

إشعار

لاستكشاف أخطاء مهام Spark التي تم إنشاؤها أثناء تشابك البيانات التفاعلية في جلسة عمل دفتر الملاحظات وإصلاحها، حدد تفاصيل المهمة بالقرب من الزاوية العلوية اليسرى من واجهة مستخدم دفتر الملاحظات. يتم إنشاء وظائف Spark من جلسة دفتر ملاحظات تفاعلية ضمن تشغيل دفتر الملاحظات لاسم التجربة.

الخطوات التالية