AI Platform Training 上のコンテナは、Docker イメージ内でアプリケーションを実行可能にする機能です。独自のカスタム コンテナを作成し、そのコンテナを使用して AI Platform Training 上でジョブを実行できます。カスタム コンテナを作成する場合、さまざまな ML フレームワークと複数のバージョンだけでなく、AI Platform Training では通常サポートされていない ML 以外の依存関係、ライブラリ、バイナリも使用できます。
コンテナを使用したトレーニングの仕組み
任意の ML フレームワークで実装したトレーニング アプリケーションが、トレーニング プロセスの中核となります。
- 任意の ML フレームワークを使用して、モデルをトレーニングするアプリケーションを作成します。
- カスタム コンテナを使用するかどうかを決定します。使用する依存関係をすでにサポートしているランタイム バージョンが存在する場合もありますが、そうでなければ、トレーニング ジョブ用のカスタム コンテナを作成する必要があります。カスタム コンテナ内で、トレーニング アプリケーションとそのすべての依存関係をイメージにプリインストールします。このイメージを使用して、トレーニング ジョブを実行します。
- トレーニングと検証データを、AI Platform Training がアクセスできるソースに格納します。格納先は通常、Cloud Storage、Bigtable、または AI Platform Training で使用しているのと同じ Google Cloud プロジェクトに関連付けられている、別の Google Cloud ストレージ サービスです。
- アプリケーションを実行する準備が整ったら、Docker イメージをビルドして Container Registry に push し、AI Platform Training サービスがレジストリにアクセスできることを確認します。
gcloud ai-platform jobs submit training
を使用してジョブを送信します。その際、引数をconfig.yaml
ファイル内で指定するか、対応するgcloud
フラグを指定します。- AI Platform Training トレーニング サービスにより、ジョブのリソースが設定されます。さらに、ジョブの構成に基づいて 1 つ以上の仮想マシン(「トレーニング インスタンス」と呼ばれます)が割り当てられます。トレーニング インスタンスを設定するには、トレーニング ジョブの送信時に
TrainingInput
オブジェクトの一部として指定したカスタム コンテナを使用します。 - トレーニング サービスで Docker イメージを実行します。その際、トレーニング ジョブの作成時に指定したコマンドライン引数が渡されます。
- 実行中のジョブに関する情報を取得するには、次の方法があります。
- Cloud Logging を使用します。Google Cloud コンソールの AI Platform Training ジョブの詳細ページに、ジョブのログへのリンクがあります。
- ジョブの詳細をリクエストするか、
gcloud
コマンドライン ツール(具体的にはgcloud ai-platform jobs stream-logs
)を使用してログのストリーミングを実行します。 projects.jobs.get
メソッドを使用して、トレーニング サービスに対するステータス リクエストをプログラムで実行します。詳細については、トレーニング ジョブのモニタリング方法をご覧ください。
- トレーニング ジョブが正常に終了するか、回復不能なエラーが発生すると、AI Platform Training はすべてのジョブプロセスを停止してリソースをクリーンアップします。
カスタム コンテナの利点
カスタム コンテナを使用すると、アプリケーションに必要なすべての依存関係を指定してプリインストールできます。
- 起動時間が短縮されます。依存関係がプリインストールされたカスタム コンテナを使用すれば、トレーニング アプリケーションが起動時に依存関係をインストールする必要がなくなるため、その分の時間を節約できます。
- 任意の ML フレームワークを使用できます。使用する ML フレームワークをサポートしている AI Platform Training ランタイム バージョンが見つからなければ、そのフレームワークをインストールするカスタム コンテナを作成し、それを使用して AI Platform Training 上でジョブを実行できます。たとえば、PyTorch を使用してトレーニングできます。
- 分散トレーニングがサポートされます。カスタム コンテナでは、任意の ML フレームワークを使用して分散トレーニングを行うことができます。
- 最新バージョンを使用してください。ML フレームワークの最新ビルドやマイナー バージョンを使用することもできます。たとえば、
tf-nightly
でトレーニングするためのカスタム コンテナをビルドできます。
カスタム コンテナでのハイパーパラメータ調整
AI Platform Training 上でハイパーパラメータ調整を行うには、目標指標を指定し、その指標を最小化または最大化するかどうかを指定します。たとえば、モデルの精度を最大化する必要がある場合もあれば、モデルの損失を最小化しなければならない場合もあります。また、調整するハイパーパラメータと各ハイパーパラメータの目標値のリストも指定します。AI Platform Training ではトレーニング アプリケーションのトライアルを複数回行い、トライアルが完了するたびにハイパーパラメータを追跡して調整します。ハイパーパラメータ調整ジョブが完了すると、AI Platform Training は、ハイパーパラメータを最も効果的に構成するための値と、各トライアルのサマリーを報告します。
カスタム コンテナのハイパーパラメータ調整を行うには、次の手順を行います。
- Dockerfile:
cloudml-hypertune
をインストールします。 - トレーニング コード:
cloudml-hypertune
を使用し、そのヘルパー関数report_hyperparameter_tuning_metric
を呼び出して各トライアルの結果を報告します。- 各ハイパーパラメータのコマンドライン引数を追加し、パーサー(
argparse
など)を使用して引数を解析します。
- ジョブ リクエスト:
TrainingInput
オブジェクトにHyperparameterSpec
を追加します。
カスタム コンテナでのハイパーパラメータ調整を使用したトレーニングの例、または AI Platform Training でのハイパーパラメータ調整の仕組みをご覧ください。
カスタム コンテナでの GPU の使用
カスタム コンテナで GPU を使用してトレーニングする場合、いくつかの特殊な要件を満たす必要があります。CPU を使用したトレーニングに使用するものとは異なる Docker イメージをビルドする必要があります。
- Docker イメージに CUDA ツールキットと cuDNN をプリインストールします。この要件に対処する方法としては、ベースイメージとして
nvidia/cuda
イメージを使用することをおすすめします。このイメージには、バージョンが一致する CUDA ツールキットと cuDNN がプリインストールされているため、関連する環境変数を正しく設定するのに役立ちます。 - Docker イメージに、トレーニング アプリケーションと必須の ML フレームワークおよびその他の依存関係をインストールします。
GPU を使用してトレーニングする場合の Dockerfile の例をご覧ください。
次のステップ
- トレーニング ジョブにカスタム コンテナを使用する方法を理解する。
- カスタム コンテナを使用した分散トレーニングについて理解する。