Vertex AI: تدريب العاملين المتعدّدين ونقل التعلّم إلىهم مع TensorFlow

1. نظرة عامة

في هذا التمرين، ستستخدم Vertex AI لتنفيذ مهمة تدريب متعددة العاملين في أحد نماذج TensorFlow.

المعلومات التي تطّلع عليها

وستتعرّف على كيفية:

  • تعديل رمز تطبيق التدريب لتدريب العاملين المتعددين
  • إعداد وإطلاق مهمة تدريب متعددة العاملين من واجهة مستخدم Vertex AI
  • إعداد مهمة تدريب متعددة العاملين وإطلاقها باستخدام حزمة تطوير البرامج Vertex SDK

تبلغ التكلفة الإجمالية لتشغيل هذا التمرين على Google Cloud حوالي $5.

2. مقدّمة عن Vertex AI

يستخدم هذا البرنامج أحدث منتجات الذكاء الاصطناعي المتوفّرة على Google Cloud. تدمج Vertex AI حلول تعلُّم الآلة في Google Cloud ضمن تجربة تطوير سلسة. في السابق، كان الوصول إلى النماذج المدرَّبة باستخدام AutoML والنماذج المخصّصة ممكنًا من خلال خدمات منفصلة. ويدمج العرض الجديد كلاً من واجهة برمجة تطبيقات واحدة مع منتجات جديدة أخرى. يمكنك أيضًا نقل المشاريع الحالية إلى Vertex AI. إذا كان لديك أي ملاحظات، يُرجى الاطّلاع على صفحة الدعم.

يتضمّن Vertex AI العديد من المنتجات المختلفة لدعم سير العمل الشامل لتعلُّم الآلة. سيركّز هذا التمرين المعملي على المنتجات الموضَّحة أدناه: التدريب وطاولة العمل

نظرة عامة على منتج Vertex

3- نظرة عامة على حالة الاستخدام

في هذا التمرين، ستستخدم تعلُّم النقل لتدريب نموذج لتصنيف الصور على مجموعة بيانات الكاسافا من مجموعات بيانات TensorFlow. البنية التي ستستخدمها هي نموذج ResNet50 من مكتبة tf.keras.applications تم تدريبه مسبقًا على مجموعة بيانات Imagenet.

ما أهمية التدريب الموزَّع؟

إذا كان لديك وحدة معالجة رسومات واحدة، سيستخدم TensorFlow هذا المسرّع لتسريع تدريب النموذج بدون أي جهد إضافي من جانبك. مع ذلك، إذا أردت تعزيز استخدام وحدات معالجة رسومات متعدّدة على جهاز واحد أو أجهزة متعدّدة (يمكن أن يتضمّن كلّ منها وحدات معالجة رسومات متعددة)، عليك استخدام tf.distribute، وهي مكتبة TensorFlow لإجراء العمليات الحسابية على أجهزة متعدّدة. يشير الجهاز إلى وحدة معالجة مركزية (CPU) أو مسرِّعة أعمال، مثل وحدات معالجة الرسومات أو وحدات معالجة الموتّرات، على بعض الأجهزة التي يمكن لمنصة TensorFlow تشغيل العمليات عليها.

إنّ أبسط طريقة لبدء استخدام التدريب الموزَّع هي جهاز واحد يتضمّن عدة أجهزة وحدة معالجة رسومات. ستتولى استراتيجية توزيع TensorFlow من وحدة tf.distribute إدارة تنسيق توزيع البيانات وتحديثات التدرج في جميع وحدات معالجة الرسومات. إذا كنت قد تجيدت تدريب مضيف فردي وتريد توسيع نطاقه، يمكن أن تساعدك إضافة أجهزة متعددة إلى مجموعتك في تعزيز الأداء بشكلٍ أكبر. يمكنك الاستفادة من مجموعة من الأجهزة التي تعمل بوحدة معالجة مركزية (CPU) فقط، أو أن يحتوي كل منها على وحدة معالجة رسومات واحدة أو أكثر. يتناول هذا الدرس التطبيقي الحالة الثانية ويوضّح كيفية استخدام MultiWorkerMirroredStrategy لتوزيع تدريب نموذج TensorFlow على أجهزة متعددة باستخدام Vertex AI.

