このページでは、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ロールを持つサービス アカウントを用意する必要があります。手順については、必要な権限が付与されたサービス アカウントを作成するをご覧ください。
- Vertex AI TensorBoard のログを保存する Cloud Storage バケットを用意する必要があります。手順については、Vertex AI TensorBoard のログを保存する Cloud Storage バケットを作成するをご覧ください。 
プロファイラを有効にする
トレーニング ジョブで 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 ダッシュボードにアクセスする方法は 2 つあります。
- [カスタムジョブ] ページから。
- [テスト] ページから。
[カスタムジョブ] ページから Profiler ダッシュボードにアクセスする
トレーニング ジョブが「完了」状態でも、以下の方法で Profiler ダッシュボードにアクセスできます。
- Google Cloud コンソールで、[トレーニング] ページの [カスタムジョブ] タブに移動します。 
- 作成したトレーニング ジョブの名前をクリックして、ジョブの詳細ページに移動します。 
- [TensorBoard を開く] をクリックします。 
- [Profile] タブをクリックします 
[テスト] ページから Profiler ダッシュボードにアクセスする
トレーニング ジョブが「実行中」状態の場合にのみ、この方法を使用して Profiler ダッシュボードにアクセスできます。
- Google Cloud コンソールで、Vertex AI Experiments のページに移動します。 
- 作成したトレーニング ジョブのリージョンを選択します。 
- トレーニング ジョブの名前の横にある [TensorBoard を開く] をクリックします。 
- [プロファイル] タブをクリックします 
プロファイリング セッションをキャプチャする
プロファイリング セッションをキャプチャするには、トレーニング ジョブが Running の状態である必要があります。Vertex AI TensorBoard インスタンスの [Profile] タブで、次の操作を行います。
- [Capture profile] をクリックします。
- [Profile Service URL(s) or TPU name] フィールドに、次のように入力します。 - workerpool0-0
- [Address type] では [IP address] を選択します。 
- [Capture] をクリックします 
ノートブック
次のステップ
- Profiler ツールの詳細と、これらのツールを使用してモデルのパフォーマンスを最適化する方法については、Tensorflow Profiler のドキュメントをご覧ください。