カスタム トレーニング ジョブ(Vertex AI API の CustomJob
リソース)は、Vertex AI でカスタム機械学習(ML)トレーニング コードを実行するための基本的な方法です。
ジョブを送信する前に
Vertex AI で CustomJob
を作成する前に、Python トレーニング アプリケーションまたはカスタム コンテナ イメージを作成して、Vertex AI で実行するトレーニング コードと依存関係を定義する必要があります。
このガイドの後半で説明する Google Cloud CLI の自動パッケージ化機能を使用することをおすすめします。この機能を使用すると、1 つのコマンドでローカルマシン上のコードから Docker コンテナ イメージを作成して Container Registry に push し、CustomJob
を作成できます。
この機能を使用しない場合は、Python トレーニング アプリケーションまたはカスタム コンテナ イメージを手動で作成する必要があります。
どちらを選択すべきか判断に迷う場合は、トレーニング コードの要件をご覧ください。
カスタムジョブの内容
カスタムジョブを作成する場合、Vertex AI がトレーニング コードを実行するために必要な設定を指定します。次のような設定になります。
- 単一ノード トレーニング用のワーカープール(
WorkerPoolSpec
)または分散トレーニング用の複数のワーカープール - ジョブ スケジューリングの構成のオプション設定(
Scheduling
)、トレーニング コード用の特定の環境変数の設定、カスタム サービス アカウントの使用、VPC ネットワーク ピアリングの使用
ワーカープールでは次の設定を指定できます。
- マシンタイプとアクセラレータ
- ワーカープールで実行するトレーニング コードの種類の構成: Python トレーニング アプリケーション(
PythonPackageSpec
)またはカスタム コンテナ(ContainerSpec
)のいずれか
ジョブの起動時に新しいコンピューティング リソースを作成する代わりに、永続リソースで実行するようにカスタムジョブを構成することもできます。永続リソースの詳細については、永続リソースの概要をご覧ください。
分散トレーニングを構成する
分散トレーニングに CustomJob
を構成するには、複数のワーカープールを指定します。
このページのほとんどの例では、1 つのワーカープールを持つ単一レプリカ トレーニング ジョブを示しています。分散トレーニング用に変更するには:
- 最初のワーカープールを使用してプライマリ レプリカを構成し、レプリカ数を 1 に設定します。
- 機械学習フレームワークが分散トレーニング用のこれらの追加クラスタタスクをサポートしている場合は、ワーカープールを追加して、ワーカー レプリカ、パラメータ サーバー レプリカ、またはエバリュエータ レプリカを構成します。
分散トレーニングの使用方法の詳細をご覧ください。
CustomJob
を作成する
CustomJob
を作成するには、使用するツールのタブを選択して、手順を確認してください。gcloud CLI を使用する場合は、1 つのコマンドでローカルマシン上のトレーニング コードを Docker コンテナ イメージに自動的にパッケージ化し、そのコンテナ イメージを Container Registry に push して CustomJob
を作成できます。他のオプションの場合は、Python トレーニング アプリケーションまたはカスタム コンテナ イメージをすでに作成していることが前提となります。
gcloud
次の例では、gcloud ai custom-jobs create
コマンドを使用しています。
トレーニング コードがローカル コンピュータ上にある場合は、自動パッケージ化ありの手順を行うことをおすすめします。また、Python トレーニング アプリケーションまたはカスタム コンテナ イメージをすでに作成している場合は、自動パッケージ化なしに進んでください。
自動パッケージ化あり
ローカル コンピュータにトレーニング コードがある場合、単一のコマンドで次のことを行うことができます。
- コードに基づいてカスタム Docker イメージをビルドします。
- イメージを Container Registry に push します。
- 画像に応じて
CustomJob
を開始します。
結果は、他のカスタム コンテナを使用した CustomJob
を作成する場合と似ています。ワークフローに役立つ場合は、このバージョンのコマンドを使用できます。
始める前に
このバージョンのコマンドでは、Docker イメージをビルドして push するため、ローカル コンピュータで次の構成を行う必要があります。
Linux を使用している場合は、
sudo
なしで実行できるように Docker を構成します。Enable the Container Registry API.
Docker イメージを Container Registry に push できるように Docker の認証を構成します。
gcloud auth configure-docker
Docker イメージをビルドして push し、CustomJob
を作成する
次のコマンドは、ビルド済みのトレーニング コンテナ イメージとローカルの Python コードに基づいて Docker イメージをビルドし、Container Registry に push して CustomJob
を作成します。
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,local-package-path=WORKING_DIRECTORY,script=SCRIPT_PATH
次のように置き換えます。
LOCATION: コンテナまたは Python パッケージを実行するリージョン。
JOB_NAME: 必須。
CustomJob
の表示名。MACHINE_TYPE: マシンのタイプ。トレーニングで使用可能なマシンタイプをご覧ください。
REPLICA_COUNT: 使用するワーカー レプリカの数。最初のワーカープールは、ほとんどの場合、
1
に設定します。EXECUTOR_IMAGE_URI: 指定されたコードを実行するコンテナ イメージの URI。トレーニングに使用可能なビルド済みのコンテナをご確認ください。
このイメージは、このコマンドでビルドする新しい Docker イメージのベースイメージとして機能します。
WORKING_DIRECTORY: トレーニング コードを実行するエントリ ポイント スクリプトを含む、ローカル ファイル システム内のディレクトリ(次のリストを参照)。
スクリプトの親ディレクトリを使用することも、上位レベルのディレクトリを使用することもできます。完全修飾された Python モジュール名を指定するには、上位のディレクトリを使用することをおすすめします(次のリストを参照)。
requirements.txt
またはsetup.py
ファイルが含まれている場合は、上位のディレクトリを使用することもできます。詳細については、依存関係をインストールするをご覧ください。ただし、上位のディレクトリを指定した場合でも、このコマンドはエントリ ポイント スクリプトの親ディレクトリを Docker イメージにコピーします。
SCRIPT_PATH: ローカル ファイル システム上の WORKING_DIRECTORY の相対パス。トレーニング コードのエントリ ポイントとなるスクリプトへの相対パスになります。これは、Python スクリプト(
.py
で終わるもの)または Bash スクリプトです。たとえば、
/hello-world/trainer/task.py
を実行し、WORKING_DIRECTORY が/hello-world
の場合は、この値にtrainer/task.py
を使用します。script
ではなくpython-module
を使用する必要に応じて、
script=SCRIPT_PATH
をpython-module=PYTHON_MODULE
に置き換えて、トレーニングのエントリ ポイントとして実行する Python モジュールの名前を WORKING_DIRECTORY に指定します。たとえば、script=trainer/task.py
の代わりにpython-module=trainer.task
を指定できます。この場合、作成された Docker コンテナはスクリプトではなく、モジュールとしてコードを読み込みます。エントリ ポイント スクリプトが WORKING_DIRECTORY 内の他の Python モジュールをインポートする場合は、このオプションを使用できます。
依存関係のインストール
自動パッケージ化を使用する場合、gcloud CLI の local-run
コマンドと同じ方法で、Python の依存関係をコンテナにインストールできます。Python 依存関係をインストールするさまざまな方法については、local-run
コマンドのガイドにある依存関係のインストールをご覧ください。
依存関係を指定する構文は、自動パッケージ化を使用する場合と local-run
コマンドを使用する場合で若干異なります。コマンドライン フラグを使用して依存関係を指定する代わりに、--worker-pool-spec
フラグの値でオプションを使用する必要があります。また、これらのオプションの値は、カンマではなくセミコロンで区切る必要があります。具体的には、次の構文を使用します。
local-run
コマンドの--local-package-path
フラグの代わりに、--worker-pool-spec
フラグの値にlocal-package-path
オプションを使用します。このオプションで指定する作業ディレクトリにrequirements.txt
またはsetup.py
ファイルが含まれている場合、自動パッケージ化機能により、このファイルに基づいて依存関係をインストールします。上記の例は、この構文を示しています。
(省略可)
--requirements
フラグの代わりに、--worker-pool-spec
フラグの値にrequirements
オプションを使用します。PyPI の依存関係をカンマで区切る代わりに、セミコロンを使用します。(省略可)
--extra-packages
フラグの代わりに、--worker-pool-spec
フラグの値にextra-packages
オプションを使用します。ローカルの依存関係は、カンマではなくセミコロンで区切ります。(省略可)
--extra-dirs
フラグの代わりに、--worker-pool-spec
フラグの値にextra-dirs
オプションを使用します。ディレクトリ パスは、カンマではなく、セミコロンで区切ります。
次の例では、オプションの技術をすべて使用して、依存関係をインストールする方法を示しています(任意のサブセットを指定できます)。この例では、セミコロンの構文を示すため、オプションごとに 2 つの値を指定しています。この例の長さを短くするために、他の --worker-pool-spec
オプションは [...]
に置き換えています。
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--worker-pool-spec=[...],requirements=PYPI_DEP_1;PYPI_DEP_2,extra-packages=LOCAL_DEP_1;LOCAL_DEP_2,extra-dirs=EXTRA_DIR_1;EXTRA_DIR_2
これらのプレースホルダの適切な値については、local-run
コマンドガイドの「依存関係のインストール」をご覧ください。
自動パッケージ化なし
自動パッケージ化を使用しない場合は、次のようなコマンドで CustomJob
を作成できます。Python トレーニング アプリケーションを作成したか、カスタム コンテナ イメージを作成したかに応じて、次のいずれかのタブを選択します。
Python トレーニング アプリ
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--python-package-uris=PYTHON_PACKAGE_URIS \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,python-module=PYTHON_MODULE
次のように置き換えます。
- LOCATION: コンテナまたは Python パッケージを実行するリージョン。
-
JOB_NAME: 必須。
CustomJob
の表示名。 - PYTHON_PACKAGE_URIS: トレーニング プログラムとその依存パッケージである Python パッケージ ファイルを指定する Cloud Storage URI のカンマ区切りのリスト。パッケージ URI の最大数は 100 です。
- MACHINE_TYPE: マシンのタイプ。トレーニングで使用可能なマシンタイプをご覧ください。
-
REPLICA_COUNT: 使用するワーカー レプリカの数。最初のワーカープールは、ほとんどの場合、
1
に設定します。 - EXECUTOR_IMAGE_URI: 指定されたコードを実行するコンテナ イメージの URI。トレーニングに使用可能なビルド済みのコンテナをご確認ください。
- PYTHON_MODULE: パッケージのインストール後に実行する Python モジュール名。
カスタム コンテナ イメージ
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,container-image-uri=CUSTOM_CONTAINER_IMAGE_URI
次のように置き換えます。
- LOCATION: コンテナまたは Python パッケージを実行するリージョン。
-
JOB_NAME: 必須。
CustomJob
の表示名。 - MACHINE_TYPE: マシンのタイプ。トレーニングで使用可能なマシンタイプをご覧ください。
-
REPLICA_COUNT: 使用するワーカー レプリカの数。最初のワーカープールは、ほとんどの場合、
1
に設定します。 - CUSTOM_CONTAINER_IMAGE_URI: 各ワーカー レプリカで実行される Artifact Registry、Container Registry、Docker Hub 内のコンテナ イメージの URI。
分散トレーニング
分散トレーニングを実行するには、ワーカープールごとに --worker-pool-spec
フラグを指定します。
自動パッケージ化を使用する場合、最初のワーカープールで local-package-path
、script
、自動パッケージ化に関連するその他のオプションのみを指定する必要があります。後続のワーカープールでは、トレーニング コードに関連するフィールドを省略します。これらのワーカーはすべて、自動パッケージ化によってビルドされた同じトレーニング コンテナを使用します。
たとえば、次のコマンドでは、2 つ目のワーカープールを使用するように、前の自動パッケージ化の例を変更しています。
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,local-package-path=WORKING_DIRECTORY,script=SCRIPT_PATH \
--worker-pool-spec=machine-type=SECOND_POOL_MACHINE_TYPE,replica-count=SECOND_POOL_REPLICA_COUNT
自動パッケージ化を使用しない場合は、フィールドを省略せずに各ワーカープールを完全に指定します。
次のコマンドでは、2 つ目のワーカープールを使用するように、前の例を変更しています。
Python トレーニング アプリ
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--python-package-uris=PYTHON_PACKAGE_URIS \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,python-module=PYTHON_MODULE \
--worker-pool-spec=machine-type=SECOND_POOL_MACHINE_TYPE,replica-count=SECOND_POOL_REPLICA_COUNT,executor-image-uri=SECOND_POOL_EXECUTOR_IMAGE_URI,python-module=SECOND_POOL_PYTHON_MODULE
カスタム コンテナ イメージ
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,container-image-uri=CUSTOM_CONTAINER_IMAGE_URI \
--worker-pool-spec=machine-type=SECOND_POOL_MACHINE_TYPE,replica-count=SECOND_POOL_REPLICA_COUNT,container-image-uri=SECOND_POOL_CUSTOM_CONTAINER_IMAGE_URI
詳細構成
上の例では使用できない構成オプションを指定する場合は、--config
フラグを使用して、CustomJobSpec
のフィールドを含むローカル環境で config.yaml
ファイルへのパスを指定します。次に例を示します。
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--config=config.yaml
config.yaml
ファイルの例をご覧ください。
コンソール
Google Cloud コンソールでは、CustomJob
リソースを直接作成することはできません。ただし、CustomJob
を作成する TrainingPipeline
リソースを作成することは可能です。
次の手順では、CustomJob
を作成する TrainingPipeline
を作成し、他の処理は行いません。追加の TrainingPipeline
機能(マネージド データセットを使用したトレーニングやトレーニングの最後での Model
リソースの作成)を使用する場合は、トレーニング パイプラインの作成をご覧ください。
Google Cloud コンソールの [Vertex AI] セクションで、[トレーニング パイプライン] ページに移動します。
[
作成] をクリックして、[新しいモデルのトレーニング] ペインを開きます。トレーニング方法のステップで、次の設定を指定します。
[データセット] プルダウン リストで、[管理されているデータセットなし] を選択します。
[カスタム トレーニング(上級者向け)] を選択します。
[続行] をクリックします。
[モデルの詳細] ステップで、[新しいモデルをトレーニング] または [新しいバージョンをトレーニング] を選択します。新しいモデルをトレーニングする場合は、モデルに任意の名前(MODEL_NAME)を入力します。[続行] をクリックします。
[トレーニング コンテナ] ステップで、次の設定を指定します。
トレーニングにビルド済みのコンテナとカスタム コンテナのどちらを使用するかを選択します。
選択した内容に応じて、次のいずれかを行います。
ビルド済みのコンテナをトレーニングに使用する場合は、Cloud Storage にアップロードしたトレーニング パッケージを使用するために必要な情報を Vertex AI に提供します。
[モデル フレームワーク] と [モデル フレームワークのバージョン] のプルダウン リストから、使用するビルド済みのコンテナを指定します。
[パッケージの場所] フィールドで、作成およびアップロードした Python トレーニング アプリケーションの Cloud Storage URI を指定します。通常、このファイルは
.tar.gz
で終わります。[Python モジュール] フィールドに、トレーニング アプリケーションのエントリ ポイントのモジュール名を入力します。
トレーニングにカスタム コンテナを使用する場合は、[コンテナ イメージ] フィールドにコンテナ イメージの Artifact Registry または Docker Hub の URI を指定します。
[Model output directory] フィールドに、アクセス権があるバケット内のディレクトリの Cloud Storage URI を指定できます。そのディレクトリがまだ存在していなくてもかまいません。
この値は、Vertex AI の
baseOutputDirectory
API フィールドに渡されます。この値に基づいて、トレーニング アプリケーションが実行時にアクセスする複数の環境変数が設定されます。省略可: [引数] フィールドに、Vertex AI がトレーニング コードの実行開始時に使用する引数を指定できます。すべての引数の合計長は 100,000 文字以下にする必要があります。これらの引数の動作は、使用しているコンテナの種類によって異なります。
ビルド済みのコンテナを使用する場合、Vertex AI は引数をコマンドライン フラグとして Python モジュールに渡します。
カスタム コンテナを使用している場合、Vertex AI はコンテナの
CMD
命令を引数でオーバーライドします。
[続行] をクリックします。
[ハイパーパラメータ調整] ステップで、[Enable hyperparameter tuning] チェックボックスがオフになっていることを確認します。[続行] をクリックします。
[コンピューティングと料金] ステップで、次の設定を指定します。
[リージョン] プルダウン リストで、カスタム トレーニングをサポートするリージョンを選択します。
[Worker pool 0] セクションで、トレーニングに使用するコンピューティング リソースを指定します。
アクセラレータを指定する場合は、選択したアクセラレータが選択したリージョンで使用できることを確認してください。
分散トレーニングを行う場合は、[ADD MORE WORKER POOLS] をクリックし、追加のワーカープールごとに追加のコンピューティング リソースのセットを指定します。
[続行] をクリックします。
[予測コンテナ] ステップで、[No prediction container] を選択します。
[トレーニングを開始] をクリックして、カスタム トレーニング パイプラインを開始します。
REST
リクエストのデータを使用する前に、次のように置き換えます。
- LOCATION: コンテナまたは Python パッケージを実行するリージョン。
- PROJECT_ID: 実際のプロジェクト ID。
-
JOB_NAME: 必須。
CustomJob
の表示名。 - カスタム トレーニング ジョブを定義します。
- MACHINE_TYPE: マシンのタイプ。トレーニングで使用可能なマシンタイプをご覧ください。
- ACCELERATOR_TYPE: 省略可。ジョブに接続するアクセラレータのタイプ。
- ACCELERATOR_COUNT: 省略可。ジョブに接続するアクセラレータの数。
- DISK_TYPE: 省略可。ジョブに使用するブートディスクの種類。
pd-standard
(デフォルト)またはpd-ssd
のいずれか。ディスクタイプの詳細。 - DISK_SIZE: 省略可。ジョブに使用するブートディスクのサイズ(GB 単位)。デフォルト値は 100 です。
-
REPLICA_COUNT: 使用するワーカー レプリカの数。最初のワーカープールは、ほとんどの場合、
1
に設定します。 - トレーニング アプリケーションがカスタム コンテナで実行される場合は、次のように指定します。
- CUSTOM_CONTAINER_IMAGE_URI: 各ワーカー レプリカで実行される Artifact Registry、Container Registry、Docker Hub 内のコンテナ イメージの URI。
- CUSTOM_CONTAINER_COMMAND: 省略可。コンテナの起動時に呼び出されるコマンド。このコマンドは、コンテナのデフォルトのエントリポイントをオーバーライドします。
- CUSTOM_CONTAINER_ARGS: 省略可。コンテナの起動時に渡される引数。
- トレーニング アプリケーションが事前ビルド済みのコンテナで実行される Python パッケージの場合は、以下を指定します。
- EXECUTOR_IMAGE_URI: 指定されたコードを実行するコンテナ イメージの URI。トレーニングに使用可能なビルド済みのコンテナをご確認ください。
- PYTHON_PACKAGE_URIS: トレーニング プログラムとその依存パッケージである Python パッケージ ファイルを指定する Cloud Storage URI のカンマ区切りのリスト。パッケージ URI の最大数は 100 です。
- PYTHON_MODULE: パッケージのインストール後に実行する Python モジュール名。
- PYTHON_PACKAGE_ARGS: 省略可。Python モジュールに渡すコマンドライン引数。
- ジョブ スケジュール オプションをご覧ください。
- TIMEOUT: 省略可。ジョブの最大実行時間。
- このカスタムジョブに適用するラベルの LABEL_NAME と LABEL_VALUE を指定します。
HTTP メソッドと URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs
リクエストの本文(JSON):
{ "displayName": "JOB_NAME", "jobSpec": { "workerPoolSpecs": [ { "machineSpec": { "machineType": MACHINE_TYPE, "acceleratorType": ACCELERATOR_TYPE, "acceleratorCount": ACCELERATOR_COUNT }, "replicaCount": REPLICA_COUNT, "diskSpec": { "bootDiskType": DISK_TYPE, "bootDiskSizeGb": DISK_SIZE }, // Union field task can be only one of the following: "containerSpec": { "imageUri": CUSTOM_CONTAINER_IMAGE_URI, "command": [ CUSTOM_CONTAINER_COMMAND ], "args": [ CUSTOM_CONTAINER_ARGS ] }, "pythonPackageSpec": { "executorImageUri": EXECUTOR_IMAGE_URI, "packageUris": [ PYTHON_PACKAGE_URIS ], "pythonModule": PYTHON_MODULE, "args": [ PYTHON_PACKAGE_ARGS ] } // End of list of possible types for union field task. } // Specify one workerPoolSpec for single replica training, or multiple workerPoolSpecs // for distributed training. ], "scheduling": { "timeout": TIMEOUT } }, "labels": { LABEL_NAME_1": LABEL_VALUE_1, LABEL_NAME_2": LABEL_VALUE_2 } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs"
PowerShell
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content
レスポンスには、仕様と TRAININGPIPELINE_ID に関する情報が含まれています。
Java
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Java の設定手順を完了してください。詳細については、Vertex AI Java API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Node.js
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Node.js の設定手順を完了してください。詳細については、Vertex AI Node.js API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Python
Python をインストールまたは更新する方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。
次のステップ
- TensorBoard Profiler を使用して、トレーニング パフォーマンスのボトルネックを特定し、モデルをより迅速かつ低コストでトレーニングする方法を学習する。
- Vertex AI でカスタム トレーニング アプリケーションを実行するためのトレーニング パイプラインの作成方法については、トレーニング パイプラインの作成をご覧ください。