MultiWorkerMirroredStrategy عبارة عن استراتيجية موازية للبيانات متزامنة يمكنك استخدامها مع بعض التغييرات فقط في الرمز. يتم إنشاء نسخة من النموذج على كل جهاز في مجموعتك. وسيتم إجراء تحديثات التدرج اللاحقة بشكل متزامن. وهذا يعني أن كل جهاز عامل يحتسب حركة المرور للأمام والخلف عبر النموذج على شريحة مختلفة من بيانات الإدخال. ثم يتم تجميع التدرجات المحسوبة من كل شريحة من هذه الشرائح على جميع الأجهزة الموجودة على الجهاز وجميع الأجهزة في المجموعة العنقودية ويتم تقليلها (عادةً ما يكون متوسط) في عملية تعرف باسم الخفض الكلي. ويُجري المحسّن بعد ذلك تحديثات المَعلمة باستخدام هذه التدرجات المخفّضة، ما يحافظ على تزامن الأجهزة. لمعرفة المزيد من المعلومات حول التدريب الموزَّع باستخدام TensorFlow، يمكنك مشاهدة الفيديو أدناه:

4. إعداد البيئة

ستحتاج إلى مشروع Google Cloud Platform مع تفعيل الفوترة لتشغيل هذا الدرس التطبيقي حول الترميز. لإنشاء مشروع، يُرجى اتّباع التعليمات هنا.

الخطوة 1: تفعيل واجهة برمجة تطبيقات Compute Engine

انتقِل إلى Compute Engine واختَر تفعيل إذا لم يسبق لك تفعيله. ستحتاج إلى هذا لإنشاء مثيل دفتر الملاحظات.

الخطوة 2: تفعيل Container Registry API

انتقِل إلى Container Registry واختَر تفعيل إذا لم يسبق لك إجراء ذلك. ستستخدم هذا لإنشاء حاوية لوظيفة التدريب المخصصة.

الخطوة 3: تفعيل Vertex AI API

انتقِل إلى قسم Vertex AI في Cloud Console وانقر على تفعيل Vertex AI API.

لوحة بيانات Vertex AI

الخطوة 4: إنشاء مثيل Vertex AI Workbench

من قسم Vertex AI في Cloud Console، انقر على Workbench:

قائمة Vertex AI

فعِّل Notebooks API إذا لم يسبق لك تفعيلها.

Notebook_api

بعد التفعيل، انقر على المفكرات المُدارة:

Notebooks_UI

ثم اختَر مفكرة جديدة.

new_notebook

أدخِل اسمًا لدفتر الملاحظات، ثم انقر على الإعدادات المتقدمة.

create_notebook

ضمن "الإعدادات المتقدمة"، فعِّل إيقاف التشغيل في وضع عدم النشاط واضبط عدد الدقائق على 60. وهذا يعني أنه سيتم إغلاق دفتر الملاحظات تلقائيًا عندما لا يتم استخدامه، وبذلك لن تتحمل أي تكاليف غير ضرورية.

idle_timeout

ضمن الأمان اختَر "تفعيل الوحدة الطرفية". إذا لم يكن مفعّلاً من قبل.

enable_terminal

ويمكنك ترك جميع الإعدادات المتقدّمة الأخرى كما هي.

بعد ذلك، انقر على إنشاء. ستستغرق عملية توفير المثيل بضع دقائق.

بعد إنشاء المثيل، اختَر فتح JupyterLab.

open_jupyterlab

عند استخدام مثيل جديد لأول مرة، سيُطلب منك المصادقة. اتّبِع الخطوات في واجهة المستخدم لإجراء ذلك.

مصادقة

5- رمز تطبيق التدريب على Containerize

سترسل هذه المهمة التدريبية إلى Vertex من خلال وضع رمز تطبيق التدريب في حاوية Docker وإرسال هذه الحاوية إلى Google Container Registry. باستخدام هذا النهج، يمكنك تدريب نموذج تم إنشاؤه باستخدام أي إطار عمل.

للبدء، من قائمة "مشغّل التطبيقات"، افتح نافذة المحطة الطرفية في مثيل ورقة الملاحظات:

فتح الوحدة الطرفية في ورقة الملاحظات

أنشئ دليلاً جديدًا باسم cassava وأضِفه إليه:

mkdir cassava
cd cassava

الخطوة 1: إنشاء ملف شامل

الخطوة الأولى في احتواء التعليمة البرمجية هي إنشاء ملف Dockerfile. في الملف الشامل ستضمّن جميع الأوامر اللازمة لتشغيل الصورة. ستقوم بتثبيت جميع المكتبات الضرورية وإعداد نقطة الدخول لرمز التدريب.

