マシンタイプ、スケール階層の指定

AI Platform Training でトレーニング ジョブを実行する場合は、必要なマシン数とマシンタイプを指定する必要があります。このプロセスを簡単にするために、「スケール階層」と呼ばれるクラスタ仕様があらかじめいくつか定義されており、その中から選択できるようになっています。また、カスタム階層を選択して、マシンタイプを自分で指定することもできます。

構成の指定

クラスタ構成を指定する方法は、トレーニング ジョブをどのように実行する予定であるかによって異なります。

gcloud

TrainingInput オブジェクトを表す YAML 構成ファイルを作成し、その構成ファイルでスケール階層の識別子とマシンタイプを指定します。このファイルの名前は任意ですが、config.yaml とするのが慣例です。

次の例は、カスタム処理クラスタを使用するジョブの構成ファイル(config.yaml)の内容です。

trainingInput:
  scaleTier: CUSTOM
  masterType: n1-highcpu-16
  workerType: n1-highcpu-16
  parameterServerType: n1-highmem-8
  evaluatorType: n1-highcpu-16
  workerCount: 9
  parameterServerCount: 3
  evaluatorCount: 1

gcloud ai-platform jobs submit training コマンドを実行するときに、--config フラグに YAML ファイルのパスを指定します。

gcloud ai-platform jobs submit training $JOB_NAME \
        --package-path $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --job-dir $JOB_DIR \
        --region $REGION \
        --config config.yaml \ 
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

コマンドラインのフラグに構成ファイルではなく、クラスタ構成の詳細を指定することもできます。詳しくは、該当するフラグの使用方法をご覧ください。

次の例では、構成ファイルを使用せずに、前の例と同様の構成でトレーニング ジョブを送信する方法を示します。

gcloud ai-platform jobs submit training $JOB_NAME \
        --package-path $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --job-dir $JOB_DIR \
        --region $REGION \
        --scale-tier custom \
        --master-machine-type n1-highcpu-16 \
        --worker-machine-type n1-highcpu-16 \
        --parameter-server-machine-type n1-highmem-8 \
        --worker-count 9 \
        --parameter-server-count 3 \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

トレーニング ジョブを実行する方法の詳細をご覧ください。

Python

スケール階層の識別子とマシンタイプは、ジョブ構成の TrainingInput オブジェクトで指定します。

次の例は、カスタム処理クラスタを持つジョブの Job 表現を作成する方法です。

training_inputs = {'scaleTier': 'CUSTOM',
    'masterType': 'n1-highcpu-16',
    'workerType': 'n1-highcpu-16',
    'parameterServerType': 'n1-highmem-8',
    'evaluatorType': 'n1-highcpu-16',
    'workerCount': 9,
    'parameterServerCount': 3,
    'evaluatorCount': 1,
    'packageUris': ['gs://my/trainer/path/package-0.0.0.tar.gz'],
    'pythonModule': 'trainer.task'
    'args': ['--arg1', 'value1', '--arg2', 'value2'],
    'region': 'us-central1',
    'jobDir': 'gs://my/training/job/directory',
    'runtimeVersion': '2.8',
    'pythonVersion': '3.7'}

job_spec = {'jobId': my_job_name, 'trainingInput': training_inputs}

training_inputsjob_spec は任意の識別子です。これらの辞書には任意の名前を付けることができます。ただし、辞書のキーの名前はここに示しているとおりにする必要があります(Job リソースや TrainingInput リソース内の名前と対応させるため)。

スケール階層

Google は、お客様からのフィードバックやクラウド リソースの可用性に基づいて、さまざまなジョブのスケール階層の構成を徐々に最適化していきます。各スケール階層は、特定のタイプのジョブへの適性という観点から定義されます。一般的に、より高度なスケール階層ほど、多くのマシンがクラスタに割り当てられ、各仮想マシンの仕様はより強力になります。スケール階層の複雑さが増すと、トレーニング ジョブの時間あたりのコスト(トレーニング ユニットの数で表す)も増加します。ジョブのコストを計算するには、料金ページをご覧ください。

AI Platform のトレーニングでは分散型トレーニングや、scikit-learn か、XGBoost のコードでアクセラレータを使用したトレーニングはサポートされていません。トレーニング ジョブで scikit-learn や XGBoost コードを実行する場合は、スケール階層を BASICCUSTOM に設定してください。

スケール階層の識別子は以下のとおりです。

AI Platform Training のスケール階層
BASIC

