البرنامج التعليمي: تدريب نموذج في Azure التعلم الآلي

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

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

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

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

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

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

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

  2. سجل الدخول إلى الاستوديو وحدد مساحة العمل إذا لم تكن مفتوحة بالفعل.

  3. افتح دفتر ملاحظات أو أنشئه في مساحة العمل:

    • إنشاء دفتر ملاحظات جديد، إذا كنت تريد نسخ/لصق التعليمات البرمجية في الخلايا.
    • أو افتح البرامج التعليمية/get-started-notebooks/train-model.ipynb من قسم Samples في studio. ثم حدد استنساخ لإضافة دفتر الملاحظات إلى ملفاتك. (راجع مكان العثور على العينات.)

تعيين نواة

  1. في الشريط العلوي أعلى دفتر الملاحظات المفتوح، أنشئ مثيل حساب إذا لم يكن لديك مثيل بالفعل.

    Screenshot shows how to create a compute instance.

  2. إذا تم إيقاف مثيل الحساب، فحدد Start compute وانتظر حتى يتم تشغيله.

    Screenshot shows how to start compute if it is stopped.

  3. تأكد من أن النواة، الموجودة في أعلى اليمين، هي Python 3.10 - SDK v2. إذا لم يكن الأمر كما هو، فاستخدم القائمة المنسدلة لتحديد هذا النواة.

    Screenshot shows how to set the kernel.

  4. إذا رأيت شعارا يشير إلى أنك بحاجة إلى المصادقة، فحدد المصادقة.

هام

يحتوي باقي هذا البرنامج التعليمي على خلايا دفتر ملاحظات البرنامج التعليمي. انسخها/الصقها في دفتر الملاحظات الجديد، أو قم بالتبديل إلى دفتر الملاحظات الآن إذا قمت باستنساخه.

استخدام مهمة أمر لتدريب نموذج في Azure التعلم الآلي

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

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

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

  • بيئة
  • البيانات
  • مهمة الأمر
  • برنامج نصي للتدريب

في هذا البرنامج التعليمي، سنقدم كل هذه العناصر لمثالنا: إنشاء مصنف للتنبؤ بالعملاء الذين لديهم احتمالية عالية للتخلف عن الدفع ببطاقات الائتمان.

إنشاء مقبض لمساحة العمل

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

في الخلية التالية، أدخل معرف الاشتراك واسم مجموعة الموارد واسم مساحة العمل. للعثور على هذه القيم:

  1. في شريط أدوات أستوديو Azure Machine Learning العلوي الأيمن، حدد اسم مساحة العمل الخاصة بك.
  2. انسخ قيمة مساحة العمل ومجموعة الموارد ومعرف الاشتراك في التعليمات البرمجية.
  3. ستحتاج إلى نسخ قيمة واحدة، وإغلاق المنطقة ولصقها، ثم العودة إلى القيمة التالية.
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

# authenticate
credential = DefaultAzureCredential()

SUBSCRIPTION="<SUBSCRIPTION_ID>"
RESOURCE_GROUP="<RESOURCE_GROUP>"
WS_NAME="<AML_WORKSPACE_NAME>"
# Get a handle to the workspace
ml_client = MLClient(
    credential=credential,
    subscription_id=SUBSCRIPTION,
    resource_group_name=RESOURCE_GROUP,
    workspace_name=WS_NAME,
)

إشعار

لن يؤدي إنشاء MLClient إلى الاتصال بمساحة العمل. تهيئة العميل كسولة، ستنتظر للمرة الأولى التي يحتاج فيها إلى إجراء مكالمة (سيحدث هذا في خلية التعليمات البرمجية التالية).

# Verify that the handle works correctly.  
# If you ge an error here, modify your SUBSCRIPTION, RESOURCE_GROUP, and WS_NAME in the previous cell.
ws = ml_client.workspaces.get(WS_NAME)
print(ws.location,":", ws.resource_group)

إنشاء بيئة وظيفة

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

يوفر Azure التعلم الآلي العديد من البيئات المنسقة أو الجاهزة، والتي تعد مفيدة لسيناريوهات التدريب والاستدلال الشائعة.

في هذا المثال، ستقوم بإنشاء بيئة conda مخصصة لوظائفك، باستخدام ملف conda yaml.

أولاً، أنشئ دليلاً لتخزين الملف فيه.

import os