من الوحدة الطرفية، أنشئ ملف Dockerfile فارغًا:

touch Dockerfile

افتح الملف الشامل وانسخ ما يلي إليه:

FROM gcr.io/deeplearning-platform-release/tf2-gpu.2-7

WORKDIR /

# Copies the trainer code to the docker image.
COPY trainer /trainer

# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "-m", "trainer.task"]

يستخدم هذا الملف الشامل صورة Deep Learning Container TensorFlow Enterprise 2.7 GPU Docker. تأتي حاويات التعلّم المتعمق على Google Cloud مع العديد من أُطر العمل الشائعة لتعلُّم الآلة وعلوم البيانات والمثبَّتة مسبقًا. بعد تنزيل تلك الصورة، يُعِدّ هذا الملف الشامل نقطة الدخول لرمز التدريب. لم تنشئ هذه الملفات بعد. وفي الخطوة التالية، ستضيف الرمز لتدريب النموذج وضبطه.

الخطوة 2: إنشاء حزمة على Cloud Storage

في هذه المهمة التدريبية، ستصدِّر نموذج TensorFlow المدرَّب إلى حزمة Cloud Storage. من "المحطة الطرفية"، شغِّل ما يلي لتحديد متغيّر env لمشروعك، مع الحرص على استبدال your-cloud-project بمعرّف مشروعك:

PROJECT_ID='your-cloud-project'

بعد ذلك، نفِّذ ما يلي في Terminal لإنشاء حزمة جديدة في مشروعك.

BUCKET="gs://${PROJECT_ID}-bucket"
gsutil mb -l us-central1 $BUCKET

الخطوة 3: إضافة رمز تدريب النموذج

من Terminal، شغِّل ما يلي لإنشاء دليل لرمز التدريب وملف Python حيث ستضيف الرمز:

mkdir trainer
touch trainer/task.py

من المفترض أن يكون لديك الآن ما يلي في دليل cassava/:

+ Dockerfile
+ trainer/
    + task.py

بعد ذلك، افتح ملف task.py الذي أنشأته وانسخ الرمز أدناه. يجب استبدال {your-gcs-bucket} باسم حزمة Cloud Storage التي أنشأتها للتو.

import tensorflow as tf
import tensorflow_datasets as tfds
import os


PER_REPLICA_BATCH_SIZE = 64
EPOCHS = 2

# TODO: replace {your-gcs-bucket} with the name of the Storage bucket you created earlier
BUCKET = 'gs://{your-gcs-bucket}/mwms'

def preprocess_data(image, label):
  '''Resizes and scales images.'''

  image = tf.image.resize(image, (300,300))
  return tf.cast(image, tf.float32) / 255., label


def create_dataset(batch_size):
  '''Loads Cassava dataset and preprocesses data.'''

  data, info = tfds.load(name='cassava', as_supervised=True, with_info=True)
  number_of_classes = info.features['label'].num_classes
  train_data = data['train'].map(preprocess_data,
                                 num_parallel_calls=tf.data.experimental.AUTOTUNE)
  train_data  = train_data.shuffle(1000)
  train_data  = train_data.batch(batch_size)
  train_data  = train_data.prefetch(tf.data.experimental.AUTOTUNE)

  # Set AutoShardPolicy
  options = tf.data.Options()
  options.experimental_distribute.auto_shard_policy = tf.data.experimental.AutoShardPolicy.DATA
  train_data = train_data.with_options(options)

  return train_data, number_of_classes


def create_model(number_of_classes):
  '''Creates and compiles pretrained ResNet50 model.'''

  base_model = tf.keras.applications.ResNet50(weights='imagenet', include_top=False)
  x = base_model.output
  x = tf.keras.layers.GlobalAveragePooling2D()(x)
  x = tf.keras.layers.Dense(1016, activation='relu')(x)
  predictions = tf.keras.layers.Dense(number_of_classes, activation='softmax')(x)
  model = tf.keras.Model(inputs=base_model.input, outputs=predictions)

  model.compile(
      loss='sparse_categorical_crossentropy',
      optimizer=tf.keras.optimizers.Adam(0.0001),
      metrics=['accuracy'])

  return model


def _is_chief(task_type, task_id):
  '''Helper function. Determines if machine is chief.'''

  return task_type == 'chief'


def _get_temp_dir(dirpath, task_id):
  '''Helper function. Gets temporary directory for saving model.'''

  base_dirpath = 'workertemp_' + str(task_id)
  temp_dir = os.path.join(dirpath, base_dirpath)
  tf.io.gfile.makedirs(temp_dir)
  return temp_dir


