グラフィック プロセッシング ユニット(GPU)は、多くのディープ ラーニング モデルのトレーニング プロセスを大幅に高速化します。画像分類、動画分析、自然言語処理などのタスクに使用するトレーニング モデルには、行列乗算などのコンピューティング集約型のオペレーションが必要になります。こうしたオペレーションでは、GPU の超並列アーキテクチャを利用できます。
極端に大きなデータセットに対してコンピューティング集約型のオペレーションを必要とするディープ ラーニング モデルをトレーニングする場合に、プロセッサが 1 つだけでは実行に何日もかかることがあります。しかし、このようなタスクを 1 つまたは複数の GPU にオフロードするようにプログラムを設計すれば、トレーニングに要する時間を日単位から時間単位に短縮できます。
始める前に
AI Platform Training では、TensorFlow トレーニング アプリケーションを GPU 対応のマシン上で実行できます。利用可能な GPU をアプリケーションで使用するには、GPU の使用に関する TensorFlow ガイドと GPU を利用するトレーニング コードの調整方法を説明しているこのドキュメントのセクションをご覧ください。
カスタム コンテナをトレーニングに使用する場合は、TensorFlow 以外の機械学習フレームワークで GPU を使用することもできます。
モデルによっては、GPU で実行するメリットがないこともあります。GPU をおすすめするのは、大規模で複雑なモデルで多数の数学的演算を行う場合です。この場合も、GPU の効果があるかどうかをテストするために、少数のサンプルデータでトレーニングを実行してください。
GPU 対応マシンのリクエスト
クラウドで GPU を使用するには、次のいずれかの方法で GPU 対応マシンにアクセスするようにトレーニング ジョブを構成します。
BASIC_GPU
スケール階層を使用する。- Compute Engine のマシンタイプを使用し、GPU を接続します。
- GPU 対応の従来のマシンタイプを使用します。
基本的な GPU 対応マシン
AI Platform Training の使用方法を学んだり、GPU 対応マシンを試したりすることを目的としている場合は、スケール階層を BASIC_GPU
に設定することで、1 つの GPU を持つ単一のワーカー インスタンスを取得できます。
Compute Engine マシンタイプに GPU を接続
Compute Engine マシンタイプを使用してトレーニング ジョブを構成する場合、任意の数の GPU を接続するとジョブを加速化できます。
- スケール階層を
CUSTOM
に設定します。 - 有効な Compute Engine マシンタイプを使用するジョブの一部であるマスター ワーカーとその他のタスクタイプ(ワーカー、パラメータ サーバー、または評価ツール)を構成します。
- 加速する仮想マシン(VM)インスタンスに応じて、使用する GPU のタイプと数を指定した
acceleratorConfig
フィールドをmasterConfig
、workerConfig
、parameterServerConfig
、またはevaluatorConfig
に追加します。次のタイプの GPU を使用できます。NVIDIA_TESLA_A100
NVIDIA_TESLA_P4
NVIDIA_TESLA_P100
NVIDIA_TESLA_T4
NVIDIA_TESLA_V100
有効な acceleratorConfig
を作成するには、いくつかの制限を考慮する必要があります。
構成では特定の数の GPU のみを使用できます。たとえば NVIDIA Tesla T4 では、2 個または 4 個は接続できますが、3 個は接続できません。各 GPU タイプの接続可能な個数を確認するには、下記の互換性の表をご覧ください。
それぞれの GPU 構成で、接続先のマシンタイプに十分な数の仮想 CPU とメモリ容量が提供される必要があります。たとえば、ワーカーに
n1-standard-32
を使用した場合、各ワーカーに 32 個の仮想 CPU と 120 GB のメモリが設定されます。NVIDIA Tesla V100 には最大 12 個の仮想 CPU と 76 GB のメモリを搭載できます。この要件をサポートするため、1 つのn1-standard-32
ワーカーに少なくとも 4 つを接続する必要があります(2 つの GPU では十分なリソースが提供されません。また、3 つの GPU を指定することはできません)。互換性を確認するには、AI Platform Training のマシンタイプのリストとコンピューティング ワークロード用 GPU の比較をご覧ください。または、以下の互換性の表をご覧ください。
場合によっては、AI Platform Training の GPU リソースに次の制限事項も適用されることにご注意ください。
- 4 個の NVIDIA Tesla P100 GPU を使用する構成では、すべてのリージョンとゾーンで最大 64 個の仮想 CPU と最大 208 GB のメモリのみがサポートされます。
トレーニング ジョブの送信先は、GPU 構成をサポートしているリージョンでなければなりません。各リージョンのサポートについては下記をお読みください。
次の表は、各 Compute Engine マシンタイプに接続できるタイプ別アクセラレータの数を記載したクイック リファレンスです。
各マシンタイプに有効な GPU の数 | ||||||
---|---|---|---|---|---|---|
マシンタイプ | NVIDIA A100 | NVIDIA Tesla K80 | NVIDIA Tesla P4 | NVIDIA Tesla P100 | NVIDIA Tesla T4 | NVIDIA Tesla V100 |
n1-standard-4 |
1、2、4、8 | 1、2、4 | 1、2、4 | 1、2、4 | 1、2、4、8 | |
n1-standard-8 |
1、2、4、8 | 1、2、4 | 1、2、4 | 1、2、4 | 1、2、4、8 | |
n1-standard-16 |
2、4、8 | 1、2、4 | 1、2、4 | 1、2、4 | 2、4、8 | |
n1-standard-32 |
4、8 | 2、4 | 2、4 | 2、4 | 4、8 | |
n1-standard-64 |
4 | 4 | 8 | |||
n1-standard-96 |
4 | 4 | 8 | |||
n1-highmem-2 |
1、2、4、8 | 1、2、4 | 1、2、4 | 1、2、4 | 1、2、4、8 | |
n1-highmem-4 |
1、2、4、8 | 1、2、4 | 1、2、4 | 1、2、4 | 1、2、4、8 | |
n1-highmem-8 |
1、2、4、8 | 1、2、4 | 1、2、4 | 1、2、4 | 1、2、4、8 | |
n1-highmem-16 |
2、4、8 | 1、2、4 | 1、2、4 | 1、2、4 | 2、4、8 | |
n1-highmem-32 |
4、8 | 2、4 | 2、4 | 2、4 | 4、8 | |
n1-highmem-64 |
4 | 4 | 8 | |||
n1-highmem-96 |
4 | 4 | 8 | |||
n1-highcpu-16 |
2、4、8 | 1、2、4 | 1、2、4 | 1、2、4 | 2、4、8 | |
n1-highcpu-32 |
4、8 | 2、4 | 2、4 | 2、4 | 4、8 | |
n1-highcpu-64 |
8 | 4 | 4 | 4 | 8 | |
n1-highcpu-96 |
4 | 4 | 8 | |||
a2-highgpu-1g |
1 | |||||
a2-highgpu-2g |
2 | |||||
a2-highgpu-4g |
4 | |||||
a2-highgpu-8g |
8 | |||||
a2-megagpu-16g |
16 |
GPU が接続された Compute Engine マシンタイプを使用してジョブを送信する例については後述します。
GPU が組み込まれたマシンタイプ
代わりに、acceleratorConfig
GPU を含むレガシー マシンタイプを選択できます。
- スケール階層を
CUSTOM
に設定します。 - タスクに必要な GPU の数とアクセラレータのタイプに応じて、次のいずれかの GPU 対応のマシンタイプを使用して加速するマスター ワーカーとその他のタスクタイプ(ワーカー、パラメータ サーバー、または評価ツール)を構成します。
standard_gpu
: 単一の GPUcomplex_model_m_gpu
: 4 個の GPUcomplex_model_l_gpu
: 8 個の GPUstandard_p100
: NVIDIA Tesla P100 GPU 1 個complex_model_m_p100
: NVIDIA Tesla P100 GPU 4 個standard_v100
: NVIDIA Tesla V100 GPU 1 個large_model_v100
: NVIDIA Tesla V100 GPU 1 個complex_model_m_v100
: NVIDIA Tesla V100 GPU 4 個complex_model_l_v100
: NVIDIA Tesla V100 GPU 8 個
以下は、gcloud
コマンドを使用して、GPU 対応のマシンタイプを使用するジョブを送信する例です。
詳細については、AI Platform Training のマシンタイプをご覧ください。
GPU をサポートしているリージョン
ジョブは、GPU をサポートしているリージョンで実行する必要があります。現在、次のリージョンで GPU にアクセスできます。
us-west1
us-west2
us-central1
us-east1
us-east4
northamerica-northeast1
southamerica-east1
europe-west1
europe-west2
europe-west4
asia-south1
asia-southeast1
asia-east1
asia-northeast1
asia-northeast3
australia-southeast1
さらに、上記のリージョンの一部では、使用できる GPU が特定のタイプに限られています。モデル トレーニングやオンライン / バッチ予測などの AI Platform Training サービスに利用可能なリージョンの詳細については、リージョンのガイドをご覧ください。
トレーニング ジョブで複数のタイプの GPU を使用する場合、それらの GPU のすべてがリージョン内の同じゾーンで使用可能でなければなりません。たとえば us-central1
内では、NVIDIA Tesla T4 GPU を使用するマスター ワーカー、NVIDIA Tesla K80 GPU を使用するパラメータ サーバー、NVIDIA Tesla P100 GPU を使用するワーカーを使ったジョブを実行することはできません。us-central1
内ではこれらすべての GPU をトレーニング ジョブに使用できますが、このリージョンには、3 タイプの GPU をすべて提供している単一のゾーンはありません。ゾーンでの GPU の可用性については、コンピューティング ワークロード用 GPU の比較をご覧ください。
トレーニング ジョブの送信
トレーニング ジョブを送信するには、gcloud ai-platform jobs submit
training
コマンドを実行します。
必要な GPU オプションを記述した
config.yaml
ファイルを定義します。YAML ファイルの構造は Job リソースを表します。以下に、config.yaml
ファイルの 2 つの例を示します。最初の例は、Compute Engine マシンタイプと GPU が組み込まれた Compute Engine マシンタイプを使用するトレーニング ジョブの構成ファイルを示しています。
trainingInput: scaleTier: CUSTOM # Configure a master worker with 4 T4 GPUs masterType: n1-highcpu-16 masterConfig: acceleratorConfig: count: 4 type: NVIDIA_TESLA_T4 # Configure 9 workers, each with 4 T4 GPUs workerCount: 9 workerType: n1-highcpu-16 workerConfig: acceleratorConfig: count: 4 type: NVIDIA_TESLA_T4 # Configure 3 parameter servers with no GPUs parameterServerCount: 3 parameterServerType: n1-highmem-8
次の例に示す構成ファイルは、上記の例と同じように構成されたジョブを対象としています。ただし、この構成では、
acceleratorConfig
で GPU を接続する代わりに、GPU を含むレガシー マシンタイプを使用します。trainingInput: scaleTier: CUSTOM # Configure a master worker with 4 GPUs masterType: complex_model_m_gpu # Configure 9 workers, each with 4 GPUs workerCount: 9 workerType: complex_model_m_gpu # Configure 3 parameter servers with no GPUs parameterServerCount: 3 parameterServerType: large_model
gcloud
コマンドを使用してジョブを送信します。--config
引数を使用してconfig.yaml
ファイルを指定します。次の例では、いくつかの引数の値に対して環境変数が設定されていることを前提としています。環境変数は、$
記号の後に大文字が続く形式で示されています。gcloud ai-platform jobs submit training $JOB_NAME \ --package-path $APP_PACKAGE_PATH \ --module-name $MAIN_APP_MODULE \ --job-dir $JOB_DIR \ --region us-central1 \ --config config.yaml \ -- \ --user_arg_1 value_1 \ ... --user_arg_n value_n
コマンドラインのフラグに構成ファイルではなく、クラスタ構成の詳細を指定することもできます。詳しくは、該当するフラグの使用方法をご覧ください。
次の例では、最初の例と同じ構成を使用してジョブを送信していますが(GPU を含む Compute Engine マシンタイプを使用しています)、config.yaml
ファイルは使用していません。
gcloud ai-platform jobs submit training $JOB_NAME \
--package-path $APP_PACKAGE_PATH \
--module-name $MAIN_APP_MODULE \
--job-dir $JOB_DIR \
--region us-central1 \
--scale-tier custom \
--master-machine-type n1-highcpu-16 \
--master-accelerator count=4,type=nvidia-tesla-t4 \
--worker-count 9 \
--worker-machine-type n1-highcpu-16 \
--worker-accelerator count=4,type=nvidia-tesla-t4 \
--parameter-server-count 3 \
--parameter-server-machine-type n1-highmem-8 \
-- \
--user_arg_1 value_1 \
...
--user_arg_n value_n
注:
- 構成ファイル(
config.yaml
)とコマンドライン フラグの両方でオプションを指定した場合、構成ファイルの値よりもコマンドラインの値が優先されます。 - 空の
--
フラグは、gcloud
固有のフラグの末尾、およびアプリケーションに渡すUSER_ARGS
の先頭を示します。 --module-name
、--runtime-version
、--job-dir
などの AI Platform Training 固有のフラグは、空の--
フラグの前に指定する必要があります。AI Platform Training サービスがこれらのフラグを解釈します。- AI Platform Training はパスの検証に
--job-dir
を使用するため、--job-dir
フラグを指定する場合は、空の--
フラグの前に指定する必要があります。 --job-dir
フラグが指定されている場合、アプリケーションはこれも処理する必要があります。--job-dir
フラグは、空の--
の前に指定されている場合でも、コマンドライン フラグとしてアプリケーションに渡されます。USER_ARGS
は必要な数だけ定義できます。AI Platform Training は、--user_first_arg
、--user_second_arg
などをアプリケーションに渡します。
ジョブ送信オプションの詳細については、トレーニング ジョブの開始のガイドをご覧ください。
GPU を利用するためにトレーニング コードを調整
TensorFlow トレーニング ジョブに Keras または Estimator を使用して、1 つの GPU で単一の VM を使用してトレーニングする場合は、GPU のコードをカスタマイズする必要はありません。
トレーニング クラスタに複数の GPU が含まれている場合は、トレーニング コードで tf.distribute.Strategy
API を使用します。
- 複数の GPU を使用する単一の VM でのトレーニングには、TensorFlow 2.1 以降の Keras で完全にサポートされている
MirroredStrategy
を使用することをおすすめします。 - GPU での複数の VM でのトレーニングについては、分散トレーニングでの推奨事項をご覧ください。
TensorFlow で GPU に特定のオペレーションを割り当てる方法をカスタマイズするには、GPU の使用に関する TensorFlow ガイドをご覧ください。この場合、AI Platform Training で各 VM に TF_CONFIG
環境変数を設定する方法が役立つこともあります。
GPU デバイス文字列
standard_gpu
マシンの単一の GPU は "/gpu:0"
として識別されます。複数の GPU を持つマシンは、"/gpu:0"
、次に "/gpu:1"
のように続く ID を使用します。たとえば、complex_model_m_gpu
のマシンに GPU が 4 個ある場合、ID は "/gpu:0"
から "/gpu:3"
までとなります。
GPU 対応マシンの Python パッケージ
GPU 対応マシンには、GPU をサポートする TensorFlow Python パッケージの tensorflow-gpu がプリインストールされています。プリインストールされているすべてのパッケージの一覧については、ランタイム バージョン リストをご覧ください。
メンテナンス イベント
AI Platform Training ジョブを実行する GPU 対応の VM に、Compute Engine ホスト メンテナンスが適用される場合があります。こうした VM は、こうしたメンテナンス イベントの後に自動的に再起動するように構成されていますが、シャットダウンに対して復元性があることを確認するために、追加の作業が必要になることがあります。具体的には、定期的にモデル チェックポイントを保存し(通常は、Cloud Storage パスに沿って gcloud ai-platform jobs submit training
の --job-dir
引数で指定します)、既存のチェックポイントがある場合は最新のチェックポイントを復元するようにトレーニング アプリケーションを構成します。
model_dir
を指定している限り、TensorFlow Estimator でこの機能が実装されます。Estimator ではチェックポイントが model_dir
に定期的に保存され、最新のチェックポイントからの読み込みが試行されるため、GPU ワーカーに対するメンテナンス イベントを気にする必要はありません。
Keras を使用してトレーニングする場合は、ModelCheckpoint
コールバックを使用してトレーニングの進捗状況を定期的に保存します。Keras で tf.distribute.Strategy
を使用している場合、VM でチェックポイントを使用して、再起動から自動的に復元します。それ以外の場合は、トレーニング コードに最近のチェックポイントの存在を確認するロジックを追加し、存在する場合はチェックポイントから復元します。
高度なケースについては、チェックポイントに関する TensorFlow ガイドをご覧ください。
次のステップ
- トレーニングの仕組みの概要を確認する。
- GPU の同時使用数の上限について理解する。
- TensorFlow で GPU を使用する方法を確認する。
- NVIDIA Tesla T4 などの新しい GPU のパフォーマンスとコストの比較を確認する。