カスタム トレーニング ジョブを作成する

カスタム トレーニング ジョブ(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 がトレーニング コードを実行するために必要な設定を指定します。次のような設定になります。

ワーカープールでは次の設定を指定できます。

ジョブの起動時に新しいコンピューティング リソースを作成する代わりに、永続リソースで実行するようにカスタムジョブを構成することもできます。永続リソースの詳細については、永続リソースの概要をご覧ください。

分散トレーニングを構成する

分散トレーニングに 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 するため、ローカル コンピュータで次の構成を行う必要があります。

  1. Docker Engine をインストールします。

  2. Linux を使用している場合は、sudo なしで実行できるように Docker を構成します。

  3. Enable the Container Registry API.

    Enable the API

  4. 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_PATHpython-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-pathscript、自動パッケージ化に関連するその他のオプションのみを指定する必要があります。後続のワーカープールでは、トレーニング コードに関連するフィールドを省略します。これらのワーカーはすべて、自動パッケージ化によってビルドされた同じトレーニング コンテナを使用します。

たとえば、次のコマンドでは、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 リソースの作成)を使用する場合は、トレーニング パイプラインの作成をご覧ください。

  1. Google Cloud コンソールの [Vertex AI] セクションで、[トレーニング パイプライン] ページに移動します。

    [トレーニング パイプライン] に移動

  2. [作成] をクリックして、[新しいモデルのトレーニング] ペインを開きます。

  3. トレーニング方法のステップで、次の設定を指定します。

    1. [データセット] プルダウン リストで、[管理されているデータセットなし] を選択します。

    2. [カスタム トレーニング(上級者向け)] を選択します。

    [続行] をクリックします。

  4. [モデルの詳細] ステップで、[新しいモデルをトレーニング] または [新しいバージョンをトレーニング] を選択します。新しいモデルをトレーニングする場合は、モデルに任意の名前(MODEL_NAME)を入力します。[続行] をクリックします。

  5. [トレーニング コンテナ] ステップで、次の設定を指定します。

    1. トレーニングにビルド済みのコンテナカスタム コンテナのどちらを使用するかを選択します。

    2. 選択した内容に応じて、次のいずれかを行います。

    3. [Model output directory] フィールドに、アクセス権があるバケット内のディレクトリの Cloud Storage URI を指定できます。そのディレクトリがまだ存在していなくてもかまいません。

      この値は、Vertex AI の baseOutputDirectory API フィールドに渡されます。この値に基づいて、トレーニング アプリケーションが実行時にアクセスする複数の環境変数が設定されます。

    4. 省略可: [引数] フィールドに、Vertex AI がトレーニング コードの実行開始時に使用する引数を指定できます。すべての引数の合計長は 100,000 文字以下にする必要があります。これらの引数の動作は、使用しているコンテナの種類によって異なります。

      • ビルド済みのコンテナを使用する場合、Vertex AI は引数をコマンドライン フラグとして Python モジュールに渡します。

      • カスタム コンテナを使用している場合、Vertex AI はコンテナの CMD 命令を引数でオーバーライドします。

    [続行] をクリックします。

  6. [ハイパーパラメータ調整] ステップで、[Enable hyperparameter tuning] チェックボックスがオフになっていることを確認します。[続行] をクリックします。

  7. [コンピューティングと料金] ステップで、次の設定を指定します。

    1. [リージョン] プルダウン リストで、カスタム トレーニングをサポートするリージョンを選択します。

    2. [Worker pool 0] セクションで、トレーニングに使用するコンピューティング リソースを指定します。

      アクセラレータを指定する場合は、選択したアクセラレータが選択したリージョンで使用できることを確認してください

      分散トレーニングを行う場合は、[ADD MORE WORKER POOLS] をクリックし、追加のワーカープールごとに追加のコンピューティング リソースのセットを指定します。

    [続行] をクリックします。

  8. [予測コンテナ] ステップで、[No prediction container] を選択します。

  9. [トレーニングを開始] をクリックして、カスタム トレーニング パイプラインを開始します。

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_NAMELABEL_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 に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。


import com.google.cloud.aiplatform.v1.AcceleratorType;
import com.google.cloud.aiplatform.v1.ContainerSpec;
import com.google.cloud.aiplatform.v1.CustomJob;
import com.google.cloud.aiplatform.v1.CustomJobSpec;
import com.google.cloud.aiplatform.v1.JobServiceClient;
import com.google.cloud.aiplatform.v1.JobServiceSettings;
import com.google.cloud.aiplatform.v1.LocationName;
import com.google.cloud.aiplatform.v1.MachineSpec;
import com.google.cloud.aiplatform.v1.WorkerPoolSpec;
import java.io.IOException;

