مشاركة عبر


تنفيذ مكون برنامج Python النصي

توضح هذه المقالة مكون Execute Python Script في مصمم التعلم الآلي من Azure.

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

باستخدام Python، يمكنك تنفيذ مهام لا تدعمها المكونات الموجودة، مثل:

  • تصور البيانات باستخدام matplotlib.
  • استخدام مكتبات Python لتعداد مجموعات البيانات والنماذج في مساحة العمل الخاصة بك.
  • قراءة البيانات وتحميلها ومعالجتها من مصادر لا يدعمها مكون استيراد البيانات .
  • قم بتشغيل التعليمات البرمجية للتعلم العميق الخاص بك.

حزم Python المدعومة

يستخدم التعلم الآلي من Azure توزيع Anaconda ل Python، والذي يتضمن العديد من الأدوات المساعدة الشائعة لمعالجة البيانات. سنقوم بتحديث إصدار Anaconda تلقائيا. الإصدار الحالي هو:

  • توزيع Anaconda ل Python 3.10

للحصول على قائمة كاملة، راجع القسم حزم Python المثبتة مسبقا.

لتثبيت الحزم غير الموجودة في القائمة المثبتة مسبقا (على سبيل المثال، scikit-misc)، أضف التعليمات البرمجية التالية إلى البرنامج النصي الخاص بك:

import os
os.system(f"pip install scikit-misc")

استخدم التعليمات البرمجية التالية لتثبيت الحزم للحصول على أداء أفضل، خاصة للاستدلال:

import importlib.util
package_name = 'scikit-misc'
spec = importlib.util.find_spec(package_name)
if spec is None:
    import os
    os.system(f"pip install scikit-misc")

ملاحظة

إذا كانت البنية الأساسية لبرنامج ربط العمليات التجارية الخاصة بك تحتوي على العديد من مكونات Execute Python Script التي تحتاج إلى حزم غير موجودة في القائمة المثبتة مسبقا، فقم بتثبيت الحزم في كل مكون.

تحذير

لا يدعم مكون Excute Python Script تثبيت الحزم التي تعتمد على مكتبات أصلية إضافية مع أمر مثل "apt-get"، مثل Java وPyODBC وما إلى ذلك. وذلك لأن هذا المكون يتم تنفيذه في بيئة بسيطة مع Python مثبت مسبقا فقط وبإذن غير مسؤول.

الوصول إلى مساحة العمل الحالية ومجموعات البيانات المسجلة

يمكنك الرجوع إلى نموذج التعليمات البرمجية التالي للوصول إلى مجموعات البيانات المسجلة في مساحة العمل الخاصة بك:

def azureml_main(dataframe1 = None, dataframe2 = None):

    # Execution logic goes here
    print(f'Input pandas.DataFrame #1: {dataframe1}')
    from azureml.core import Run
    run = Run.get_context(allow_offline=True)
    #access to current workspace
    ws = run.experiment.workspace

    #access to registered dataset of current workspace
    from azureml.core import Dataset
    dataset = Dataset.get_by_name(ws, name='test-register-tabular-in-designer')
    dataframe1 = dataset.to_pandas_dataframe()
     
    # If a zip file is connected to the third input port,
    # it is unzipped under "./Script Bundle". This directory is added
    # to sys.path. Therefore, if your zip file contains a Python file
    # mymodule.py you can import it using:
    # import mymodule

    # Return value must be of a sequence of pandas.DataFrame
    # E.g.
    #   -  Single return value: return dataframe1,
    #   -  Two return values: return dataframe1, dataframe2
    return dataframe1,

تحميل الملفات

يدعم مكون Execute Python Script تحميل الملفات باستخدام Azure Machine Learning Python SDK.

يوضح المثال التالي كيفية تحميل ملف صورة في مكون Execute Python Script:


# The script MUST contain a function named azureml_main,
# which is the entry point for this component.

# Imports up here can be used to
import pandas as pd

