AWS Batch で実行する GPU ベースの機械学習トレーニング - コスト効率の高い大規模学習

既存の Docker コンテナで GPU トレーニングを実行し、スポットインスタンスとチェックポイントでコストを最大 90% 削減する。SageMaker との使い分けも紹介します。

Batch で GPU トレーニングを実行する利点

SageMaker は ML のライフサイクル全体をカバーするサービスですが、既存の Docker コンテナとトレーニングスクリプトをそのまま使いたい場合や、SageMaker のフレームワーク制約に合わない場合は Batch が有力な選択肢です。Batch では任意の Docker イメージを使用でき、PyTorch、TensorFlow、JAX などのフレームワークを自由に組み合わせられます。GPU インスタンス (P4d、P5、G5) をコンピューティング環境に指定し、ジョブ定義で GPU の数を resourceRequirements で指定するだけで、GPU ベースのトレーニングが実行できます。

スポットインスタンスとチェックポイント

GPU インスタンスのオンデマンド料金は高額ですが、スポットインスタンスを使用すると最大 90% のコスト削減が可能です。スポットの中断に備えて、トレーニングスクリプトにチェックポイント保存を実装します。一定エポックごとにモデルの重みとオプティマイザーの状態を S3 に保存し、中断後のリトライ時にチェックポイントから再開します。Batch はスポットの中断時にジョブを自動的にリトライする機能を備えており、リトライ回数と戦略を設定できます。チェックポイントの保存間隔はトレーニング時間とストレージコストのバランスで決定し、30 分から 1 時間ごとが一般的です。

分散トレーニングとハイパーパラメータ探索

マルチノード並列ジョブで複数の GPU インスタンスにまたがる分散トレーニングを実行できます。 PyTorch の DistributedDataParallel や Horovod を使用し、データ並列でトレーニングを高速化します。 Batch がノード間の通信 (EFA: Elastic Fabric Adapter) を自動設定するため、分散トレーニングのインフラ構築が簡素化されます。配列ジョブでハイパーパラメータ探索を並列実行する場合、各タスクのインデックスをハイパーパラメータの組み合わせにマッピングします。学習率、バッチサイズ、ドロップアウト率の組み合わせを数百パターン並列実行し、最適な構成を効率的に特定できます。 機械学習のアルゴリズムを網羅的に学ぶなら、技術書 (Amazon)を参照してください。

Batch GPU トレーニングの料金

AWS Batch 自体に追加料金は発生せず、コストは使用する EC2 インスタンスの料金です。GPU インスタンスの料金は高額で、p4d.24xlarge (A100 x 8) はオンデマンドで 1 時間あたり約 32.77 ドル、g5.xlarge (A10G x 1) は約 1.006 ドルです。スポットインスタンスではこれらが最大 90% 割引されますが、中断リスクがあるためチェックポイントの実装が必須です。トレーニング時間を短縮するために大きいインスタンスを選ぶか、コストを抑えるために小さいインスタンスで長時間実行するかのトレードオフを、ジョブの緊急度に応じて判断します。

まとめ

AWS Batch は既存の Docker コンテナを活用した GPU ベースの ML トレーニングに最適です。スポットインスタンスとチェックポイントの組み合わせでコストを大幅に削減し、配列ジョブでハイパーパラメータ探索を並列化できます。SageMaker のマネージド機能が不要で、トレーニング環境の自由度を重視する場合に有効な選択肢です。