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

Platform For AI:AIMaster: 弾性フォールトトレランスエンジン

最終更新日:Nov 12, 2024

Deep Learning Container (DLC) は、AIMasterによって強化されたフォールトトレランス監視機能を提供します。 このトピックでは、機能を有効化および設定する方法について説明します。

背景情報

モデルとデータの規模が大きくなるにつれて、ディープラーニングのジョブは頻繁に分散して実行されます。 増加したインスタンスによってディープラーニングジョブが実行されると、基になるソフトウェアスタックまたはハードウェア環境で例外が発生することがあります。

大規模なディープラーニングのジョブが分散して確実に実行されるようにするため、DLCは、AIMasterによって権限を与えられたフォールトトレランスモニタリング機能を提供します。 AIMasterは仕事レベルのコンポーネントです。 DLCジョブにAIMasterを使用すると、AIMasterインスタンスが起動され、他のジョブインスタンスと同時に実行されます。 AIMasterインスタンスはジョブの進行状況を監視し、フォールトトレランスとリソース割り当てを管理します。

ステップ1: フォールトトレランス監視パラメータの設定

次の表に、フォールトトレランスモニタリング機能がサポートするすべてのパラメーターを示します。 ジョブのフォールトトレランスモニタリングを計画するには、[Sample of Common Parameters] セクションを参照してください。 後続の手順でフォールトトレランスモニタリング機能を有効にすると、ビジネス要件に基づいて [その他の設定] フィールドでこれらのパラメーターを指定できます。

すべてのパラメータ

フォールトトレランスモニタリングは、次のパラメーターをサポートしています。

カテゴリ

設定

パラメーター

説明

デフォルト値

一般的な設定

ジョブの種類

-- job-execution-mode

DLCジョブのタイプ。 有効な値:

  • 同期: 同期ジョブ。

  • Async: 非同期ジョブ。

フォールトトレランスポリシーは、ジョブの種類によって異なります。 設定例:

  • 再起動可能なエラーが発生した場合、同期ジョブは完全な再起動が必要です。

  • 再試行可能なエラーが発生した場合、非同期ジョブは失敗したインスタンスのみを再起動する必要があります。

同期

ジョブの再起動

-- enable-job-restart

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

-- max-num-of-job-restart

ジョブを再起動する最大試行回数。 この制限を超えると、ジョブは失敗したと報告されます。

3

ランタイム設定

説明

この設定は、ジョブのすべてのインスタンスが期待どおりに実行された場合にのみ有効です。

実行中のジョブのハング検出

-- enable-job-hang-detection

ジョブの実行中にハング検出を有効にするかどうかを指定します。 このパラメーターは、同期ジョブに対してのみ有効です。 有効な値:

  • False: ハング検出を無効にします。

  • True: ハング検出を有効にします。 -- job-hang-intervalパラメーターに指定した期間内にすべてのインスタンスの標準出力 (STDOUT) および標準エラー (STDERR) ログが更新されない場合、ジョブはハングと報告され、再起動されます。

-- 仕事ハング間隔

ジョブが応答しないことができる最大期間。 有効値: 正の整数。 単位は秒です。

ジョブがこの値より長い期間応答しないままである場合、ジョブはハングとして報告され、再起動されます。

1800

-- enable-c4d-hang検出

コンバージド・イーサネット診断 (C4D) 検出機能を有効にするかどうかを指定して、ジョブ実行中にジョブのハングを引き起こす低速ノードまたは障害ノードを迅速に診断および識別します。

説明

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

終了ジョブのハング検出

-- enable-job-exit-hang-detection

ジョブの終了時にハング検出を有効にするかどうかを指定します。 このパラメーターは、同期ジョブに対してのみ有効です。 有効な値:

  • False: ハング検出を無効にします。

  • True: ハング検出を有効にします。 インスタンスが期待どおりに実行されても、対応するジョブが -- job-exit-hang-intervalパラメーターに指定した期間内に終了しない場合、ジョブはハングとして報告され、再起動されます。

-- job-exit-hang-interval

ジョブが終了しているときにジョブが無応答である可能性がある最大期間。 有効値: 正の整数。 単位は秒です。

この期間内にジョブが終了しなかった場合、ジョブはハングと報告され、再起動されます。

600

フォールトトレランスの設定

説明

この設定は、ジョブのインスタンスの実行に失敗した場合にのみ有効になります。

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

-- fault-tolerant-policy

