トレーニング用のカスタム コンテナ イメージを作成する

カスタム コンテナ イメージを使用すると、Vertex AI でのトレーニングを柔軟に行うことができます。カスタム コンテナ イメージの相違点については、カスタム コンテナでの Python トレーニング アプリケーションの使用トレーニング コードの要件をご覧ください。

このガイドでは以下の手順について説明します。

  1. カスタム コンテナを作成します。
    1. Dockerfile を作成します。Dockerfile によって、Vertex AI と連携するようにコンテナを設定し、トレーニング アプリケーションに必要な依存関係を組み込みます。
    2. Docker コンテナをローカルでビルドして実行します。
  2. コンテナ イメージを Artifact Registry に push します。

始める前に

Artifact Registry API リポジトリを構成して開発環境で Docker を設定するには、Docker の Artifact Registry のクイックスタートをご覧ください。クイックスタートの以下の手順を完了する必要があります。

  • 始める前に
  • シェルを選択する
  • Docker リポジトリを作成する
  • 認証を構成する

カスタム コンテナ イメージを作成する

カスタム コンテナ イメージを作成するには、次の 2 つのワークフローをおすすめします。

  • トレーニング コードを作成する。次に、Dockerfile を作成せず、トレーニング コードに基づいて gcloud CLI の local-run コマンドを使用して、カスタム コンテナ イメージのビルドとテストを行う

    Docker に慣れていない場合、このワークフローのほうが簡単な場合があります。このワークフローを使用する場合は、このセクションの残りの部分をスキップできます。

  • トレーニング コードを作成する。次に、Dockerfile を記述し、それに基づいてコンテナ イメージをビルドする。最後に、コンテナをローカルでテストする。

    このワークフローは、コンテナ イメージを自由にカスタマイズできるため、柔軟性が高くなります。

このセクションの残りの部分では、後者のワークフローについて説明します。

トレーニング コード

トレーニング コードは、任意のプログラミング言語で依存関係を使用して作成します。コードがトレーニング コードの要件を満たしていることを確認します。ハイパーパラメータ調整、GPU、分散トレーニングを使用する場合は、必ずこのドキュメントで該当するセクションをお読みください。これらのセクションでは、カスタム コンテナでこの機能を使用する際の具体的な考慮事項について説明しています。

Dockerfile を作成する

Dockerfile を作成し、コンテナ イメージのビルドに必要なすべての手順を指定します。

このセクションでは、カスタム トレーニングに使用する Dockerfile の一般的な作成例について説明します。コンテナ イメージの作成の詳細については、Docker ドキュメントのクイックスタートをご覧ください。

Vertex AI で使用する Dockerfile には、次のタスクに対処するコマンドを含める必要があります。

  • ベースイメージの選択
  • 追加の依存関係のインストール
  • イメージへのトレーニング コードのコピー
  • Vertex AI がトレーニング コードを呼び出す際のエントリ ポイントの構成

必要に応じて、作成する Dockerfile に追加のロジックを含めることもできます。各手順の詳細については、Dockerfile リファレンスをご覧ください。

Dockerfile コマンド 説明
FROM image:tag ベースイメージとそのタグを指定します。

タグ付きのベースイメージの例:

  • pytorch/pytorch:latest
  • tensorflow/tensorflow:nightly
  • python:2.7.15-jessie
  • nvidia/cuda:9.0-cudnn7-runtime
WORKDIR /path/to/directory 以降の命令の実行先である、イメージ上のディレクトリを指定します。 /root
RUN pip install pkg1 pkg2 pkg3 pip を使用して追加のパッケージをインストールします。

注: ベースイメージに pip がインストールされていない場合、他のパッケージをインストールする前に、これをインストールするコマンドを含める必要があります。

パッケージの例:

  • google-cloud-storage
  • cloudml-hypertune
  • pandas
COPY src/foo.py dest/foo.py トレーニング アプリケーションのコードをイメージにコピーします。トレーニング アプリケーションの構造に応じて、おそらく複数のファイルをコピーする可能性があります。

