نمونه اولیه برای تولید: آموزش مدل های سفارشی با Vertex AI

۱. مرور کلی

در این آزمایشگاه، شما از Vertex AI برای اجرای یک کار آموزشی سفارشی استفاده خواهید کرد.

این آزمایشگاه بخشی از مجموعه ویدیوهای «نمونه اولیه تا تولید» است. شما با استفاده از مجموعه داده‌های Flowers یک مدل طبقه‌بندی تصویر خواهید ساخت. برای کسب اطلاعات بیشتر می‌توانید ویدیوی همراه را تماشا کنید:

.

آنچه یاد می‌گیرید

شما یاد خواهید گرفت که چگونه:

  • یک نوت بوک مدیریت شده توسط Vertex AI Workbench ایجاد کنید
  • پیکربندی و اجرای یک کار آموزشی سفارشی از رابط کاربری Vertex AI
  • پیکربندی و راه‌اندازی یک کار آموزشی سفارشی با Vertex AI Python SDK

هزینه کل اجرای این آزمایشگاه در گوگل کلود حدود ۱ دلار است.

۲. مقدمه‌ای بر هوش مصنوعی ورتکس

این آزمایشگاه از جدیدترین محصول هوش مصنوعی موجود در Google Cloud استفاده می‌کند. Vertex AI، محصولات یادگیری ماشین را در سراسر Google Cloud در یک تجربه توسعه یکپارچه ادغام می‌کند. پیش از این، مدل‌های آموزش‌دیده با AutoML و مدل‌های سفارشی از طریق سرویس‌های جداگانه قابل دسترسی بودند. این محصول جدید، هر دو را در یک API واحد، به همراه سایر محصولات جدید، ترکیب می‌کند. همچنین می‌توانید پروژه‌های موجود را به Vertex AI منتقل کنید.

Vertex AI شامل محصولات مختلفی برای پشتیبانی از گردش‌های کاری یادگیری ماشینی سرتاسری است. این آزمایشگاه بر روی محصولات برجسته زیر تمرکز خواهد کرد: آموزش و میز کار

بررسی اجمالی محصولات ورتکس

۳. محیط خود را آماده کنید

برای اجرای این codelab به یک پروژه Google Cloud Platform با قابلیت پرداخت صورتحساب نیاز دارید. برای ایجاد یک پروژه، دستورالعمل‌های اینجا را دنبال کنید.

مرحله ۱: فعال کردن رابط برنامه‌نویسی کاربردی موتور محاسبات

به Compute Engine بروید و اگر از قبل فعال نیست، آن را فعال کنید .

مرحله ۲: فعال کردن API رجیستری مصنوعات

به رجیستری مصنوعات بروید و اگر فعال نیست، آن را فعال کنید. از این برای ایجاد یک کانتینر برای کار آموزشی سفارشی خود استفاده خواهید کرد.

مرحله 3: فعال کردن API هوش مصنوعی Vertex

به بخش Vertex AI در کنسول ابری خود بروید و روی Enable Vertex AI API کلیک کنید.

داشبورد هوش مصنوعی ورتکس

مرحله ۴: ایجاد یک نمونه از Vertex AI Workbench

از بخش Vertex AI در کنسول ابری خود، روی Workbench کلیک کنید:

منوی هوش مصنوعی ورتکس

اگر API نوت‌بوک‌ها فعال نیست، آن را فعال کنید.

نوت‌بوک_آپی

پس از فعال کردن، روی «دفترچه‌های مدیریت‌شده» کلیک کنید:

رابط کاربری نوت‌بوک‌ها

سپس دفترچه یادداشت جدید را انتخاب کنید.

نوت بوک_جدید

برای نوت‌بوک خود یک نام انتخاب کنید و در قسمت Permission، گزینه Service account را انتخاب کنید.

ایجاد_نوت_بوک

تنظیمات پیشرفته را انتخاب کنید.

در قسمت امنیت، اگر از قبل فعال نشده است، گزینه «فعال کردن ترمینال» را انتخاب کنید.

enable_terminal

می‌توانید تمام تنظیمات پیشرفته دیگر را همانطور که هست، رها کنید.

سپس، روی ایجاد (Create) کلیک کنید. آماده‌سازی نمونه (instance) چند دقیقه طول خواهد کشید.

پس از ایجاد نمونه، گزینه‌ی «باز کردن JUPYTERLAB» را انتخاب کنید.

open_jupyterlab

۴. کد برنامه آموزشی را کانتینریزه کنید

شما این کار آموزشی را با قرار دادن کد برنامه آموزشی خود در یک کانتینر Docker و ارسال این کانتینر به Google Artifact Registry به Vertex AI ارسال خواهید کرد. با استفاده از این رویکرد، می‌توانید مدلی را که با هر چارچوبی ساخته شده است، آموزش دهید.

برای شروع، از منوی Launcher، یک پنجره ترمینال در نوت‌بوک خود باز کنید:

ترمینال را در نوت بوک باز کنید

مرحله ۱: ایجاد یک فضای ذخیره‌سازی ابری

