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

1. بررسی اجمالی

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

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

.

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

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

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

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

2. مقدمه ای بر Vertex AI

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

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

نمای کلی محصول Vertex

3. محیط خود را تنظیم کنید

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

مرحله 1: Compute Engine API را فعال کنید

به Compute Engine بروید و اگر قبلاً فعال نشده است Enable را انتخاب کنید.

مرحله ۲: Artifact Registry API را فعال کنید

به رجیستری Artifact بروید و اگر قبلاً وجود ندارد، Enable را انتخاب کنید. شما از این برای ایجاد یک ظرف برای کار آموزشی سفارشی خود استفاده خواهید کرد.

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

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

داشبورد Vertex AI

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

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

منوی Vertex AI

اگر قبلاً API Notebooks وجود ندارد، آن را فعال کنید.

Notebook_api

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

Notebooks_UI

سپس NEW NOTEBOOK را انتخاب کنید.

نوت بوک

نوت بوک خود را نامی بگذارید و در قسمت Permission حساب سرویس را انتخاب کنید

create_notebook

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

اگر قبلاً فعال نشده است، در قسمت Security ، "Enable terminal" را انتخاب کنید.

enable_terminal

شما می توانید تمام تنظیمات پیشرفته دیگر را به همین صورت رها کنید.

بعد، روی ایجاد کلیک کنید. ارائه نمونه چند دقیقه طول می کشد.

پس از ایجاد نمونه، OPEN JUPYTERLAB را انتخاب کنید.

open_jupyterlab

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

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

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

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

مرحله 1: یک سطل ذخیره سازی ابری ایجاد کنید

در این کار آموزشی، مدل TensorFlow آموزش دیده را به یک سطل ذخیره سازی ابری صادر می کنید. همچنین داده ها را برای آموزش در یک سطل Cloud Storage ذخیره خواهید کرد.

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

PROJECT_ID='your-cloud-project'

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

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

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

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

mkdir flowers
cd flowers

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

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 را می بیند که شامل تمام سطل های ذخیره سازی ابری شما به عنوان دایرکتوری های فرعی است. به همین دلیل است که مسیرهای داده در کد آموزشی با /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 خالی در ریشه دایرکتوری flowers خود ایجاد کنید:

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 تصویر پایه را مشخص می کند، که تصویری است که تصویری که ایجاد می کنید روی آن ساخته می شود. به عنوان تصویر پایه، از تصویر Deep Learning Container TensorFlow Enterprise 2.8 GPU Docker استفاده خواهید کرد. Deep Learning Containers در Google Cloud با بسیاری از چارچوب‌های رایج ML و علم داده از پیش نصب شده عرضه می‌شود.

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

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

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

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

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

مرحله 4: ظرف را بسازید

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

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

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

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

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

docker build ./ -t $IMAGE_URI

در نهایت، آن را به آرتیفکت رجیستری فشار دهید:

docker push $IMAGE_URI

با فشار دادن کانتینر به Artifact Registry، اکنون آماده شروع یک کار آموزشی هستید.

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

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

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

منوی قطار

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

روی Create کلیک کنید تا پارامترهای مربوط به کار آموزشی خود را وارد کنید.

ایجاد_آموزش

  • در زیر مجموعه داده ، بدون مجموعه داده مدیریت شده را انتخاب کنید
  • سپس آموزش سفارشی (پیشرفته) را به عنوان روش آموزشی خود انتخاب کرده و روی Continue کلیک کنید.
  • Train new model را انتخاب کنید سپس flowers-model (یا هر چیزی که می خواهید مدل خود را نامگذاری کنید) را برای نام مدل وارد کنید.
  • روی Continue کلیک کنید

در مرحله تنظیمات Container، Custom Container را انتخاب کنید:

گزینه کانتینر سفارشی

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

با کلیک مجدد روی Continue از مرحله Hyperparameters رد شوید.

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

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

کارگر_پول_0

فعلاً از مرحله 6 رد می‌شوید و ظرف پیش‌بینی را در آزمایشگاه بعدی این سری پیکربندی می‌کنید.

برای شروع کار آموزشی، روی START TRAINING کلیک کنید. در بخش Training کنسول خود در زبانه TRAINING PIPELINES ، کار تازه راه اندازی شده خود را خواهید دید:

مشاغل آموزشی

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

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

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

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

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

بخش قبلی نحوه راه اندازی کار آموزشی از طریق UI را نشان داد. در این بخش، یک روش جایگزین برای ارسال شغل آموزشی با استفاده از 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 اجرا می‌شود.

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

7. پاکسازی

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

توقف نمونه

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

ذخیره سازی را حذف کنید