สร้างต้นแบบสู่เวอร์ชันที่ใช้งานจริง: การฝึกโมเดลที่กำหนดเองด้วย Vertex AI

1. ภาพรวม

ในแล็บนี้ คุณจะได้ใช้ Vertex AI เพื่อเรียกใช้ชื่องานการฝึกแบบกำหนดเอง

แล็บนี้เป็นส่วนหนึ่งของวิดีโอซีรีส์ต้นแบบสู่การผลิต คุณจะสร้างโมเดลการแยกประเภทรูปภาพโดยใช้ชุดข้อมูลดอกไม้ ดูข้อมูลเพิ่มเติมได้ในวิดีโอประกอบ

.

สิ่งที่คุณจะได้เรียนรู้

โดยคุณจะได้เรียนรู้วิธีต่อไปนี้

  • สร้างสมุดบันทึกที่มีการจัดการ Vertex AI Workbench
  • กำหนดค่าและเปิดใช้งานงานการฝึกแบบกำหนดเองจาก UI ของ Vertex AI
  • กำหนดค่าและเปิดใช้งานงานการฝึกแบบกำหนดเองด้วย Vertex AI Python SDK

ต้นทุนทั้งหมดในการเรียกใช้ Lab นี้ใน Google Cloud อยู่ที่ประมาณ $1

2. ข้อมูลเบื้องต้นเกี่ยวกับ Vertex AI

แล็บนี้ใช้ผลิตภัณฑ์ AI รุ่นล่าสุดที่พร้อมให้บริการใน Google Cloud Vertex AI ผสานรวมข้อเสนอ ML ใน Google Cloud เข้ากับประสบการณ์การพัฒนาที่ราบรื่น ก่อนหน้านี้ โมเดลที่ฝึกด้วย AutoML และโมเดลที่กำหนดเองจะเข้าถึงได้ผ่านบริการแยกต่างหาก ข้อเสนอใหม่นี้จะรวมทั้ง 2 อย่างไว้ใน API เดียว พร้อมกับผลิตภัณฑ์ใหม่อื่นๆ นอกจากนี้ คุณยังย้ายข้อมูลโปรเจ็กต์ที่มีอยู่ไปยัง Vertex AI ได้ด้วย

Vertex AI มีผลิตภัณฑ์มากมายที่แตกต่างกันเพื่อรองรับเวิร์กโฟลว์ ML แบบครบวงจร Lab นี้จะมุ่งเน้นที่ผลิตภัณฑ์ที่ไฮไลต์ไว้ด้านล่าง ได้แก่ Training และ Workbench

ภาพรวมผลิตภัณฑ์ Vertex

3. ตั้งค่าสภาพแวดล้อม

คุณจะต้องมีโปรเจ็กต์ Google Cloud Platform ที่เปิดใช้การเรียกเก็บเงินเพื่อเรียกใช้ Codelab นี้ หากต้องการสร้างโปรเจ็กต์ ให้ทำตามวิธีการที่นี่

ขั้นตอนที่ 1: เปิดใช้ Compute Engine API

ไปที่ Compute Engine แล้วเลือกเปิดใช้หากยังไม่ได้เปิดใช้

ขั้นตอนที่ 2: เปิดใช้ Artifact Registry API

ไปที่ Artifact Registry แล้วเลือกเปิดใช้หากยังไม่ได้เปิดใช้ คุณจะใช้สิ่งนี้เพื่อสร้างคอนเทนเนอร์สำหรับงานการฝึกที่กำหนดเอง

ขั้นตอนที่ 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

เมื่อเปิดใช้แล้ว ให้คลิก MANAGED NOTEBOOKS

Notebooks_UI

จากนั้นเลือก NOTEBOOK ใหม่

new_notebook

ตั้งชื่อ Notebook แล้วเลือกบัญชีบริการในส่วนสิทธิ์

create_notebook

เลือกการตั้งค่าขั้นสูง

ในส่วนความปลอดภัย ให้เลือก "เปิดใช้เทอร์มินัล" หากยังไม่ได้เปิดใช้

enable_terminal

คุณปล่อยให้การตั้งค่าขั้นสูงอื่นๆ ทั้งหมดเป็นไปตามเดิมได้

จากนั้นคลิกสร้าง ระบบจะใช้เวลา 2-3 นาทีในการจัดสรรอินสแตนซ์

เมื่อสร้างอินสแตนซ์แล้ว ให้เลือกเปิด JUPYTERLAB

open_jupyterlab

4. สร้างคอนเทนเนอร์โค้ดแอปพลิเคชันการฝึก

