Vertex AI: Đào tạo và chuyển giao cho nhiều nhân viên thông qua TensorFlow

1. Tổng quan

Trong phòng thí nghiệm này, bạn sẽ sử dụng AI Vertex để chạy công việc đào tạo nhiều nhân viên cho mô hình TensorFlow.

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

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

  • Sửa đổi mã xử lý ứng dụng huấn luyện để đào tạo nhiều nhân viên
  • Định cấu hình và chạy một công việc huấn luyện nhiều worker từ giao diện người dùng Vertex AI
  • Định cấu hình và chạy công việc huấn luyện nhiều worker bằng Vertex SDK

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

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

Phòng thí nghiệm 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. Nếu bạn có ý kiến phản hồi, vui lòng xem trang hỗ trợ.

Vertex AI có nhiều sản phẩm nhằm hỗ trợ quy trình học máy toàn diện. Phòng thí nghiệm này sẽ tập trung vào các sản phẩm được làm nổi bật dưới đây: Đào tạoBàn làm việc

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

3. Tổng quan về trường hợp sử dụng

Trong lớp học lập trình này, bạn sẽ sử dụng phương pháp học chuyển đổi để huấn luyện mô hình phân loại hình ảnh trên tập dữ liệu khoai mì từ Tập dữ liệu TensorFlow. Cấu trúc mà bạn sẽ sử dụng là mô hình ResNet50 từ thư viện tf.keras.applications được huấn luyện trước trên tập dữ liệu Imagenet.

Tại sao nên chọn hình thức đào tạo phân tán?

Nếu bạn có một GPU, TensorFlow sẽ sử dụng trình tăng tốc này để tăng tốc quá trình huấn luyện mô hình mà bạn không cần làm gì thêm. Tuy nhiên, nếu muốn tăng hiệu suất bằng cách sử dụng nhiều GPU trên một hoặc nhiều máy (mỗi máy có thể có nhiều GPU), thì bạn cần sử dụng tf.distribute. Đây là thư viện của TensorFlow để chạy phép tính trên nhiều thiết bị. Thiết bị là một CPU hoặc bộ tăng tốc, chẳng hạn như GPU hoặc TPU, trên một số máy mà TensorFlow có thể chạy các hoạt động.

Cách đơn giản nhất để bắt đầu với quy trình huấn luyện phân tán là một máy duy nhất có nhiều thiết bị GPU. Chiến lược phân phối TensorFlow từ mô-đun tf.distribute sẽ quản lý việc điều phối việc phân phối dữ liệu và cập nhật độ dốc trên tất cả GPU. Nếu bạn đã nắm vững cách đào tạo máy chủ đơn và muốn mở rộng quy mô hơn nữa, thì việc thêm nhiều máy vào cụm có thể giúp bạn tăng hiệu suất hơn nữa. Bạn có thể sử dụng một cụm máy chỉ có CPU hoặc mỗi máy có một hoặc nhiều GPU. Lớp học này đề cập đến trường hợp sau và minh hoạ cách sử dụng MultiWorkerMirroredStrategy để phân phối quá trình huấn luyện mô hình TensorFlow trên nhiều máy trên Vertex AI.

MultiWorkerMirroredStrategy là một chiến lược song song dữ liệu đồng bộ mà bạn có thể sử dụng chỉ bằng một vài thay đổi mã. Một bản sao của mô hình sẽ được tạo trên mỗi thiết bị trong cụm của bạn. Các lần cập nhật độ dốc tiếp theo sẽ diễn ra một cách đồng bộ. Điều này có nghĩa là mỗi thiết bị worker sẽ tính toán các lượt truyền tới và lui thông qua mô hình trên một lát cắt khác của dữ liệu đầu vào. Sau đó, các độ dốc được tính toán từ mỗi lát cắt này được tổng hợp trên tất cả các thiết bị trên một máy và tất cả các máy trong cụm và giảm (thường là trung bình) trong một quy trình được gọi là tất cả-giảm. Sau đó, trình tối ưu hoá sẽ thực hiện việc cập nhật tham số với các độ dốc giảm này, do đó giữ cho các thiết bị được đồng bộ hoá. Để tìm hiểu thêm về tính năng huấn luyện phân tán bằng TensorFlow, hãy xem video bên dưới:

4. 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ạn sẽ cần thông tin này để tạo thực thể sổ tay.

Bước 2: Bật Container Registry API

Chuyển đến Container Registry (Kho lưu trữ vùng chứa) rồi chọn Enable (Bật) nếu bạn chưa bật. Bạn sẽ sử dụng thông tin 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 Vertex AI API

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 SÁCH LƯU Ý MỚI.

new_notebook

