このページでは、トレーニング ジョブのライフサイクルの中におけるトレーニング クラスタの状態と、Vertex AI がトレーニング エラーを処理する方法について説明します。この情報を使用して、それに応じてトレーニング コードを適応させることができます。
トレーニング ジョブのライフサイクル
このセクションでは、Vertex AI がトレーニング ジョブのライフサイクルの中でワーカー VM を処理する方法について説明します。
新しいジョブをキューに入れる
CustomJob
または HyperparameterTuningJob
を作成すると、Vertex AI がジョブを実行するまで、そのジョブが JOB_STATE_QUEUED
状態のまま残ることがあります。通常、この状態は短い時間で終わりますが、Google Cloud プロジェクトにジョブのカスタム トレーニングの割り当てが残っていない場合、十分な割り当てになるまでジョブがキューに残ることがあります。
ワーカーを並行して起動する
トレーニング ジョブを開始すると、Vertex AI は短い期間内に可能な限り多くのワーカーのスケジュールを設定します。その結果、ワーカーは順番に起動するのではなく、並行して起動します。起動のレイテンシを短縮するため、Vertex AI は各ワーカーでコードが利用可能になり次第、コードの実行を開始します。すべてのワーカーが利用可能になると、Vertex AI は、ジョブの状態を JOB_STATE_RUNNING
に設定します。
ほとんどの場合、機械学習フレームワークが、並列に起動するワーカーを自動的に処理します。トレーニング コードで分散戦略を使用している場合、並列に起動するワーカーを処理するために手動による調整が必要となることがあります。詳しくは、TensorFlow と PyTorch における分散戦略をご覧ください。
トレーニング ジョブ中にワーカーを再起動する
トレーニング ジョブの実行中に、Vertex AI が同じホスト名を持つワーカープールからワーカーを再起動する場合があります。その理由としては、以下のことが考えられます。
- VM のメンテナンス: ワーカーを実行している VM が VM メンテナンスの対象になる場合、Vertex AI は別の VM でワーカーを再起動します。詳細については、VM メンテナンスのためのライブ マイグレーションをご覧ください。
ゼロ以外での終了: ワーカーがゼロ以外の終了コードで終了すると、Vertex AI は、そのワーカーを同じ VM 内ですぐに再起動します。
- ワーカーが一般的なエラーで停止すると、それは恒久的なエラーとして扱われ、Vertex AI によってジョブ全体がシャットダウンされます。Vertex AI がジョブ全体をシャットダウンする前にコンテナが再起動した場合、これらのコンテナは Cloud Logging にログを残すことがあります。
- 非恒久的なエラー(一般的なエラーに記載がないエラー)でワーカーが停止すると、Vertex AI は、再起動したワーカーが動作を継続できるようにします。これにより、ワーカーごとに最大 5 回再起動できるようになります。5 回再起動した後、ワーカーが再び停止すると、Vertex AI はジョブ全体を最大 3 回再試行した後、ジョブ全体を異常終了とします。
トレーニング コード内でワーカーの再起動を処理するには、トレーニング中にチェックポイントを定期的に保存し、ワーカーの再起動時にチェックポイントから復元できるようにします。トレーニングに 4 時間以上かかると予想される場合は、少なくとも 4 時間に 1 回、チェックポイントを保存することをおすすめします。TensorFlow と PyTorch でトレーニング チェックポイントを使用する方法を確認してください。
ジョブの正常終了
トレーニング ジョブが正常に完了すると、プライマリ レプリカが終了コード 0 で終了します。その時点で、Vertex AI は実行中の他のワーカーをすべてシャットダウンします。
Vertex AI によるトレーニング ジョブ エラーの処理方法
このセクションでは、Vertex AI が一般的なトレーニング ジョブ エラーと内部エラーを処理する方法について説明します。
ジョブが終了してから約 1 分後に、Vertex AI は終了コードに基づいて、トレーニング ジョブ オブジェクトにエラーコードを設定します。
一般的なエラーを処理する
次のいずれかの問題が発生した場合、Vertex AI はすべてのワーカーをシャットダウンします。
エラーの種類 | エラー メッセージ / ログ | 注 |
ユーザーコードの例外 | The replica REPLICA_NAME exited with a non-zero status of EXIT_CODE. Termination reason: REASON. | ジョブで一時的な終了コードが発生した場合、Vertex AI は、ジョブを 3 回まで再試行します。Vertex AI にジョブを再試行するよう求める一時的なエラーコードには、次のようなものがあります。
|
メモリ不足 | The replica REPLICA_NAME ran out of memory and exited with a non-zero status of EXIT_CODE. |
GKE は Vertex AI ノード上でメモリを予約します。最小マシンタイプ(n1-standard-4 など)の場合、Vertex AI システム エージェントは合計メモリの 40% まで使用できます。大規模な VM の場合、オーバーヘッドは比較的小さくなります。n1-standard マシンタイプに割り当て可能なメモリを比較します。 |
リージョンでの容量不足(Compute Engine の在庫切れ) | Resources are insufficient in region: REGION_NAME. 別のリージョンを試すか、別のアクセラレータを使用してください。 | 在庫切れは、選択した CPU または GPU の容量がリージョンでの Compute Engine の処理能力の上限に達した場合に発生します。これは、プロジェクトの割り当てとは関係ありません。この場合、Vertex AI は、ジョブを 3 回まで再試行します。 A2 VM と A3 VM で実行されるジョブの場合、Dynamic Workload Scheduler を使用すると、在庫切れエラーで失敗するのではなく、リクエストされた GPU リソースが使用可能になったときに実行されるジョブをスケジュールできます。詳細については、リソースの可用性に基づいてトレーニング ジョブをスケジュールするをご覧ください。 |
内部エラーを処理する
Vertex AI で内部エラーが発生した場合は、ジョブの再起動を 2 回試みます(合計 3 回試行)。その再起動にも失敗すると、Vertex AI は「Internal error occurred for the current attempt
」というメッセージで内部エラーを返します。