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

توضح هذه المقالة مكون تنفيذ البرنامج النصي بايثون في مصمم Azure التعلم الآلي.

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

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

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

حزم بايثون المدعومة

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

  • توزيع أناكوندا 4.5+ لبايثون 3.6

للحصول على قائمة كاملة، راجع القسم حزم 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")

ملاحظة

إذا كان خط الأنابيب الخاص بك يحتوي على مكونات متعددة لتنفيذ 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,

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

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

يوضح المثال التالي كيفية تحميل ملف صورة في مكون تنفيذ 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,

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

Preview of uploaded image

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

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,

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

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

  1. أضف مكون تنفيذ Python Script إلى خط الأنابيب الخاص بك.

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

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

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

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

    Execute Python input map

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

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

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

    هام

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

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

    Script bundle example

    فيما يلي محتوى 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 script، اكتب برنامج Python النصي الصالح أو الصقه.

    ملاحظة

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

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

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

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

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

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

    تحذير

    لا يوصى بالاتصال بقاعدة بيانات أو وحدات تخزين خارجية أخرى في مكون تنفيذ Python Script. يمكنك استخدام مكون "استيراد البيانات" ومكون " تصدير البيانات"

  5. إرسال المسار.

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

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

النتائج

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

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

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

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

حزم بايثون المثبتة مسبقا

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

  • عدال == 1.2.2
  • رؤى التطبيق == 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
  • بوتوكور = = 1.15.29
  • cachetools==4.0.0
  • certifi==2019.11.28
  • cffi==1.12.3
  • شارديت = = 3.0.4
  • انقر ==7.1.1
  • كلاود بيكل==1.3.0
  • configparser==3.7.4
  • contextlib2==0.6.0.post1
  • التشفير == 2.8
  • سايكل ==0.10.0
  • الشبت = = 0.3.1.1
  • توزيعة ===1.4.0
  • عامل الرصيف == 4.2.0
  • docutils == 0.15.2
  • dotnetcore2==2.1.13
  • قارورة = = 1.0.3
  • fusepy==3.0.1
  • جينسيم = = 3.8.1
  • google-api-core==1.16.0
  • مصادقة جوجل==1.12.0
  • جوجل-سحابة-كور ==1.3.0
  • google-cloud-storage==1.26.0
  • google-resumable-media==0.5.0
  • googleapis-common-protos==1.51.0
  • غونيكورن = = 19.9.0
  • idna==2.9
  • التعلم غير المتوازن == 0.4.3
  • ايزوديدت == 0.6.0
  • انها خطيرة = = 1.1.0
  • جيبني = = 0.4.3
  • jinja2==2.11.1
  • جيمسباث == 0.9.5
  • joblib==0.14.0
  • json-loggging-py==0.2
  • jsonpickle = = 1.3
  • jsonschema==3.0.1
  • كيوي سولفر == 1.1.0
  • لياك arff == 2.4.0
  • lightgbm ==2.2.3
  • markupsafe ==1.1.1
  • ماتبلوليب = = 3.1.3
  • المزيد من أدوات التكرار==6.0.0
  • MSAL-extensions ==0.1.3
  • مسال == 1.1.0
  • msrest==0.6.11
  • msrestazure==0.6.3
  • ndg-httpsclient==0.5.1
  • نيمبوسمل = = 1.6.1
  • numpy==1.18.2
  • oauthlib==3.1.0
  • الباندا = = 0.25.3
  • باث بيكسكس == 0.7.0
  • نقطة == 20.0.2
  • بورتالوكر==1.6.0
  • بروتوبوف = = 3.11.3
  • بيارو = = 0.16.0
  • pyasn1-modules ==0.2.8
  • pyasn1==0.4.8
  • pycparser==2.20
  • بيكريبتودومكس = = 3.7.3
  • pyjwt == 1.7.1
  • pyopenssl==19.1.0
  • pyparsing ==2.4.6
  • pyrsistent==0.16.0
  • بايثون-ديت تاوتيل==2.8.1
  • pytz == 2019.3
  • الطلبات-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
  • التخزين السري == 3.1.2
  • setuptools==46.1.1.post20200323
  • ستة == 1.14.0
  • ذكي مفتوح == 1.10.0
  • urllib3==1.25.8
  • websocket-client==0.57.0
  • werkzeug==0.16.1
  • عجلة == 0.34.2

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

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