تدريب نموذجي على الحوسبة بلا خادم

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

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

يمكن لمتخصصي التعلم الآلي تحديد الموارد التي تحتاجها الوظيفة. تدير Azure التعلم الآلي البنية الأساسية للحوسبة، وتوفر عزل شبكة مدارة لتقليل العبء عليك.

يمكن للمؤسسات أيضا تقليل التكاليف عن طريق تحديد الموارد المثلى لكل وظيفة. لا يزال بإمكان مسؤول تكنولوجيا المعلومات تطبيق التحكم عن طريق تحديد حصة الذاكرات الأساسية على مستوى الاشتراك ومساحة العمل وتطبيق نهج Azure.

يمكن استخدام الحوسبة بلا خادم لضبط النماذج في كتالوج النموذج مثل LLAMA 2. يمكن استخدام الحوسبة بلا خادم لتشغيل جميع أنواع المهام من Azure التعلم الآلي studio وSDK وCLI. يمكن أيضا استخدام الحوسبة بلا خادم لإنشاء صور البيئة وسيناريوهات لوحة معلومات الذكاء الاصطناعي المسؤولة. تستهلك الوظائف بلا خادم نفس الحصة النسبية مثل حصة حساب Azure التعلم الآلي. يمكنك اختيار أجهزة ظاهرية قياسية (مخصصة) أو أجهزة ظاهرية موضعية (ذات أولوية منخفضة). يتم دعم الهوية المدارة وهوية المستخدم للوظائف بلا خادم. نموذج الفوترة هو نفس حساب Azure التعلم الآلي.

مزايا الحوسبة بلا خادم

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

كيفية استخدام الحوسبة بلا خادم

  • يمكنك ضبط نماذج الأساس مثل LLAMA 2 باستخدام دفاتر الملاحظات كما هو موضح أدناه:

  • عند إنشاء مجموعة الحوسبة الخاصة بك، يمكنك استخدام اسمها في مهمة الأمر، مثل compute="cpu-cluster". باستخدام بلا خادم، يمكنك تخطي إنشاء مجموعة حساب، وحذف المعلمة compute لاستخدام حساب بلا خادم بدلا من ذلك. عندما compute لا يتم تحديد وظيفة، يتم تشغيل الوظيفة على حساب بلا خادم. حذف اسم الحساب في مهام CLI أو SDK لاستخدام الحوسبة بلا خادم في أنواع الوظائف التالية وتوفير الموارد التي ستحتاجها الوظيفة اختياريا من حيث عدد المثيلات ونوع المثيل:

    • مهام الأوامر، بما في ذلك الوظائف التفاعلية والتدريب الموزع
    • مهام AutoML
    • مهام المسح
    • الوظائف الموازية
  • بالنسبة لمهام البنية الأساسية لبرنامج ربط العمليات التجارية من خلال استخدام default_compute: azureml:serverless CLI للحوسبة الافتراضية على مستوى البنية الأساسية لبرنامج ربط العمليات التجارية. بالنسبة إلى مهام البنية الأساسية لبرنامج ربط العمليات التجارية من خلال SDK، استخدم default_compute="serverless". راجع مهمة البنية الأساسية لبرنامج ربط العمليات التجارية للحصول على مثال.

  • عند إرسال مهمة تدريب في studio (معاينة) ، حدد Serverless كنوع الحساب.

  • عند استخدام مصمم Azure التعلم الآلي، حدد Serverless كحوسبة افتراضية.

  • يمكنك استخدام الحوسبة بلا خادم للوحة معلومات الذكاء الاصطناعي المسؤولة

الاعتبارات الخاصة بالأداء

يمكن أن تساعد الحوسبة بلا خادم في تسريع تدريبك بالطرق التالية:

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

تحسين تقليص الحجم: عندما يتم تقليص مجموعة الحوسبة، يجب أن تنتظر مهمة جديدة حتى يحدث تقليص الحجم ثم توسيع نطاقها قبل تشغيل المهمة. مع الحوسبة بلا خادم، لا يتعين عليك انتظار تقليص الحجم ويمكن أن تبدأ مهمتك في العمل على نظام مجموعة/عقدة أخرى (بافتراض أن لديك حصة نسبية).

