تدريب النماذج باستخدام مجموعات بيانات Azure التعلم الآلي
في هذه المقالة، ستتعرف على كيفية العمل مع Azure التعلم الآلي مجموعات البيانات لتدريب نماذج التعلم الآلي. يمكنك استخدام مجموعات البيانات في هدف الحوسبة المحلي أو البعيد دون القلق بشأن سلاسل الاتصال أو مسارات البيانات.
للحصول على البيانات المنظمة، يرجى الاطلاع على استهلاك مجموعات البيانات في البرامج النصية للتدريب على التعلم الآلي.
بالنسبة إلى البيانات غير المنظمة، راجع تحميل الملفات على أهداف الحوسبة عن بعد.
توفر مجموعات بيانات Azure التعلم الآلي تكاملا سلسا مع وظائف تدريب Azure التعلم الآلي مثل خطوط أنابيب ScriptRunConfigوHyperDriveوAzure التعلم الآلي.
إذا لم تكن مستعدا لإتاحة بياناتك للتدريب على النماذج، ولكنك تريد تحميل بياناتك إلى دفتر الملاحظات لاستكشاف البيانات، فراجع كيفية استكشاف البيانات الموجودة في مجموعة البيانات.
المتطلبات الأساسية
لإنشاء مجموعات بيانات والتدريب عليها، تحتاج إلى:
اشتراك Azure. إذا لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانياً قبل أن تبدأ. جرب الإصدار المجاني أو المدفوع الخاص بـ Azure Machine Learning اليوم.
Azure التعلم الآلي SDK ل Python مثبتة (>= 1.13.0)، والتي تتضمن
azureml-datasetsالحزمة.
ملاحظة
تحتوي بعض فئات Dataset على تبعيات على حزمة azureml-dataprep . بالنسبة لمستخدمي Linux ، يتم دعم هذه الفئات فقط على التوزيعات التالية: Red Hat Enterprise Linux و Ubuntu و Fedora و CentOS.
استهلاك مجموعات البيانات في البرامج النصية للتدريب على التعلم الآلي
إذا كانت لديك بيانات منظمة لم يتم تسجيلها بعد كمجموعة بيانات، يمكنك إنشاء مجموعة بيانات TabularDataset واستخدامها مباشرة في البرنامج النصي للتدريب لتجربتك المحلية أو البعيدة.
في هذا المثال، يمكنك إنشاء مجموعة TabularDataset غير مسجلة وتحديدها كوسيطة برنامج نصي في كائن ScriptRunConfig للتدريب. إذا كنت تريد إعادة استخدام مجموعة TabularData هذه مع تجارب أخرى في مساحة العمل، فراجع كيفية تسجيل مجموعات البيانات في مساحة العمل.
إنشاء مجموعة بيانات جدولية
تقوم التعليمة البرمجية التالية بإنشاء TabularDataset غير مسجل من عنوان URL على ويب.
from azureml.core.dataset import Dataset
web_path ='https://dprepdata.blob.core.windows.net/demo/Titanic.csv'
titanic_ds = Dataset.Tabular.from_delimited_files(path=web_path)
توفر كائنات TabularDataset القدرة على تحميل البيانات في TabularDataset إلى باندا أو Spark DataFrame بحيث يمكنك العمل مع مكتبات إعداد البيانات والتدريب المألوفة دون الحاجة إلى مغادرة دفتر ملاحظاتك.
الوصول إلى مجموعة البيانات في البرنامج النصي للتدريب
تقوم التعليمة البرمجية التالية بتكوين وسيطة --input-data برنامج نصي ستقوم بتحديدها عند تكوين تشغيل التدريب (راجع القسم التالي). عندما يتم تمرير مجموعة البيانات الجدولية كقيمة وسيطة، سيقوم Azure ML بحل ذلك إلى معرف مجموعة البيانات، والذي يمكنك استخدامه بعد ذلك للوصول إلى مجموعة البيانات في البرنامج النصي للتدريب (دون الحاجة إلى ترميز اسم أو معرف مجموعة البيانات في البرنامج النصي). ثم يستخدم to_pandas_dataframe() الطريقة لتحميل مجموعة البيانات هذه في إطار بيانات الباندا لمزيد من استكشاف البيانات وإعدادها قبل التدريب.
ملاحظة
إذا كان مصدر البيانات الأصلي يحتوي على NaN أو سلاسل فارغة أو قيم فارغة، عند استخدام to_pandas_dataframe()، استبدال هذه القيم كقيمة فارغة .
إذا كنت بحاجة إلى تحميل البيانات المعدة في مجموعة بيانات جديدة من إطار بيانات الباندا في الذاكرة، فاكتب البيانات إلى ملف محلي، مثل الباركيه، وقم بإنشاء مجموعة بيانات جديدة من هذا الملف. تعرف على المزيد حول كيفية إنشاء مجموعات بيانات.
%%writefile $script_folder/train_titanic.py
import argparse
from azureml.core import Dataset, Run
parser = argparse.ArgumentParser()
parser.add_argument("--input-data", type=str)
args = parser.parse_args()
run = Run.get_context()
ws = run.experiment.workspace
# get the input dataset by ID
dataset = Dataset.get_by_id(ws, id=args.input_data)
# load the TabularDataset to pandas DataFrame
df = dataset.to_pandas_dataframe()
تكوين تشغيل التدريب
يتم استخدام كائن ScriptRunConfig لتكوين وإرسال تشغيل التدريب.
تقوم هذه التعليمة البرمجية بإنشاء كائن ScriptRunConfig ، srcالذي يحدد
- دليل البرامج النصية للبرامج النصية الخاصة بك. يتم تحميل جميع الملفات في هذا الدليل إلى عُقد نظام المجموعة للتنفيذ.
- السيناريو التدريبي ، train_titanic.py.
- مجموعة بيانات الإدخال للتدريب ،
titanic_dsكوسيطة نصية. سيقوم Azure ML بحل هذا إلى المعرف المقابل لمجموعة البيانات عند تمريره إلى البرنامج النصي الخاص بك. - هدف الحساب للتشغيل.
- بيئة الجري.
from azureml.core import ScriptRunConfig
src = ScriptRunConfig(source_directory=script_folder,
script='train_titanic.py',
# pass dataset as an input with friendly name 'titanic'
arguments=['--input-data', titanic_ds.as_named_input('titanic')],
compute_target=compute_target,
environment=myenv)
# Submit the run configuration for your training run
run = experiment.submit(src)
run.wait_for_completion(show_output=True)
تحميل الملفات على أهداف الحوسبة عن بعد
إذا كانت لديك بيانات غير منظمة، فقم بإنشاء FileDataset وقم إما بتحميل ملفات البيانات أو تنزيلها لإتاحتها لهدف الحوسبة عن بعد للتدريب. تعرف على وقت استخدام التحميل مقابل التنزيل لتجارب التدريب عن بعد.
المثال التالي:
- ينشئ مجموعة FileDataset
mnist_dsللإدخال، لبيانات التدريب الخاصة بك. - يحدد مكان كتابة نتائج التدريب، والترويج لتلك النتائج كمجموعة FileDataset.
- يقوم بتحميل مجموعة بيانات الإدخال إلى هدف الحساب.
ملاحظة
إذا كنت تستخدم صورة أساسية مخصصة ل Docker ، فستحتاج إلى تثبيت fuse عبر apt-get install -y fuse كتبعية لتحميل مجموعة البيانات للعمل. تعرف على كيفية إنشاء صورة إنشاء مخصصة.
للحصول على مثال دفتر الملاحظات ، راجع كيفية تكوين تشغيل تدريب باستخدام إدخال البيانات وإخراجها.
إنشاء مجموعة بيانات FileData
ينشئ المثال التالي مجموعة FileDataset غير مسجلة، mnist_data من عناوين URL على الويب. مجموعة بيانات FileDataset هذه هي بيانات الإدخال الخاصة بتدريبك.
تعرف على المزيد حول كيفية إنشاء مجموعات بيانات من مصادر أخرى.
from azureml.core.dataset import Dataset
web_paths = [
'http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz',
'http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz',
'http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz',
'http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz'
]
mnist_ds = Dataset.File.from_files(path = web_paths)
أين تكتب مخرجات التدريب
يمكنك تحديد مكان كتابة نتائج التدريب باستخدام كائن OutputFileDatasetConfig.
تسمح لك كائنات OutputFileDatasetConfig بما يلي:
- قم بتركيب أو تحميل إخراج تشغيل إلى التخزين السحابي الذي تحدده.
- احفظ الإخراج كمجموعة FileDataset إلى أنواع التخزين المدعومة التالية:
- Azure blob
- مشاركة ملف Azure
- Azure Data Lake Storage الجيلان 1 و 2
- تتبع تسلسل البيانات بين عمليات التدريب.
تحدد التعليمة البرمجية التالية أنه يجب حفظ نتائج التدريب كمجموعة FileDataset في المجلد الموجود في outputdataset مخزن بيانات blob الافتراضي ، def_blob_store.
from azureml.core import Workspace
from azureml.data import OutputFileDatasetConfig
ws = Workspace.from_config()
def_blob_store = ws.get_default_datastore()
output = OutputFileDatasetConfig(destination=(def_blob_store, 'sample/outputdataset'))
تكوين تشغيل التدريب
نوصي بتمرير مجموعة البيانات كوسيطة عند التركيب arguments عبر معلمة المنشئ ScriptRunConfig . من خلال القيام بذلك ، يمكنك الحصول على مسار البيانات (نقطة التركيب) في البرنامج النصي للتدريب الخاص بك عبر الوسيطات. بهذه الطريقة ، يمكنك استخدام نفس البرنامج النصي للتدريب لتصحيح الأخطاء المحلي والتدريب عن بعد على أي نظام أساسي سحابي.
يقوم المثال التالي بإنشاء ScriptRunConfig يمر في FileDataset عبر arguments. بعد إرسال التشغيل، يتم تحميل ملفات البيانات المشار إليها بواسطة مجموعة mnist_ds البيانات إلى هدف الحساب، ويتم حفظ نتائج التدريب في المجلد المحدد outputdataset في مخزن البيانات الافتراضي.
from azureml.core import ScriptRunConfig
input_data= mnist_ds.as_named_input('input').as_mount()# the dataset will be mounted on the remote compute
src = ScriptRunConfig(source_directory=script_folder,
script='dummy_train.py',
arguments=[input_data, output],
compute_target=compute_target,
environment=myenv)
# Submit the run configuration for your training run
run = experiment.submit(src)
run.wait_for_completion(show_output=True)
برنامج نصي تدريبي بسيط
يتم إرسال البرنامج النصي التالي من خلال ScriptRunConfig. يقرأ mnist_ds مجموعة البيانات كإدخال ، ويكتب الملف إلى outputdataset المجلد في مخزن بيانات blob الافتراضي ، def_blob_store.
%%writefile $source_directory/dummy_train.py
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
import sys
import os
print("*********************************************************")
print("Hello Azure ML!")
mounted_input_path = sys.argv[1]
mounted_output_path = sys.argv[2]
print("Argument 1: %s" % mounted_input_path)
print("Argument 2: %s" % mounted_output_path)
with open(mounted_input_path, 'r') as f:
content = f.read()
with open(os.path.join(mounted_output_path, 'output.csv'), 'w') as fw:
fw.write(content)
جبل مقابل تحميل
يتم دعم تركيب الملفات أو تنزيلها من أي تنسيق لمجموعات البيانات التي تم إنشاؤها من وحدة تخزين Azure Blob وملفات Azure Azure Data Lake Storage Gen1 و Azure Data Lake Storage Gen2 وقاعدة بيانات Azure SQL وقاعدة بيانات Azure ل PostgreSQL.
عند تحميل مجموعة بيانات، يمكنك إرفاق الملفات المشار إليها بواسطة مجموعة البيانات بدليل (نقطة تحميل ) وجعلها متوفرة على هدف الحساب. يتم دعم التركيب للحسابات المستندة إلى Linux، بما في ذلك Azure التعلم الآلي Compate والأجهزة الظاهرية وHDInsight. إذا تجاوز حجم بياناتك حجم قرص الحوسبة، فلن يكون التنزيل ممكنا. بالنسبة لهذا السيناريو، نوصي بالتركيب نظرا لأنه يتم تحميل ملفات البيانات المستخدمة بواسطة البرنامج النصي فقط في وقت المعالجة.
عند تنزيل مجموعة بيانات، سيتم تنزيل جميع الملفات المشار إليها بواسطة مجموعة البيانات إلى هدف الحوسبة. يتم دعم التنزيل لجميع أنواع الحوسبة. إذا كان البرنامج النصي الخاص بك يعالج جميع الملفات المشار إليها بواسطة مجموعة البيانات، ويمكن أن يتناسب قرص الحوسبة الخاص بك مع مجموعة البيانات الكاملة، فمن المستحسن التنزيل لتجنب النفقات العامة لتدفق البيانات من خدمات التخزين. للتنزيلات متعددة العقد ، راجع كيفية تجنب الاختناق.
ملاحظة
يجب ألا يزيد اسم مسار التنزيل عن 255 حرفا أبجديا رقميا لنظام التشغيل Windows. بالنسبة لنظام التشغيل Linux، يجب ألا يزيد اسم مسار التنزيل عن 4096 حرفا أبجديا رقميا. أيضا ، بالنسبة لنظام التشغيل Linux ، يجب ألا يزيد اسم الملف (وهو الجزء الأخير من مسار /path/to/file/{filename}التنزيل) عن 255 حرفا أبجديا رقميا.
يتم تحميل التعليمة dataset البرمجية التالية إلى الدليل المؤقت في mounted_path
import tempfile
mounted_path = tempfile.mkdtemp()
# mount dataset onto the mounted_path of a Linux-based compute
mount_context = dataset.mount(mounted_path)
mount_context.start()
import os
print(os.listdir(mounted_path))
print (mounted_path)
الحصول على مجموعات البيانات في البرامج النصية للتعلم الآلي
يمكن الوصول إلى مجموعات البيانات المسجلة محليا وعن بعد على مجموعات الحوسبة مثل Azure التعلم الآلي compute. للوصول إلى مجموعة البيانات المسجلة عبر التجارب، استخدم التعليمة البرمجية التالية للوصول إلى مساحة العمل والحصول على مجموعة البيانات التي تم استخدامها في التشغيل الذي تم إرساله مسبقا. بشكل افتراضي، get_by_name() ترجع الطريقة الموجودة Dataset على الفئة أحدث إصدار من مجموعة البيانات المسجلة في مساحة العمل.
%%writefile $script_folder/train.py
from azureml.core import Dataset, Run
run = Run.get_context()
workspace = run.experiment.workspace
dataset_name = 'titanic_ds'
# Get a dataset by name
titanic_ds = Dataset.get_by_name(workspace=workspace, name=dataset_name)
# Load a TabularDataset into pandas DataFrame
df = titanic_ds.to_pandas_dataframe()
الوصول إلى شفرة المصدر أثناء التدريب
تتميز وحدة تخزين Azure Blob بسرعات إنتاجية أعلى من مشاركة ملفات Azure وستوسع إلى أعداد كبيرة من المهام التي بدأت بالتوازي. لهذا السبب، نوصي بتكوين عمليات التشغيل لاستخدام تخزين Blob لنقل ملفات التعليمات البرمجية المصدرية.
يحدد مثال التعليمات البرمجية التالي في تكوين التشغيل مخزن بيانات blob الذي يجب استخدامه لعمليات نقل التعليمات البرمجية المصدرية.
# workspaceblobstore is the default blob storage
src.run_config.source_directory_data_store = "workspaceblobstore"
أمثلة على دفاتر الملاحظات
- للحصول على أمثلة ومفاهيم إضافية لمجموعة البيانات، راجع دفاتر ملاحظات مجموعة البيانات.
- تعرف على كيفية وضع معلمات لمجموعات البيانات في خطوط أنابيب ML الخاصة بك.
استكشاف الأخطاء وإصلاحها
فشل تهيئة مجموعة البيانات: انتهت مهلة انتظار أن تكون نقطة التحميل جاهزة:
- إذا لم يكن لديك أي قواعد لمجموعة أمان الشبكة الصادرة وكنت تستخدم
azureml-sdk>=1.12.0التحديثazureml-dataset-runtimeوتبعياته لتكون الأحدث للإصدار الثانوي المحدد، أو إذا كنت تستخدمه في عملية تشغيل، فأعد إنشاء بيئتك حتى تتمكن من الحصول على أحدث تصحيح مع الإصلاح. - إذا كنت تستخدم
azureml-sdk<1.12.0، فقم بالترقية إلى أحدث إصدار. - إذا كان لديك قواعد NSG الصادرة ، فتأكد من وجود قاعدة صادرة تسمح بكل حركة المرور لعلامة
AzureResourceMonitorالخدمة .
فشل تهيئة مجموعة البيانات: كان سبب StreamAccessException هو ThrottlingException
بالنسبة لتنزيلات الملفات متعددة العقد، قد تحاول كافة العقد تنزيل كافة الملفات الموجودة في مجموعة بيانات الملفات من خدمة Azure Storage، مما يؤدي إلى حدوث خطأ اختناق. لتجنب الاختناق ، قم في البداية بتعيين متغير AZUREML_DOWNLOAD_CONCURRENCY البيئة إلى قيمة 8 أضعاف عدد نوى وحدة المعالجة المركزية مقسوما على عدد العقد. قد يتطلب إعداد قيمة لمتغير البيئة هذا بعض التجريب ، لذا فإن الإرشادات المذكورة أعلاه هي نقطة بداية.
يفترض المثال التالي 32 نواة و 4 عقد.
from azureml.core.environment import Environment
myenv = Environment(name="myenv")
myenv.environment_variables = {"AZUREML_DOWNLOAD_CONCURRENCY":64}
تخزين AzureFile
غير قادر على تحميل ملفات المشروع إلى دليل العمل في AzureFile بسبب تحميل التخزين بشكل زائد:
إذا كنت تستخدم مشاركة الملفات لأحمال عمل أخرى، مثل نقل البيانات، فإن التوصية هي استخدام النقاط بحيث تكون مشاركة الملفات مجانية للاستخدام في إرسال عمليات التشغيل.
خيار آخر هو تقسيم عبء العمل بين مساحتي عمل مختلفتين.
ConfigException: تعذر إنشاء اتصال ب AzureFileService بسبب بيانات الاعتماد المفقودة. يجب ربط مفتاح الحساب أو الرمز المميز SAS بمخزن blob الافتراضي لمساحة العمل.
لضمان ربط بيانات اعتماد الوصول إلى مساحة التخزين بمساحة العمل ومخزن بيانات الملفات المقترن، أكمل الخطوات التالية:
- انتقل إلى مساحة العمل الخاصة بك في مدخل Azure.
- حدد ارتباط التخزين في صفحة نظرة عامة على مساحة العمل.
- في صفحة التخزين، حدد مفاتيح الوصول في القائمة الموجودة على الجانب الأيمن.
- انسخ المفتاح.
- انتقل إلى استوديو Azure التعلم الآلي لمساحة العمل الخاصة بك.
- في الاستوديو، حدد مخزن بيانات الملفات الذي تريد توفير بيانات اعتماد المصادقة له.
- حدد تحديث المصادقة .
- الصق المفتاح من الخطوات السابقة.
- حدد حفظ.
تمرير البيانات كمدخلات
TypeError: FileNotFound: لا يوجد مثل هذا الملف أو الدليل: يحدث هذا الخطأ إذا لم يكن مسار الملف الذي توفره موجودا في مكان وجود الملف. تحتاج إلى التأكد من أن الطريقة التي تشير بها إلى الملف تتوافق مع المكان الذي قمت فيه بتركيب مجموعة البيانات الخاصة بك على هدف الحوسبة الخاص بك. لضمان حالة حتمية، نوصي باستخدام المسار المجرد عند تركيب مجموعة بيانات إلى هدف حساب. على سبيل المثال ، في التعليمة البرمجية التالية ، نقوم بتحميل مجموعة البيانات تحت جذر نظام الملفات لهدف الحوسبة ، /tmp.
# Note the leading / in '/tmp/dataset'
script_params = {
'--data-folder': dset.as_named_input('dogscats_train').as_mount('/tmp/dataset'),
}
إذا لم تقم بتضمين الشرطة المائلة الأمامية البادئة، '/'، فستحتاج إلى بادئة دليل العمل على سبيل المثال /mnt/batch/.../tmp/dataset على هدف الحوسبة للإشارة إلى المكان الذي تريد تحميل مجموعة البيانات فيه.
الخطوات التالية
التدريب التلقائي على نماذج التعلم الآلي باستخدام TabularDatasets.
تدريب نماذج تصنيف الصور باستخدام FileDatasets.