すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:AIMaster: 弾力的な自動フォールトトレランスエンジン

最終更新日:Nov 11, 2025

このトピックでは、AIMaster に基づいて DLC が提供するフォールトトレランスモニタリング機能の使用方法について説明します。

背景情報

ディープラーニングは広く使用されています。モデルとデータがスケールアップするにつれて、分散トレーニングが一般的な手法となっています。ジョブインスタンスの数が増えると、ソフトウェアスタックやハードウェア環境の例外によってジョブが失敗する可能性があります。

大規模な分散ディープラーニングジョブの安定した運用を保証するために、DLC は AIMaster ベースのフォールトトレランスモニタリングを提供します。AIMaster はジョブレベルのコンポーネントです。このモニタリングを有効にすると、AIMaster インスタンスがジョブの他のインスタンスと並行して実行され、ジョブのモニタリング、フォールトトレランス評価、およびリソースコントロールを提供します。

制限事項

現在、AIMaster は PyTorch、MPI、TensorFlow、および ElasticBatch のフレームワークをサポートしています。

ステップ 1: フォールトトレランスモニタリングパラメーターを設定する

このセクションでは、フォールトトレランスモニタリングのすべてのパラメーターについて説明します。一般的な構成例を参照して、設定を計画できます。この機能を有効にすると、必要に応じてこれらのパラメーターを [その他の構成] セクションで設定できます。

パラメータの説明

カテゴリ

特徴

パラメーター

説明

デフォルト値

一般構成

ジョブ実行タイプ

--job-execution-mode

ジョブの実行タイプを設定します。有効な値:

  • Sync: 同期ジョブ。

  • Async: 非同期ジョブ。

リトライ可能なエラーに対するフォールトトレランスの動作は、ジョブのタイプによって異なります:

  • 同期ジョブ: ジョブ全体が再起動します。

  • 非同期ジョブ: 通常、失敗したインスタンスのみが再起動します。

Sync

ジョブの再起動設定

--enable-job-restart

フォールトトレランス条件が満たされた場合、またはランタイム例外が検出された場合にジョブを再起動できるかどうかを指定します。有効な値:

  • False: ジョブを再起動しません。

  • True: ジョブを再起動します。

False

--max-num-of-job-restart

ジョブが再起動できる最大回数。この回数を超えると、AIMaster はジョブを失敗としてマークします。

3

ランタイム構成

説明

これは、実行に失敗するインスタンスがないシナリオに適用されます。

ハングしたタスクの異常検出

--enable-job-hang-detection

実行中のジョブのハング検出を有効にするかどうかを指定します。この機能は同期ジョブのみをサポートします。有効な値:

  • False: 機能を無効にします。

  • True: 機能を有効にします。指定された時間内にすべてのインスタンスの stdout および stderr ログが更新されない場合、ジョブは再起動します。

False

--job-hang-interval

AIMaster がハングしたと見なす前にジョブが一時停止できる秒単位の時間。正の整数である必要があります。

一時停止がこの値を超えると、AIMaster はジョブを異常としてフラグを立て、再起動します。

1800

--enable-c4d-hang-detection

Calibrating Collective Communication over Converged ethernet - Diagnosis (C4D) 検出を有効にして、ジョブのハングを引き起こす遅いノードや障害のあるノードを迅速に診断および特定するかどうかを指定します。

説明

このパラメーターは、--enable-job-hang-detection も有効になっている場合にのみ有効です。

False

終了中のジョブのハング検出

--enable-job-exit-hang-detection

ジョブが終了しようとしているときにハング検出を有効にするかどうかを指定します。この機能は同期ジョブのみをサポートします。有効な値:

  • False: 機能を無効にします。

  • True: 機能を有効にします。いずれかのインスタンスが正常に終了しても、指定された時間内にジョブが終了しない場合、ジョブは再起動します。

False

--job-exit-hang-interval

ジョブが終了中に一時停止できる秒単位の時間。正の整数である必要があります。

