تحويل النماذج الأوّلية إلى مرحلة الإنتاج: تدريب النماذج المخصّصة باستخدام Vertex AI

1. نظرة عامة

في هذا التمرين المعملي، ستستخدم Vertex AI لتنفيذ مهمة تدريب مخصّصة.

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

.

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

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

  • إنشاء دفتر ملاحظات مُدار في Vertex AI Workbench
  • إعداد مهمة تدريب مخصّصة وإطلاقها من واجهة مستخدم Vertex AI
  • ضبط وإطلاق مهمة تدريب مخصّصة باستخدام حزمة تطوير برامج Vertex AI Python SDK

تبلغ التكلفة الإجمالية لتنفيذ هذا البرنامج التدريبي على Google Cloud حوالي 1 دولار أمريكي.

2. مقدمة عن Vertex AI

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

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

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

3- إعداد البيئة

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

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

انتقِل إلى Compute Engine واختَر تفعيل إذا لم يسبق لك تفعيله.

الخطوة 2: تفعيل واجهة برمجة التطبيقات Artifact 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

انقر على الإعدادات المتقدّمة.

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

enable_terminal

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

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

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

open_jupyterlab

4. حاوية رمز تطبيق التدريب

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

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

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

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

في مهمة التدريب هذه، ستصدِّر نموذج TensorFlow الذي تم تدريبه إلى حزمة في Cloud Storage. وستخزن أيضًا البيانات للتدريب في حزمة على Cloud Storage.

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

PROJECT_ID='your-cloud-project'

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

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

الخطوة 2: نسخ البيانات إلى حزمة Cloud Storage

نحتاج إلى نقل مجموعة بيانات الزهور إلى Cloud Storage. لأغراض العرض، عليك أولاً تنزيل مجموعة البيانات إلى مثيل Workbench هذا، ثم نسخها إلى حزمة.

نزِّل البيانات وفك ضغطها.

wget https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz
tar xvzf flower_photos.tgz

بعد ذلك، انسخها إلى الحزمة التي أنشأتها للتو. نضيف الخيار -r لأنّنا نريد نسخ الدليل بأكمله، والخيار -m لإجراء نسخة متعددة المعالجة، ما سيسرّع الأمور.

gsutil -m cp -r flower_photos $BUCKET

الخطوة 3: كتابة رمز التدريب

أنشئ دليلاً جديدًا باسم flowers وانتقِل إليه باستخدام الأمر cd:

mkdir flowers
cd flowers

نفِّذ ما يلي لإنشاء دليل لرمز التدريب وملف Python حيث ستضيف الرمز.

mkdir trainer
touch trainer/task.py

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

+ trainer/
    + task.py

لمزيد من التفاصيل حول كيفية تنظيم رمز تطبيق التدريب، يُرجى الاطّلاع على المستندات.

بعد ذلك، افتح ملف task.py الذي أنشأته للتو وانسخ الرمز البرمجي أدناه.

يجب استبدال {your-gcs-bucket} باسم حزمة Cloud Storage التي أنشأتها للتو.

باستخدام أداة Cloud Storage FUSE، يمكن لمهام التدريب على Vertex AI Training الوصول إلى البيانات على Cloud Storage كملفات في نظام الملفات المحلي. عند بدء مهمة تدريب مخصّصة، ترى المهمة دليلاً /gcs يحتوي على جميع حِزم Cloud Storage كمجلدات فرعية. لهذا السبب، تبدأ مسارات البيانات في رمز التدريب بـ /gcs.

import tensorflow as tf
import numpy as np
import os

## Replace {your-gcs-bucket} !!
BUCKET_ROOT='/gcs/{your-gcs-bucket}'

# Define variables
NUM_CLASSES = 5
EPOCHS=10
BATCH_SIZE = 32

IMG_HEIGHT = 180
IMG_WIDTH = 180

DATA_DIR = f'{BUCKET_ROOT}/flower_photos'

def create_datasets(data_dir, batch_size):
  '''Creates train and validation datasets.'''
  
  train_dataset = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    validation_split=0.2,
    subset="training",
    seed=123,
    image_size=(IMG_HEIGHT, IMG_WIDTH),
    batch_size=batch_size)

  validation_dataset = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    validation_split=0.2,
    subset="validation",
    seed=123,
    image_size=(IMG_HEIGHT, IMG_WIDTH),
    batch_size=batch_size)

  train_dataset = train_dataset.cache().shuffle(1000).prefetch(buffer_size=tf.data.AUTOTUNE)
  validation_dataset = validation_dataset.cache().prefetch(buffer_size=tf.data.AUTOTUNE)

  return train_dataset, validation_dataset


def create_model():
  '''Creates model.'''

  model = tf.keras.Sequential([
    tf.keras.layers.Resizing(IMG_HEIGHT, IMG_WIDTH),
    tf.keras.layers.Rescaling(1./255, input_shape=(IMG_HEIGHT, IMG_WIDTH, 3)),
    tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(NUM_CLASSES, activation='softmax')
  ])
  return model

