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

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

構成の指定

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

gcloud

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

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

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

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-server-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',
    'workerCount': 9,
    'parameterServerCount': 3,
    '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': '1.14',
    'pythonVersion': '3.5'}

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 のスケール階層
BASIC

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

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 オブジェクトで指定します。トレーニング ジョブを送信するために gcloud ai-platform jobs submit training コマンドを使用する場合は、同じ識別子を使用できます。

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

  • 必要なパラメータ サーバー数(parameterServerCount)とワーカー数(workerCount)の値を設定します。

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

  • マスター ワーカーのマシンタイプを設定します(masterType)。パラメータ サーバーやワーカーの使用を選択した場合は、そのマシンタイプを parameterServerType フィールドと workerType フィールドでそれぞれ設定してください。

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

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

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

Compute Engine のマシンタイプ

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

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

  • 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

詳細については、Compute Engine マシンタイプで提供される仮想 CPU(vCPU)とメモリリソースまたはこのページの最後にある比較表をご覧ください。

レガシー マシンタイプ

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

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

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

    たとえば、masterTypen1-highcpu-32(Compute Engine マシンタイプ)に構成する場合、workerType または parameterServerTypecomplex_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 を使用する方法をご覧ください。

マシンタイプの比較

次の表では、スケール階層を CUSTOM に設定した場合にトレーニングに使用できる Compute Engine のマシンタイプとレガシー マシンタイプを比較します。

マシンタイプの具体的な仕様は随時変更される可能性があります。

トレーニング ジョブで TensorFlow またはカスタム コンテナを使用する場合は、アクセラレータがあるマシンタイプを使用できます。それ以外の場合は、アクセラレータがあるマシンタイプは使用しないでください。

マシンタイプ名 マシンタイプのカテゴリ アクセラレータ 仮想 CPU メモリ(GB)
n1-standard-4 Compute Engine カスタマイズ可能 4 15
n1-standard-8 Compute Engine カスタマイズ可能 8 30
n1-standard-16 Compute Engine カスタマイズ可能 16 60
n1-standard-32 Compute Engine カスタマイズ可能 32 120
n1-standard-64 Compute Engine カスタマイズ可能 64 240
n1-standard-96 Compute Engine カスタマイズ可能 96 360
n1-highmem-2 Compute Engine カスタマイズ可能 2 13
n1-highmem-4 Compute Engine カスタマイズ可能 4 26
n1-highmem-8 Compute Engine カスタマイズ可能 8 52
n1-highmem-16 Compute Engine カスタマイズ可能 16 104
n1-highmem-32 Compute Engine カスタマイズ可能 32 208
n1-highmem-64 Compute Engine カスタマイズ可能 64 416
n1-highmem-96 Compute Engine カスタマイズ可能 96 624
n1-highcpu-16 Compute Engine カスタマイズ可能 16 14.4
n1-highcpu-32 Compute Engine カスタマイズ可能 32 28.8
n1-highcpu-64 Compute Engine カスタマイズ可能 64 57.6
n1-highcpu-96 Compute Engine カスタマイズ可能 96 86.4
cloud_tpu TPU 8(TPU v2 または TPUv3 コア)
標準 レガシー - 4 15
large_model レガシー - 8 52
complex_model_s レガシー - 8 7.2
complex_model_m レガシー - 16 14.4
complex_model_l レガシー - 32 28.8
standard_gpu レガシー 1(K80 GPU) 8 30
complex_model_m_gpu レガシー 4(K80 GPU) 16 60
complex_model_l_gpu レガシー 8(K80 GPU) 32 120
standard_p100 レガシー 1(P100 GPU) 8 30
complex_model_m_p100 レガシー 4(P100 GPU) 16 60
standard_v100 レガシー 1(V100 GPU) 8 30
large_model_v100 レガシー 1(V100 GPU) 16 52
complex_model_m_v100 レガシー 4(V100 GPU) 16 60
complex_model_l_v100 レガシー 8(V100 GPU) 32 120

次のステップ