Đặt tên cho sổ tay rồi nhấp vào Cài đặt nâng cao.

create_notebook

Trong phần Cài đặt nâng cao, hãy bật tính năng tắt khi không hoạt động và đặt số phút thành 60. Điều này có nghĩa là sổ tay của bạn sẽ tự động tắt khi không được sử dụng, do đó bạn không phải chịu các chi phí không cần thiết.

idle_timeout

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 phiên bản, hãy chọn Open JupyterLab.

open_jupyterlab

Trong lần đầu tiên sử dụng một thực thể mới, bạn sẽ được yêu cầu xác thực. Hãy làm theo các bước trong giao diện người dùng để thực hiện việc này.

xác thực

5. Đóng gói mã ứng dụng đào tạo

Bạn sẽ gửi công việc huấn luyện này đến Vertex 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 Container 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

Tạo một thư mục mới có tên là cassava và cd vào thư mục đó:

mkdir cassava
cd cassava

Bước 1: Tạo một Dockerfile

Bước đầu tiên trong việc đóng gói mã là 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. Công 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:

touch Dockerfile

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

FROM gcr.io/deeplearning-platform-release/tf2-gpu.2-7

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

Dockerfile này sử dụng hình ảnh Docker GPU cho TensorFlow Enterprise 2.7 của Deep Learning Container. 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. Sau khi tải hình ảnh đó xuống, Dockerfile này sẽ thiết lập điểm nhập cho mã huấn luyện. Bạn chưa tạo các tệp này – ở bước tiếp theo, bạn sẽ thêm mã để huấn luyện và điều chỉnh mô hình.

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

Trong công việc đào tạo này, bạn sẽ xuất mô hình TensorFlow đã qua huấn luyện sang một Bộ chứa trên đám mây. 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, hãy chạy đoạn mã sau trong Terminal để tạo một bộ chứa mới trong dự án.

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

Bước 3: Thêm mã huấn luyện mô hình

Trên Terminal, hãy chạy các lệnh 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 cassava/:

+ Dockerfile
+ trainer/
    + task.py

Tiếp theo, hãy mở tệp task.py bạn vừa tạo rồi sao chép đoạn 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.

import tensorflow as tf
import tensorflow_datasets as tfds
import os


PER_REPLICA_BATCH_SIZE = 64
EPOCHS = 2

# TODO: replace {your-gcs-bucket} with the name of the Storage bucket you created earlier
BUCKET = 'gs://{your-gcs-bucket}/mwms'

def preprocess_data(image, label):
  '''Resizes and scales images.'''

  image = tf.image.resize(image, (300,300))
  return tf.cast(image, tf.float32) / 255., label


def create_dataset(batch_size):
  '''Loads Cassava dataset and preprocesses data.'''

  data, info = tfds.load(name='cassava', as_supervised=True, with_info=True)
  number_of_classes = info.features['label'].num_classes
  train_data = data['train'].map(preprocess_data,
                                 num_parallel_calls=tf.data.experimental.AUTOTUNE)
  train_data  = train_data.shuffle(1000)
  train_data  = train_data.batch(batch_size)
  train_data  = train_data.prefetch(tf.data.experimental.AUTOTUNE)

  # Set AutoShardPolicy
  options = tf.data.Options()
  options.experimental_distribute.auto_shard_policy = tf.data.experimental.AutoShardPolicy.DATA
  train_data = train_data.with_options(options)

  return train_data, number_of_classes


def create_model(number_of_classes):
  '''Creates and compiles pretrained ResNet50 model.'''

  base_model = tf.keras.applications.ResNet50(weights='imagenet', include_top=False)
  x = base_model.output
  x = tf.keras.layers.GlobalAveragePooling2D()(x)
  x = tf.keras.layers.Dense(1016, activation='relu')(x)
  predictions = tf.keras.layers.Dense(number_of_classes, activation='softmax')(x)
  model = tf.keras.Model(inputs=base_model.input, outputs=predictions)

  model.compile(
      loss='sparse_categorical_crossentropy',
      optimizer=tf.keras.optimizers.Adam(0.0001),
      metrics=['accuracy'])

  return model


def _is_chief(task_type, task_id):
  '''Helper function. Determines if machine is chief.'''

  return task_type == 'chief'


def _get_temp_dir(dirpath, task_id):
  '''Helper function. Gets temporary directory for saving model.'''

  base_dirpath = 'workertemp_' + str(task_id)
  temp_dir = os.path.join(dirpath, base_dirpath)
  tf.io.gfile.makedirs(temp_dir)
  return temp_dir


def write_filepath(filepath, task_type, task_id):
  '''Helper function. Gets filepath to save model.'''

  dirpath = os.path.dirname(filepath)
  base = os.path.basename(filepath)
  if not _is_chief(task_type, task_id):
    dirpath = _get_temp_dir(dirpath, task_id)
  return os.path.join(dirpath, base)


