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

1. ภาพรวม

ในชั้นเรียนนี้ คุณจะใช้ Vertex AI เพื่อเรียกใช้งานการฝึกที่กำหนดเอง

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

.

สิ่งที่คุณเรียนรู้

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

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

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

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

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

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

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

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

แดชบอร์ด 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

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

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

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

open_jupyterlab

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

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

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

เปิดเทอร์มินัลในโน้ตบุ๊ก

ขั้นตอนที่ 1: สร้างที่เก็บข้อมูล Cloud Storage

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

จากเทอร์มินัล ให้เรียกใช้คำสั่งต่อไปนี้เพื่อกำหนดตัวแปร env สำหรับโปรเจ็กต์ โดยอย่าลืมแทนที่ 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 และเข้ารหัสลงในไดเรกทอรีดังกล่าว:

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 เปล่าที่รูทของไดเรกทอรี 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 ของ Deep Learning สำหรับคอนเทนเนอร์ TensorFlow Enterprise 2.8 คอนเทนเนอร์การเรียนรู้เชิงลึกใน 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: สร้างคอนเทนเนอร์

จากเทอร์มินัลของโน้ตบุ๊ก 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"

กําหนดตัวแปรด้วย 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 Console โดยทำดังนี้

เมนูรถไฟ

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

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

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

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 ของคอนโซล หากต้องการลบสมุดบันทึกทั้งหมด ให้คลิกปุ่ม "ลบ"

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

หากต้องการลบที่เก็บข้อมูล ให้ใช้เมนูการนำทางใน Cloud Console เพื่อไปที่ "พื้นที่เก็บข้อมูล" เลือกที่เก็บข้อมูล แล้วคลิก "ลบ"

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