در این کار آموزشی، مدل آموزش‌دیده TensorFlow را به یک فضای ذخیره‌سازی ابری (Cloud Storage Bucket) منتقل خواهید کرد. همچنین داده‌های مورد نیاز برای آموزش را در یک فضای ذخیره‌سازی ابری ذخیره خواهید کرد.

از ترمینال خود، دستور زیر را برای تعریف یک متغیر env برای پروژه خود اجرا کنید، و مطمئن شوید که your-cloud-project را با شناسه پروژه خود جایگزین می‌کنید:

PROJECT_ID='your-cloud-project'

در مرحله بعد، دستور زیر را در ترمینال خود اجرا کنید تا یک باکت جدید در پروژه شما ایجاد شود.

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

مرحله ۲: کپی کردن داده‌ها در فضای ذخیره‌سازی ابری

ما باید مجموعه داده‌های گل‌هایمان را به فضای ذخیره‌سازی ابری منتقل کنیم. برای اهداف نمایشی، ابتدا مجموعه داده‌ها را در این نمونه 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

مرحله ۳: نوشتن کد آموزشی

یک دایرکتوری جدید به نام flowers ایجاد کنید و با دستور cd به آن وارد شوید:

mkdir flowers
cd flowers

دستور زیر را اجرا کنید تا یک دایرکتوری برای کد آموزشی و یک فایل پایتون که کد را در آن اضافه خواهید کرد، ایجاد شود.

mkdir trainer
touch trainer/task.py

اکنون باید موارد زیر را در دایرکتوری flowers/ خود داشته باشید:

+ trainer/
    + task.py

برای جزئیات بیشتر در مورد نحوه ساختاردهی کد برنامه آموزشی خود، مستندات را بررسی کنید.

سپس، فایل task.py که ایجاد کردید را باز کنید و کد زیر را در آن کپی کنید.

شما باید {your-gcs-bucket} را با نام باکت فضای ذخیره‌سازی ابری که ایجاد کرده‌اید جایگزین کنید.

از طریق ابزار 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')

مرحله ۴: ایجاد یک داکرفایل

برای کانتینرایز کردن کد خود، باید یک Dockerfile ایجاد کنید. در Dockerfile تمام دستورات مورد نیاز برای اجرای تصویر را قرار خواهید داد. این فایل تمام کتابخانه‌های لازم را نصب کرده و نقطه ورود کد آموزشی را تنظیم می‌کند.

از طریق ترمینال خود، یک Dockerfile خالی در ریشه دایرکتوری flowers خود ایجاد کنید:

touch Dockerfile

اکنون باید موارد زیر را در دایرکتوری flowers/ خود داشته باشید:

+ Dockerfile
+ trainer/
    + task.py

فایل Docker را باز کنید و موارد زیر را در آن کپی کنید:

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 پردازنده گرافیکی TensorFlow Enterprise 2.8 برای کانتینر یادگیری عمیق استفاده خواهید کرد. کانتینرهای یادگیری عمیق در Google Cloud با بسیاری از چارچوب‌های رایج یادگیری ماشین و علم داده از پیش نصب شده ارائه می‌شوند.

دستور WORKDIR دایرکتوری روی تصویر را که دستورالعمل‌های بعدی در آن اجرا می‌شوند، مشخص می‌کند.

دستور COPY کد مربی را در تصویر داکر کپی می‌کند. توجه داشته باشید که در این مثال ما فقط یک فایل پایتون در دایرکتوری مربی خود داریم، اما برای یک مثال واقع‌بینانه‌تر، احتمالاً فایل‌های دیگری نیز خواهید داشت. شاید یکی به نام data.py که پیش‌پردازش داده‌ها را مدیریت می‌کند و دیگری به نام model.py که فقط کد مدل را دارد و غیره. برای کد آموزشی پیچیده‌تر، مستندات پایتون در مورد بسته‌بندی پروژه‌های پایتون را بررسی کنید.

اگر می‌خواستید کتابخانه‌های دیگری اضافه کنید، می‌توانستید از دستور RUN برای نصب pip استفاده کنید (مثلاً: RUN pip install -r requirements.txt ). اما ما برای مثال خود در اینجا به چیز اضافی نیاز نداریم.

در نهایت، دستور ENTRYPOINT نقطه ورود را برای فراخوانی ترینر تنظیم می‌کند. این همان چیزی است که هنگام شروع کار آموزشی ما اجرا خواهد شد. در مورد ما، این فایل task.py اجرا می‌کند.

می‌توانید اطلاعات بیشتری در مورد نوشتن Dockerfiles برای آموزش هوش مصنوعی Vertex را اینجا بیاموزید.

مرحله ۴: ساخت کانتینر

از ترمینال نوت‌بوک Workbench خود، دستور زیر را برای تعریف یک متغیر env برای پروژه خود اجرا کنید، و مطمئن شوید که your-cloud-project را با شناسه پروژه خود جایگزین می‌کنید:

PROJECT_ID='your-cloud-project'

