تصور عمليات تشغيل التجربة والمقاييس باستخدام TensorBoard وAzure التعلم الآلي
في هذه المقالة، ستتعرف على كيفية عرض عمليات تشغيل التجربة والمقاييس في TensorBoard باستخدام الحزمة tensorboard في Azure التعلم الآلي SDK الرئيسي. بمجرد فحص عمليات تشغيل التجربة، يمكنك ضبط نماذج التعلم الآلي وإعادة تدريبها بشكل أفضل.
TensorBoard عبارة عن مجموعة من تطبيقات الويب لفحص وفهم بنية تجربتك وأدائك.
تعتمد كيفية تشغيل TensorBoard مع تجارب Azure التعلم الآلي على نوع التجربة:
إذا كانت تجربتك تنتج أصلا ملفات السجل القابلة للاستهلاك بواسطة TensorBoard ، مثل تجارب PyTorch و Chainer و TensorFlow ، فيمكنك تشغيل TensorBoard مباشرة من سجل تشغيل التجربة.
بالنسبة للتجارب التي لا تنتج أصلا ملفات TensorBoard القابلة للاستهلاك، مثل تجارب Scikit-learn أو Azure التعلم الآلي، استخدم
export_to_tensorboard()الطريقة لتصدير محفوظات التشغيل كسجلات TensorBoard وتشغيل TensorBoard من هناك.
تلميح
المعلومات الواردة في هذه الوثيقة هي في المقام الأول لعلماء البيانات والمطورين الذين يرغبون في مراقبة عملية التدريب النموذجي. إذا كنت مسؤولا مهتما بمراقبة استخدام الموارد والأحداث من تعلم Azure Machine، مثل الحصص النسبية أو عمليات تشغيل التدريب المكتملة أو عمليات نشر النماذج المكتملة، فراجع مراقبة Azure التعلم الآلي.
المتطلبات الأساسية
- لتشغيل TensorBoard وعرض محفوظات تشغيل التجارب، يجب أن تكون تجاربك قد مكنت التسجيل مسبقا لتتبع مقاييسها وأدائها.
- يمكن تشغيل التعليمة البرمجية في هذا المستند في أي من البيئات التالية:
- Azure التعلم الآلي compute instance - لا يلزم إجراء تنزيلات أو تثبيت
- إكمال التشغيل السريع: ابدأ باستخدام Azure التعلم الآلي لإنشاء خادم دفاتر ملاحظات مخصص محمل مسبقا بحزمة SDK ومستودع النماذج.
- في مجلد العينات على خادم دفتر الملاحظات، ابحث عن دفتري ملاحظات مكتملين وموسعة من خلال الانتقال إلى هذه الأدلة:
- how-to-use-azureml > track-and-monitor-experiments > tensorboard export-run-history-to-tensorboard export-run-history-to-tensorboard.ipynb >>
- how-to-use-azureml > track-and-monitor-experiments > tensorboard tensorboard tensorboard.ipynb >>
- خادم الكمبيوتر المحمول Juptyer الخاص بك
- تثبيت Azure التعلم الآلي SDK مع ميزة
tensorboardإضافية - أنشئ مساحة عمل Azure Machine Learning.
- إنشاء ملف تكوين مساحة عمل.
- تثبيت Azure التعلم الآلي SDK مع ميزة
- Azure التعلم الآلي compute instance - لا يلزم إجراء تنزيلات أو تثبيت
الخيار 1: عرض محفوظات التشغيل مباشرة في TensorBoard
يعمل هذا الخيار مع التجارب التي تقوم أصلا بإخراج ملفات السجل القابلة للاستهلاك بواسطة TensorBoard، مثل تجارب PyTorch وChainer وTensorFlow. إذا لم يكن هذا هو الحال في تجربتك، فاستخدم export_to_tensorboard() الطريقة بدلا من ذلك.
تستخدم التعليمة البرمجية للمثال التالي تجربة العرض التوضيحي MNIST من مستودع TensorFlow في هدف حساب بعيد أو Azure التعلم الآلي Compute. بعد ذلك ، سنقوم بتكوين وبدء تشغيل للتدريب على نموذج TensorFlow ، ثم بدء تشغيل TensorBoard ضد تجربة TensorFlow هذه.
تعيين اسم التجربة وإنشاء مجلد المشروع
هنا نقوم بتسمية التجربة وإنشاء مجلدها.
from os import path, makedirs
experiment_name = 'tensorboard-demo'
# experiment folder
exp_dir = './sample_projects/' + experiment_name
if not path.exists(exp_dir):
makedirs(exp_dir)
تنزيل رمز تجربة TensorFlow التجريبي
يحتوي مستودع TensorFlow على عرض توضيحي ل MNIST مع أجهزة TensorBoard واسعة النطاق. لا نحتاج ولا نحتاج إلى تغيير أي من التعليمات البرمجية لهذا العرض التوضيحي حتى يعمل مع Azure التعلم الآلي. في التعليمة البرمجية التالية ، نقوم بتنزيل رمز MNIST وحفظه في مجلد التجربة الذي تم إنشاؤه حديثا.
import requests
import os
tf_code = requests.get("https://raw.githubusercontent.com/tensorflow/tensorflow/r1.8/tensorflow/examples/tutorials/mnist/mnist_with_summaries.py")
with open(os.path.join(exp_dir, "mnist_with_summaries.py"), "w") as file:
file.write(tf_code.text)
في جميع أنحاء ملف التعليمات البرمجية MNIST ، mnist_with_summaries.py ، لاحظ أن هناك خطوطا تتصل tf.summary.scalar()، tf.summary.FileWriter()tf.summary.histogram()إلخ. تجمع هذه الأساليب المقاييس الرئيسية لتجاربك وتسجل وتضع علامة عليها في سجل التشغيل. tf.summary.FileWriter() هذا مهم بشكل خاص لأنه يتسلسل البيانات من مقاييس التجربة المسجلة الخاصة بك ، مما يسمح ل TensorBoard بإنشاء تصورات منها.
تكوين التجربة
في ما يلي، نقوم بتكوين تجربتنا وإعداد أدلة للسجلات والبيانات. سيتم تحميل هذه السجلات إلى سجل التشغيل ، والذي يصل إليه TensorBoard لاحقا.
ملاحظة
بالنسبة لمثال TensorFlow هذا ، ستحتاج إلى تثبيت TensorFlow على جهازك المحلي. علاوة على ذلك ، يجب أن تكون وحدة TensorBoard (أي الوحدة المضمنة في TensorFlow) قابلة للوصول إلى نواة هذا الكمبيوتر المحمول ، حيث أن الجهاز المحلي هو الذي يشغل TensorBoard.
import azureml.core
from azureml.core import Workspace
from azureml.core import Experiment
ws = Workspace.from_config()
# create directories for experiment logs and dataset
logs_dir = os.path.join(os.curdir, "logs")
data_dir = os.path.abspath(os.path.join(os.curdir, "mnist_data"))
if not path.exists(data_dir):
makedirs(data_dir)
os.environ["TEST_TMPDIR"] = data_dir
# Writing logs to ./logs results in their being uploaded to the run history,
# and thus, made accessible to our TensorBoard instance.
args = ["--log_dir", logs_dir]
# Create an experiment
exp = Experiment(ws, experiment_name)
إنشاء مجموعة لتجربتك
نقوم بإنشاء مجموعة AmlCompute لهذه التجربة ، ولكن يمكن إنشاء تجاربك في أي بيئة ولا يزال بإمكانك إطلاق TensorBoard مقابل سجل تشغيل التجربة.
from azureml.core.compute import ComputeTarget, AmlCompute
cluster_name = "cpu-cluster"
cts = ws.compute_targets
found = False
if cluster_name in cts and cts[cluster_name].type == 'AmlCompute':
found = True
print('Found existing compute target.')
compute_target = cts[cluster_name]
if not found:
print('Creating a new compute target...')
compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_D2_V2',
max_nodes=4)
# create the cluster
compute_target = ComputeTarget.create(ws, cluster_name, compute_config)
compute_target.wait_for_completion(show_output=True, min_node_count=None)
# use get_status() to get a detailed status for the current cluster.
# print(compute_target.get_status().serialize())
ملاحظة
يمكنك اختيار استخدام الأجهزة الظاهرية ذات الأولوية المنخفضة لتشغيل بعض أو كل أحمال العمل الخاصة بك. تعرف على كيفية إنشاء جهاز ظاهري منخفض الأولوية.
تكوين وإرسال تشغيل التدريب
تكوين مهمة تدريب عن طريق إنشاء كائن ScriptRunConfig.
from azureml.core import ScriptRunConfig
from azureml.core import Environment
# Here we will use the TensorFlow 2.2 curated environment
tf_env = Environment.get(ws, 'AzureML-TensorFlow-2.2-GPU')
src = ScriptRunConfig(source_directory=exp_dir,
script='mnist_with_summaries.py',
arguments=args,
compute_target=compute_target,
environment=tf_env)
run = exp.submit(src)
إطلاق TensorBoard
يمكنك تشغيل TensorBoard أثناء التشغيل أو بعد اكتماله. في ما يلي ، نقوم بإنشاء مثيل كائن TensorBoard ، tbوالذي يأخذ محفوظات تشغيل التجربة التي runتم تحميلها في ، ثم يقوم بتشغيل TensorBoard بهذه start() الطريقة.
يأخذ منشئ TensorBoard مجموعة من الأشواط ، لذا تأكد من تمريره كصفيف مكون من عنصر واحد.
from azureml.tensorboard import Tensorboard
tb = Tensorboard([run])
# If successful, start() returns a string with the URI of the instance.
tb.start()
# After your job completes, be sure to stop() the streaming otherwise it will continue to run.
tb.stop()
ملاحظة
في حين أن هذا المثال يستخدم TensorFlow ، يمكن استخدام TensorBoard بسهولة مع PyTorch أو Chainer. يجب أن يكون TensorFlow متاحا على الجهاز الذي يشغل TensorBoard ، ولكنه ليس ضروريا على الجهاز الذي يقوم بحسابات PyTorch أو Chainer.
الخيار 2: تصدير التاريخ كسجل لعرضه في TensorBoard
تقوم التعليمة البرمجية التالية بإعداد عينة تجربة، وبدء عملية التسجيل باستخدام Azure التعلم الآلي تشغيل واجهات برمجة تطبيقات المحفوظات، وتصدير محفوظات تشغيل التجربة إلى سجلات يمكن استهلاكها بواسطة TensorBoard للتصور.
إعداد التجربة
تقوم التعليمة البرمجية التالية بإعداد تجربة جديدة وتسمية دليل root_runالتشغيل .
from azureml.core import Workspace, Experiment
import azureml.core
# set experiment name and run name
ws = Workspace.from_config()
experiment_name = 'export-to-tensorboard'
exp = Experiment(ws, experiment_name)
root_run = exp.start_logging()
هنا نقوم بتحميل مجموعة بيانات مرض السكري - مجموعة بيانات صغيرة مدمجة تأتي مع scikit-Learn ، ونقسمها إلى مجموعات اختبار وتدريب.
from sklearn.datasets import load_diabetes
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
X, y = load_diabetes(return_X_y=True)
columns = ['age', 'gender', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
data = {
"train":{"x":x_train, "y":y_train},
"test":{"x":x_test, "y":y_test}
}
تشغيل مقاييس التجربة والسجل
بالنسبة لهذا الرمز ، نقوم بتدريب نموذج الانحدار الخطي وسجل المقاييس الرئيسية ، ومعامل ألفا ، ومتوسط الخطأ التربيعي ، alphamseفي سجل التشغيل.
from tqdm import tqdm
alphas = [.1, .2, .3, .4, .5, .6 , .7]
# try a bunch of alpha values in a Linear Regression (aka Ridge regression) mode
for alpha in tqdm(alphas):
# create child runs and fit lines for the resulting models
with root_run.child_run("alpha" + str(alpha)) as run:
reg = Ridge(alpha=alpha)
reg.fit(data["train"]["x"], data["train"]["y"])
preds = reg.predict(data["test"]["x"])
mse = mean_squared_error(preds, data["test"]["y"])
# End train and eval
# log alpha, mean_squared_error and feature names in run history
root_run.log("alpha", alpha)
root_run.log("mse", mse)
يتم التصدير إلى TensorBoard
باستخدام طريقة export_to_tensorboard () الخاصة ب SDK، يمكننا تصدير محفوظات تشغيل تجربة التعلم الآلي Azure إلى سجلات TensorBoard، حتى نتمكن من عرضها عبر TensorBoard.
في التعليمة البرمجية التالية ، نقوم بإنشاء المجلد logdir في دليل العمل الحالي الخاص بنا. هذا المجلد هو المكان الذي سنقوم فيه بتصدير محفوظات تشغيل التجربة والسجلات منها root_run ثم وضع علامة على تشغيلها على أنها مكتملة.
from azureml.tensorboard.export import export_to_tensorboard
import os
logdir = 'exportedTBlogs'
log_path = os.path.join(os.getcwd(), logdir)
try:
os.stat(log_path)
except os.error:
os.mkdir(log_path)
print(logdir)
# export run history for the project
export_to_tensorboard(root_run, logdir)
root_run.complete()
ملاحظة
يمكنك أيضا تصدير تشغيل معين إلى TensorBoard عن طريق تحديد اسم التشغيل export_to_tensorboard(run_name, logdir)
بدء وإيقاف TensorBoard
بمجرد تصدير سجل التشغيل الخاص بنا لهذه التجربة ، يمكننا إطلاق TensorBoard باستخدام طريقة start() .
from azureml.tensorboard import Tensorboard
# The TensorBoard constructor takes an array of runs, so be sure and pass it in as a single-element array here
tb = Tensorboard([], local_root=logdir, port=6006)
# If successful, start() returns a string with the URI of the instance.
tb.start()
عند الانتهاء، تأكد من استدعاء طريقة stop() لكائن TensorBoard. وإلا، سيستمر تشغيل TensorBoard حتى تقوم بإيقاف تشغيل نواة دفتر الملاحظات.
tb.stop()
الخطوات التالية
في هذه الطريقة ، قمت بإنشاء تجربتين وتعلمت كيفية إطلاق TensorBoard مقابل تاريخهم التشغيلي لتحديد مجالات الضبط وإعادة التدريب المحتملة.
- إذا كنت راضيا عن النموذج الخاص بك ، فتوجه إلى كيفية نشر مقالة نموذجية .
- تعرف على المزيد حول ضبط المعلمات الفائقة.