# The entry point function must have two input arguments:
#   Param<dataframe1>: a pandas.DataFrame
#   Param<dataframe2>: a pandas.DataFrame
def azureml_main(dataframe1 = None, dataframe2 = None):

    # Execution logic goes here
    print(f'Input pandas.DataFrame #1: {dataframe1}')

    from matplotlib import pyplot as plt
    plt.plot([1, 2, 3, 4])
    plt.ylabel('some numbers')
    img_file = "line.png"
    plt.savefig(img_file)

    from azureml.core import Run
    run = Run.get_context(allow_offline=True)
    run.upload_file(f"graphics/{img_file}", img_file)

    # Return value must be of a sequence of pandas.DataFrame
    # For example:
    #   -  Single return value: return dataframe1,
    #   -  Two return values: return dataframe1, dataframe2
    return dataframe1,

بعد الانتهاء من تشغيل البنية الأساسية لبرنامج ربط العمليات التجارية، يمكنك معاينة الصورة في اللوحة اليمنى للمكون.

معاينة للصورة التي تم تحميلها

يمكنك أيضا تحميل ملف إلى أي مخزن بيانات باستخدام التعليمات البرمجية التالية. يمكنك فقط معاينة الملف في حساب التخزين الخاص بك.

import pandas as pd

# The entry point function MUST have two input arguments.
# If the input port is not connected, the corresponding
# dataframe argument will be None.
#   Param<dataframe1>: a pandas.DataFrame
#   Param<dataframe2>: a pandas.DataFrame
def azureml_main(dataframe1 = None, dataframe2 = None):

    # Execution logic goes here
    print(f'Input pandas.DataFrame #1: {dataframe1}')

    from matplotlib import pyplot as plt
    import os

    plt.plot([1, 2, 3, 4])
    plt.ylabel('some numbers')
    img_file = "line.png"

    # Set path
    path = "./img_folder"
    os.mkdir(path)
    plt.savefig(os.path.join(path,img_file))

    # Get current workspace
    from azureml.core import Run
    run = Run.get_context(allow_offline=True)
    ws = run.experiment.workspace
    
    # Get a named datastore from the current workspace and upload to specified path
    from azureml.core import Datastore 
    datastore = Datastore.get(ws, datastore_name='workspacefilestore')
    datastore.upload(path)

    return dataframe1,

كيفية تكوين Execute Python Script