一時停止がこの値を超えると、ジョブは異常としてマークされ、再起動します。

600

フォールトトレランス構成

説明

これは、インスタンスの実行が失敗するシナリオに適用されます。

フォールトトレランスポリシー

--fault-tolerant-policy

フォールトトレランスポリシー。有効な値:

  • OnFailure: ジョブ例外が発生した場合:

    • 非同期ジョブの場合、AIMaster は失敗したインスタンスを無条件で再起動します。

    • 同期ジョブの場合、AIMaster はジョブを無条件で再起動します。

  • ExitCodeAndErrorMsg: ジョブ例外が発生した場合、システムは失敗したインスタンスの終了コードとエラーログを評価します。詳細については、「ステップ 3: 高度なフォールトトレランスモニタリング機能を設定する」をご参照ください。リトライ条件が満たされた場合:

    • 非同期ジョブの場合、失敗したインスタンスが再起動されます。

    • 同期ジョブの場合、ジョブが再起動されます。

  • Never: 何も操作は行われません。AIMaster はジョブを失敗としてマークします。

ExitCodeAndErrorMsg

同じエラーの最大発生回数

--max-num-of-same-error

単一のインスタンスで同じエラーが発生できる最大回数。

エラーカウントがこの値を超えると、AIMaster はジョブを失敗としてマークします。

10

最大フォールトトレランス率

--max-tolerated-failure-rate

許容される最大失敗率。失敗したインスタンスの割合がこの値を超えると、AIMaster はジョブを失敗としてマークします。

デフォルト値の -1 はこの機能を無効にします。たとえば、値 0.3 は、ワーカーの 30% 以上でエラーが発生した場合にジョブが失敗としてマークされることを意味します。

-1

サンプル構成

次の例は、さまざまなトレーニングジョブの一般的なパラメーター構成を示しています。

  • 同期トレーニングジョブ (PyTorch で一般的)

    インスタンスが失敗し、フォールトトレランス条件を満たした場合にジョブを再起動します。

    --job-execution-mode=Sync --enable-job-restart=True --max-num-of-job-restart=3 --fault-tolerant-policy=ExitCodeAndErrorMsg
  • 非同期トレーニングジョブ (TensorFlow ジョブで一般的)

    リトライ可能なエラーの場合、失敗したワーカーインスタンスのみを再起動します。デフォルトでは、PS または Chief インスタンスが失敗した場合、ジョブは再起動しません。ジョブの再起動を有効にするには、--enable-job-restartTrue に設定します。

    --job-execution-mode=Async --fault-tolerant-policy=OnFailure
  • オフライン推論ジョブ (ElasticBatch ジョブで一般的)

    インスタンスは独立しており、非同期ジョブに似ています。インスタンスが失敗すると、AIMaster はそのインスタンスのみを再起動します。

    --job-execution-mode=Async --fault-tolerant-policy=OnFailure

ステップ 2: フォールトトレランスモニタリングを有効にする

DLC ジョブを送信する際に、コンソールまたは SDK を使用してフォールトトレランスモニタリングを有効にできます。

コンソールでフォールトトレランスモニタリングを有効にする

コンソールで DLC トレーニングジョブを送信するときは、[フォールトトレランスと診断] セクションに移動し、[自動フォールトトレランス] をオンにして、追加のパラメーターを設定します。詳細については、「トレーニングジョブの作成」をご参照ください。その後、DLC は AIMaster ロールを開始して、ジョブをエンドツーエンドで監視し、エラーを処理します。

image

詳細は次のとおりです:

  • 追加のパラメーターは [その他の構成] テキストボックスで設定できます。パラメーターの詳細については、「ステップ 1: フォールトトレランスモニタリングパラメーターを設定する」をご参照ください。

  • [ハング検出] を有効にすると、[C4D 検出] 機能を有効にできます。C4D は、LLM トレーニングにおける遅いノードやハングを特定するための Alibaba Cloud の診断ツールです。詳細については、「C4D の使用」をご参照ください。

    説明
    • C4D は ACCL (Alibaba Cloud 高性能集合通信ライブラリ) に依存します。ACCL がインストールされていることを確認してください。詳細については、「ACCL: Alibaba Cloud 高性能集合通信ライブラリ」をご参照ください。

    • 現在、C4D 検出は、Lingjun AI Computing Service リソースを使用する DLC ジョブでのみ利用できます。

