本页面介绍了如何启用 Cloud Profiler,以便为自定义训练作业调试模型训练性能。
训练模型的计算开销可能很大。性能分析器可以帮助您了解训练操作的资源消耗情况,从而使您可以监控和优化模型训练性能。利用这些信息,您可以精确地找出并解决性能瓶颈,以更快的速度、更低的费用训练模型。
准备工作
- 确保您使用的是 TensorFlow 2.4 或更高版本。
 使用
cloud_profiler插件安装 Vertex AI SDK。在本地 Docker 容器中,运行以下命令:pip install google-cloud-aiplatform[cloud_profiler]您必须具有一个 Vertex AI TensorBoard 实例。如需查看相关说明,请参阅创建 Vertex AI TensorBoard 实例。
您必须具有一个服务账号,其具有
roles/storage.admin和roles/aiplatform.user角色。如需查看相关说明,请参阅创建具有所需权限的服务账号。您必须具有 Cloud Storage 存储桶才能存储 Vertex AI TensorBoard 日志。如需查看相关说明,请参阅创建 Cloud Storage 存储桶以存储 Vertex AI TensorBoard 日志。
启用 Profiler
如需为训练作业启用 Profiler,请将以下内容添加到训练脚本中:
在顶级导入中添加
cloud_profiler导入:from google.cloud.aiplatform.training_utils import cloud_profiler通过添加以下代码初始化
cloud_profiler插件:cloud_profiler.init()
示例
下面是一个训练脚本示例:
#!/usr/bin/env python
import tensorflow as tf
import argparse
import os
from google.cloud.aiplatform.training_utils import cloud_profiler
import time
"""Train an mnist model and use cloud_profiler for profiling."""
def _create_model():
    model = tf.keras.models.Sequential(
        [
            tf.keras.layers.Flatten(input_shape=(28, 28)),
            tf.keras.layers.Dense(128, activation="relu"),
            tf.keras.layers.Dropout(0.2),
            tf.keras.layers.Dense(10),
        ]
    )
    return model
def main(args):
    strategy = None
    if args.distributed:
        strategy = tf.distribute.MultiWorkerMirroredStrategy()
    mnist = tf.keras.datasets.mnist
    (x_train, y_train), (x_test, y_test) = mnist.load_data()
    x_train, x_test = x_train / 255.0, x_test / 255.0
    if args.distributed:
        strategy = tf.distribute.MultiWorkerMirroredStrategy()
        with strategy.scope():
            model = _create_model()
            model.compile(
                optimizer="adam",
                loss=tf.keras.losses.sparse_categorical_crossentropy,
                metrics=["accuracy"],
            )
    else:
        model = _create_model()
        model.compile(
            optimizer="adam",
            loss=tf.keras.losses.sparse_categorical_crossentropy,
            metrics=["accuracy"],
        )
    # Initialize the profiler.
    cloud_profiler.init()
    # Use AIP_TENSORBOARD_LOG_DIR to update where logs are written to.
    tensorboard_callback = tf.keras.callbacks.TensorBoard(
        log_dir=os.environ["AIP_TENSORBOARD_LOG_DIR"], histogram_freq=1
    )
    model.fit(
        x_train,
        y_train,
        epochs=args.epochs,
        verbose=0,
        callbacks=[tensorboard_callback],
    )
if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument(
        "--epochs", type=int, default=100, help="Number of epochs to run model."
    )
    parser.add_argument(
        "--distributed", action="store_true", help="Use MultiWorkerMirroredStrategy"
    )
    args = parser.parse_args()
    main(args)
访问性能分析器信息中心
将训练脚本配置为启用 Profiler 后,使用 Vertex AI TensorBoard 实例运行训练脚本。
在训练脚本中,确保以下配置:
- 将 
BASE_OUTPUT_DIR:设置为您要在其中存储训练脚本生成的 Vertex AI TensorBoard 日志的 Cloud Storage 存储桶。 - 将 
'serviceAccount':设置为您使用roles/storage.admin和roles/aiplatform.user角色创建的服务账号。 将
'tensorboard':设置为要用于此训练作业的 Vertex AI TensorBoard 实例的完全限定名称。完全限定的名称采用以下格式:projects/PROJECT_NUMBER_OR_ID/locations/REGION/tensorboards/TENSORBOARD_INSTANCE_ID
您可以通过两种方式从 Google Cloud 控制台访问 Profiler 信息中心:
- 从“自定义作业”页面。
 - 在“实验”页面。
 
通过“自定义作业”页面访问 Profiler 信息中心
即使训练作业处于已完成状态,您也可以使用此方法访问 Profiler 信息中心。
在 Google Cloud 控制台中,前往训练页面上的自定义作业标签页。
点击您刚刚创建的训练作业的名称,以转到作业详情页面。
点击打开 TensorBoard。
点击性能分析标签页。
通过“实验”页面访问 Profiler 信息中心
仅当训练作业处于正在运行状态时,您才能使用此方法访问 Profiler 信息中心。
在 Google Cloud 控制台中,前往 Vertex AI Experiments 页面。
选择刚创建的训练作业的区域。
点击训练作业名称旁边的打开 TensorBoard。
点击性能分析标签页。
捕获性能剖析会话
如需捕获性能剖析会话,您的训练作业必须处于正在运行状态。在 Vertex AI TensorBoard 实例的性能分析标签页中,执行以下步骤:
- 点击捕获性能剖析文件。
 在配置文件服务网址或 TPU 名称字段中,输入:
workerpool0-0对于地址类型,选择 IP 地址。
点击 Capture。
笔记本
后续步骤
- 请参阅 TensorFlow Profiler 文档,了解性能分析器工具以及如何使用它们来优化模型性能。