مشاركة عبر


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

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

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

يأخذك هذا البرنامج التعليمي من خلال خطوات لإرسال مهمة تدريب مستندة إلى السحابة (مهمة الأمر).

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

إذا كنت ترغب في معرفة المزيد عن كيفية تحميل بياناتك إلى Azure، راجع الدرس: رفع البيانات، الوصول إليها، واستكشاف بياناتك في Azure Machine Learning.

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

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

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

    هام

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

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

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

تعيين النواة وفتحها في Visual Studio Code (VS Code)

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

    لقطة شاشة توضح كيفية إنشاء مثيل حساب.

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

    لقطة شاشة توضح كيفية بدء تشغيل مثيل حساب متوقف.

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

    لقطة شاشة توضح كيفية تعيين النواة.

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

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

  5. يمكنك تشغيل دفتر الملاحظات هنا، أو فتحه في VS Code لبيئة تطوير متكاملة كاملة (IDE) مع قوة موارد Azure التعلم الآلي. حدد فتح في VS Code، ثم حدد خيار الويب أو سطح المكتب. عند تشغيله بهذه الطريقة، يتم إرفاق VS Code بمثيل الحساب الخاص بك، والنواة، ونظام ملفات مساحة العمل.

    لقطة شاشة توضح كيفية فتح دفتر الملاحظات في VS Code.

هام

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

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

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

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

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

  • وسط
  • بيانات
  • مهمة الأمر
  • برنامج نصي للتدريب

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

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

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

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

  1. في شريط أدوات أستوديو Azure Machine Learning العلوي الأيمن، حدد اسم مساحة العمل الخاصة بك.
  2. انسخ قيمة مساحة العمل ومجموعة الموارد ومعرف الاشتراك في التعليمات البرمجية. تحتاج إلى نسخ قيمة واحدة، وإغلاق المنطقة ولصقها، ثم العودة إلى القيمة التالية.
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 على مورد الحساب الخاص بك، تحتاج إلى بيئة. تسرد بيئة وقت تشغيل البرمجيات والمكتبات التي تريد تثبيتها على الحوسبة التي يتم فيها التدريب. إنه مشابه لبيئة بايثون على جهازك المحلي. لمزيد من المعلومات، راجع ما هي بيئات التعلم الآلي في Azure.

يوفر التعلم الآلي من 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 Machine Learning 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. لمزيد من المعلومات، راجع 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. هذه المرة، استخدم create_or_update على ml_client. ml_clientهي فئة عميل تسمح لك بالاتصال باشتراك Azure باستخدام Python والتفاعل مع خدمات Azure التعلم الآلي. ml_client يسمح لك بإرسال مهامك باستخدام Python.

ml_client.create_or_update(job)

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

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

تظهر لقطة الشاشة صفحة النظرة العامة للوظيفة.

هام

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

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

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

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

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

إذا كنت تخطط للاستمرار في دروس أخرى، تخطى إلى المحتوى ذي الصلة.

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

إذا لم تكن ستستخدم نسخة الحوسبة، توقف عن ذلك:

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

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

هام

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

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

  1. في مدخل Microsoft Azure، في مربع البحث، أدخل Resource groups وحددها من النتائج.

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

  3. في صفحة Overview ، حدد Delete resource group.

    لقطة شاشة للتحديدات لحذف مجموعة موارد في مدخل Microsoft Azure.

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

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

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

تعلم الآلة الآلي هو أداة تكميلية تقلل من الوقت الذي يقضيه عالم البيانات في العثور على نموذج يعمل بشكل أفضل مع بياناته. لمزيد من المعلومات، راجع ما هو التعلم الآلي التلقائي.

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