def write_filepath(filepath, task_type, task_id):
  '''Helper function. Gets filepath to save model.'''

  dirpath = os.path.dirname(filepath)
  base = os.path.basename(filepath)
  if not _is_chief(task_type, task_id):
    dirpath = _get_temp_dir(dirpath, task_id)
  return os.path.join(dirpath, base)


def main():
  # Create strategy
  strategy = tf.distribute.MultiWorkerMirroredStrategy()

  # Get data
  global_batch_size = PER_REPLICA_BATCH_SIZE * strategy.num_replicas_in_sync
  train_data, number_of_classes = create_dataset(global_batch_size)

  # Wrap variable creation within strategy scope
  with strategy.scope():
    model = create_model(number_of_classes)

  model.fit(train_data, epochs=EPOCHS)

  # Determine type and task of the machine from
  # the strategy cluster resolver
  task_type, task_id = (strategy.cluster_resolver.task_type,
                        strategy.cluster_resolver.task_id)

  # Based on the type and task, write to the desired model path
  write_model_path = write_filepath(BUCKET, task_type, task_id)
  model.save(write_model_path)

if __name__ == "__main__":
    main()

قبل إنشاء الحاوية، لنلقِ نظرةً عن كثب على الرمز الذي يستخدم MultiWorkerMirroredStrategy من tf.distribute.Strategy API.

هناك بعض المكونات في الرمز البرمجي والتي تكون ضرورية حتى يعمل الرمز مع MultiWorkerMirroredStrategy.

  1. يجب تقسيم البيانات، بمعنى أنه يتم تعيين مجموعة فرعية من مجموعة البيانات بأكملها لكل عامل. ولذلك، في كل خطوة سيعالج كل عامل حجم دُفعة عمومية من عناصر مجموعة البيانات غير المتداخلة. ويتم هذا التقسيم تلقائيًا مع السمة tf.data.experimental.AutoShardPolicy التي يمكن ضبطها على FILE أو DATA. في هذا المثال، تضبط الدالة create_dataset() السمة AutoShardPolicy على DATA لأنّه لا يتم تنزيل مجموعة بيانات كاسافا كملفات متعددة. أمّا في حال عدم ضبط السياسة على DATA، فسيتم تفعيل سياسة AUTO التلقائية وستكون النتيجة النهائية هي نفسها. يمكنك الاطّلاع على المزيد من المعلومات حول تقسيم مجموعات البيانات باستخدام MultiWorkerMirroredStrategy هنا.
  2. في الدالة main()، يتم إنشاء الكائن MultiWorkerMirroredStrategy. بعد ذلك، يمكنك إنشاء متغيرات النموذج في نطاق الاستراتيجية. هذه الخطوة الحاسمة تخبر TensorFlow بالمتغيرات التي يجب عكسها عبر النسخ المكررة.
  3. يتم زيادة حجم الدُفعة باستخدام num_replicas_in_sync. فهذا يضمن أن كل نسخة طبق الأصل تعالج نفس عدد الأمثلة في كل خطوة. إنّ توسيع نطاق حجم الدفعة هو من أفضل الممارسات عند استخدام استراتيجيات موازية البيانات المتزامنة في TensorFlow.
  4. إنّ حفظ النموذج أكثر تعقيدًا بعض الشيء في حالة تعدد العمّال، لأنّ الوجهة يجب أن تكون مختلفة لكلّ عامل من العمّال. سيقوم كبير العاملين بحفظ النموذج إلى دليل النموذج المطلوب، بينما يقوم العاملون الآخرون بحفظ النموذج في الأدلة المؤقتة. ومن المهم أن تكون هذه الأدلة المؤقتة فريدة من أجل منع عدة عاملين من الكتابة في الموقع نفسه. يمكن أن يتضمن المدخر عمليات جماعية، مما يعني أنه يجب على جميع العاملين الإنقاذ وليس الرئيس فقط. تتضمن الدوال _is_chief() و_get_temp_dir() وwrite_filepath() والدالة main() جميعها رموزًا نموذجية تساعد في حفظ النموذج.

يُرجى العِلم بأنّه في حال استخدام MultiWorkerMirroredStrategy في بيئة مختلفة، يُحتمل أنّك أعددت متغيّر البيئة TF_CONFIG. يُحدِّد Vertex AI TF_CONFIG تلقائيًا، لذلك لا تحتاج إلى تحديد هذا المتغيّر على كل جهاز في مجموعتك.