トレーニング アプリケーションに含まれるファイルの名前の例:

  • model.py
  • task.py
  • data_utils.py
ENTRYPOINT ["exec", "file"] 実行するトレーニング コードを呼び出すためのエントリ ポイントを設定します。カスタム トレーニングを開始するときに、ContainerSpeccommand フィールドを指定すると、このエントリポイントをオーバーライドできます。ContainerSpecargs フィールドを指定すると、エントリポイントに追加の引数を指定できます(コンテナ イメージの CMD 手順をオーバーライドすることもできます)。 ["python", "task.py"]

Dockerfile 内のロジックはニーズに応じて異なりますが、概して次のようになります。

# Specifies base image and tag
FROM image:tag
WORKDIR /root

# Installs additional packages
RUN pip install pkg1 pkg2 pkg3

# Downloads training data
RUN curl https://example-url/path-to-data/data-filename --output /root/data-filename

# Copies the trainer code to the docker image.
COPY your-path-to/model.py /root/model.py
COPY your-path-to/task.py /root/task.py

# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "task.py"]

(省略可)TPU VM 用に Dockerfile を調整する

TPU VM を使用して Vertex AI でトレーニングする場合は、Dockerfile を調整して、特別にビルドされた tensorflow ライブラリと libtpu ライブラリのバージョンをインストールする必要があります。詳しくは、TPU VM で使用するコンテナの調整をご覧ください。

コンテナ イメージのビルド

環境変数を使用して正しいイメージ URI を作成してから、Docker イメージをビルドします。

export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
export REPO_NAME=REPOSITORY_NAME
export IMAGE_NAME=IMAGE_NAME
export IMAGE_TAG=IMAGE_TAG
export IMAGE_URI=us-central1-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/${IMAGE_NAME}:${IMAGE_TAG}

docker build -f Dockerfile -t ${IMAGE_URI} ./

これらのコマンドで、次のように置き換えます。

  • REPOSITORY_NAME: 始める前にで作成した Artifact Registry リポジトリの名前。
  • IMAGE_NAME: 選択したコンテナ イメージの名前。
  • IMAGE_TAG: このバージョンのコンテナ イメージに選択したタグ。

詳しくは、コンテナ イメージの命名に関する Artifact Registry の要件をご覧ください。

コンテナをローカルで実行する(省略可)

コンテナ イメージをローカルで実行し、コンテナ イメージを確認します。トレーニング コードは小規模なデータセットで実行するか、Vertex AI よりも少ないイテレーションにします。たとえば、コンテナ イメージのエントリ ポイント スクリプトが --epochs フラグを受け入れ、実行するエポックの数を制御するには、次のコマンドを実行します。

docker run ${IMAGE_URI} --epochs 1

コンテナを Artifact Registry に push する

ローカルで正常に機能することを確認したら、Artifact Registry に push できます。

開発環境でまだ実行していない場合は、gcloud auth configure-docker us-central1-docker.pkg.dev を実行します。その後、次のコマンドを実行します。

docker push ${IMAGE_URI}

Artifact Registry の権限

Vertex AI と同じ Google Cloud プロジェクトの Artifact Registry イメージを使用している場合は、権限を構成する必要はありません。コンテナ イメージを使用するカスタム トレーニング ジョブをすぐに作成できます。

ただし、Vertex AI を使用するプロジェクトとは別の Google Cloud プロジェクトの Artifact Registry にコンテナ イメージを push した場合は、Vertex AI プロジェクトで他のプロジェクトからイメージを pull するための権限を Vertex AI サービス エージェントに付与する必要があります。Vertex AI サービス エージェントの詳細と、権限の付与方法をご覧ください。

Artifact Registry

Vertex AI サービス エージェントに Artifact Registry リポジトリへのアクセス権を付与する方法については、Artifact Registry のドキュメントでリポジトリ固有の権限を付与するをご覧ください。

次のステップ