يحتوي مكون Execute Python Script على نموذج تعليمة Python البرمجية التي يمكنك استخدامها كنقطة بداية. لتكوين مكون Execute Python Script، قم بتوفير مجموعة من المدخلات ورمز Python لتشغيله في مربع نص البرنامج النصي Python .

  1. أضف مكون Execute Python Script إلى البنية الأساسية لبرنامج ربط العمليات التجارية الخاصة بك.

  2. أضف واتصل على Dataset1 أي مجموعات بيانات من المصمم الذي تريد استخدامه للإدخل. راجع مجموعة البيانات هذه في برنامج Python النصي الخاص بك ك DataFrame1.

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

    يدعم هذا المكون إضافة مجموعة بيانات ثانية على Dataset2. الرجوع إلى مجموعة البيانات الثانية في برنامج Python النصي الخاص بك ك DataFrame2.

    يتم تحويل مجموعات البيانات المخزنة في التعلم الآلي من Azure تلقائيا إلى إطارات بيانات pandas عند تحميلها مع هذا المكون.

    تنفيذ خريطة إدخال Python

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

    1. تجميع البرنامج النصي والموارد المخصصة الأخرى في ملف مضغوط.
    2. قم بتحميل الملف المضغوط كمجموعة بيانات ملف إلى الاستوديو.
    3. اسحب مكون مجموعة البيانات من قائمة Datasets في جزء المكون الأيسر في صفحة تأليف المصمم.
    4. قم بتوصيل مكون مجموعة البيانات بمنفذ حزمة البرنامج النصي لمكون Execute Python Script .

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

    هام

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

    فيما يلي مثال على حزمة البرنامج النصي، والذي يحتوي على ملف برنامج نصي Python وملف txt:

    مثال على حزمة البرنامج النصي

    فيما يلي محتوى my_script.py:

    def my_func(dataframe1):
        return dataframe1
    

    فيما يلي نموذج التعليمات البرمجية الذي يوضح كيفية استهلاك الملفات في حزمة البرنامج النصي:

    import pandas as pd
    from my_script import my_func
    
    def azureml_main(dataframe1 = None, dataframe2 = None):
    
        # Execution logic goes here
        print(f'Input pandas.DataFrame #1: {dataframe1}')
    
        # Test the custom defined Python function
        dataframe1 = my_func(dataframe1)
    
        # Test to read custom uploaded files by relative path
        with open('./Script Bundle/my_sample.txt', 'r') as text_file:
            sample = text_file.read()
    
        return dataframe1, pd.DataFrame(columns=["Sample"], data=[[sample]])
    
  4. في مربع النص برنامج Python النصي ، اكتب أو الصق برنامج Python النصي الصالح.

    ملاحظة

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

    import os
    os.system(f"pip install scikit-misc")
    

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

    • يجب أن يحتوي البرنامج النصي على دالة تسمى azureml_main كنقطة إدخال لهذا المكون.
    • يجب أن تحتوي دالة نقطة الإدخال على وسيطتي إدخال، وParam<dataframe1>، Param<dataframe2> حتى عندما لا يتم استخدام هذه الوسيطات في البرنامج النصي الخاص بك.
    • يتم فك ضغط الملفات المضغوطة المتصلة بمنفذ الإدخال الثالث وتخزينها في الدليل .\Script Bundle، والذي تتم إضافته أيضا إلى Python sys.path.

    إذا كان ملف .zip يحتوي على mymodule.py، فاستورده باستخدام import mymodule.

    يمكن إرجاع مجموعتي بيانات إلى المصمم، والتي يجب أن تكون سلسلة من النوع pandas.DataFrame. يمكنك إنشاء مخرجات أخرى في التعليمات البرمجية ل Python وكتابتها مباشرة إلى تخزين Azure.

    تحذير

    لا يوصى بالاتصال بقاعدة بيانات أو مخازن خارجية أخرى في مكون Execute Python Script. يمكنك استخدام مكون Import Data ومكونExport Data

  5. إرسال البنية الأساسية.

    إذا اكتمل المكون، فتحقق من الإخراج إذا كان كما هو متوقع.

    إذا فشل المكون، تحتاج إلى القيام ببعض استكشاف الأخطاء وإصلاحها. حدد المكون، وافتح Outputs+logs في الجزء الأيمن. افتح 70_driver_log.txt وابحث في azureml_main، ثم يمكنك العثور على السطر الذي تسبب في الخطأ. على سبيل المثال، يشير "ملف "/tmp/tmp01_ID/user_script.py"، السطر 17، في azureml_main" إلى حدوث الخطأ في السطر 17 من البرنامج النصي Python.

النتائج

يجب توفير نتائج أي حسابات بواسطة التعليمات البرمجية ل Python المضمنة ك pandas.DataFrame، والتي يتم تحويلها تلقائيا إلى تنسيق مجموعة بيانات التعلم الآلي من Azure. يمكنك بعد ذلك استخدام النتائج مع مكونات أخرى في البنية الأساسية لبرنامج ربط العمليات التجارية.

يقوم المكون بإرجاع مجموعتي بيانات:

  • مجموعة بيانات النتائج 1، المحددة بواسطة أول إطار بيانات Pandas تم إرجاعه في برنامج نصي Python.

  • نتيجة مجموعة البيانات 2، التي تم تعريفها بواسطة إطار بيانات pandas الثاني الذي تم إرجاعه في برنامج نصي Python.

حزم Python المثبتة مسبقا