単一ワーカー インスタンス。AI Platform Training の使い方を学習するときや、小さいデータセットを使用して新しいモデルを実験するときに適しています。

Compute Engine のマシン名: n1-standard-4

STANDARD_1

1 つのマスター インスタンス、4 つのワーカー、3 つのパラメータ サーバー。このスケール階層は、TensorFlow を使用してトレーニングする場合やカスタム コンテナを使用する場合のみに使用します。

Compute Engine のマシン名、マスター: n1-highcpu-8、ワーカー: n1-highcpu-8、パラメータ サーバー: n1-standard-4

PREMIUM_1

1 つのマスター インスタンス、19 のワーカー、11 のパラメータ サーバー。このスケール階層は、TensorFlow を使用してトレーニングする場合やカスタム コンテナを使用する場合のみに使用します。

Compute Engine のマシン名、マスター: n1-highcpu-16、ワーカー: n1-highcpu-16、パラメータ サーバー: n1-highmem-8

BASIC_GPU

1 つの NVIDIA Tesla K80 GPU を備えた 1 つのワーカー インスタンス。グラフィック プロセッシング ユニット(GPU)の詳細については、GPU でのトレーニングに関するセクションをご覧ください。このスケール階層は、TensorFlow を使用してトレーニングする場合やカスタム コンテナを使用する場合のみに使用します。

Compute Engine のマシン名: n1-standard-8(k80 GPU×1)

BASIC_TPU

マスター VM と 8 つの TPU v2 コアを搭載した Cloud TPU。トレーニング ジョブに TPU を使用する方法をご覧ください。このスケール階層は、TensorFlow を使用してトレーニングする場合やカスタム コンテナを使用する場合のみに使用します。

Compute Engine のマシン名、マスター: n1-standard-4、ワーカー: Cloud TPU(8 つの TPU v2 コア)

CUSTOM

CUSTOM 階層はあらかじめ設定された階層ではなく、独自のクラスタ仕様を使用するための階層です。この階層を使用するときは、処理クラスタを構成するための値を、下記のガイドラインに沿って設定します。

  • マスターノードに使用するマシンのタイプを指定するために TrainingInput.masterType を設定する必要があります。これが唯一の必須の設定です。以下で説明するマシンタイプをご覧ください。
  • 使用するワーカーの数を指定するには、TrainingInput.workerCount を設定できます。ワーカーを 1 つ以上指定する場合は、TrainingInput.workerType も指定して、ワーカーノードに使用するマシンのタイプを指定する必要があります。ワーカーは、TensorFlow を使用してトレーニングする場合やカスタム コンテナを使用する場合のみに指定します。
  • 使用するパラメータ サーバーの数を指定するには、TrainingInput.parameterServerCount を設定できます。パラメータ サーバーを 1 つ以上指定する場合は、TrainingInput.parameterServerType も設定して、パラメータ サーバーに使用するマシンのタイプを指定する必要があります。パラメータ サーバーは、TensorFlow を使用してトレーニングする場合やカスタム コンテナを使用する場合のみに指定します。
  • TrainingInput.evaluatorCount を設定して、使用する評価ツールの数を指定できます。評価ツールを 1 つ以上指定する場合は、TrainingInput.evaluatorType を設定して評価ツールに使用するマシンのタイプも指定する必要があります。評価ツールは、TensorFlow を使用してトレーニングする場合やカスタム コンテナを使用する場合のみに指定します。

カスタム スケール階層のマシンタイプ

モデルのトレーニングに使用する処理クラスタをより細かく制御する場合は、カスタム スケール階層を使用します。この構成は、ジョブ構成内の TrainingInput オブジェクトで指定します。トレーニング ジョブを送信するために gcloud ai-platform jobs submit training コマンドを使用する場合は、同じ識別子を使用できます。

  • スケール階層(scaleTier)を CUSTOM に設定します。

  • 必要なワーカー(workerCount)、パラメータ サーバー(parameterServerCount)、評価ツール(evaluatorCount)の数を設定します。

    AI Platform のトレーニングでは、TensorFlow を使用してトレーニングする場合やカスタム コンテナを使用する場合のみ、分散型トレーニングがサポートされます。トレーニング ジョブで scikit-learn や XGBoost コードを実行する場合は、ワーカー、パラメータ サーバー、評価ツールは指定しないでください。

  • マスター ワーカーのマシンタイプ(masterType)を設定します。ワーカー、パラメータ サーバー、または評価ツールを使用する場合は、それぞれ workerTypeparameterServerTypeevaluatorType フィールドにマシンタイプを設定します。

    masterTypeworkerTypeparameterServerTypeevaluatorType にそれぞれ異なるマシンタイプを指定できますが、個々のインスタンスに異なるマシンタイプを使用することはできません。たとえば、n1-highmem-8 というマシンタイプをパラメータ サーバーに使用できますが、あるパラメータ サーバーには n1-highmem-8 を使用し、それ以外には n1-highcpu-16 を使用するということはできません。

  • カスタム構成(完全なクラスタではない)で必要なワーカーが 1 つだけの場合は、マスターのみのマシンタイプを持つカスタム スケール階層を指定する必要があります。そのように指定すると、ワーカーは 1 つだけになります。config.yaml ファイルの例を次に示します。

    trainingInput:
      scaleTier: CUSTOM
      masterType: n1-highcpu-16
    

