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

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

最終更新日:Jul 22, 2024

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

背景情報

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

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

手順

  1. 手順1: フォールトトレランスモニタリングの追加パラメーターの設定

    パラメーターの説明とサンプル設定を参照して、ビジネス要件に基づいてフォールトトレランスモニタリングの追加パラメーターを設定します。

  2. 手順2: フォールトトレランスモニタリングの有効化と設定

    DLCジョブを送信するときに、Platform for AI (PAI) コンソールまたはAIMaster SDKを使用して、フォールトトレランスモニタリング機能を有効化および設定します。

  3. 手順3: 拡張フォールトトレランスモニタリングの設定

    前の手順で設定がビジネス要件を満たさない場合は、AIMaster SDKを使用して、拡張されたフォールトトレランスモニタリングを設定し、カスタムキーワードを追加できます。 カスタムキーワードを追加すると、AIMasterは障害のあるノードのログを自動的にスキャンし、ログにカスタムキーワードと一致する情報が含まれている場合はフォールトトレランスをトリガーします。 拡張フォールトトレランスモニタリングは、フォールトトレランスがトリガーされたときにも通知を送信します。

ステップ1: フォールトトレランスモニタリングの追加パラメータの設定

次のセクションを参照して、設定する追加のパラメーターを決定します。 後続の手順でフォールトトレランスモニタリング機能を有効にすると、ビジネス要件に基づいて [その他の設定] フィールドでこれらの追加パラメーターを指定できます。

パラメータ説明

次の表に、フォールトトレランスモニタリング用に設定できる追加パラメーターを示します。

カテゴリ

設定

パラメーター

説明

デフォルト値

一般的な設定

ジョブの種類

-- job-execution-mode

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

  • 同期: 同期ジョブ。

  • Async: 非同期ジョブ。

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

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

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

Sync

ジョブの再起動

-- enable-job-restart

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

False

-- max-num-of-job-restart

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

3

ランタイム設定

説明

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

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

-- enable-job-hang-detection

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

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

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

False

-- 仕事ハング間隔

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

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

1800

終了ジョブのハング検出

-- enable-job-exit-hang-detection

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

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

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

False

-- 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.pngその他の設定フィールドの設定方法の詳細については、このトピックの「手順1: フォールトトレランスモニタリングの追加パラメーターの設定」を参照してください。

DLC SDKを使用する

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

  • DLC SDK for Pythonの使用

    サンプルコード:

    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のホイールパッケージをインストールする必要があります。 詳細については、このトピックの「FAQ」セクションを参照してください。

aimasterからjmとしてjob_monitorをインポートする

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 temporally, only for func scope
def test():
    ...

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

よくある質問

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