الحزم المثبتة مسبقا هي:

  • adal==1.2.2
  • applicationinsights==0.11.9
  • attrs==19.3.0
  • azure-common==1.1.25
  • azure-core==1.3.0
  • azure-graphrbac==0.61.1
  • azure-identity==1.3.0
  • azure-mgmt-authorization==0.60.0
  • azure-mgmt-containerregistry==2.8.0
  • azure-mgmt-keyvault==2.2.0
  • azure-mgmt-resource==8.0.1
  • azure-mgmt-storage==8.0.0
  • azure-storage-blob==1.5.0
  • azure-storage-common==1.4.2
  • azureml-core==1.1.5.5
  • azureml-dataprep-native==14.1.0
  • azureml-dataprep==1.3.5
  • azureml-defaults==1.1.5.1
  • azureml-designer-classic-modules==0.0.118
  • azureml-designer-core==0.0.31
  • azureml-designer-internal==0.0.18
  • azureml-model-management-sdk==1.0.1b6.post1
  • azureml-pipeline-core==1.1.5
  • azureml-telemetry==1.1.5.3
  • backports.tempfile==1.0
  • backports.weakref==1.0.post1
  • boto3==1.12.29
  • botocore==1.15.29
  • ذاكرة التخزين المؤقت==4.0.0
  • certifi==2019.11.28
  • cffi==1.12.3
  • chardet==3.0.4
  • click==7.1.1
  • cloudpickle==1.3.0
  • configparser==3.7.4
  • contextlib2==0.6.0.post1
  • التشفير==2.8
  • cycler==0.10.0
  • dill==0.3.1.1
  • توزيع==1.4.0
  • docker==4.2.0
  • docutils==0.15.2
  • dotnetcore2==2.1.13
  • flask==1.0.3
  • fusepy==3.0.1
  • gensim==3.8.1
  • google-api-core==1.16.0
  • google-auth==1.12.0
  • google-cloud-core==1.3.0
  • google-cloud-storage==1.26.0
  • google-resumable-media==0.5.0
  • googleapis-common-protos==1.51.0
  • gunicorn==19.9.0
  • idna==2.9
  • غير متوازن-learn==0.4.3
  • isodate==0.6.0
  • itsdangerous==1.1.0
  • جيبني==0.4.3
  • jinja2==2.11.1
  • jmespath==0.9.5
  • joblib==0.14.0
  • json-logging-py==0.2
  • jsonpickle==1.3
  • jsonschema==3.0.1
  • kiwisolver==1.1.0
  • liac-arff==2.4.0
  • lightgbm==2.2.3
  • markupsafe==1.1.1
  • matplotlib==3.1.3
  • more-itertools==6.0.0
  • msal-extensions==0.1.3
  • msal==1.1.0
  • msrest==0.6.11
  • msrestazure==0.6.3
  • ndg-httpsclient==0.5.1
  • nimbusml==1.6.1
  • numpy==1.18.2
  • oauthlib==3.1.0
  • pandas==0.25.3
  • pathspec==0.7.0
  • pip==20.0.2
  • portalocker==1.6.0
  • protobuf==3.11.3
  • pyarrow==0.16.0
  • pyasn1-modules==0.2.8
  • pyasn1==0.4.8
  • pycparser==2.20
  • pycryptodomex==3.7.3
  • pyjwt==1.7.1
  • pyopenssl==19.1.0
  • pyparsing==2.4.6
  • pyrsistent==0.16.0
  • python-dateutil==2.8.1
  • pytz==2019.3
  • requests-oauthlib==1.3.0
  • الطلبات==2.23.0
  • rsa==4.0
  • ruamel.yaml==0.15.89
  • s3transfer==0.3.3
  • scikit-learn==0.22.2
  • scipy==1.4.1
  • secretstorage==3.1.2
  • setuptools==46.1.1.post20200323
  • ستة==1.14.0
  • smart-open==1.10.0
  • urllib3==1.25.8
  • websocket-client==0.57.0
  • werkzeug==0.16.1
  • عجلة==0.34.2

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

راجع مجموعة المكونات المتوفرة للتعلم الآلي من Azure.