有効な値:

  • OnFailure:

    • 非同期ジョブでエラーが発生した場合、失敗したインスタンスは無条件に再起動されます。

    • 同期ジョブでエラーが発生した場合、ジョブは無条件に再起動されます。

  • ExitCodeAndErrorMsg: 失敗したインスタンスの終了コードとエラーログに基づいて、再試行条件が満たされているかどうかを確認します。 詳細については、「手順3: 拡張障害耐性モニタリングの設定」をご参照ください。

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

    • リトライ条件が満たされ、ジョブが同期ジョブである場合、ジョブは再起動されます。

  • Never: ジョブを再起動せずにジョブを失敗として報告します。

ExitCodeAndErrorMsg

最大エラー発生

-- max-num-of-same-error

1つのインスタンスでエラーが発生する可能性のある最大回数。

この値を超える回数エラーが発生した場合、ジョブは失敗と報告されます。

10

最大故障トレランス率

-- max-tolerated-failure-rate

失敗したインスタンスの最大割合。 失敗したインスタンスの割合がこの値を超えると、ジョブは失敗と報告されます。

デフォルト値: -1。パラメーターが無効であることを示します。 たとえば、値0.3は、30% を超えるジョブインスタンスが失敗した場合、ジョブが失敗したと報告されることを示します。

-1

共通パラメータのサンプル

このセクションでは、さまざまな種類のDLCジョブの一般的な設定の例を示します。

  • 同期トレーニングジョブ (PyTorchジョブなど)

    ジョブインスタンスが予期せず終了し、終了コードまたはエラーログがプリエンプションなどのフォールトトレランス条件を満たしている場合、ジョブは再起動されます。

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

    ジョブのワーカーインスタンスで再試行可能なエラーが発生した場合、ワーカーインスタンスは再起動されます。 パラメーターサーバーまたはチーフインスタンスでエラーが発生した場合、ジョブの再起動は許可されません。 上記のシナリオでジョブを再起動するには、-- enable-job-restartパラメーターをTrueに設定します。

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

    オフライン推論ジョブのインスタンスは互いに独立しており、非同期ジョブに似ています。 ジョブインスタンスが予期せず終了した場合、インスタンスのみが再起動されます。

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

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

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

PAIコンソールの使用

PAIコンソールでDLCジョブを作成する場合、[障害許容範囲と診断] セクションの [自動障害許容範囲] をオンにして、パラメーターを設定できます。 詳細については、「トレーニングジョブの送信」をご参照ください。 パラメータを設定した後、DLCジョブを実行するとAIMasterインスタンスが起動されます。 AIMasterインスタンスは、ジョブの進行状況を監視し、エラー発生時のフォールトトレランスを管理します。

image

パネルで:

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

  • ハンギング検出を有効にすると、C4D検出機能も有効にできます。 C4Dは、Alibaba Cloudが開発した、モデルトレーニング中の遅いジョブやハングしたジョブを診断するためのツールです。 それは多くのモデルトレーニングの仕事の間に問題を見つけるのを助けました。 C4Dのコア機能とパラメーターの詳細については、「C4Dの使用」をご参照ください。

    説明
    • C4Dを使用する前に、Alibaba Cloudによって開発された高性能集団通信ライブラリであるACCLをインストールする必要があります。 詳細については、「ACCL: high-performance collective communication library developed by Alibaba Cloud」をご参照ください。

    • C4D検出機能は、DLCジョブがLingjun AI Computing Serviceリソースを使用する場合に使用できます。

DLC SDK使用

  • SDK for Go

    フォールトトレランスを有効にするサンプルコード:

    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: フォールトトレランスモニタリング機能用に設定できる追加パラメーター。

  • SDK for Python

    フォールトトレランスを有効にするサンプルコード:

    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ジョブ] > [自動フォールトトレランス] を選択します。 詳細については、「ワークスペース通知」をご参照ください。

AIMaster SDKを使用して、損失関数がNaNを返すときなど、エラーが発生したときにカスタム通知を設定することもできます。 サンプルコード:

説明

カスタム通知を設定するには、AIMasterのホイールパッケージをインストールする必要があります。 詳細は、「よくある質問」をご参照ください。

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 loss function returns NaN")
  if not st.ok():
      print('failed to send message, error %s' % st.to_string())

カスタムキーワード

フォールトトレランス監視機能は、一般的な再試行可能なエラーを自動的に検出できる組み込みモジュールを提供します。 エラーログに特定のキーワードに一致する情報が含まれている場合にフォールトトレランスをトリガーする場合は、次の方法を使用してカスタムキーワードを設定できます。 カスタムキーワードを設定した後、モジュールは失敗したインスタンスの末尾ログをスキャンして、カスタムキーワードに一致するキー情報を探します。

説明

-- fault-tolerant-policyパラメーターを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)