คุณจะส่งงานการฝึกนี้ไปยัง Vertex AI โดยใส่โค้ดแอปพลิเคชันการฝึกในคอนเทนเนอร์ Docker และพุชคอนเทนเนอร์นี้ไปยัง Google Artifact Registry เมื่อใช้วิธีนี้ คุณจะฝึกโมเดลที่สร้างด้วยเฟรมเวิร์กใดก็ได้

หากต้องการเริ่มต้น ให้เปิดหน้าต่างเทอร์มินัลในอินสแตนซ์ Notebook จากเมนู Launcher โดยทำดังนี้

เปิดเทอร์มินัลใน Notebook

ขั้นตอนที่ 1: สร้าง Bucket ของ Cloud Storage

ในงานการฝึกนี้ คุณจะส่งออกโมเดล TensorFlow ที่ผ่านการฝึกไปยัง Bucket ของ Cloud Storage นอกจากนี้ คุณยังจัดเก็บข้อมูลสำหรับการฝึกใน Bucket ของ Cloud Storage ได้ด้วย

จากเทอร์มินัล ให้เรียกใช้คำสั่งต่อไปนี้เพื่อกำหนดตัวแปรสภาพแวดล้อมสำหรับโปรเจ็กต์ของคุณ โดยแทนที่ your-cloud-project ด้วยรหัสโปรเจ็กต์

PROJECT_ID='your-cloud-project'

จากนั้นเรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัลเพื่อสร้างที่เก็บข้อมูลใหม่ในโปรเจ็กต์

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

ขั้นตอนที่ 2: คัดลอกข้อมูลไปยัง Bucket ของ Cloud Storage

เราต้องนำชุดข้อมูลดอกไม้ไปไว้ใน Cloud Storage เพื่อเป็นการสาธิต คุณจะต้องดาวน์โหลดชุดข้อมูลไปยังอินสแตนซ์ Workbench นี้ก่อน แล้วจึงคัดลอกไปยังที่เก็บข้อมูล

ดาวน์โหลดและแตกไฟล์ข้อมูล

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

จากนั้นคัดลอกไปยัง Bucket ที่คุณเพิ่งสร้าง เราเพิ่ม -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} ด้วยชื่อของ 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 เปล่าในรูทของไดเรกทอรี 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 จะระบุรูปภาพฐาน ซึ่งเป็นรูปภาพหลักที่ใช้สร้างรูปภาพที่คุณสร้างขึ้น คุณจะใช้อิมเมจ Docker ของ GPU สำหรับ TensorFlow Enterprise 2.8 ใน Deep Learning Container เป็นอิมเมจพื้นฐาน Deep Learning Containers ใน Google Cloud มาพร้อมกับเฟรมเวิร์ก ML และวิทยาศาสตร์ข้อมูลทั่วไปหลายรายการที่ติดตั้งไว้ล่วงหน้า

คำสั่ง WORKDIR จะระบุไดเรกทอรีในอิมเมจที่จะเรียกใช้คำสั่งที่ตามมา

คำสั่ง COPY จะคัดลอกโค้ดเทรนเนอร์ไปยังอิมเมจ Docker โปรดทราบว่าในตัวอย่างนี้ เรามีไฟล์ Python เพียงไฟล์เดียวในไดเรกทอรีเทรนเนอร์ แต่ในตัวอย่างที่สมจริงมากขึ้น คุณอาจมีไฟล์เพิ่มเติม เช่น ไฟล์ชื่อ data.py ซึ่งจัดการการประมวลผลข้อมูลล่วงหน้า และไฟล์ชื่อ model.py ซึ่งมีเพียงโค้ดโมเดล เป็นต้น สำหรับโค้ดการฝึกที่ซับซ้อนกว่านี้ โปรดดูเอกสาร Python เกี่ยวกับการแพ็กเกจโปรเจ็กต์ Python

หากต้องการเพิ่มไลบรารีอื่นๆ คุณสามารถใช้คำสั่ง RUN เพื่อติดตั้ง pip (เช่น RUN pip install -r requirements.txt) แต่เราไม่จำเป็นต้องมีอะไรเพิ่มเติมสำหรับตัวอย่างนี้

สุดท้าย คำสั่ง ENTRYPOINT จะตั้งค่าจุดแรกเข้าเพื่อเรียกใช้เทรนเนอร์ ซึ่งจะทำงานเมื่อเราเริ่มงานการฝึก ในกรณีของเราคือการเรียกใช้ไฟล์ task.py

ดูข้อมูลเพิ่มเติมเกี่ยวกับการเขียน Dockerfile สำหรับการฝึก Vertex AI ได้ที่นี่