def main():
  # Create strategy
  strategy = tf.distribute.MultiWorkerMirroredStrategy()

  # Get data
  global_batch_size = PER_REPLICA_BATCH_SIZE * strategy.num_replicas_in_sync
  train_data, number_of_classes = create_dataset(global_batch_size)

  # Wrap variable creation within strategy scope
  with strategy.scope():
    model = create_model(number_of_classes)

  model.fit(train_data, epochs=EPOCHS)

  # Determine type and task of the machine from
  # the strategy cluster resolver
  task_type, task_id = (strategy.cluster_resolver.task_type,
                        strategy.cluster_resolver.task_id)

  # Based on the type and task, write to the desired model path
  write_model_path = write_filepath(BUCKET, task_type, task_id)
  model.save(write_model_path)

if __name__ == "__main__":
    main()

Trước khi tạo vùng chứa, hãy tìm hiểu kỹ hơn về mã sử dụng MultiWorkerMirroredStrategy qua API tf.distribute.Strategy.

Có một số thành phần trong mã cần thiết để mã của bạn hoạt động với MultiWorkerMirroredStrategy.

  1. Dữ liệu cần được phân đoạn, nghĩa là mỗi worker được chỉ định một tập hợp con của toàn bộ tập dữ liệu. Do đó, tại mỗi bước, mỗi worker sẽ xử lý một kích thước lô toàn cục của các phần tử tập dữ liệu không trùng lặp. Quá trình phân đoạn này sẽ tự động diễn ra với tf.data.experimental.AutoShardPolicy (bạn có thể đặt thành FILE hoặc DATA). Trong ví dụ này, hàm create_dataset() đặt AutoShardPolicy thành DATA vì tập dữ liệu về khoai mì không được tải xuống dưới dạng nhiều tệp. Tuy nhiên, nếu bạn không đặt chính sách thành DATA, thì chính sách AUTO mặc định sẽ được áp dụng và kết quả cuối cùng sẽ giống nhau. Bạn có thể tìm hiểu thêm về cách phân đoạn tập dữ liệu bằng MultiWorkerMirroredStrategy tại đây.
  2. Trong hàm main(), đối tượng MultiWorkerMirroredStrategy được tạo. Tiếp theo, bạn gói quá trình tạo biến mô hình trong phạm vi của chiến lược. Bước quan trọng này cho TensorFlow biết những biến nào cần được phản ánh trên các bản sao.
  3. Kích thước lô được điều chỉnh theo tỷ lệ bằng num_replicas_in_sync. Điều này đảm bảo rằng mỗi bản sao xử lý cùng một số lượng ví dụ ở mỗi bước. Điều chỉnh quy mô kích thước lô là phương pháp hay nhất khi sử dụng các chiến lược song song dữ liệu đồng bộ trong TensorFlow.
  4. Việc lưu mô hình sẽ phức tạp hơn một chút trong trường hợp nhiều worker vì đích đến cần khác nhau cho từng worker. Worker chính sẽ lưu vào thư mục mô hình mong muốn, trong khi các worker khác sẽ lưu mô hình vào thư mục tạm thời. Điều quan trọng là các thư mục tạm thời này là duy nhất để ngăn nhiều worker ghi vào cùng một vị trí. Thao tác lưu có thể chứa các thao tác tập thể, nghĩa là tất cả worker phải lưu chứ không chỉ worker chính. Các hàm _is_chief(), _get_temp_dir(), write_filepath() cũng như hàm main() đều bao gồm mã nguyên mẫu giúp lưu mô hình.

Xin lưu ý rằng nếu đã sử dụng MultiWorkerMirroredStrategy trong một môi trường khác, bạn có thể đã thiết lập biến môi trường TF_CONFIG. Vertex AI sẽ tự động đặt TF_CONFIG cho bạn, vì vậy, bạn không cần xác định biến này trên mỗi máy trong cụm.

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

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'

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

IMAGE_URI="gcr.io/$PROJECT_ID/multiworker:cassava"

Định cấu hình Docker

gcloud auth configure-docker

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

docker build ./ -t $IMAGE_URI

Cuối cùng, hãy đẩy địa chỉ email này đến Google Container Registry:

docker push $IMAGE_URI

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

6. Chạy công việc huấn luyện nhiều worker trên Vertex AI