// Create a custom job to run machine learning training code in Vertex AI
public class CreateCustomJobSample {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String project = "PROJECT";
    String displayName = "DISPLAY_NAME";

    // Vertex AI runs your training application in a Docker container image. A Docker container
    // image is a self-contained software package that includes code and all dependencies. Learn
    // more about preparing your training application at
    // https://cloud.google.com/vertex-ai/docs/training/overview#prepare_your_training_application
    String containerImageUri = "CONTAINER_IMAGE_URI";
    createCustomJobSample(project, displayName, containerImageUri);
  }

  static void createCustomJobSample(String project, String displayName, String containerImageUri)
      throws IOException {
    JobServiceSettings settings =
        JobServiceSettings.newBuilder()
            .setEndpoint("us-central1-aiplatform.googleapis.com:443")
            .build();
    String location = "us-central1";

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (JobServiceClient client = JobServiceClient.create(settings)) {
      MachineSpec machineSpec =
          MachineSpec.newBuilder()
              .setMachineType("n1-standard-4")
              .setAcceleratorType(AcceleratorType.NVIDIA_TESLA_K80)
              .setAcceleratorCount(1)
              .build();

      ContainerSpec containerSpec =
          ContainerSpec.newBuilder().setImageUri(containerImageUri).build();

      WorkerPoolSpec workerPoolSpec =
          WorkerPoolSpec.newBuilder()
              .setMachineSpec(machineSpec)
              .setReplicaCount(1)
              .setContainerSpec(containerSpec)
              .build();

      CustomJobSpec customJobSpecJobSpec =
          CustomJobSpec.newBuilder().addWorkerPoolSpecs(workerPoolSpec).build();

      CustomJob customJob =
          CustomJob.newBuilder()
              .setDisplayName(displayName)
              .setJobSpec(customJobSpecJobSpec)
              .build();
      LocationName parent = LocationName.of(project, location);
      CustomJob response = client.createCustomJob(parent, customJob);
      System.out.format("response: %s\n", response);
      System.out.format("Name: %s\n", response.getName());
    }
  }
}

Node.js

このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Node.js の設定手順を完了してください。詳細については、Vertex AI Node.js API のリファレンス ドキュメントをご覧ください。

Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

/**
 * TODO(developer): Uncomment these variables before running the sample.\
 * (Not necessary if passing values as arguments)
 */

// const customJobDisplayName = 'YOUR_CUSTOM_JOB_DISPLAY_NAME';
// const containerImageUri = 'YOUR_CONTAINER_IMAGE_URI';
// const project = 'YOUR_PROJECT_ID';
// const location = 'YOUR_PROJECT_LOCATION';

// Imports the Google Cloud Job Service Client library
const {JobServiceClient} = require('@google-cloud/aiplatform');

// Specifies the location of the api endpoint
const clientOptions = {
  apiEndpoint: 'us-central1-aiplatform.googleapis.com',
};

// Instantiates a client
const jobServiceClient = new JobServiceClient(clientOptions);

async function createCustomJob() {
  // Configure the parent resource
  const parent = `projects/${project}/locations/${location}`;
  const customJob = {
    displayName: customJobDisplayName,
    jobSpec: {
      workerPoolSpecs: [
        {
          machineSpec: {
            machineType: 'n1-standard-4',
            acceleratorType: 'NVIDIA_TESLA_K80',
            acceleratorCount: 1,
          },
          replicaCount: 1,
          containerSpec: {
            imageUri: containerImageUri,
            command: [],
            args: [],
          },
        },
      ],
    },
  };
  const request = {parent, customJob};

  // Create custom job request
  const [response] = await jobServiceClient.createCustomJob(request);

  console.log('Create custom job response:\n', JSON.stringify(response));
}
createCustomJob();

Python

Python をインストールまたは更新する方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。

def create_custom_job_with_experiment_autologging_sample(
    project: str,
    location: str,
    staging_bucket: str,
    display_name: str,
    script_path: str,
    container_uri: str,
    service_account: str,
    experiment: str,
    experiment_run: Optional[str] = None,
) -> None:
    aiplatform.init(project=project, location=location, staging_bucket=staging_bucket, experiment=experiment)

    job = aiplatform.CustomJob.from_local_script(
        display_name=display_name,
        script_path=script_path,
        container_uri=container_uri,
        enable_autolog=True,
    )

    job.run(
        service_account=service_account,
        experiment=experiment,
        experiment_run=experiment_run,
    )

次のステップ

  • TensorBoard Profiler を使用して、トレーニング パフォーマンスのボトルネックを特定し、モデルをより迅速かつ低コストでトレーニングする方法を学習する。
  • Vertex AI でカスタム トレーニング アプリケーションを実行するためのトレーニング パイプラインの作成方法については、トレーニング パイプラインの作成をご覧ください。