dependencies_dir = "./dependencies"
os.makedirs(dependencies_dir, exist_ok=True)

تستخدم الخلية أدناه سحر IPython لكتابة ملف conda في الدليل الذي أنشأته للتو.

%%writefile {dependencies_dir}/conda.yaml
name: model-env
channels:
  - conda-forge
dependencies:
  - python=3.8
  - numpy=1.21.2
  - pip=21.2.4
  - scikit-learn=1.0.2
  - scipy=1.7.1
  - pandas>=1.1,<1.2
  - pip:
    - inference-schema[numpy-support]==1.3.0
    - mlflow==2.8.0
    - mlflow-skinny==2.8.0
    - azureml-mlflow==1.51.0
    - psutil>=5.8,<5.9
    - tqdm>=4.59,<4.60
    - ipykernel~=6.0
    - matplotlib

تحتوي المواصفات على بعض الحزم المعتادة، التي ستستخدمها في وظيفتك (numpy، pip).

راجع ملف yaml هذا لإنشاء هذه البيئة المخصصة وتسجيلها في مساحة العمل الخاصة بك:

from azure.ai.ml.entities import Environment

custom_env_name = "aml-scikit-learn"

custom_job_env = Environment(
    name=custom_env_name,
    description="Custom environment for Credit Card Defaults job",
    tags={"scikit-learn": "1.0.2"},
    conda_file=os.path.join(dependencies_dir, "conda.yaml"),
    image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest",
)
custom_job_env = ml_client.environments.create_or_update(custom_job_env)

print(
    f"Environment with name {custom_job_env.name} is registered to workspace, the environment version is {custom_job_env.version}"
)

تكوين مهمة تدريب باستخدام وظيفة الأمر

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

يعالج البرنامج النصي للتدريب إعداد البيانات والتدريب وتسجيل النموذج المدرب. يعالج الأسلوب train_test_split تقسيم مجموعة البيانات إلى بيانات اختبار وتدريب. في هذا البرنامج التعليمي، ستقوم بإنشاء برنامج نصي للتدريب على Python.

يمكن تشغيل مهام الأوامر من CLI أو Python SDK أو واجهة الاستوديو. في هذا البرنامج التعليمي، ستستخدم Azure التعلم الآلي Python SDK v2 لإنشاء وتشغيل مهمة الأمر.

إنشاء برنامج نصي للتدريب

لنبدأ بإنشاء البرنامج النصي للتدريب - main.py ملف python.

قم أولا بإنشاء مجلد مصدر للبرنامج النصي:

import os

train_src_dir = "./src"
os.makedirs(train_src_dir, exist_ok=True)

يعالج هذا البرنامج النصي المعالجة المسبقة للبيانات، وتقسيمها إلى بيانات اختبار وتدريب. ثم يستهلك هذه البيانات لتدريب نموذج يستند إلى شجرة وإرجاع نموذج الإخراج.

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

%%writefile {train_src_dir}/main.py
import os
import argparse
import pandas as pd
import mlflow
import mlflow.sklearn
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split

def main():
    """Main function of the script."""

    # input and output arguments
    parser = argparse.ArgumentParser()
    parser.add_argument("--data", type=str, help="path to input data")
    parser.add_argument("--test_train_ratio", type=float, required=False, default=0.25)
    parser.add_argument("--n_estimators", required=False, default=100, type=int)
    parser.add_argument("--learning_rate", required=False, default=0.1, type=float)
    parser.add_argument("--registered_model_name", type=str, help="model name")
    args = parser.parse_args()
   
    # Start Logging
    mlflow.start_run()

    # enable autologging
    mlflow.sklearn.autolog()

    ###################
    #<prepare the data>
    ###################
    print(" ".join(f"{k}={v}" for k, v in vars(args).items()))

    print("input data:", args.data)
    
    credit_df = pd.read_csv(args.data, header=1, index_col=0)

    mlflow.log_metric("num_samples", credit_df.shape[0])
    mlflow.log_metric("num_features", credit_df.shape[1] - 1)

    #Split train and test datasets
    train_df, test_df = train_test_split(
        credit_df,
        test_size=args.test_train_ratio,
    )
    ####################
    #</prepare the data>
    ####################

    ##################
    #<train the model>
    ##################
    # Extracting the label column
    y_train = train_df.pop("default payment next month")

    # convert the dataframe values to array
    X_train = train_df.values

    # Extracting the label column
    y_test = test_df.pop("default payment next month")

    # convert the dataframe values to array
    X_test = test_df.values

    print(f"Training with data of shape {X_train.shape}")

    clf = GradientBoostingClassifier(
        n_estimators=args.n_estimators, learning_rate=args.learning_rate
    )
    clf.fit(X_train, y_train)

    y_pred = clf.predict(X_test)

    print(classification_report(y_test, y_pred))
    ###################
    #</train the model>
    ###################

    ##########################
    #<save and register model>
    ##########################
    # Registering the model to the workspace
    print("Registering the model via MLFlow")
    mlflow.sklearn.log_model(
        sk_model=clf,
        registered_model_name=args.registered_model_name,
        artifact_path=args.registered_model_name,
    )

    # Saving the model to a file
    mlflow.sklearn.save_model(
        sk_model=clf,
        path=os.path.join(args.registered_model_name, "trained_model"),
    )
    ###########################
    #</save and register model>
    ###########################
    
    # Stop Logging
    mlflow.end_run()

