Nguyên mẫu phát hành công khai: Đào tạo mô hình tuỳ chỉnh bằng Vertex AI

1. Tổng quan

Trong lớp học này, bạn sẽ sử dụng Vertex AI để chạy một công việc huấn luyện tuỳ chỉnh.

Lớp học lập trình này nằm trong loạt video Từ nguyên mẫu đến sản phẩm hoàn thiện. Bạn sẽ xây dựng một mô hình phân loại hình ảnh bằng Dữ liệu hoa. Bạn có thể xem video đi kèm để tìm hiểu thêm:

.

Kiến thức bạn sẽ học được

Bạn sẽ tìm hiểu cách:

  • Tạo sổ tay được quản lý bằng Vertex AI Workbench
  • Định cấu hình và triển khai một công việc huấn luyện tuỳ chỉnh từ giao diện người dùng Vertex AI
  • Định cấu hình và chạy một công việc huấn luyện tuỳ chỉnh bằng SDK Python Vertex AI

Tổng chi phí để chạy lớp học này trên Google Cloud là khoảng 1 USD.

2. Giới thiệu về Vertex AI

Lớp học này sử dụng sản phẩm AI mới nhất có trên Google Cloud. Vertex AI tích hợp các giải pháp học máy trên Google Cloud vào một trải nghiệm phát triển liền mạch. Trước đây, bạn có thể truy cập vào các mô hình được huấn luyện bằng AutoML và mô hình tuỳ chỉnh thông qua các dịch vụ riêng biệt. Sản phẩm mới kết hợp cả hai thành một API duy nhất, cùng với các sản phẩm mới khác. Bạn cũng có thể di chuyển các dự án hiện có sang Vertex AI.

Vertex AI bao gồm nhiều sản phẩm để hỗ trợ quy trình làm việc toàn diện về máy học. Lớp học này sẽ tập trung vào các sản phẩm được nêu dưới đây: Bài đào tạoWorkbench

Tổng quan về sản phẩm Vertex

3. Thiết lập môi trường

Bạn cần có một dự án trên Google Cloud Platform đã bật tính năng thanh toán để chạy lớp học lập trình này. Để tạo dự án, hãy làm theo hướng dẫn tại đây.

Bước 1: Bật API Compute Engine

Chuyển đến Compute Engine rồi chọn Bật nếu bạn chưa bật.

Bước 2: Bật API Cấu phần phần mềm

Chuyển đến Artifact Registry (Cơ sở đăng ký cấu phần phần mềm) rồi chọn Enable (Bật) nếu bạn chưa bật. Bạn sẽ dùng mã này để tạo một vùng chứa cho công việc huấn luyện tuỳ chỉnh.

Bước 3: Bật API Vertex AI

Chuyển đến mục Vertex AI trong Cloud Console rồi nhấp vào Bật API Vertex AI.

Trang tổng quan Vertex AI

Bước 4: Tạo một thực thể Vertex AI Workbench

Trong phần Vertex AI của Cloud Console, hãy nhấp vào Workbench (Bảng điều khiển):

Trình đơn Vertex AI

Bật Notebooks API nếu bạn chưa bật.

Notebook_api

Sau khi bật, hãy nhấp vào MANAGED NOTEBOOKS (SỔ ĐIỆN TỬ ĐƯỢC QUẢN LÝ):

Notebooks_UI

Sau đó, chọn NOTEBOOK MỚI.

new_notebook

Đặt tên cho sổ tay của bạn và trong phần Quyền, hãy chọn Tài khoản dịch vụ

create_notebook

Chọn Cài đặt nâng cao.

Trong phần Security (Bảo mật), hãy chọn "Enable terminal" (Bật thiết bị đầu cuối) nếu bạn chưa bật.

enable_terminal

Bạn có thể giữ nguyên tất cả các chế độ cài đặt nâng cao khác.

Tiếp theo, hãy nhấp vào Tạo. Quá trình cấp phép thực thể sẽ mất vài phút.

Sau khi tạo thực thể, hãy chọn MỞ JUPYTERLAB.

open_jupyterlab

4. Vùng chứa mã xử lý ứng dụng huấn luyện

