1. نظرة عامة
في هذا الدرس التطبيقي، ستستخدم Vertex AI لتشغيل مهمة تدريب مخصّصة.
هذا المختبر هو جزء من سلسلة فيديوهات من النموذج الأوّلي إلى الإنتاج. ستنشئ نموذجًا لتصنيف الصور باستخدام مجموعة بيانات الزهور. يمكنك مشاهدة الفيديو المصاحب لمعرفة المزيد:
.
ما ستتعلمه
ستتعرَّف على كيفية:
- إنشاء دفتر ملاحظات مُدار في Vertex AI Workbench
- إعداد مهمة تدريب مخصّصة وتشغيلها من واجهة مستخدم Vertex AI
- ضبط مهمة تدريب مخصّصة وتشغيلها باستخدام حزمة تطوير البرامج (SDK) الخاصة بلغة Python في Vertex AI
يبلغ إجمالي تكلفة تشغيل هذا الدرس التطبيقي على Google Cloud حوالي 1 دولار أمريكي.
2. مقدمة عن Vertex AI
يستخدم هذا المختبر أحدث منتج للذكاء الاصطناعي متاح على Google Cloud. تدمج Vertex AI عروض تعلُّم الآلة على Google Cloud في تجربة تطوير سلسة. في السابق، كان يمكن الوصول إلى النماذج المدرَّبة باستخدام AutoML والنماذج المخصَّصة من خلال خدمات منفصلة. يجمع العرض الجديد بين كليهما في واجهة برمجة تطبيقات واحدة، بالإضافة إلى منتجات جديدة أخرى. يمكنك أيضًا نقل المشاريع الحالية إلى Vertex AI.
تتضمّن Vertex AI العديد من المنتجات المختلفة لدعم مهام سير العمل الشاملة لتعلُّم الآلة. سيركّز هذا الدرس التطبيقي على المنتجات الموضّحة أدناه: التدريب وWorkbench.

3- إعداد البيئة
يجب أن يكون لديك مشروع على Google Cloud Platform مع تفعيل الفوترة لتتمكّن من تنفيذ هذا الدرس العملي. لإنشاء مشروع، اتّبِع التعليمات هنا.
الخطوة 1: تفعيل Compute Engine API
انتقِل إلى Compute Engine وانقر على تفعيل إذا لم يكن مفعّلاً بعد.
الخطوة 2: تفعيل Artifact Registry API
انتقِل إلى Artifact Registry وانقر على تفعيل إذا لم يكن مفعّلاً. ستستخدم هذا المعرّف لإنشاء حاوية لمهمة التدريب المخصّصة.
الخطوة 3: تفعيل واجهة برمجة التطبيقات Vertex AI API
انتقِل إلى قسم Vertex AI في Cloud Console وانقر على تفعيل واجهة Vertex AI API.

الخطوة 4: إنشاء مثيل Vertex AI Workbench
من قسم Vertex AI في Cloud Console، انقر على Workbench:

فعِّل واجهة برمجة التطبيقات Notebooks API إذا لم تكن مفعَّلة بعد.

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

بعد ذلك، انقر على دفتر ملاحظات جديد.

أدخِل اسمًا لدفتر الملاحظات، وضِمن الإذن، اختَر حساب الخدمة.

انقر على الإعدادات المتقدّمة.
ضمن الأمان، اختَر "تفعيل الجهاز" إذا لم يكن مفعّلاً.

يمكنك ترك جميع الإعدادات المتقدّمة الأخرى كما هي.
بعد ذلك، انقر على إنشاء. سيستغرق توفير الجهاز الافتراضي بضع دقائق.
بعد إنشاء المثيل، انقر على OPEN JUPYTERLAB.

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

