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 では、実行する処理をジョブ定義として記述し、どのリソースで動かすかをコンピュート環境として定義します。ジョブ定義には、使用するコンテナイメージ、必要な GPU やメモリ、再試行の方針などを指定します。コンピュート環境では、利用するインスタンスの種類や、最小・最大の規模を設定します。ジョブキューを介してジョブを投入すると、Batch が空いているリソースに自動で割り当てて実行します。この三層の構成により、リソースの確保とスケジューリングを Batch に任せ、利用者はトレーニングの中身に集中できます。
コンテナとデータの準備
GPU トレーニングをコンテナで動かすには、必要なライブラリと学習コードを含めたイメージを用意し、レジストリに登録しておきます。既存の学習用コンテナをそのまま使える点が、Batch の利点です。学習データは S3 に置き、ジョブ起動時に取得します。データ量が膨大で高速な読み込みが必要な場合は、S3 と連携する高性能な共有ファイルシステムを併用すると、データ読み込みのボトルネックを解消できます。トレーニング前の準備として、データの配置と取得経路を設計しておくことが、GPU を遊ばせずに効率よく学習を回すための前提になります。
SageMaker との使い分け
機械学習のトレーニング基盤には Batch と SageMaker の選択肢があります。Batch は、既存のコンテナや独自の学習環境をそのまま動かしたい、汎用的なバッチ処理基盤として ML 以外の処理も統一的に扱いたい、という場合に向きます。一方 SageMaker は、実験管理やモデルのデプロイ、監視まで含めた ML 専用の統合環境を求める場合に適します。学習だけを安価に大量実行したいなら Batch、ML のライフサイクル全体をマネージドに回したいなら SageMaker、という整理ができます。既存資産と求める機能の範囲から、適した基盤を選びます。
監視と運用
トレーニングジョブの状況は、ログとメトリクスで把握します。各ジョブの標準出力をログに集約し、学習の進行や異常を確認します。失敗したジョブは設定に応じて自動で再試行され、スポットインスタンスの中断にも備えられます。多数のパラメータ組み合わせを試す場合は、一括で多数のジョブを投入するアレイジョブが便利です。ジョブ間に依存関係を定義すれば、前処理・学習・評価を順序立てて実行できます。GPU の使用率を監視し、リソースが有効に使われているかを確認することで、無駄なコストを避けつつ、効率的なトレーニング運用を実現できます。
まとめ
AWS Batch は既存の Docker コンテナを活用した GPU ベースの ML トレーニングに最適です。スポットインスタンスとチェックポイントの組み合わせでコストを大幅に削減し、配列ジョブでハイパーパラメータ探索を並列化できます。SageMaker のマネージド機能が不要で、トレーニング環境の自由度を重視する場合に有効な選択肢です。