تحسين انشغال نظام المجموعة: عند تشغيل وظيفة على مجموعة حساب وإرسال مهمة أخرى، يتم وضع وظيفتك في قائمة الانتظار خلف الوظيفة قيد التشغيل حاليا. باستخدام الحوسبة بلا خادم، تحصل على عقدة أخرى/مجموعة أخرى لبدء تشغيل المهمة (بافتراض أن لديك حصة نسبية).

حصة أرباح البائع

عند إرسال المهمة، لا تزال بحاجة إلى حصة حساب Azure التعلم الآلي كافية للمتابعة (كل من مساحة العمل والحصة النسبية على مستوى الاشتراك). يتم تحديد حجم الجهاز الظاهري الافتراضي للوظائف بلا خادم استنادا إلى هذه الحصة النسبية. إذا قمت بتحديد حجم/عائلة الجهاز الظاهري الخاص بك:

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

عند عرض الاستخدام والحصة النسبية في مدخل Microsoft Azure، سترى الاسم "Serverless" لمشاهدة جميع الحصة النسبية المستهلكة بواسطة المهام بلا خادم.

مرور دعم الهوية وبيانات الاعتماد من خلال

  • تمرير بيانات اعتماد المستخدم من خلال : تدعم الحوسبة بلا خادم بشكل كامل تمرير بيانات اعتماد المستخدم. يتم استخدام الرمز المميز للمستخدم الذي يرسل المهمة للوصول إلى التخزين. بيانات الاعتماد هذه من معرف Microsoft Entra الخاص بك.

    from azure.ai.ml import command
    from azure.ai.ml import MLClient     # Handle to the workspace
    from azure.identity import DefaultAzureCredential     # Authentication package
    from azure.ai.ml.entities import ResourceConfiguration
    from azure.ai.ml.entities import UserIdentityConfiguration 
    
    credential = DefaultAzureCredential()
    # Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com
    ml_client = MLClient(
        credential=credential,
        subscription_id="<Azure subscription id>", 
        resource_group_name="<Azure resource group>",
        workspace_name="<Azure Machine Learning Workspace>",
    )
    job = command(
        command="echo 'hello world'",
        environment="AzureML-sklearn-1.0-ubuntu20.04-py38-cpu@latest",
            identity=UserIdentityConfiguration(),
    )
    # submit the command job
    ml_client.create_or_update(job)
    
  • الهوية المدارة المعينة من قبل المستخدم: عندما يكون لديك مساحة عمل مكونة بهوية مدارة معينة من قبل المستخدم، يمكنك استخدام هذه الهوية مع مهمة بلا خادم للوصول إلى التخزين.

    from azure.ai.ml import command
    from azure.ai.ml import MLClient     # Handle to the workspace
    from azure.identity import DefaultAzureCredential    # Authentication package
    from azure.ai.ml.entities import ResourceConfiguration
    from azure.ai.ml.entities import ManagedIdentityConfiguration
    
    credential = DefaultAzureCredential()
    # Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com
    ml_client = MLClient(
        credential=credential,
        subscription_id="<Azure subscription id>", 
        resource_group_name="<Azure resource group>",
        workspace_name="<Azure Machine Learning Workspace>",
    )
    job = command(
        command="echo 'hello world'",
        environment="AzureML-sklearn-1.0-ubuntu20.04-py38-cpu@latest",
            identity= ManagedIdentityConfiguration(),
    )
    # submit the command job
    ml_client.create_or_update(job)
    
    

للحصول على معلومات حول إرفاق الهوية المدارة المعينة من قبل المستخدم، راجع إرفاق الهوية المدارة المعينة من قبل المستخدم.

تكوين خصائص لوظائف الأوامر

إذا لم يتم تحديد هدف حساب لمهام الأوامر والمسح و AutoML، فسيتم تعيين الحساب افتراضيا إلى حساب بلا خادم. على سبيل المثال، لمهمة الأمر هذه:

from azure.ai.ml import command
from azure.ai.ml import command 
from azure.ai.ml import MLClient # Handle to the workspace
from azure.identity import DefaultAzureCredential # Authentication package

credential = DefaultAzureCredential()
# Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com
ml_client = MLClient(
    credential=credential,
    subscription_id="<Azure subscription id>", 
    resource_group_name="<Azure resource group>",
    workspace_name="<Azure Machine Learning Workspace>",
)
job = command(
    command="echo 'hello world'",
    environment="AzureML-sklearn-1.0-ubuntu20.04-py38-cpu@latest",
)
# submit the command job
ml_client.create_or_update(job)

يتم تعيين الحوسبة الافتراضية إلى حساب بلا خادم مع:

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

يمكنك تجاوز هذه الإعدادات الافتراضية. إذا كنت تريد تحديد نوع الجهاز الظاهري أو عدد العقد للحساب بلا خادم، أضف resources إلى وظيفتك:

  • instance_type لاختيار جهاز ظاهري معين. استخدم هذه المعلمة إذا كنت تريد حجم وحدة معالجة مركزية/جهاز ظاهري محدد لوحدة معالجة الرسومات

  • instance_count لتحديد عدد العقد.

    from azure.ai.ml import command 
    from azure.ai.ml import MLClient # Handle to the workspace
    from azure.identity import DefaultAzureCredential # Authentication package
    from azure.ai.ml.entities import JobResourceConfiguration 
    
    credential = DefaultAzureCredential()
    # Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com
    ml_client = MLClient(
        credential=credential,
        subscription_id="<Azure subscription id>", 
        resource_group_name="<Azure resource group>",
        workspace_name="<Azure Machine Learning Workspace>",
    )
    job = command(
        command="echo 'hello world'",
        environment="AzureML-sklearn-1.0-ubuntu20.04-py38-cpu@latest",
        resources = JobResourceConfiguration(instance_type="Standard_NC24", instance_count=4)
    )
    # submit the command job
    ml_client.create_or_update(job)
    
  • لتغيير مستوى المهمة، استخدم queue_settings للاختيار بين الأجهزة الظاهرية المخصصة (job_tier: Standard) والأولوية المنخفضة(jobtier: Spot).

    from azure.ai.ml import command
    from azure.ai.ml import MLClient    # Handle to the workspace
    from azure.identity import DefaultAzureCredential    # Authentication package
    credential = DefaultAzureCredential()
    # Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com
    ml_client = MLClient(
        credential=credential,
        subscription_id="<Azure subscription id>", 
        resource_group_name="<Azure resource group>",
        workspace_name="<Azure Machine Learning Workspace>",
    )
    job = command(
        command="echo 'hello world'",
        environment="AzureML-sklearn-1.0-ubuntu20.04-py38-cpu@latest",
        queue_settings={
          "job_tier": "spot"  
        }
    )
    # submit the command job
    ml_client.create_or_update(job)
    

مثال لكافة الحقول ذات مهام الأوامر

فيما يلي مثال على جميع الحقول المحددة بما في ذلك الهوية التي يجب أن تستخدمها المهمة. ليست هناك حاجة لتحديد إعدادات الشبكة الظاهرية حيث يتم استخدام عزل الشبكة المدارة على مستوى مساحة العمل تلقائيا.

from azure.ai.ml import command
from azure.ai.ml import MLClient      # Handle to the workspace
from azure.identity import DefaultAzureCredential     # Authentication package
from azure.ai.ml.entities import ResourceConfiguration
from azure.ai.ml.entities import UserIdentityConfiguration 

credential = DefaultAzureCredential()
# Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com
ml_client = MLClient(
    credential=credential,
    subscription_id="<Azure subscription id>", 
    resource_group_name="<Azure resource group>",
    workspace_name="<Azure Machine Learning Workspace>",
)
job = command(
    command="echo 'hello world'",
    environment="AzureML-sklearn-1.0-ubuntu20.04-py38-cpu@latest",
         identity=UserIdentityConfiguration(),
    queue_settings={
      "job_tier": "Standard"  
    }
)
job.resources = ResourceConfiguration(instance_type="Standard_E4s_v3", instance_count=1)
# submit the command job
ml_client.create_or_update(job)

