View a markdown version of this page

ハングジョブ検出 - Amazon SageMaker AI

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ハングジョブ検出

分散 Ray Train ジョブは、エラーを発生させずに停止する可能性があります。1 人のワーカーがサイレントに失敗し、他のすべてのワーカーが次の集合オペレーションでブロックし、無期限に待機します。GPUsモデルの重みがロードされたまま割り当てられますが、有用なコンピューティングは生成されません。エラーメッセージやクラッシュがないため、ジョブの進行状況を手動でチェックするまで、何時間もストールに気付かないことがよくあります。

HyperPod ハングジョブ検出は、クラスター全体で GPU 使用率パターンとトレーニングワーカーのアクティビティを継続的にモニタリングし、進行を停止したジョブを特定します。停止が検出されると、システムは数時間ではなく数分でそれを表示するため、ジョブを復旧したり、他の作業のために容量を解放したりできます。

仕組み

デフォルトでは、HyperPod のすべての Ray Train ワーカーは、コードを変更することなく、プラットフォームのデフォルトを使用してモニタリングされます。プラットフォームは GPU 使用率パターンをトレーニングワーカーの出力アクティビティと関連付けて、I/O またはチェックポイントを実行しているために停止しているジョブとアイドル状態のジョブを区別します。停止が検出されると、HyperPod Observability Grafana ダッシュボードと CloudWatch に通知が配信されます。詳細については、「検出イベントの表示」を参照してください。

デフォルトのアクションは通知です。HyperPod は検出イベントをログに記録しますが、ジョブは終了しません。自動復旧を有効にするには、次のセクションで説明するように、 cancelアクションを使用してカスタムルールを設定します。

カスタム検出ルールを設定すると、そのジョブのデフォルト検出が置き換えられます。カスタム設定で指定したアクションは、カスタムルールからのすべての検出に適用されます。デフォルト検出は、カスタムルールを設定しないジョブに対して引き続き実行されます。

カスタム検出ルールの設定

検出動作をより詳細に制御するには、設定可能なタイムアウトとアクションを使用してログパターンルールを定義できます。カスタムルールを使用すると、ドメイン固有の停止 (10 分間新しいトレーニングステップのログ行がないなど) またはエラー条件 (OOM など) を検出し、HyperPod がハングしたワーカーに通知するか、自動的にキャンセルするかを選択できます。

カスタム検出ルールを有効にするには、次の手順に従います。

  1. RayCluster マニフェストにホスト IP 環境変数を追加する

    RayCluster YAML workerGroupSpecsの headGroupSpecと の両方に次の環境変数を追加します。これにより、トレーニングコンテナ内で実行されている Python ライブラリがホストのジョブモニタリングサービスと通信できるようになります。

    spec: headGroupSpec: template: spec: containers: - name: ray-head env: - name: HYPERPOD_JMA_HOST valueFrom: fieldRef: fieldPath: status.hostIP workerGroupSpecs: - template: spec: containers: - name: ray-worker env: - name: HYPERPOD_JMA_HOST valueFrom: fieldRef: fieldPath: status.hostIP
    注記

    この環境変数は、カスタム検出ルールにのみ必要です。デフォルトの検出は、それなしで機能します。

  2. トレーニングコンテナイメージにツールキットライブラリをインストールする

    PyPI ウェブサイトからトレーニングコンテナイメージに toolkit-for-ray-on-sagemaker-ai パッケージを追加します。ライブラリは SageMaker Distribution イメージにプリインストールされています。

    pip install toolkit-for-ray-on-sagemaker-ai
  3. トレーニング関数にモニタリングを追加する

    有意義な作業を行う前に、トレーニング関数SageMakerLogMonitoring.start()内で を呼び出します。これにより、トレーニングの開始からモニタリングがアクティブになり、モデルのロード中または最初のフォワードパス中に発生するハングを検出できます。

    from toolkit_for_ray_on_sagemaker_ai.log_monitoring import ( SageMakerLogMonitoring, LogMonitorConfig, ) from ray.train import RunConfig, FailureConfig, ScalingConfig from ray.train.torch import TorchTrainer def train_func(): # Start monitoring BEFORE any meaningful work SageMakerLogMonitoring(config=LogMonitorConfig( enabled=True, rules=[ { "name": "training_progress", "type": "log_pattern", "enabled": True, "log_pattern": "(Epoch|Step|Iteration) \\d+", "timeout_minutes": 10, "start_timeout_minutes": 30, "stop_pattern": "Training complete", "fault_on_match": False, }, { "name": "oom_detection", "type": "log_pattern", "enabled": True, "log_pattern": "CUDA out of memory|OutOfMemoryError|OOM", "fault_on_match": True, }, ], action="cancel", )).start() # ... your training loop for epoch in range(num_epochs): print(f"Epoch {epoch}") # This output is what the rule monitors train_one_epoch(model, dataloader) print("Training complete") # Matches stop_pattern, deactivates the rule # Configure FailureConfig so Ray Train automatically restarts all workers # when the cancel action terminates a hung worker. trainer = TorchTrainer( train_func, scaling_config=ScalingConfig(num_workers=4, use_gpu=True), run_config=RunConfig( failure_config=FailureConfig(max_failures=3), ), )

    cancel アクションがハングワーカーを終了すると、Ray ドキュメントの Ray Train の FailureConfig はワーカーの障害を検出し、最後のチェックポイントからすべてのワーカーを再起動します。ジョブが完全に失敗するまでに必要な自動復旧の試行回数max_failuresに設定します。を使用しない場合FailureConfig、1 つのワーカー終了でジョブ全体が失敗します。

    Ray Train は、再起動時に最後に保存されたチェックポイントから復元するため、最新のチェックポイント以降の作業を超えてトレーニングの進行状況が失われることはありません。トレーニングコードが定期的にチェックポイントを保存する場合 (各エポック境界など)、ジョブは最後に保存された状態から自動的に再開されます。

