您可以將訓練程式碼封裝到自訂訓練元件中,並在管道工作中執行。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 提升自訂訓練工作的效能。