الخطوة 4: إنشاء الحاوية

من "المحطة الطرفية"، شغِّل ما يلي لتحديد متغيّر env لمشروعك، مع الحرص على استبدال your-cloud-project بمعرّف مشروعك:

PROJECT_ID='your-cloud-project'

حدد متغيرًا باستخدام معرف الموارد المنتظم (URI) لصورة الحاوية في Google Container Registry:

IMAGE_URI="gcr.io/$PROJECT_ID/multiworker:cassava"

ضبط إعدادات Docker

gcloud auth configure-docker

بعد ذلك، أنشِئ الحاوية عن طريق تنفيذ ما يلي من جذر الدليل cassava:

docker build ./ -t $IMAGE_URI

أخيرًا، انشره في Google Container Registry:

docker push $IMAGE_URI

مع إرسال الحاوية إلى Container Registry، تكون الآن جاهزًا لبدء مهمة التدريب.

6- تنفيذ مهمة تدريب متعددة العاملين على Vertex AI

يستخدم هذا التمرين المعملي تدريبًا مخصصًا عبر حاوية مخصصة في Container Registry من Google، ولكن يمكنك أيضًا تشغيل مهمة تدريبية باستخدام الحاويات المُنشأة مسبقًا.

للبدء، انتقِل إلى قسم التدريب في قسم Vertex في Cloud Console:

قائمة uCAIP

الخطوة 1: ضبط مهمة التدريب

انقر على إنشاء لإدخال مَعلمات لوظيفة التدريب.

  • ضمن مجموعة البيانات، اختَر ما مِن مجموعة بيانات مُدارة.
  • بعد ذلك، اختَر تدريب مخصّص (متقدّم) كطريقة للتدريب وانقر على متابعة.
  • أدخِل multiworker-cassava (أو أي اسم تريد أن تطلقه على نموذجك) في حقل اسم النموذج.
  • انقر على متابعة.

في خطوة إعدادات الحاوية، اختر حاوية مخصّصة:

خيار الحاوية المخصّصة

في المربّع الأول (صورة الحاوية)، أدخِل قيمة المتغيّر IMAGE_URI من القسم السابق. يجب أن يكون الرقم: gcr.io/your-cloud-project/multiworker:cassava، مع رقم تعريف مشروعك. اترك باقي الحقول فارغةً وانقر على متابعة.

يمكنك تخطّي خطوة معلَمة التخطّي من خلال النقر على متابعة مرة أخرى.

الخطوة 2: ضبط مجموعة الحوسبة

يوفّر Vertex AI 4 مسابح للعمال لتغطية الأنواع المختلفة من مهام الأجهزة.

تضبط مجموعة العمال 0 "أساسي" أو "رئيسي" أو "أداة الجدولة" أو "رئيسي". في MultiWorkerMirroredStrategy، يتم تصنيف جميع الأجهزة باعتبارها عمال، وهي الأجهزة المادية التي يتم تنفيذ العمليات الحسابية المنسوخة عليها. بالإضافة إلى أن يكون كل جهاز عاملاً، يجب أن يكون هناك عامل واحد يقوم ببعض الأعمال الإضافية مثل حفظ نقاط التحقق وكتابة ملفات الملخص على TensorBoard. يُعرف هذا الجهاز باسم "الرئيس". هناك كبير عامل واحد فقط، لذلك فإن عدد العمال الذين تجمعهم مجموعة العمال 0 سيكون دائمًا 1.

في الحوسبة والتسعير، اترُك المنطقة المحدّدة كما هي واضبط مجموعة العاملين 0 على النحو التالي:

Worker_pool_0

تمثِّل مجموعة العمال 1 المكان الذي يمكنك فيه إعداد العاملين في مجموعتك.

اضبط مجموعة العمال 1 على النحو التالي:

Worker_pool_1

تم ضبط المجموعة الآن لتضم جهازين يعملان على وحدة المعالجة المركزية (CPU) فقط. عند تشغيل رمز تطبيق التدريب، سيوزّع "MultiWorkerMirroredStrategy" التدريب على كلا الجهازَين.

لا تتضمن منصة MultiWorkerMirroredStrategy سوى نوعَي المهام الرئيسية والعاملين، وبالتالي ليست هناك حاجة إلى إعداد "مجموعات العمال" الإضافية. مع ذلك، إذا أردت استخدام ParameterServerStrategy في TensorFlow، يجب ضبط خوادم المَعلمات في worker group 2. وإذا أردت إضافة مقيّم إلى مجموعتك، يمكنك إعداد هذا الجهاز في مجموعة العمال 3.