DLC SDK を使用してフォールトトレランスモニタリングを有効にする

  • Go SDK を使用する

    Go SDK を使用してジョブを送信するときに、フォールトトレランスモニタリングを有効にします。

    createJobRequest := &client.CreateJobRequest{}
    settings := &client.JobSettings{
        EnableErrorMonitoringInAIMaster: tea.Bool(true),
        ErrorMonitoringArgs: tea.String("--job-execution-mode=Sync --enable-job-restart=True --enable-job-hang-detection=True --job-hang-interval=3600"),
    }
    createJobRequest.SetSettings(settings)

    パラメータ:

    • EnableErrorMonitoringInAIMaster: フォールトトレランスモニタリング機能を有効にするかどうかを指定します。

    • ErrorMonitoringArgs: フォールトトレランスモニタリングの追加パラメーター。

  • Python SDK を使用する

    Python SDK を使用してジョブを送信するときに、フォールトトレランスモニタリングを有効にします。

    from alibabacloud_pai_dlc20201203.models import CreateJobRequest, JobSettings
    
    settings = JobSettings(
        enable_error_monitoring_in_aimaster = True,
        error_monitoring_args = "--job-execution-mode=Sync --enable-job-restart=True --enable-job-hang-detection=True --job-hang-interval=30"
    )
    create_job_req = CreateJobRequest(
        ...
        settings = settings,
    )

    ここで:

    • enable_error_monitoring_in_aimaster: フォールトトレランスモニタリング機能を有効にするかどうかを指定します。

    • error_monitoring_args: フォールトトレランスモニタリングの追加パラメーター。

ステップ 3: 高度なフォールトトレランスモニタリング機能を設定する

これらの高度な機能を使用して、ジョブのフォールトトレランスモニタリングをカスタマイズします。

フォールトトレランス通知を設定する

ジョブのフォールトトレランスモニタリングを有効にした後、フォールトトレランスイベントの通知を受け取るには、[ワークスペース詳細] ページに移動します。[ワークスペース構成] > [イベント通知構成] を選択します。次に、[イベントルールの作成] をクリックし、イベントタイプを [DLC ジョブ] > [自動フォールトトレランス] に設定します。詳細については、「ワークスペースのイベントセンター」をご参照ください。

トレーニングジョブが NaN 損失などの例外に遭遇した場合、コード内で AIMaster SDK を使用してカスタム通知メッセージを送信できます:

説明

この機能を使用するには、AIMaster wheel パッケージをインストールする必要があります。詳細については、「よくある質問」をご参照ください。

from aimaster import job_monitor as jm

job_monitor_client = jm.Monitor(config=jm.PyTorchConfig())

...

if loss == Nan and rank == 0:
  st = job_monitor_client.send_custom_message(content="The training loss of the job is NaN.")
  if not st.ok():
      print('failed to send message, error %s' % st.to_string()) # メッセージの送信に失敗しました、エラー %s

カスタムフォールトトレランスキーワードを設定する

フォールトトレランスモニタリングには、一般的なリトライ可能なエラーに対する組み込みの検出機能があります。カスタムキーワードを定義することもできます。失敗したインスタンスのログにこれらのキーワードのいずれかが含まれている場合、AIMaster はそのエラーをリトライ可能として扱います。モニタリングモジュールは、失敗したインスタンスのログの末尾をスキャンしてこれらのキーワードを見つけます。

説明

