GKEにおけるAIワークロードの中断耐性構築
- •GKEユーザーは、一時的なSpot VM上でAIワークロードを運用する際、ノードの予期せぬ終了に対応する設計が必要である。
- •アプリケーションはSIGTERM信号を処理し、15秒以内に処理状態を保存して終了する仕組みを実装しなければならない。
- •永続的な外部ストレージと疎結合なメッセージキューの使用により、計算の中断によるデータ損失を防ぐことが可能である。
Google Kubernetes Engine (GKE) において、Spot VMやDynamic Workload Schedulerで管理されるインスタンスなどの短命なリソースでAIワークロードを動かすユーザーは、データ損失を防ぐための中断耐性のあるアプリケーション設計が求められる。Google CloudがSpot VMを回収する際、システムはACPI信号を発し、これがKubernetesを通じてコンテナ向けのSIGTERM信号に変換される。アプリケーションは、この信号を受信してから15秒間の猶予期間内に、データ処理の中断、メモリ内データのディスクへの書き出し、最終状態の保存を行い、ステータスコード0で正常に終了させる必要がある。
開発者は、モデルの重みや学習状態をリージョンCloud Storageバケットに外部化し、堅牢なチェックポイント作成を実装すべきである。外部チェックポイントからの再開は、ジョブを最初からやり直すよりも効率的だ。さらに、繰り返し操作しても単一実行時と同じ結果が得られる冪等性を持つパイプラインを構築することで、データの重複を防ぐことができる。ユニークなレコード識別子に基づくUPSERTデータベース操作を利用すれば、ポッドの再スケジュール時にタスクが再実行されても冗長なエントリが作成されることはない。
大規模なバッチ処理や推論においては、障害管理のためにワークキューの疎結合化が不可欠である。静的ファイルで進捗を追跡するモノリシックなスクリプトではなく、Pub/Subのようなメッセージブローカーを活用してタスクを分散させるのが望ましい。ワーカーポッドはキューから個別のメッセージを取得し、処理が安全に完了した後にのみ通知(ACK)を送る。ACKが発行される前にノードがプリエンプト(強制終了)されても、メッセージはキュー内に残り、別のポッドが処理を引き継ぐためデータ損失は発生しない。これらのアーキテクチャ戦略により、ユーザーは計算容量の未確約利用に伴う大幅なコスト削減と、重要なAIタスクの運用信頼性の維持を両立できる。