カスタム コンテナの概要

カスタム コンテナは、トレーニング アプリケーションを実行するために作成する Docker イメージです。カスタム コンテナで機械学習(ML)トレーニング ジョブを実行することで、Vertex AI では通常サポートされていない ML フレームワーク、ML 以外の依存関係、ライブラリ、バイナリを使用できます。

コンテナを使用したトレーニングの仕組み

任意の ML フレームワークで実装したトレーニング アプリケーションが、トレーニング プロセスの中核となります。

  1. 任意の ML フレームワークを使用して、モデルをトレーニングするアプリケーションを作成します。

  2. カスタム コンテナを使用するかどうかを決定します。すでに依存関係をサポートしているビルド済みのコンテナが存在する可能性があります。存在しない場合は、トレーニング ジョブ用のカスタム コンテナをビルドする必要があります。カスタム コンテナ内で、トレーニング アプリケーションとそのすべての依存関係を、トレーニング ジョブの実行に使用するイメージにプリインストールします。

  3. Vertex AI がアクセスできるソースにトレーニング データと検証データを格納します。認証を簡素化してレイテンシを減らすには、データを Cloud Storage または Bigtable に保存します。あるいは、Vertex AI で使用しているのと同じ Google Cloud プロジェクトとリージョンにある別の Google Cloud ストレージ サービスに保存します。Vertex AI によるデータの読み込み方法をご確認ください。

  4. アプリケーションを実行する準備が整ったら、確実に Vertex AI がレジストリにアクセスできるように、Docker イメージをビルドして、Artifact Registry か Docker Hub のいずれかに push する必要があります。

  5. カスタムジョブを作成するか、カスタム トレーニング パイプラインを作成して、カスタム トレーニング ジョブを送信します。

  6. Vertex AI により、ジョブのリソースが設定されます。さらに、ジョブの構成に基づいて 1 つ以上の仮想マシン(「トレーニング インスタンス」と呼ばれます)が割り当てられます。カスタム トレーニング ジョブを送信する際に、WorkerPoolSpec オブジェクトの一部として指定したカスタム コンテナを使用して、トレーニング インスタンスを設定します。

  7. Vertex AI で Docker イメージを実行します。その際、トレーニング ジョブの作成時に指定したコマンドライン引数が渡されます。

  8. トレーニング ジョブが正常に終了するか、回復不能なエラーが発生すると、Vertex AI はすべてのジョブプロセスを停止してリソースをクリーンアップします。

カスタム コンテナの利点

カスタム コンテナを使用すると、アプリケーションに必要なすべての依存関係を指定してプリインストールできます。

  • 起動時間が短縮されます。依存関係がプリインストールされたカスタム コンテナを使用すれば、トレーニング アプリケーションが起動時に依存関係をインストールする必要がなくなるため、その分の時間を節約できます。
  • 任意の ML フレームワークを使用できます。使用したい ML フレームワークの Vertex AI ビルド済みコンテナが見つからない場合は、目的のフレームワークでカスタム コンテナをビルドし、それを使用して Vertex AI でジョブを実行できます。たとえば、PyTorch でトレーニングするためのカスタム コンテナを使用できます。
  • 分散トレーニングがサポートされます。カスタム コンテナでは、任意の ML フレームワークを使用して分散トレーニングを行うことができます。
  • 最新バージョンを使用してください。ML フレームワークの最新ビルドやマイナー バージョンを使用することもできます。たとえば、tf-nightly でトレーニングするためのカスタム コンテナをビルドできます。

カスタム コンテナでのハイパーパラメータ チューニング

Vertex AI 上でハイパーパラメータ調整を行うには、目標指標を指定し、各指標を最小化または最大化するかどうかを指定します。たとえば、モデル精度を最大化する必要がある場合もあれば、モデル損失を最小化する必要がある場合もあります。また、調整するハイパーパラメータと各ハイパーパラメータの許容値の範囲もリストにします。Vertex AI ではトレーニング アプリケーションのトライアルを複数回行い、トライアルが完了するたびにハイパーパラメータを追跡して調整します。ハイパーパラメータ調整ジョブが完了すると、Vertex AI は、ハイパーパラメータを最も効果的に構成するための値と、各トライアルのサマリーを報告します。

カスタム コンテナでハイパーパラメータ調整を行う手順は次のとおりです。

  • Dockerfile: cloudml-hypertune をインストールします。
  • トレーニング コード:
    • cloudml-hypertune を使用し、そのヘルパー関数 report_hyperparameter_tuning_metric を呼び出して各トライアルの結果を報告します。
    • 各ハイパーパラメータのコマンドライン引数を追加し、引数パーサー(argparse など)を使用して引数の解析を処理します。

カスタム コンテナを使用するハイパーパラメータ調整ジョブの構成方法や、Vertex AI でのハイパーパラメータ調整の仕組みについて確認してください。

カスタム コンテナ内の GPU

カスタム コンテナで GPU を使用してトレーニングする場合、いくつかの特殊な要件を満たす必要があります。CPU を使用したトレーニングに使用するものとは異なる Docker イメージをビルドする必要があります。

  • Docker イメージに CUDA ツールキットと cuDNN をプリインストールします。GPU をサポートするカスタム コンテナをビルドする場合に推奨される方法は、nvidia/cuda イメージをカスタム コンテナのベースイメージとして使用することです。nvidia/cuda コンテナ イメージには CUDA ツールキットの対応するバージョンと cuDNN がプリインストールされているため、関連する環境変数の適切な設定がしやすくなっています。
  • Docker イメージに、トレーニング アプリケーションと必須の ML フレームワークおよびその他の依存関係をインストールします。

GPU を使用してトレーニングする場合の Dockerfile の例をご覧ください。

次のステップ