# CREATE DATASETS
train_dataset, validation_dataset = create_datasets(DATA_DIR, BATCH_SIZE)

# CREATE/COMPILE MODEL
model = create_model()
model.compile(optimizer=tf.keras.optimizers.Adam(),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(),
              metrics=['accuracy'])

# TRAIN MODEL
history = model.fit(
  train_dataset,
  validation_data=validation_dataset,
  epochs=EPOCHS
)

# SAVE MODEL
model.save(f'{BUCKET_ROOT}/model_output')

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

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

من الوحدة الطرفية، أنشئ ملف Dockerfile في جذر دليل الزهور الخاص بك:

touch Dockerfile

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

+ Dockerfile
+ trainer/
    + task.py

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

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

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"]

لنراجع الأوامر الواردة في هذا الملف.

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

يحدِّد الأمر WORKDIR الدليل في الصورة الذي يتم فيه تنفيذ التعليمات اللاحقة.

ينسخ الأمر COPY رمز أداة التدريب إلى صورة Docker. تجدر الإشارة إلى أنّه في هذا المثال، لدينا ملف python واحد فقط في دليل "المدرب"، ولكن للحصول على مثال أكثر واقعية، من المحتمل أن يكون لديك ملفات إضافية. قد يكون أحدهما يُسمى data.py، والذي يعالج معالجة البيانات الأولية، والآخر يُسمى model.py، والذي يتضمّن رمز النموذج فقط، وما إلى ذلك. للحصول على رمز تدريب أكثر تعقيدًا، اطّلِع على مستندات Python حول تجميع مشاريع Python.

إذا أردت إضافة أي مكتبات إضافية، يمكنك استخدام الأمر RUN لتثبيت pip (مثل RUN pip install -r requirements.txt). ولكننا لا نحتاج إلى أي شيء إضافي في المثال هنا.

أخيرًا، يُعدّ أمر ENTRYPOINT نقطة الدخول لاستدعاء أداة التدريب. هذا هو ما سيتم تنفيذه عند بدء وظيفة التدريب. في حالتنا، يتم تنفيذ ملف task.py.

يمكنك الاطّلاع على مزيد من المعلومات حول كتابة ملفات Dockerfiles لتدريب Vertex AI هنا.

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

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

PROJECT_ID='your-cloud-project'

إنشاء مستودع في Artifact Registry

REPO_NAME='flower-app'

gcloud artifacts repositories create $REPO_NAME --repository-format=docker \
--location=us-central1 --description="Docker repository"

حدِّد متغيّرًا باستخدام معرّف الموارد المنتظم لصورة الحاوية في Google Artifact Registry:

IMAGE_URI=us-central1-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/flower_image:latest

ضبط إعدادات Docker

gcloud auth configure-docker \
    us-central1-docker.pkg.dev

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

docker build ./ -t $IMAGE_URI

أخيرًا، ادفعها إلى Artifact Registry:

docker push $IMAGE_URI

بعد إرسال الحاوية إلى Artifact Registry، تصبح جاهزًا لبدء مهمة التدريب.

5- تنفيذ مهمة تدريب مخصّصة على Vertex AI

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

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

قائمة التدريب

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

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

create_training

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

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

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

في المربّع الأول (صورة الحاوية)، أدخِل قيمة متغيّر IMAGE_URI من القسم السابق. يجب أن يكون us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image:latest مع رقم تعريف مشروعك. اترك بقية الحقول فارغة وانقر على متابعة.

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

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

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

worker_pool_0

ستتخطّى الخطوة 6 في الوقت الحالي وتضبط حاوية التوقّع في التمرين المعملي التالي في هذه السلسلة.

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

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

🎉 تهانينا. 🎉

لقد تعلّمت كيفية استخدام Vertex AI لتنفيذ ما يلي:

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

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

6- [اختياري] استخدام حزمة تطوير برامج Vertex AI Python SDK

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

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

new_notebook

استورِد حزمة تطوير البرامج (SDK) لخدمة Vertex AI.

from google.cloud import aiplatform

بعد ذلك، أنشئ CustomContainerTrainingJob. عليك استبدال {PROJECT_ID} في container_uri باسم مشروعك، واستبدال {BUCKET} في staging_bucket بالحزمة التي أنشأتها سابقًا.

my_job = aiplatform.CustomContainerTrainingJob(display_name='flower-sdk-job',
                                               container_uri='us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image:latest',
                                               staging_bucket='gs://{BUCKET}')

بعد ذلك، قم بتشغيل المهمة.

my_job.run(replica_count=1,
           machine_type='n1-standard-8',
           accelerator_type='NVIDIA_TESLA_V100',
           accelerator_count=1)

لأغراض توضيحية، تم إعداد هذه المهمة لتشغيلها على جهاز أكبر مقارنةً بالقسم السابق. بالإضافة إلى ذلك، نحن نستخدم وحدة معالجة الرسومات. إذا لم تحدِّد machine-type أو accelerator_type أو accelerator_count، سيتم تنفيذ المهمة تلقائيًا على n1-standard-4.

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

7- تنظيف

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

إيقاف المثيل

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

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