Compute Engine のマシンタイプ

Compute Engine の特定の定義済みマシンタイプの名前をジョブの masterTypeworkerTypeparameterServerTypeevaluatorType に使用できます。TensorFlow でトレーニングを行う場合やカスタム コンテナを使用する場合は、これらのマシンタイプにさまざまな種類の GPU を使用できます

トレーニング ジョブで使用できる Compute Engine マシンタイプ ID は次のとおりです。

  • e2-standard-4
  • e2-standard-8
  • e2-standard-16
  • e2-standard-32
  • e2-highmem-2
  • e2-highmem-4
  • e2-highmem-8
  • e2-highmem-16
  • e2-highcpu-16
  • e2-highcpu-32
  • n2-standard-4
  • n2-standard-8
  • n2-standard-16
  • n2-standard-32
  • n2-standard-48
  • n2-standard-64
  • n2-standard-80
  • n2-highmem-2
  • n2-highmem-4
  • n2-highmem-8
  • n2-highmem-16
  • n2-highmem-32
  • n2-highmem-48
  • n2-highmem-64
  • n2-highmem-80
  • n2-highcpu-16
  • n2-highcpu-32
  • n2-highcpu-48
  • n2-highcpu-64
  • n2-highcpu-80
  • n1-standard-4
  • n1-standard-8
  • n1-standard-16
  • n1-standard-32
  • n1-standard-64
  • n1-standard-96
  • n1-highmem-2
  • n1-highmem-4
  • n1-highmem-8
  • n1-highmem-16
  • n1-highmem-32
  • n1-highmem-64
  • n1-highmem-96
  • n1-highcpu-16
  • n1-highcpu-32
  • n1-highcpu-64
  • n1-highcpu-96
  • c2-standard-4
  • c2-standard-8
  • c2-standard-16
  • c2-standard-30
  • c2-standard-60
  • m1-ultramem-40
  • m1-ultramem-80
  • m1-ultramem-160
  • m1-megamem-96
  • a2-highgpu-1g*(プレビュー)
  • a2-highgpu-2g*(プレビュー)
  • a2-highgpu-4g*(プレビュー)
  • a2-highgpu-8g*(プレビュー)
  • a2-megagpu-16g*(プレビュー)

これらのマシンタイプの技術的な仕様については、マシンタイプに関する Compute Engine のドキュメントをご覧ください。

レガシー マシンタイプ

ジョブに Compute Engine のマシンタイプではなく、従来のマシンタイプ名を指定することもできます。これらのマシンタイプは、同等の Compute Engine マシンタイプと同じ vCPU とメモリリソースを提供しますが、構成上の制限があります。

  • acceleratorConfig を使用して GPU の使用をカスタマイズすることはできません。ただし、GPU を使用するレガシー マシンタイプもあります。次の表をご確認ください。

  • トレーニング ジョブの構成で複数のマシンを使用している場合、Compute Engine のマシンタイプとレガシー マシンタイプを混在させることはできません。マスター ワーカー、ワーカー、パラメータ サーバー、評価ツールが使用するマシンタイプは、すべて同じグループのものにする必要があります。

    たとえば、masterType を構成して n1-highcpu-32(Compute Engine マシンタイプ)とする場合、workerTypecomplex_model_m(以前のマシンタイプ)に設定することはできませんが、n1-highcpu-16(別の Compute Engine マシンタイプ)に設定することはできます。

次の表に、レガシー マシンタイプを示します。

レガシー マシンタイプ
standard

基本的なマシン構成。小~中規模のデータセットを使用する単純なモデルのトレーニングに適しています。

Compute Engine のマシン名: n1-standard-4