# Example:
#     monitor.reset_config(job_hang_interval=10)
#     or
#     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 # Configure a global hang detection policy. This value specifies that the maximum duration during which the job can be non-responsive is 30 minutes.
}
jm_config = jm.PyTorchConfig(**jm_config_params)
monitor = jm.Monitor(config=jm_config)

dist.init_process_group('nccl')

...

# impl these two funcs in aimaster sdk
# user just need to add annotations to their func
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) # reset hang detect to 3 min, only for func scope
def train():
    ...

@hang_detect(-1) # disable hang detect temperally, only for func scope
def test():
    ...

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

C4Dの使用

コンバージド・イーサネットを介した集団通信のキャリブレーション-診断 (C4D) は、大規模なモデルトレーニングでの低速またはハングしたジョブに対処するために設計されたAlibaba Cloudによる診断ツールです。 C4Dを使用する前に、Alibaba Cloudによって開発された高性能集団通信ライブラリであるACCLをインストールする必要があります。 詳細については、「ACCL: high-performance collective communication library developed by Alibaba Cloud」をご参照ください。C4D検出機能は、DLCジョブがLingjun AI Computing Serviceリソースを使用する場合に使用できます。

概要

C4Dは、集団通信中にすべてのノードからステータスデータを収集して、潜在的な通信および非通信の問題を分析します。 次の図にシステムアーキテクチャを示します。

image

すべてのパラメータ

C4D検出機能を有効にした後、[その他の設定] テキストボックスで次のパラメーターを設定できます。

パラメーター

説明

-- c4d-logレベル

C4Dログレベル。 オプション:

  • 情報

  • 警告

  • エラー

デフォルト値は警告で、警告レベルとエラーレベルでログを出力します。 ルーチン操作の場合は、デフォルト値を使用することを推奨します。 パフォーマンスのトラブルシューティングでは、パラメーターをInfoに設定できます。

-- c4d-log-level=情報

-- c4d-common-envs

C4D実行環境変数。 k1=v1,k2=v2の形式で変数を設定します。コンマで複数の変数を区切ります。 デフォルトでは、このパラメータは空のままです。 有効な値:

  • C4D_HANG_TIMEOUT: 警告をトリガーする前にジョブを停止できる時間をマイクロ秒単位で指定します。 デフォルト値: 10000000。10秒に相当します。

  • C4D_HANG_TIMES: エラーを記録し、ノードの自動分離を開始するために必要なジョブハング発生のしきい値を指定します。 C4D_HANG_TIMEOUTと連携します。 デフォルト値: 18。これは、ノードの分離をトリガーする前に3分のハングタイムを意味します。

  • C4D_CONN_BW_CHECK_PERIOD: 帯域幅チェック間隔。 デフォルト値は 10 です。 単位は秒です。

  • C4D_RUNTIME_LOG_LEVEL: 実行時のC4Dのログレベル。 有効な値:

    • トレース

    • デバッグ

    • INFO (デフォルト)

    • WARNING

    • ERROR

    • 致命的

  • C4D_ENABLE_STATS_OUTPUT: C4D-related統計を出力するかどうかを指定します。 有効な値:

    • TRUE

    • FALSE (デフォルト)

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

エラーレベルのログの場合、AIMasterは影響を受けるノードを自動的にブラックリストに登録し、ジョブを再起動します。 各レベルの処理ロジックを次の表に示します。

ログレベル

説明

Action

エラー

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

AIMasterは、ログに示されたノードを分離します。

警告

デフォルトでは、通信層のハング時間が10秒を超えると、パフォーマンスに影響を与えますが、障害は発生しません。 値を変更するには、C4D_HANG_TIMEOUTパラメーターを指定します。

ログ内のノードは自動的に分離されません。 手動確認が必要です。

10秒を超える非通信層ハング時間は、ジョブ失敗を引き起こす可能性がある。

ログ内のノードは自動的に分離されません。 手動確認が必要です。

情報

遅い通信と非通信レイヤー。

ログはパフォーマンスの問題であり、手動で確認する必要があります。

DLCジョブがスローまたはハング表示されている場合は、DLCジョブリストのジョブ名をクリックして、ジョブの詳細ページにアクセスします。 インスタンスセクションでは、C4D診断結果のAIMasterログを確認できます。 診断結果の詳細な分析については、「診断結果サンプル」をご参照ください。5bc5051b1abae830588522ab7a50b23f

診断結果サンプル

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

  • RankNonCommHang: 計算などの非通信レイヤーのハングを示します。image

  • RankCommSlow: ノードでの低速通信層の問題を示します。image

  • RankNonCommSlow: ノードでの低速非通信層の問題を示します。image

よくある質問

AIMaster SDKのインストール方法

ご使用のPythonバージョンと一致するホイールパッケージを使用して、AIMaster SDKをインストールします。

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

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

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