# GKE ML Training Goodput Guide Original Article: [Goodput Guide for Llama 3.1 70B Pre-training on GKE](https://github.com/AI-Hypercomputer/gpu-recipes/blob/main/training/a3mega/llama3-1-70b/nemo-pretraining-gke-resiliency/goodput-guide.md) 大規模MLトレーニングの効率を最大化し、GoodPutを向上させるためのガイド。GoodPutとは、非効率によって失われた時間を除いた、実際の生産的なトレーニング時間を指す。[[GKE]]環境における[[深層学習]]の効率改善は、コスト削減とモデル開発の迅速化に直結する。 ## 1. ダウンタイムの最小化:最適化されたチェックポイント * **非同期チェックポイント**: [[GPU]]のアイドル時間を最小限に抑えるため、チェックポイントの保存をCPU/バックグラウンドプロセスにオフロードする。これにより、GoodPutが3-10%向上する可能性がある。`--enable-async-ckpt`などで有効化。 * **マルチティアチェックポイント戦略**: Google Cloud Storage (GCS) を利用し、Cloud Storage FUSE CSIドライバーを介してマウントする。`infrastructure.enable_gcsfuse: true`を設定。 * **分散チェックポイント**: チェックポイントの保存/ロード操作を複数のワーカー/ノードに並列化する。`--enable-dist-ckpt`で有効化。 * **頻度の調整**: 作業損失リスクとオーバーヘッドのバランスを取る。`--checkpoint-interval`などのパラメータで制御。 ## 2. 中断への対応:エラスティックトレーニング * **Supervisorシステム**: トレーニングクラスターとジョブの健全性を監視し、障害信号を検出・対応する。 * **Sensor**: ジョブとコンポーネントを監視。`heartbeat_timeout_s`などで設定。 * **Controller**: ポリシーに基づき修復アクション(再起動、ノード交換等)を決定。 * **Actuator**: 修復アクションを実行。 * **Host Monitors**: ノードレベルの健全性情報を提供。 * **修復戦略**: * **ジョブ内再起動/GPUリセット**: 一時的なエラーに対し、ジョブ内で復旧を試みる。 * **ノードホットスワップ**: 回復不能なノード障害時に、障害ノードを解放し新ノードをプロビジョニング。 * **スケールダウン**: リソース不足時に、健全なノードのみでトレーニングを続行。 * **カスタマイズ**: `values-supervisor.yaml`でポリシーを定義し、`event_policy()`メソッドのオーバーライドにより特定のアプリケーションと連携可能。 ## 3. Goodputの計算方法と詳細定義 Goodputは、トレーニングの総時間から非生産的な時間(BadPut)を除いた、実際の生産的な時間の割合を指す。 ### 数学的定義 Goodput (%) = (総時間 - 非生産的な時間) / 総時間 × 100% ### 時間要素の内訳(非生産的な時間の要因) トレーニング効率を低下させる主な要因(BadPut)は以下の通りである: * **ハードウェア障害およびシステムエラー**: 5-15%の損失 * **プリエンプション(割り込み)およびエビクション**: 5-10%の損失 * **チェックポイント操作の遅延**: 保存および読み込み時のI/O待ちなど(3-10%の損失) * **最適でないチェックポイント頻度**: 2-8%の損失 * **ストラグラー(処理の遅延)**: 特定のノードのパフォーマンス低下(3-7%の損失) * **障害検出・診断の遅延**: 2-5%の損失 ## 4. 成功の測定:GoodPut分析 * `gpu-recipes`リポジトリ内の`src/utils/resiliency_metrics/calculator.py`を使用して、トレーニングログからGoodPutパーセンテージ等のメトリクスを算出可能。