フォールトトレランスポリシーを ExitCodeAndErrorMsg に設定します。

  • PyTorch ジョブのカスタムフォールトトレランスキーワードを設定する例

    from aimaster import job_monitor as jm
    
    jm_config_params = {}
    jm_config = jm.PyTorchConfig(**jm_config_params)
    monitor = jm.Monitor(config=jm_config)
    monitor.set_retryable_errors(["connect timeout", "error_yyy", "error_zzz"])

    monitor.set_retryable_errors で設定されたパラメーターは、カスタムフォールトトレランスキーワードです。

  • TensorFlow ジョブのカスタムフォールトトレランスキーワードを設定する例

    from aimaster import job_monitor as jm
    
    jm_config_params = {}
    jm_config = jm.TFConfig(**jm_config_params)
    monitor = jm.Monitor(config=jm_config)
    monitor.set_retryable_errors(["connect timeout", "error_yyy", "error_zzz"])

段階的なジョブハング検出を設定する

デフォルトでは、ハング検出設定はジョブ全体に適用されます。ただし、ジョブは段階的に実行されます。たとえば、初期化中、ノードが通信を確立するのに時間がかかる場合がありますが、トレーニング中はログの更新がより頻繁になります。トレーニングプロセス中のハングをより速く検出するために、DLC は段階的なハング検出を提供しており、これにより、異なる段階に対して異なる検出間隔を設定できます。

monitor.reset_config(jm_config_params)

# 例:
#     monitor.reset_config(job_hang_interval=10)
#     または
#     config_params = {"job_hang_interval": 10, }
#     monitor.reset_config(**config_params)

以下は、PyTorch ジョブの段階的なハング検出の例です。

import torch
import torch.distributed as dist
from aimaster import job_monitor as jm

jm_config_params = {
    "job_hang_interval": 1800 # グローバルな 30 分間の検出。
}
jm_config = jm.PyTorchConfig(**jm_config_params)
monitor = jm.Monitor(config=jm_config)

dist.init_process_group('nccl')

...

# aimaster sdk にこれらの 2 つの関数を実装します
# ユーザーは自分の関数にアノテーションを追加するだけです
def reset_hang_detect(hang_seconds):
    jm_config_params = {
        "job_hang_interval": hang_seconds
    }
    monitor.reset_config(**jm_config_params)

def hang_detect(interval):
    reset_hang_detect(interval)
    ...

@hang_detect(180) # ハング検出を 3 分にリセットします、関数スコープのみ
def train():
    ...

@hang_detect(-1) # ハング検出を一時的に無効にします、関数スコープのみ
def test():
    ...

for epoch in range(0, 100):
    train(epoch)
    test(epoch)
    self.scheduler.step()
                            

C4D の使用

C4D は、大規模モデルトレーニングにおける遅いノードやハングを診断するための Alibaba Cloud 独自のツールです。C4D は ACCL に依存します。ACCL がインストールされていることを確認してください。詳細については、「ACCL: Alibaba Cloud 高性能集合通信ライブラリ」をご参照ください。現在、DLC ジョブに Lingjun リソースを選択した場合に C4D 検出機能を使用できます。

機能概要

C4D はすべてのノードからステータス情報を集約して、ノードが通信レイヤーまたは他の場所に問題を抱えているかどうかを判断します。次の図は、システムアーキテクチャーを示しています。

パラメータの説明

C4D 検出機能を有効にすると、[その他の構成] テキストボックスで次のパラメーターを設定できます:

パラメーター

説明

値の例

--c4d-log-level

C4D 出力ログレベルを設定します。有効な値:

  • Info

  • Warning (デフォルト)

  • Error

デフォルト値は Warning で、Warning および Error レベルのログを出力します。通常の操作ではデフォルト値を使用することをお勧めします。パフォーマンスの問題をトラブルシューティングするには、Info に設定できます。

--c4d-log-level=Info

--c4d-common-envs