عرض المزيد من الأمثلة على التدريب باستخدام الحوسبة بلا خادم في:-

مهمة AutoML

ليست هناك حاجة لتحديد الحوسبة لمهام AutoML. يمكن تحديد الموارد اختياريا. إذا لم يتم تحديد عدد المثيلات، فسيتم تعيينه افتراضيا استنادا إلى max_concurrent_trials والمعلمات max_nodes. إذا قمت بإرسال تصنيف صور AutoML أو مهمة NLP بدون نوع مثيل، يتم تحديد حجم GPU VM تلقائيا. من الممكن إرسال مهمة AutoML من خلال CLIs أو SDK أو Studio. لإرسال مهام AutoML مع الحوسبة بلا خادم في الاستوديو، قم أولا بتمكين إرسال مهمة تدريبية في ميزة studio (معاينة) في لوحة المعاينة.

إذا كنت تريد تحديد النوع أو عدد المثيلات، فاستخدم ResourceConfiguration الفئة .

# Create the AutoML classification job with the related factory-function.
from azure.ai.ml.entities import ResourceConfiguration 

classification_job = automl.classification(
    experiment_name=exp_name,
    training_data=my_training_data_input,
    target_column_name="y",
    primary_metric="accuracy",
    n_cross_validations=5,
    enable_model_explainability=True,
    tags={"my_custom_tag": "My custom value"},
)

# Limits are all optional
classification_job.set_limits(
    timeout_minutes=600,
    trial_timeout_minutes=20,
    max_trials=max_trials,
    # max_concurrent_trials = 4,
    # max_cores_per_trial: -1,
    enable_early_termination=True,
)

# Training properties are optional
classification_job.set_training(
    blocked_training_algorithms=[ClassificationModels.LOGISTIC_REGRESSION],
    enable_onnx_compatible_models=True,
)

# Serverless compute resources used to run the job
classification_job.resources = 
ResourceConfiguration(instance_type="Standard_E4s_v3", instance_count=6)

مهمة البنية الأساسية لبرنامج ربط العمليات التجارية

بالنسبة إلى مهمة البنية الأساسية لبرنامج ربط العمليات التجارية، حدد "serverless" كنوع حساب افتراضي لاستخدام الحوسبة بلا خادم.

# Construct pipeline
@pipeline()
def pipeline_with_components_from_yaml(
    training_input,
    test_input,
    training_max_epochs=20,
    training_learning_rate=1.8,
    learning_rate_schedule="time-based",
):
    """E2E dummy train-score-eval pipeline with components defined via yaml."""
    # Call component obj as function: apply given inputs & parameters to create a node in pipeline
    train_with_sample_data = train_model(
        training_data=training_input,
        max_epochs=training_max_epochs,
        learning_rate=training_learning_rate,
        learning_rate_schedule=learning_rate_schedule,
    )

    score_with_sample_data = score_data(
        model_input=train_with_sample_data.outputs.model_output, test_data=test_input
    )
    score_with_sample_data.outputs.score_output.mode = "upload"

    eval_with_sample_data = eval_model(
        scoring_result=score_with_sample_data.outputs.score_output
    )

    # Return: pipeline outputs
    return {
        "trained_model": train_with_sample_data.outputs.model_output,
        "scored_data": score_with_sample_data.outputs.score_output,
        "evaluation_report": eval_with_sample_data.outputs.eval_output,
    }


pipeline_job = pipeline_with_components_from_yaml(
    training_input=Input(type="uri_folder", path=parent_dir + "/data/"),
    test_input=Input(type="uri_folder", path=parent_dir + "/data/"),
    training_max_epochs=20,
    training_learning_rate=1.8,
    learning_rate_schedule="time-based",
)

# set pipeline to use serverless compute
pipeline_job.settings.default_compute = "serverless"

يمكنك أيضا تعيين الحوسبة بلا خادم كحوسبة افتراضية في المصمم.

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

عرض المزيد من الأمثلة على التدريب باستخدام الحوسبة بلا خادم في:-