ルールフィールド

フィールド Type 必須 説明
name 文字列 はい ルールの人間が読み取れる識別子。
type string はい [Rule type] (ルールタイプ) ログベースの検出log_patternに を使用します。
enabled ブール いいえ このルールがアクティブかどうか。デフォルトは false です。
log_pattern string はい ワーカー stdout に一致する正規表現パターン (RE2 構文、最大 256 文字)。
timeout_minutes float いいえ ハングを宣言するまでの連続したパターン一致間の最大分数。
start_timeout_minutes float いいえ 最初のパターン一致のジョブ開始からの最大分数。起動時間 (モデルのロード、データのダウンロード) を許可するのに役立ちます。このウィンドウ内にパターンが表示されない場合、ジョブはハングしたと見なされます。
stop_pattern string いいえ 一致時にこのルールを非アクティブ化する正規表現 (例: "Training complete")。
fault_on_match ブール いいえ の場合true、パターンが一致するとすぐにハングを宣言します。OOM などのエラーパターンには を使用します。の場合true、 timeout_minutesは必要ありません。
metric_evaluation_data_points int いいえ ハングを宣言する前に条件を確認する必要がある連続した評価サイクルの数。デフォルトは 1 です。

アクション

[アクション] 説明
notify CloudWatch と Grafana に検出イベントを出力しますが、自動アクションは実行しません。これがデフォルトです。
cancel ハングワーカープロセスを終了します。Ray Train の組み込み は、最後のチェックポイントからすべてのワーカーFailureConfigを再起動します。このアクションを使用するには、 で十分な再試行FailureConfigを使用して を設定しますRunConfig。

検出のオプトアウト

デフォルトの検出とカスタムルールの両方を含む、特定のジョブのすべてのハングジョブ検出を無効にするには:

from toolkit_for_ray_on_sagemaker_ai.log_monitoring import ( SageMakerLogMonitoring, LogMonitorConfig, ) def train_func(): SageMakerLogMonitoring(config=LogMonitorConfig(enabled=False)).start() # ... training continues with no monitoring

検出イベントの表示

ハングジョブが検出されると、イベントは次の場所に表示されます。

  • CloudWatch Logs: ロググループ /aws/sagemaker/Clusters/cluster-name/cluster-id、ログストリーム SageMakerHangJobDetectionEvents/instance-group-name/instance-id。を検索HANG_DETECTEDして検出イベントを検索します。

  • Grafana: HyperPod Observability アドオンがインストールされている場合、検出イベントはハングジョブ検出パネルの Ray Train ダッシュボードに表示されます。詳細については、「オブザーバビリティ」を参照してください。

各検出イベントには、ジョブ ID、検出をトリガーした証拠、および実行されたアクション (notify または ) が含まれますcancel。