Phòng thí nghiệm này sử dụng chương trình huấn luyện tuỳ chỉnh thông qua một vùng chứa tuỳ chỉnh trên Google Container Registry, nhưng bạn cũng có thể chạy công việc huấn luyện với các vùng chứa dựng 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 uCAIP

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.

  • 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 Đào tạo tuỳ chỉnh (nâng cao) làm phương pháp đào tạo của bạn rồi nhấp vào Tiếp tục.
  • Nhập multiworker-cassava (hoặc bất kỳ tên nào mà bạn muốn gọi cho mô hình của mì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à: gcr.io/your-cloud-project/multiworker:cassava, 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 Hhyperparameters 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

Vertex AI cung cấp 4 nhóm worker để xử lý nhiều loại tác vụ máy.

Nhóm worker 0 định cấu hình Primary (Chính), chief (trình điều phối), scheduler (trình lập lịch biểu) hoặc "master" (chính). Trong MultiWorkerMirroredStrategy, tất cả máy đều được chỉ định là worker (máy thực thi). Đây là các máy thực tế thực thi việc tính toán được sao chép. Ngoài việc mỗi máy là một worker, cần có một worker thực hiện một số công việc bổ sung như lưu các điểm kiểm tra và ghi tệp tóm tắt vào TensorBoard. Máy này được gọi là máy chính. Chỉ có một worker chính, vì vậy, số lượng worker cho nhóm worker 0 sẽ luôn là 1.

Trong phần Tính toán và giá, hãy giữ nguyên khu vực đã chọn và định cấu hình Nhóm worker 0 như sau:

Worker_pool_0

Nhóm Worker 1 là nơi bạn định cấu hình worker cho cụm của mình.

Định cấu hình Worker pool 1 (Nhóm worker 1) như sau:

Worker_pool_1

Cụm hiện được định cấu hình để có hai máy chỉ có CPU. Khi chạy mã ứng dụng huấn luyện, MultiWorkerMirroredStrategy sẽ phân phối quá trình huấn luyện trên cả hai máy.

MultiWorkerMirroredStrategy chỉ có loại tác vụ chính và worker, vì vậy, bạn không cần định cấu hình Nhóm nhân viên khác. Tuy nhiên, nếu sử dụng ParameterServerStrategy của TensorFlow, bạn sẽ định cấu hình máy chủ tham số trong nhóm worker 2. Và nếu muốn thêm một trình đánh giá vào cụm, bạn sẽ định cấu hình máy đó trong nhóm worker 3.

Nhấp vào Start training (Bắt đầu huấn luyện) để bắt đầu công việc điều chỉnh tham số siêu dữ liệu. 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:

Công việ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 nhiều worker 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.

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

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 API Vertex Python.

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 SDK Vertex AI.

from google.cloud import aiplatform

Để khởi chạy công việc huấn luyện nhiều nhân viên, trước tiên, bạn cần xác định thông số của nhóm nhân viên. Lưu ý rằng việc sử dụng GPU trong thông số kỹ thuật là hoàn toàn không bắt buộc và bạn có thể xoá accelerator_typeaccelerator_count nếu muốn cụm chỉ CPU như minh hoạ trong phần trước.

# The spec of the worker pools including machine type and Docker image
# Be sure to replace {YOUR-PROJECT-ID} with your project ID.
worker_pool_specs=[
     {
        "replica_count": 1,
        "machine_spec": {
          "machine_type": "n1-standard-8", "accelerator_type": "NVIDIA_TESLA_V100", "accelerator_count": 1
        },
        "container_spec": {"image_uri": "gcr.io/{YOUR-PROJECT-ID}/multiworker:cassava"}
      },
      {
        "replica_count": 1,
        "machine_spec": {
          "machine_type": "n1-standard-8", "accelerator_type": "NVIDIA_TESLA_V100", "accelerator_count": 1
        },
        "container_spec": {"image_uri": "gcr.io/{YOUR-PROJECT-ID}/multiworker:cassava"}
      }
]

Tiếp theo, hãy tạo và chạy CustomJob. Bạn cần thay thế {YOUR_BUCKET} bằng một bộ chứa trong dự án để chạy thử. Bạn có thể sử dụng cùng một bộ chứa mà bạn đã tạo trước đó.

# Replace YOUR_BUCKET
my_multiworker_job = aiplatform.CustomJob(display_name='multiworker-cassava-sdk',
                              worker_pool_specs=worker_pool_specs,
                              staging_bucket='gs://{YOUR_BUCKET}')

my_multiworker_job.run()

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ông việc tuỳ chỉnh

8. Dọn dẹp

Vì chúng ta đã định cấu hình máy tính xách tay để hết thời gian chờ sau 60 phút không hoạt động, 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ộ chứa Storage, hãy sử dụng trình đơn Điều hướng trong Cloud Console, duyệt đến Bộ nhớ, chọn bộ chứa rồi nhấp vào Xoá:

Xoá bộ nhớ