# 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パーセンテージ等のメトリクスを算出可能。