您可以將訓練程式碼封裝到自訂訓練元件中,並在管道工作中執行。TensorBoard 記錄檔會自動串流至 Vertex AI TensorBoard 實驗。您可以透過這項整合功能,在 Vertex AI TensorBoard 將 Vertex AI TensorBoard 記錄檔寫入 Cloud Storage 時,近乎即時地監控訓練作業。
如需初始設定,請參閱「設定 Vertex AI TensorBoard」。
訓練指令碼變更
訓練指令碼必須設定為將 TensorBoard 記錄寫入 Cloud Storage 值區,而 Vertex AI Training 服務會透過預先定義的環境變數 AIP_TENSORBOARD_LOG_DIR
,自動提供該值區的位置。
通常只要將 os.environ['AIP_TENSORBOARD_LOG_DIR']
提供給開放原始碼 TensorBoard 記錄寫入 API 做為記錄目錄即可。AIP_TENSORBOARD_LOG_DIR
的位置通常會使用 staging_bucket
變數設定。
如要在 TensorFlow 2.x 中設定訓練指令碼,請建立 TensorBoard 回呼,並將 log_dir
變數設為 os.environ['AIP_TENSORBOARD_LOG_DIR']
。接著,TensorBoard 回呼會納入 TensorFlow model.fit
回呼清單。
tensorboard_callback = tf.keras.callbacks.TensorBoard( log_dir=os.environ['AIP_TENSORBOARD_LOG_DIR'], histogram_freq=1 ) model.fit( x=x_train, y=y_train, epochs=epochs, validation_data=(x_test, y_test), callbacks=[tensorboard_callback], )
進一步瞭解 Vertex AI 如何在自訂訓練環境中設定環境變數。
建立及執行管道
以下範例說明如何使用 Kubeflow Pipelines DSL 套件建構及執行管道。如需更多範例和詳細資訊,請參閱 Vertex AI Pipelines 說明文件。
建立訓練元件
將訓練程式碼封裝至自訂元件,並確保程式碼已設定為將 TensorBoard 記錄寫入 Cloud Storage 值區。如需更多範例,請參閱「建構自己的管道元件」。
from kfp.v2.dsl import component
@component(
base_image="tensorflow/tensorflow:latest",
packages_to_install=["tensorflow_datasets"],
)
def train_tensorflow_model_with_tensorboard():
import datetime, os
import tensorflow as tf
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
def create_model():
return tf.keras.models.Sequential(
[
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(512, activation="relu"),
]
)
model = create_model()
model.compile(
optimizer="adam",
loss="sparse_categorical_crossentropy",
metrics=["accuracy"]
)
tensorboard_callback = tf.keras.callbacks.TensorBoard(
log_dir=os.environ['AIP_TENSORBOARD_LOG_DIR'],
histogram_freq=1
)
model.fit(
x=x_train,
y=y_train,
epochs=5,
validation_data=(x_test, y_test),
callbacks=[tensorboard_callback],
)
建構及編譯管道
指定 create_custom_training_job_op_from_component
中的元件規格,從您建立的元件建立自訂訓練工作。將 tensorboard_resource_name
設為 TensorBoard 執行個體,並將 staging_bucket
設為在 API 呼叫期間 (包括 TensorBoard 記錄) 暫存構件的位置。
接著,建構包含這項工作的管道,並將管道編譯為 JSON 檔案。
from kfp.v2 import compiler
from google_cloud_pipeline_components.v1.custom_job.utils import \
create_custom_training_job_op_from_component
from kfp.v2 import dsl
def create_tensorboard_pipeline_sample(
project, location, staging_bucket, display_name, service_account, experiment, tensorboard_resource_name
):
@dsl.pipeline(
pipeline_root=f"{staging_bucket}/pipeline_root",
name=display_name,
)
def pipeline():
custom_job_op = create_custom_training_job_op_from_component(
component_spec=train_tensorflow_model_with_tensorboard,
tensorboard=tensorboard_resource_name,
base_output_directory=staging_bucket,
service_account=service_account,
)
custom_job_op(project=project, location=location)
compiler.Compiler().compile(
pipeline_func=pipeline, package_path=f"{display_name}.json"
)
提交 Vertex AI 管道
使用 Python 適用的 Vertex AI SDK 提交管道。詳情請參閱「執行管道」。
Python
experiment_name
:為實驗命名。pipeline_job_display_name
:管道作業的顯示名稱。template_path
:已編譯管道範本的路徑。pipeline_root
:指定管道服務帳戶可存取的 Cloud Storage URI。管道執行作業的構件會儲存在管道根目錄中。parameter_values
:要傳遞至本次執行作業的管道參數。舉例來說,建立dict()
時,可將參數名稱做為字典鍵,參數值做為字典值。project
:。用於執行管道的 Google Cloud 專案。您可以在 Google Cloud 控制台 的歡迎頁面中找到 ID。
location
:執行管道的位置。這個位置應與您使用的 TensorBoard 執行個體相同。
後續步驟
- 查看結果: 查看 Vertex AI Pipelines 的 TensorBoard。
- 瞭解如何使用 Cloud Profiler 提升自訂訓練工作的效能。