تنفيذ مكون البرنامج النصي بايثون
توضح هذه المقالة مكون تنفيذ البرنامج النصي بايثون في مصمم 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,
بعد الانتهاء من تشغيل خط الأنابيب، يمكنك معاينة الصورة في اللوحة اليمنى من المكون.

يمكنك أيضا تحميل الملف إلى أي مخزن بيانات باستخدام التعليمة البرمجية التالية. يمكنك فقط معاينة الملف في حساب التخزين الخاص بك.
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 .
أضف مكون تنفيذ Python Script إلى خط الأنابيب الخاص بك.
أضف واتصل على Dataset1 أي مجموعات بيانات من المصمم تريد استخدامها للإدخال. راجع مجموعة البيانات هذه في البرنامج النصي Python ك DataFrame1.
استخدام مجموعة بيانات اختياري. استخدمه إذا كنت ترغب في إنشاء بيانات باستخدام Python ، أو استخدم رمز Python لاستيراد البيانات مباشرة إلى المكون.
يدعم هذا المكون إضافة مجموعة بيانات ثانية على Dataset2. قم بالرجوع إلى مجموعة البيانات الثانية في البرنامج النصي Python ك DataFrame2.
يتم تحويل مجموعات البيانات المخزنة في Azure التعلم الآلي تلقائيا إلى إطارات بيانات الباندا عند تحميلها بهذا المكون.

لتضمين حزم أو تعليمات برمجية جديدة من Python، قم بتوصيل الملف المضغوط الذي يحتوي على هذه الموارد المخصصة بمنفذ حزمة البرنامج النصي . أو إذا كان البرنامج النصي أكبر من 16 كيلوبايت، فاستخدم منفذ حزمة البرامج النصية لتجنب الأخطاء مثل تجاوز CommandLine الحد الأقصى البالغ 16597 حرفا.
- قم بتجميع البرنامج النصي والموارد المخصصة الأخرى في ملف مضغوط.
- Upload الملف المضغوط كمجموعة بيانات ملف إلى الاستوديو.
- اسحب مكون مجموعة البيانات من قائمة مجموعات البيانات في جزء المكون الأيمن في صفحة تأليف المصمم.
- الاتصال مكون مجموعة البيانات إلى منفذ حزمة البرنامج النصي لمكون تنفيذ البرنامج النصي بايثون.
يمكن استخدام أي ملف موجود في الأرشيف المضغوط الذي تم تحميله أثناء تنفيذ خط الأنابيب. إذا كان الأرشيف يتضمن بنية دليل، الاحتفاظ بالهيكل.
هام
يرجى استخدام اسم فريد وذي مغزى للملفات الموجودة في حزمة البرامج النصية نظرا لأن بعض الكلمات الشائعة (مثل
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]])في مربع النص Python script، اكتب برنامج Python النصي الصالح أو الصقه.
ملاحظة
كن حذرا عند كتابة السيناريو الخاص بك. تأكد من عدم وجود أخطاء في بناء الجملة، مثل استخدام متغيرات غير معلن عنها أو مكونات أو دالات غير مستوردة. إيلاء مزيد من الاهتمام لقائمة المكونات المثبتة مسبقا. لاستيراد مكونات غير مدرجة، قم بتثبيت الحزم المقابلة في البرنامج النصي، مثل:
import os os.system(f"pip install scikit-misc")يتم تعبئة مربع نص البرنامج النصي Python مسبقا ببعض الإرشادات في التعليقات ونموذج التعليمات البرمجية للوصول إلى البيانات وإخراجها. يجب تحرير هذا الرمز أو استبداله. اتبع اصطلاحات بايثون للمسافة البادئة والغلاف:
- يجب أن يحتوي البرنامج النصي على دالة تسمى
azureml_mainنقطة الدخول لهذا المكون. - يجب أن تحتوي دالة نقطة الإدخال على وسيطتي إدخال، و
Param<dataframe2>،Param<dataframe1>حتى عند عدم استخدام هذه الوسيطات في البرنامج النصي. - يتم فك ضغط الملفات المضغوطة المتصلة بمنفذ الإدخال الثالث وتخزينها في الدليل
.\Script Bundle، والذي تتم إضافته أيضا إلى Pythonsys.path.
إذا كان ملف .zip يحتوي على
mymodule.py، فقم باستيراده باستخدامimport mymodule.يمكن إرجاع مجموعتين من البيانات إلى المصمم ، والتي يجب أن تكون تسلسلا من النوع
pandas.DataFrame. يمكنك إنشاء مخرجات أخرى في تعليمات Python البرمجية وكتابتها مباشرة إلى وحدة تخزين Azure.تحذير
لا يوصى بالاتصال بقاعدة بيانات أو وحدات تخزين خارجية أخرى في مكون تنفيذ Python Script. يمكنك استخدام مكون "استيراد البيانات" ومكون " تصدير البيانات"
- يجب أن يحتوي البرنامج النصي على دالة تسمى
إرسال المسار.
إذا اكتمل المكون، تحقق من الإخراج إذا كان كما هو متوقع.
إذا فشل المكون ، فأنت بحاجة إلى إجراء بعض استكشاف الأخطاء وإصلاحها. حدد المكون، وافتح المخرجات+السجلات في الجزء الأيسر. افتح 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 التعلم الآلي.