if __name__ == "__main__":
    main()

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

تكوين الأمر

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

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

  • استخدم البيئة التي تم إنشاؤها مسبقا - يمكنك استخدام @latest الرمز للإشارة إلى أحدث إصدار من البيئة عند تشغيل الأمر.
  • تكوين إجراء سطر الأوامر نفسه - python main.py في هذه الحالة. يمكن الوصول إلى المدخلات/المخرجات في الأمر عبر التعليمة البرمجية ${{ ... }} .
  • نظرا لعدم تحديد مورد حساب، سيتم تشغيل البرنامج النصي على نظام مجموعة حساب بلا خادم يتم إنشاؤه تلقائيا.
from azure.ai.ml import command
from azure.ai.ml import Input

registered_model_name = "credit_defaults_model"

job = command(
    inputs=dict(
        data=Input(
            type="uri_file",
            path="https://azuremlexamples.blob.core.windows.net/datasets/credit_card/default_of_credit_card_clients.csv",
        ),
        test_train_ratio=0.2,
        learning_rate=0.25,
        registered_model_name=registered_model_name,
    ),
    code="./src/",  # location of source code
    command="python main.py --data ${{inputs.data}} --test_train_ratio ${{inputs.test_train_ratio}} --learning_rate ${{inputs.learning_rate}} --registered_model_name ${{inputs.registered_model_name}}",
    environment="aml-scikit-learn@latest",
    display_name="credit_default_prediction",
)

إرسال المهمة

حان الوقت الآن لإرسال المهمة لتشغيلها في Azure التعلم الآلي studio. هذه المرة سوف تستخدم create_or_update في ml_client. ml_clientهي فئة عميل تسمح لك بالاتصال باشتراك Azure باستخدام Python والتفاعل مع خدمات Azure التعلم الآلي. ml_client يسمح لك بإرسال مهامك باستخدام Python.

ml_client.create_or_update(job)

عرض إخراج الوظيفة وانتظار إكمال المهمة

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

Screenshot shows the overview page for the job.

هام

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

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

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

تنظيف الموارد

إذا كنت تخطط للمتابعة الآن إلى البرامج التعليمية الأخرى، فانتقل إلى الخطوات التالية.

إيقاف حساب مثيل

إذا كنت لن تستخدمه الآن، فأوقف مثيل الحساب:

  1. في الاستوديو، في منطقة التنقل اليسرى، حدد Compute.
  2. في علامات التبويب العليا، حدد "Compute instances"
  3. حدد "compute instance" في القائمة.
  4. في شريط الأدوات العلوي، حدد "Stop".

حذف كافة الموارد

هام

يمكن استخدام الموارد التي قمت بإنشائها كمتطلبات أساسية لبرامج تعليمية أخرى في Azure ومقالات إرشادية.

إذا كنت لا تخطط لاستخدام الموارد التي أنشأتها، فاحذفها، حتى لا تتحمل أي رسوم:

  1. من مدخل Microsoft Azure، حدد Resource groups من أقصى الجانب الأيمن.

  2. من القائمة، حدد مجموعة الموارد التي أنشأتها.

  3. حدد Delete resource group.

    Screenshot of the selections to delete a resource group in the Azure portal.

  4. أدخل اسم مجموعة الموارد. ثم حدد حذف.

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

تعرف على كيفية نشر نموذج

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

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

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