本页面介绍了如何启用 Cloud Profiler,以便为自定义训练作业调试模型训练性能。
训练模型的计算开销可能很大。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 信息中心
将训练脚本配置为启用 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 文档,了解 Profiler 工具以及如何使用它们来优化模型性能。