الخطوة 1: إنشاء حزمة في Cloud Storage
في مهمة التدريب هذه، ستصدّر نموذج TensorFlow المدرَّب إلى حزمة في Cloud Storage. ستخزِّن أيضًا بيانات التدريب في حزمة Cloud Storage.
من "وحدة التحكّم"، نفِّذ ما يلي لتحديد متغيّر بيئة لمشروعك، مع الحرص على استبدال your-cloud-project بمعرّف مشروعك:
PROJECT_ID='your-cloud-project'
بعد ذلك، شغِّل ما يلي في "الوحدة الطرفية" لإنشاء حزمة جديدة في مشروعك.
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 التي أنشأتها للتو.
من خلال أداة FUSE في Cloud Storage، يمكن لوظائف التدريب على 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 كصورة أساسية. تتضمّن حزم Deep Learning Containers على Google Cloud العديد من أُطر عمل تعلُّم الآلة وعلم البيانات الشائعة المثبَّتة مسبقًا.
يحدّد الأمر WORKDIR الدليل في الصورة حيث يتم تنفيذ التعليمات اللاحقة.
ينسخ الأمر COPY رمز المدرب إلى صورة Docker. يُرجى العِلم أنّ هذا المثال يتضمّن ملف Python واحدًا فقط في دليل المدرب، ولكن في مثال أكثر واقعية، من المحتمل أن يكون لديك ملفات إضافية. ربما واحد باسم data.py، يتعامل مع المعالجة المسبقة للبيانات، وآخر باسم model.py، يحتوي فقط على رمز النموذج، وما إلى ذلك. للحصول على رمز تدريب أكثر تعقيدًا، يمكنك الاطّلاع على مستندات Python حول تغليف مشاريع Python.
إذا أردت إضافة أي مكتبات إضافية، يمكنك استخدام الأمر RUN لتثبيت pip (مثلاً: RUN pip install -r requirements.txt)، ولكننا لا نحتاج إلى أي شيء إضافي في مثالنا هنا.
أخيرًا، يضبط الأمر ENTRYPOINT نقطة الدخول لاستدعاء المدرب. سيتم تنفيذ هذا البرنامج عند بدء مهمة التدريب. في حالتنا، يتم تنفيذ الملف task.py.
يمكنك الاطّلاع على مزيد من المعلومات حول كتابة ملفات Dockerfile لخدمة Vertex AI Training هنا.
الخطوة 4: إنشاء الحاوية
من نافذة الجهاز الطرفي في دفتر ملاحظات Workbench، شغِّل الأمر التالي لتحديد متغيّر بيئة لمشروعك، مع الحرص على استبدال 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"
حدِّد متغيّرًا باستخدام معرّف الموارد المنتظم (URI) لصورة الحاوية في 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: ضبط مهمة التدريب
انقر على إنشاء لإدخال مَعلمات مهمة التدريب.

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

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

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

🎉 تهانينا! 🎉
تعرّفت على كيفية استخدام Vertex AI من أجل:
- إطلاق مهمة تدريب مخصّصة لتدريب الرمز البرمجي المقدَّم في حاوية مخصّصة في هذا المثال، تم استخدام نموذج TensorFlow، ولكن يمكنك تدريب نموذج تم إنشاؤه باستخدام أي إطار عمل باستخدام حاويات مخصّصة أو مضمّنة.
لمزيد من المعلومات عن الأجزاء المختلفة من Vertex، اطّلِع على المستندات.
6. [اختياري] استخدام حزمة تطوير البرامج (SDK) من Vertex AI بلغة Python
يوضّح القسم السابق كيفية تشغيل مهمة التدريب من خلال واجهة المستخدم. في هذا القسم، ستتعرّف على طريقة بديلة لإرسال مهمة التدريب باستخدام حزمة تطوير البرامج (SDK) من Vertex AI بلغة Python.
ارجع إلى مثيل دفتر الملاحظات، وأنشئ دفتر ملاحظات TensorFlow 2 من "لوحة التشغيل" (Launcher) باتّباع الخطوات التالية:

استورِد حزمة تطوير البرامج (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، وانتقِل إلى "مساحة التخزين"، واختَر الحزمة، ثم انقر على "حذف":
