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

1. نظرة عامة

في هذا الدرس العملي، ستستخدم Vertex AI لتشغيل وظيفة تدريب متعددة العمال لنموذج TensorFlow.

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

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

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

تبلغ التكلفة الإجمالية لتنفيذ هذا البرنامج التدريبي على 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 إدارة تنسيق توزيع البيانات وتحديثات التدرج في جميع وحدات معالجة الرسومات. إذا كنت قد أتقنت تدريب المضيف الفردي وتبحث عن توسيع نطاق التدريب بشكل أكبر، يمكن أن تساعدك إضافة أجهزة متعددة إلى مجموعتك في تحقيق تحسين أكبر في الأداء. يمكنك الاستفادة من مجموعة من الأجهزة التي تتضمّن وحدة معالجة مركزية فقط، أو التي تتضمّن كلّ منها وحدة معالجة رسومات واحدة أو أكثر. يتناول هذا المختبر الحالة الأخيرة ويوضّح كيفية استخدام MultiWorkerMirroredStrategy لتوزيع تدريب نموذج TensorFlow على أجهزة متعددة على Vertex AI.

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

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

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

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

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

الخطوة 2: تفعيل واجهة برمجة التطبيقات Container Registry API

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

الخطوة 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. باستخدام هذا النهج، يمكنك تدريب نموذج تم إنشاؤه باستخدام أي إطار عمل.

للبدء، افتح نافذة Terminal (المحطة الطرفية) في مثيل دفتر ملاحظاتك من قائمة Launcher (المشغِّل):

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

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

mkdir cassava
cd cassava

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

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

من Terminal، أنشئ ملف Dockerfile فارغًا:

touch Dockerfile

افتح 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"]

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

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

في مهمة التدريب هذه، ستصدِّر نموذج TensorFlow الذي تم تدريبه إلى حزمة في Cloud Storage. من Terminal، نفِّذ ما يلي لتحديد متغيّر 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: إنشاء الحاوية

من Terminal، نفِّذ ما يلي لتحديد متغيّر 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

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

للبدء، انتقِل إلى قسم التدريب في قسم Vertex ضمن وحدة تحكّم Cloud:

قائمة uCAIP

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

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

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

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

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

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

تخطّ خطوة مَعلمات H الفائقة من خلال النقر على متابعة مرة أخرى.

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

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

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

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

Worker_pool_0

"مجموعة العمال 1" هي المكان الذي تضبط فيه العمال لقطّعتك.

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

Worker_pool_1

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

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

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

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

🎉 تهانينا. 🎉

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

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

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

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

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

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

إيقاف المثيل

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

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