C4D 実行の環境変数を設定します。フォーマット k1=v1,k2=v2 を使用します。複数の変数はカンマ (,) で区切ります。値はデフォルトで空です。利用可能な環境変数には以下が含まれます:

  • C4D_HANG_TIMEOUT: Warning がトリガーされるまでのジョブハングの期間 (マイクロ秒)。デフォルト: 10000000 (10 秒)。

  • C4D_HANG_TIMES: Error ログが記録されるまでのジョブハングの発生回数。これにより、自動ノード隔離ロジックがトリガーされます。これは C4D_HANG_TIMEOUT と共に使用されます。デフォルト: 18 (デフォルトでは、3 分間のハングで自動ノード隔離がトリガーされます)。

  • C4D_CONN_BW_CHECK_PERIOD: 帯域幅チェックの間隔。デフォルト: 10 秒。

  • C4D_RUNTIME_LOG_LEVEL: C4D ランタイムログレベル。有効な値:

    • TRACE

    • DEBUG

    • INFO (デフォルト)

    • WARNING

    • ERROR

    • FATAL

  • C4D_ENABLE_STATS_OUTPUT: C4D 関連の統計情報を出力するかどうかを指定します。有効な値:

    • TRUE

    • FALSE (デフォルト)

--c4d-common-envs=C4D_HANG_TIMEOUT=1,C4D_HANG_TIMES=2

Error レベルのログの場合、AIMaster は対応するノードを自動的に隔離し、ジョブを再起動します。各ログレベルの処理ロジックは次のとおりです:

エラーレベル

エラーの説明

操作

Error

デフォルトでは、通信レイヤーのジョブハングが 3 分を超えるとジョブは失敗します。このデフォルトは、C4D_HANG_TIMEOUT および C4D_HANG_TIMES パラメーターを設定することで変更できます。

AIMaster はログで報告されたノードを直接隔離します。

Warn

デフォルトでは、通信レイヤーのジョブハングが 10 秒を超えるとパフォーマンスに影響しますが、ジョブは失敗しません。このデフォルトは、C4D_HANG_TIMEOUT パラメーターを設定することで変更できます。

ログ内のノードは自動的に隔離されず、手動での確認が必要です。

通信レイヤー以外のジョブハングが 10 秒を超えると、ジョブが失敗する可能性があります。

ログ内のノードは自動的に隔離されず、手動での確認が必要です。

Info

通信レイヤーの遅延と非通信レイヤーの遅延。

これらの診断ログは主にパフォーマンスの問題に関するものであり、手動での確認が必要です。

DLC ジョブの実行が遅い、またはハングしていることがわかった場合は、DLC ジョブリストに移動し、ジョブ名をクリックして ジョブ詳細ページ に移動します。下部にある インスタンス セクションで、AIMaster ノードのログを表示して C4D 診断結果を確認します。診断結果の詳細については、「診断結果の例」をご参照ください。5bc5051b1abae830588522ab7a50b23f

診断結果の例

  • RankCommHang: ノードの通信レイヤーでのハングを示します。image

  • RankNonCommHang: 通信レイヤー外 (例: 計算プロセス内) のノードでのハングを示します。image

  • RankCommSlow: ノードの通信レイヤーでの遅延を示します。image

  • RankNonCommSlow: 通信レイヤー外のノードでの遅延を示します。image

FAQ

特定の Python バージョン (3.6、3.8、または 3.10) 用に AIMaster SDK をインストールするにはどうすればよいですか?

Python 環境に一致する wheel (.whl) ファイルの直接 URL を使用して、pip を使用して AIMaster SDK をインストールします。Python のバージョンに対応するコマンドを選択してください:

# Python 3.6
pip install -U http://odps-release.cn-hangzhou.oss.aliyun-inc.com/aimaster/pai_aimaster-1.2.1-cp36-cp36m-linux_x86_64.whl

# Python 3.8
pip install -U http://odps-release.cn-hangzhou.oss.aliyun-inc.com/aimaster/pai_aimaster-1.2.1-cp38-cp38-linux_x86_64.whl

# Python 3.10
pip install -U http://odps-release.cn-hangzhou.oss.aliyun-inc.com/aimaster/pai_aimaster-1.2.1-cp310-cp310-linux_x86_64.whl