انقر على بدء التدريب لبدء مهمة ضبط المعلَمة الفائقة. في قسم "التدريب" في وحدة التحكّم ضمن علامة التبويب تدريب المسارات، سترى الوظيفة التي تم إطلاقها حديثًا:

وظائف التدريب

🎉 تهانينا. 🎉

لقد تعلمت كيفية استخدام Vertex AI لإجراء ما يلي:

  • ابدأ مهمة تدريب متعددة العاملين للحصول على رمز تدريب متوفر في حاوية مخصّصة. لقد استخدمت نموذج TensorFlow في هذا المثال، ولكن يمكنك تدريب نموذج تم إنشاؤه باستخدام أي إطار عمل باستخدام حاويات مخصصة أو مدمجة.

لمزيد من المعلومات حول أجزاء مختلفة من Vertex، يمكنك الاطّلاع على المستندات.

7. [اختياري] استخدام حزمة تطوير البرامج (SDK) لـ Vertex

كان القسم السابق يعرض كيفية بدء المهمة التدريبية عبر واجهة المستخدم. في هذا القسم، يمكنك الاطّلاع على طريقة بديلة لإرسال مهمة التدريب باستخدام واجهة برمجة تطبيقات Vertex Python.

يمكنك الرجوع إلى مثيل دفتر الملاحظات وإنشاء ورقة ملاحظات TensorFlow 2 من "مشغّل التطبيقات":

new_notebook

استورِد حزمة تطوير برامج Vertex AI.

from google.cloud import aiplatform

لإطلاق وظيفة تدريب العمال المتعددين، تحتاج أولاً إلى تحديد مواصفات مجموعة العمال. يُرجى العِلم أنّ استخدام وحدات معالجة الرسومات في المواصفات هو إجراء اختياري تمامًا ويمكنك إزالة السمتَين accelerator_type وaccelerator_count إذا كنت تريد استخدام وحدة معالجة مركزية فقط كما هو موضّح في القسم السابق.

# The spec of the worker pools including machine type and Docker image
# Be sure to replace {YOUR-PROJECT-ID} with your project ID.
worker_pool_specs=[
     {
        "replica_count": 1,
        "machine_spec": {
          "machine_type": "n1-standard-8", "accelerator_type": "NVIDIA_TESLA_V100", "accelerator_count": 1
        },
        "container_spec": {"image_uri": "gcr.io/{YOUR-PROJECT-ID}/multiworker:cassava"}
      },
      {
        "replica_count": 1,
        "machine_spec": {
          "machine_type": "n1-standard-8", "accelerator_type": "NVIDIA_TESLA_V100", "accelerator_count": 1
        },
        "container_spec": {"image_uri": "gcr.io/{YOUR-PROJECT-ID}/multiworker:cassava"}
      }
]

بعد ذلك، يمكنك إنشاء CustomJob وتشغيلها. عليك استبدال "{YOUR_BUCKET}" بحزمة في مشروعك من أجل التقسيم المرحلي. يمكنك استخدام الحزمة نفسها التي أنشأتها سابقًا.

# Replace YOUR_BUCKET
my_multiworker_job = aiplatform.CustomJob(display_name='multiworker-cassava-sdk',
                              worker_pool_specs=worker_pool_specs,
                              staging_bucket='gs://{YOUR_BUCKET}')

my_multiworker_job.run()

في قسم "التدريب" في وحدة التحكّم ضمن علامة التبويب وظائف مخصصة، سترى مهمة التدريب:

المهام المخصّصة

8. تنظيف

لأنّنا ضبطنا ورقة الملاحظات على انتهاء مهلة الحاسب بعد 60 دقيقة من عدم النشاط، لا داعي للقلق بشأن إيقاف تشغيل المثيل. إذا أردت إيقاف المثيل يدويًا، انقر على زر "إيقاف" في قسم Vertex AI Workbench على وحدة التحكّم. إذا كنت ترغب في حذف الدفتر بالكامل، فانقر فوق الزر "Delete" (حذف).

إيقاف المثيل

لحذف "حزمة التخزين"، باستخدام قائمة التنقّل في Cloud Console، انتقِل إلى "مساحة التخزين" واختَر الحزمة وانقر على "حذف":

حذف مساحة التخزين