Bạn sẽ gửi công việc huấn luyện này đến Vertex AI bằng cách đặt mã ứng dụng huấn luyện vào một vùng chứa Docker và đẩy vùng chứa này vào Google Artifact Registry. Khi sử dụng phương pháp này, bạn có thể huấn luyện một mô hình được tạo bằng bất kỳ khung nào.

Để bắt đầu, trên trình đơn Trình chạy, hãy mở cửa sổ Dòng lệnh trong thực thể máy tính xách tay:

Mở cửa sổ dòng lệnh trong sổ tay

Bước 1: Tạo bộ chứa trên Cloud Storage

Trong công việc huấn luyện này, bạn sẽ xuất mô hình TensorFlow đã huấn luyện sang một Bộ chứa trên Cloud Storage. Bạn cũng sẽ lưu trữ dữ liệu phục vụ huấn luyện trong một bộ chứa Cloud Storage.

Trên Terminal, hãy chạy đoạn mã sau để xác định biến env cho dự án, nhớ thay thế your-cloud-project bằng mã nhận dạng của dự án:

PROJECT_ID='your-cloud-project'

Tiếp theo, chạy dòng sau trong dòng lệnh để tạo một bộ chứa mới trong dự án của bạn.

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

Bước 2: Sao chép dữ liệu vào bộ chứa Cloud Storage

Chúng ta cần đưa tập dữ liệu hoa vào Cloud Storage. Để minh hoạ, trước tiên, bạn sẽ tải tập dữ liệu xuống thực thể Workbench này, rồi sao chép tập dữ liệu đó vào một bộ chứa.

Tải và giải nén dữ liệu.

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

Sau đó, sao chép tệp đó vào bộ chứa bạn vừa tạo. Chúng ta thêm -r vì muốn sao chép toàn bộ thư mục và -m để thực hiện sao chép nhiều quá trình xử lý, giúp tăng tốc độ.

gsutil -m cp -r flower_photos $BUCKET

Bước 3: Viết mã huấn luyện

Tạo một thư mục mới có tên là flowers rồi chuyển vào thư mục đó:

mkdir flowers
cd flowers

Chạy mã sau để tạo thư mục cho mã huấn luyện và tệp Python mà bạn sẽ thêm mã vào.

mkdir trainer
touch trainer/task.py

Bây giờ, bạn sẽ có những nội dung sau trong thư mục flowers/:

+ trainer/
    + task.py

Để biết thêm thông tin chi tiết về cách định cấu trúc mã ứng dụng huấn luyện, hãy tham khảo tài liệu.

Tiếp theo, hãy mở tệp task.py bạn vừa tạo và sao chép mã bên dưới.

Bạn cần thay thế {your-gcs-bucket} bằng tên của bộ chứa Cloud Storage mà bạn vừa tạo.

Thông qua công cụ FUSE của Cloud Storage, các công việc huấn luyện trên Vertex AI Training có thể truy cập vào dữ liệu trên Cloud Storage dưới dạng tệp trong hệ thống tệp cục bộ. Khi bạn bắt đầu một công việc huấn luyện tuỳ chỉnh, công việc đó sẽ thấy một thư mục /gcs chứa mọi bộ chứa của bạn trong Cloud Storage dưới dạng thư mục con. Đó là lý do các đường dẫn dữ liệu trong mã huấn luyện bắt đầu bằng /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')

Bước 4: Tạo Dockerfile

Để đóng gói mã, bạn cần tạo một Dockerfile. Trong Dockerfile, bạn sẽ thêm tất cả các lệnh cần thiết để chạy hình ảnh. Thao tác này sẽ cài đặt tất cả thư viện cần thiết và thiết lập điểm truy cập cho mã huấn luyện.

Trên Terminal, hãy tạo một Dockerfile trống trong thư mục gốc của thư mục hoa:

touch Dockerfile

Bây giờ, bạn sẽ có những nội dung sau trong thư mục flowers/:

+ Dockerfile
+ trainer/
    + task.py

Mở Dockerfile và sao chép nội dung sau vào tệp đó:

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"]

Hãy cùng xem lại các lệnh trong tệp này.

