إرسال مهام 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؛ إذا لم يكن لديك اشتراك Azure، فبادر بإنشاء حساب مجاني قبل البدء.
- مساحة عمل للتعلم الآلي من Microsoft Azure. راجع إنشاء موارد مساحة العمل.
- إنشاء مثيل حساب Azure التعلم الآلي.
- تثبيت Azure التعلم الآلي CLI.
- (اختياري): تجمع Synapse Spark مرفق في مساحة عمل Azure التعلم الآلي.
إشعار
- لمعرفة المزيد حول الوصول إلى الموارد أثناء استخدام Azure التعلم الآلي حساب Spark بلا خادم وتجمع Synapse Spark المرفق، راجع ضمان الوصول إلى الموارد لوظائف Spark.
- يوفر Azure التعلم الآلي مجموعة حصص مشتركة يمكن من خلالها لجميع المستخدمين الوصول إلى الحصة النسبية للحساب لإجراء الاختبار لفترة محدودة. عند استخدام حساب Spark بلا خادم، يسمح لك Azure التعلم الآلي بالوصول إلى هذه الحصة النسبية المشتركة لفترة قصيرة.
إرفاق هوية مدارة معينة من قبل المستخدم باستخدام CLI v2
- إنشاء ملف 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>': {}
- باستخدام المعلمة
--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
- تثبيت
ARMClient
، أداة سطر أوامر بسيطة تستدعي واجهة برمجة تطبيقات Azure Resource Manager. - إنشاء ملف JSON الذي يحدد الهوية المدارة المعينة من قبل المستخدم التي يجب إرفاقها بمساحة العمل:
{ "properties":{ }, "location": "<AZURE_REGION>", "identity":{ "type":"SystemAssigned,UserAssigned", "userAssignedIdentities":{ "/subscriptions/<SUBSCRIPTION_ID/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<AML_USER_MANAGED_ID>": { } } } }
- لإرفاق الهوية المدارة المعينة من قبل المستخدم بمساحة العمل، قم بتنفيذ الأمر التالي في موجه 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.
- وقت تشغيل Azure Synapse ل Apache Spark 3.2:
هذا مثال على ذلك:
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>
يمكنك تنفيذ الأمر أعلاه من:
- محطة طرفية لمثيل حساب Azure التعلم الآلي.
- محطة طرفية من Visual Studio Code متصلة بمثيل حساب Azure التعلم الآلي.
- الكمبيوتر المحلي المثبت عليه Azure التعلم الآلي CLI.
مكون 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>
يمكنك تنفيذ الأمر أعلاه من:
- محطة طرفية لمثيل حساب Azure التعلم الآلي.
- محطة طرفية من Visual Studio Code متصلة بمثيل حساب Azure التعلم الآلي.
- الكمبيوتر المحلي المثبت عليه Azure التعلم الآلي CLI.
استكشاف أخطاء مهام Spark وإصلاحها
لاستكشاف أخطاء مهمة Spark وإصلاحها، يمكنك الوصول إلى السجلات التي تم إنشاؤها لهذه المهمة في Azure التعلم الآلي studio. لعرض سجلات وظيفة Spark:
- انتقل إلى Jobs من اللوحة اليسرى في واجهة مستخدم Azure التعلم الآلي studio
- حدد علامة التبويب كافة المهام
- حدد قيمة اسم العرض للوظيفة
- في صفحة تفاصيل المهمة، حدد علامة التبويب Output + logs
- في مستكشف الملفات، قم بتوسيع مجلد السجلات، ثم قم بتوسيع مجلد azureml
- الوصول إلى سجلات مهام Spark داخل مجلدات مدير المكتبة وبرنامج التشغيل
إشعار
لاستكشاف أخطاء مهام Spark التي تم إنشاؤها أثناء تشابك البيانات التفاعلية في جلسة عمل دفتر الملاحظات وإصلاحها، حدد تفاصيل المهمة بالقرب من الزاوية العلوية اليسرى من واجهة مستخدم دفتر الملاحظات. يتم إنشاء وظائف Spark من جلسة دفتر ملاحظات تفاعلية ضمن تشغيل دفتر الملاحظات لاسم التجربة.