ایجاد یک مخزن (repo) در رجیستری مصنوعات (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

پیکربندی داکر

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

سپس، با اجرای دستور زیر از ریشه دایرکتوری flower کانتینر را بسازید:

docker build ./ -t $IMAGE_URI

در آخر، آن را به رجیستری مصنوعات (Artifact Registry) منتقل کنید:

docker push $IMAGE_URI

با قرار دادن کانتینر در فهرست آثار باستانی، اکنون آماده‌اید تا کار آموزشی را شروع کنید.

۵. یک کار آموزشی سفارشی را روی Vertex AI اجرا کنید

این آزمایشگاه از آموزش سفارشی از طریق یک کانتینر سفارشی در Google Artifact Registry استفاده می‌کند، اما می‌توانید یک کار آموزشی را با کانتینرهای از پیش ساخته شده نیز اجرا کنید.

برای شروع، به بخش آموزش در بخش Vertex کنسول Cloud خود بروید:

منوی قطار

مرحله 1: پیکربندی شغل آموزشی

برای وارد کردن پارامترهای مربوط به شغل آموزشی خود، روی «ایجاد» کلیک کنید.

ایجاد_آموزش

  • در قسمت مجموعه داده ، گزینه «بدون مجموعه داده مدیریت‌شده» را انتخاب کنید.
  • سپس آموزش سفارشی (پیشرفته) را به عنوان روش آموزش خود انتخاب کرده و روی ادامه کلیک کنید.
  • گزینه Train new model را انتخاب کنید و سپس برای Model name، flowers-model (یا هر نامی که برای مدل خود انتخاب می‌کنید) را وارد کنید.
  • روی ادامه کلیک کنید

در مرحله تنظیمات کانتینر، کانتینر سفارشی را انتخاب کنید:

گزینه ظرف سفارشی

در کادر اول ( Container image )، مقدار متغیر IMAGE_URI خود را از بخش قبل وارد کنید. باید به صورت زیر باشد: us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image:latest ، با شناسه پروژه خودتان. بقیه فیلدها را خالی بگذارید و روی ادامه کلیک کنید.

با کلیک مجدد روی ادامه ، از مرحله Hyperparameters عبور کنید.

مرحله ۲: پیکربندی خوشه محاسباتی

Worker pool 0 را به صورت زیر پیکربندی کنید:

worker_pool_0

فعلاً از مرحله ۶ صرف نظر کنید و ظرف پیش‌بینی را در تمرین بعدی این مجموعه پیکربندی کنید.

برای شروع کار آموزشی ، روی «شروع آموزش» کلیک کنید. در بخش آموزش کنسول خود، زیر تب «خطوط آموزش»، کار تازه راه‌اندازی شده خود را مشاهده خواهید کرد:

مشاغل آموزشی

🎉 تبریک می‌گویم! 🎉

شما یاد گرفتید که چگونه از Vertex AI برای موارد زیر استفاده کنید:

  • یک کار آموزشی سفارشی برای کد آموزشی ارائه شده در یک کانتینر سفارشی راه‌اندازی کنید. شما در این مثال از یک مدل TensorFlow استفاده کردید، اما می‌توانید مدلی را که با هر چارچوبی ساخته شده است با استفاده از کانتینرهای سفارشی یا داخلی آموزش دهید.

برای کسب اطلاعات بیشتر در مورد بخش‌های مختلف Vertex، مستندات آن را بررسی کنید.

۶. [اختیاری] از Vertex AI Python SDK استفاده کنید

بخش قبلی نحوه‌ی راه‌اندازی کار آموزشی از طریق رابط کاربری را نشان داد. در این بخش، روش جایگزینی برای ارسال کار آموزشی با استفاده از Vertex AI Python SDK را مشاهده خواهید کرد.

به نمونه دفترچه یادداشت خود برگردید و یک دفترچه یادداشت TensorFlow 2 از Launcher ایجاد کنید:

نوت بوک_جدید

Vertex AI SDK را وارد کنید.

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)

برای اهداف نمایشی، این کار طوری پیکربندی شده است که روی یک دستگاه بزرگتر از بخش قبلی اجرا شود. علاوه بر این، ما با یک GPU اجرا می‌کنیم. اگر machine-type ، accelerator_type یا accelerator_count را مشخص نکنید، کار به طور پیش‌فرض روی یک n1-standard-4 اجرا خواهد شد.

در بخش آموزش کنسول خود، زیر تب CUSTOM JOBS، شغل آموزشی خود را مشاهده خواهید کرد.

۷. پاکسازی

از آنجا که نوت‌بوک‌های مدیریت‌شده توسط Vertex AI Workbench دارای قابلیت خاموش شدن در حالت بی‌کاری هستند، نیازی نیست نگران خاموش کردن نمونه باشیم. اگر می‌خواهید نمونه را به صورت دستی خاموش کنید، روی دکمه Stop در بخش Vertex AI Workbench کنسول کلیک کنید. اگر می‌خواهید نوت‌بوک را به طور کامل حذف کنید، روی دکمه Delete کلیک کنید.

مثال را متوقف کنید

برای حذف Storage Bucket، با استفاده از منوی ناوبری در Cloud Console خود، به Storage بروید، Bucket خود را انتخاب کنید و روی Delete کلیک کنید:

حذف فضای ذخیره‌سازی