Lệnh FROM chỉ định hình ảnh cơ sở, đây là hình ảnh mẹ mà hình ảnh bạn tạo sẽ được xây dựng. Để làm hình ảnh cơ sở, bạn sử dụng hình ảnh Docker cho GPU Deep Learning Container TensorFlow Enterprise 2.8. Vùng chứa học sâu trên Google Cloud được cài đặt sẵn nhiều khung học máy và khoa học dữ liệu phổ biến.

Lệnh WORKDIR chỉ định thư mục trên hình ảnh nơi chạy các lệnh tiếp theo.

Lệnh COPY (SAO CHÉP) sẽ sao chép mã trình huấn luyện vào hình ảnh Docker. Xin lưu ý rằng trong ví dụ này, chúng ta chỉ có một tệp python trong thư mục trình huấn luyện, nhưng để có ví dụ thực tế hơn, bạn có thể sẽ có thêm các tệp khác. Có thể một tệp có tên là data.py, xử lý việc xử lý trước dữ liệu và một tệp có tên là model.py, chỉ có mã mô hình, v.v. Để biết mã huấn luyện phức tạp hơn, hãy xem tài liệu về Python về đóng gói dự án Python.

Nếu muốn thêm bất kỳ thư viện nào khác, bạn có thể sử dụng lệnh RUN để cài đặt pip (ví dụ: RUN pip install -r requirements.txt). Tuy nhiên, chúng ta không cần thêm bất kỳ nội dung nào khác cho ví dụ này.

Cuối cùng, lệnh ENTRYPOINT thiết lập điểm truy cập để gọi trình huấn luyện. Đây là nội dung sẽ chạy khi chúng ta bắt đầu công việc huấn luyện. Trong trường hợp của chúng ta, đó là việc thực thi tệp task.py.

Bạn có thể tìm hiểu thêm về cách viết Dockerfiles cho chương trình huấn luyện Vertex AI tại đây.

Bước 4: Tạo vùng chứa

Từ dòng lệnh của sổ tay Workbench, hãy chạy mã sau để xác định biến env cho dự án của bạn, nhớ thay thế your-cloud-project bằng mã nhận dạng của dự án:

PROJECT_ID='your-cloud-project'

Tạo một kho lưu trữ trong Artifact Registry

REPO_NAME='flower-app'

gcloud artifacts repositories create $REPO_NAME --repository-format=docker \
--location=us-central1 --description="Docker repository"

Xác định một biến bằng URI của hình ảnh vùng chứa trong Google Artifact Registry:

IMAGE_URI=us-central1-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/flower_image:latest

Định cấu hình Docker

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

Sau đó, hãy tạo vùng chứa bằng cách chạy lệnh sau từ thư mục gốc flower:

docker build ./ -t $IMAGE_URI

Cuối cùng, hãy đẩy tệp này vào Artifact Registry:

docker push $IMAGE_URI

Với vùng chứa được đẩy vào Artifact Registry, giờ đây bạn đã sẵn sàng bắt đầu công việc đào tạo.

5. Chạy công việc huấn luyện tuỳ chỉnh trên Vertex AI

Lớp học này sử dụng tính năng huấn luyện tuỳ chỉnh thông qua một vùng chứa tuỳ chỉnh trên Google Artifact Registry, nhưng bạn cũng có thể chạy một công việc huấn luyện bằng Vùng chứa tạo sẵn.

Để bắt đầu, hãy chuyển đến phần Hướng dẫn trong phần Vertex của bảng điều khiển Google Cloud:

trình đơn huấn luyện

Bước 1: Định cấu hình công việc huấn luyện

Nhấp vào Tạo để nhập các thông số cho công việc huấn luyện.

create_training

  • Trong mục Tập dữ liệu, hãy chọn Không có tập dữ liệu được quản lý
  • Sau đó, hãy chọn Huấn luyện tuỳ chỉnh (nâng cao) làm phương pháp huấn luyện rồi nhấp vào Tiếp tục.
  • Chọn Huấn luyện mô hình mới, sau đó nhập flowers-model (hoặc bất kỳ tên nào bạn muốn đặt cho mô hình) cho Tên mô hình
  • Nhấp vào Tiếp tục

Trong bước Cài đặt vùng chứa, hãy chọn Vùng chứa tuỳ chỉnh:

Tuỳ chọn vùng chứa tuỳ chỉnh

Trong hộp đầu tiên (Hình ảnh vùng chứa), hãy nhập giá trị của biến IMAGE_URI từ phần trước. Tên này phải là: us-central1-docker.pkg.dev/{PROJECT_ID}/flower-app/flower_image:latest, với mã dự án của riêng bạn. Để trống các trường còn lại, rồi nhấp vào Tiếp tục.

Bỏ qua bước Siêu thông số bằng cách nhấp lại vào Tiếp tục.

Bước 2: Định cấu hình cụm máy tính

Định cấu hình Nhóm worker 0 như sau:

worker_pool_0

Hiện tại, bạn sẽ bỏ qua bước 6 và định cấu hình vùng chứa dự đoán trong lớp học lập trình tiếp theo trong loạt bài này.

Nhấp vào START TRAINING (BẮT ĐẦU HUẤN LUYỆN) để bắt đầu công việc huấn luyện. Trong phần Đào tạo của bảng điều khiển, trên thẻ QUY TRÌNH ĐÀO TẠO, bạn sẽ thấy công việc mới khởi chạy:

Việc làm trong lĩnh vực đào tạo

🎉 Xin chúc mừng! 🎉

Bạn đã tìm hiểu cách sử dụng Vertex AI để:

  • Chạy một công việc huấn luyện tuỳ chỉnh cho mã huấn luyện được cung cấp trong một vùng chứa tuỳ chỉnh. Bạn đã sử dụng mô hình TensorFlow trong ví dụ này, nhưng bạn có thể huấn luyện mô hình được tạo bằng bất kỳ khung nào bằng cách sử dụng vùng chứa tuỳ chỉnh hoặc tích hợp sẵn.

Để tìm hiểu thêm về các phần khác nhau của Vertex, hãy xem tài liệu.

6. [Không bắt buộc] Sử dụng SDK Vertex AI Python

Phần trước đã hướng dẫn cách chạy công việc huấn luyện thông qua giao diện người dùng. Trong phần này, bạn sẽ thấy một cách khác để gửi công việc huấn luyện bằng cách sử dụng SDK Python Vertex AI.

Quay lại thực thể sổ tay và tạo một sổ tay TensorFlow 2 từ Trình chạy:

new_notebook

Nhập Vertex AI SDK.

from google.cloud import aiplatform

Sau đó, hãy tạo một CustomContainerTrainingJob. Bạn cần thay thế {PROJECT_ID} trong container_uri bằng tên dự án và thay thế {BUCKET} trong staging_bucket bằng bộ chứa mà bạn đã tạo trước đó.

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}')

Sau đó, hãy chạy công việc.

my_job.run(replica_count=1,
           machine_type='n1-standard-8',
           accelerator_type='NVIDIA_TESLA_V100',
           accelerator_count=1)

Để minh hoạ, công việc này đã được định cấu hình để chạy trên một máy lớn hơn so với phần trước. Ngoài ra, chúng ta đang chạy bằng GPU. Nếu bạn không chỉ định machine-type, accelerator_type hoặc accelerator_count, thì theo mặc định, công việc sẽ chạy trên n1-standard-4.

Trong phần Huấn luyện của bảng điều khiển, trên thẻ CÔNG VIỆC TUỲ CHỈNH, bạn sẽ thấy công việc huấn luyện của mình.

7. Dọn dẹp

Vì các sổ ghi chép được quản lý trong Vertex AI Workbench có tính năng tắt khi ở trạng thái rảnh, nên chúng ta không cần lo lắng về việc tắt thực thể. Nếu bạn muốn tắt thực thể theo cách thủ công, hãy nhấp vào nút Dừng trong mục Vertex AI Workbench (Bảng điều khiển Vertex AI) của bảng điều khiển. Nếu bạn muốn xoá toàn bộ sổ tay, hãy nhấp vào nút Xoá.

Dừng thực thể

Để xoá Bộ nhớ, hãy sử dụng trình đơn Điều hướng trong Cloud Console, chuyển đến Bộ nhớ, chọn bộ nhớ của bạn rồi nhấp vào Xoá:

Xoá bộ nhớ