ขั้นตอนที่ 4: สร้างคอนเทนเนอร์

จากเทอร์มินัลของ Notebook ใน 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: กำหนดค่างานการฝึก

คลิกสร้างเพื่อป้อนพารามิเตอร์สำหรับงานการฝึก

create_training

  • ในส่วนชุดข้อมูล ให้เลือกไม่มีชุดข้อมูลที่มีการจัดการ
  • จากนั้นเลือกการฝึกแบบกำหนดเอง (ขั้นสูง) เป็นวิธีการฝึก แล้วคลิกต่อไป
  • เลือกฝึกโมเดลใหม่ แล้วป้อน flowers-model (หรือชื่อที่คุณต้องการตั้งให้โมเดล) สำหรับชื่อโมเดล
  • คลิกต่อไป

ในขั้นตอนการตั้งค่าคอนเทนเนอร์ ให้เลือกคอนเทนเนอร์ที่กำหนดเอง

ตัวเลือกคอนเทนเนอร์ที่กำหนดเอง

ในช่องแรก (อิมเมจคอนเทนเนอร์) ให้ป้อนค่าของตัวแปร IMAGE_URI จากส่วนก่อนหน้า โดยควรมีลักษณะดังนี้ us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image:latest โดยใช้รหัสโปรเจ็กต์ของคุณเอง เว้นช่องที่เหลือว่างไว้ แล้วคลิกดำเนินการต่อ

ข้ามขั้นตอนไฮเปอร์พารามิเตอร์โดยคลิกต่อไปอีกครั้ง

ขั้นตอนที่ 2: กำหนดค่าคลัสเตอร์การประมวลผล

กำหนดค่าพูลผู้ปฏิบัติงาน 0 ดังนี้

worker_pool_0

คุณจะข้ามขั้นตอนที่ 6 ไปก่อนและกำหนดค่าคอนเทนเนอร์การคาดการณ์ใน Lab ถัดไปในชุดนี้

คลิกเริ่มการฝึกเพื่อเริ่มงานการฝึก ในส่วนการฝึกของคอนโซลภายใต้แท็บ TRAINING PIPELINES คุณจะเห็นงานที่เพิ่งเปิดตัวใหม่

งานการฝึก

🎉 ยินดีด้วย 🎉

คุณได้เรียนรู้วิธีใช้ Vertex AI เพื่อทำสิ่งต่อไปนี้แล้ว

  • เปิดใช้งานงานฝึกที่กำหนดเองสำหรับโค้ดการฝึกที่ระบุไว้ในคอนเทนเนอร์ที่กำหนดเอง คุณใช้โมเดล TensorFlow ในตัวอย่างนี้ แต่สามารถฝึกโมเดลที่สร้างด้วยเฟรมเวิร์กใดก็ได้โดยใช้คอนเทนเนอร์ที่กำหนดเองหรือคอนเทนเนอร์ในตัว

ดูข้อมูลเพิ่มเติมเกี่ยวกับส่วนต่างๆ ของ Vertex ได้ที่เอกสารประกอบ

6. [ไม่บังคับ] ใช้ Vertex AI Python SDK

ส่วนก่อนหน้าแสดงวิธีเปิดใช้งานงานการฝึกผ่าน UI ในส่วนนี้ คุณจะเห็นวิธีอื่นในการส่งงานการฝึกโดยใช้ Vertex AI Python SDK

กลับไปที่อินสแตนซ์ Notebook แล้วสร้าง Notebook ของ TensorFlow 2 จาก Launcher โดยทำดังนี้

new_notebook

นำเข้า 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 โดยค่าเริ่มต้น

ในส่วนการฝึกของคอนโซลภายใต้แท็บงานที่กำหนดเอง คุณจะเห็นงานการฝึก

7. ล้างข้อมูล

เนื่องจากสมุดบันทึกที่มีการจัดการของ Vertex AI Workbench มีฟีเจอร์ปิดเครื่องเมื่อไม่มีการใช้งาน เราจึงไม่ต้องกังวลเรื่องการปิดอินสแตนซ์ หากต้องการปิดอินสแตนซ์ด้วยตนเอง ให้คลิกปุ่มหยุดในส่วน Vertex AI Workbench ของคอนโซล หากต้องการลบ Notebook ทั้งหมด ให้คลิกปุ่มลบ

หยุดอินสแตนซ์

หากต้องการลบ Storage Bucket ให้ใช้เมนูการนำทางใน Cloud Console โดยไปที่ Storage เลือก Bucket แล้วคลิกลบ

ลบพื้นที่เก็บข้อมูล