large_model

大容量メモリを備えたマシン。特に、モデルが大きい(多数の隠れ層がある、または非常に多くのノードを持つ層がある)ときのパラメータ サーバーに適しています。

Compute Engine のマシン名: n1-highmem-8

complex_model_s

standard タイプのマシンで適切に処理できるレベルよりも、モデルが多くのコンピューティングを必要としている場合に、クラスタのマスターやワーカーに適しているマシン。

Compute Engine のマシン名: n1-highcpu-8

complex_model_m

complex_model_s の約 2 倍のコア数と約 2 倍のメモリ容量を備えたマシン。

Compute Engine のマシン名: n1-highcpu-16

complex_model_l

complex_model_m の約 2 倍のコア数と約 2 倍のメモリ容量を備えたマシン。

Compute Engine のマシン名: n1-highcpu-32

standard_gpu

standard と同等のマシンで、単一の NVIDIA Tesla K80 GPU 1 個が追加されています。このマシンタイプは、TensorFlow を使用してトレーニングする場合やカスタム コンテナを使用する場合のみに使用します。

Compute Engine のマシン名: n1-standard-8(k80 GPU×1)

complex_model_m_gpu

complex_model_m と同等のマシンで、NVIDIA Tesla K80 GPU 4 個が追加されています。このマシンタイプは、TensorFlow を使用してトレーニングする場合やカスタム コンテナを使用する場合のみに使用します。

Compute Engine のマシン名: n1-standard-16-k80x4

complex_model_l_gpu

complex_model_l と同等のマシンで、NVIDIA Tesla K80 GPU 8 個が追加されています。このマシンタイプは、TensorFlow を使用してトレーニングする場合やカスタム コンテナを使用する場合のみに使用します。

Compute Engine のマシン名: n1-standard-32-k80x8

standard_p100

standard と同等のマシンで、単一の NVIDIA Tesla P100 GPU 1 個が追加されています。このマシンタイプは、TensorFlow を使用してトレーニングする場合やカスタム コンテナを使用する場合のみに使用します。

Compute Engine のマシン名: n1-standard-8-p100x1

complex_model_m_p100

complex_model_m と同等のマシンで、NVIDIA Tesla P100 GPU 4 個が追加されています。このマシンタイプは、TensorFlow を使用してトレーニングする場合やカスタム コンテナを使用する場合のみに使用します。

Compute Engine のマシン名: n1-standard-16-p100x4

standard_v100

standard と同等のマシンで、単一の NVIDIA Tesla V100 GPU 1 個が追加されています。このマシンタイプは、TensorFlow を使用してトレーニングする場合やカスタム コンテナを使用する場合のみに使用します。

Compute Engine のマシン名: n1-standard-8-v100x1

large_model_v100

large_model と同等のマシンで、単一の NVIDIA Tesla V100 GPU 1 個が追加されています。このマシンタイプは、TensorFlow を使用してトレーニングする場合やカスタム コンテナを使用する場合のみに使用します。

Compute Engine のマシン名: n1-highmem-8-v100x1

complex_model_m_v100

complex_model_m と同等のマシンで、NVIDIA Tesla V100 GPU 4 個が追加されています。このマシンタイプは、TensorFlow を使用してトレーニングする場合やカスタム コンテナを使用する場合のみに使用します。

Compute Engine のマシン名: n1-standard-16-v100x4

complex_model_l_v100

complex_model_l と同等のマシンで、NVIDIA Tesla V100 GPU 8 個が追加されています。このマシンタイプは、TensorFlow を使用してトレーニングする場合やカスタム コンテナを使用する場合のみに使用します。

Compute Engine のマシン名: n1-standard-32-v100x8

GPU と TPU によるトレーニング

一部のスケール階層とレガシー マシンタイプには GPU(Graphics Processing Unit)が組み込まれています。Compute Engine マシンタイプを使用している場合は、独自に選択した複数の GPU を接続できます。詳しくは、GPU によるトレーニングをご覧ください。

Tensor Processing Unit(TPU)を使用してトレーニングを行う場合は、BASIC_TPU スケール階層または cloud_tpu マシンタイプを使用する必要があります。cloud_tpu マシンタイプには特別な構成オプションがあります。このタイプは、Compute Engine マシンタイプまたはレガシー マシンタイプと一緒に使用できます。また、8 つの TPU v2 コアまたは 8 つの TPU v3 コアを使用するように構成できます。トレーニング ジョブで TPU を使用する方法をご覧ください。

次のステップ