تصور عمليات تشغيل التجربة والمقاييس باستخدام 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 وعرض محفوظات تشغيل التجارب، يجب أن تكون تجاربك قد مكنت التسجيل مسبقا لتتبع مقاييسها وأدائها.
  • يمكن تشغيل التعليمة البرمجية في هذا المستند في أي من البيئات التالية:

الخيار 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 مقابل تاريخهم التشغيلي لتحديد مجالات الضبط وإعادة التدريب المحتملة.