Deep Learning Container (DLC) は、AIMasterによって強化されたフォールトトレランス監視機能を提供します。 このトピックでは、機能を有効化および設定する方法について説明します。
背景情報
モデルとデータの規模が大きくなるにつれて、ディープラーニングのジョブは頻繁に分散して実行されます。 増加したインスタンスによってディープラーニングジョブが実行されると、基になるソフトウェアスタックまたはハードウェア環境で例外が発生することがあります。
大規模なディープラーニングのジョブが分散して確実に実行されるようにするため、DLCは、AIMasterによって権限を与えられたフォールトトレランスモニタリング機能を提供します。 AIMasterは仕事レベルのコンポーネントです。 DLCジョブにAIMasterを使用すると、AIMasterインスタンスが起動され、他のジョブインスタンスと同時に実行されます。 AIMasterインスタンスはジョブの進行状況を監視し、フォールトトレランスとリソース割り当てを管理します。
ステップ1: フォールトトレランス監視パラメータの設定
次の表に、フォールトトレランスモニタリング機能がサポートするすべてのパラメーターを示します。 ジョブのフォールトトレランスモニタリングを計画するには、[Sample of Common Parameters] セクションを参照してください。 後続の手順でフォールトトレランスモニタリング機能を有効にすると、ビジネス要件に基づいて [その他の設定] フィールドでこれらのパラメーターを指定できます。
すべてのパラメータ
フォールトトレランスモニタリングは、次のパラメーターをサポートしています。
カテゴリ | 設定 | パラメーター | 説明 | デフォルト値 |
一般的な設定 | ジョブの種類 | -- job-execution-mode | DLCジョブのタイプ。 有効な値:
フォールトトレランスポリシーは、ジョブの種類によって異なります。 設定例:
| 同期 |
ジョブの再起動 | -- enable-job-restart | フォールトトレランス条件がトリガーされたとき、またはランタイム例外が検出されたときにジョブを再起動するかどうかを指定します。 有効な値:
| 偽 | |
-- max-num-of-job-restart | ジョブを再起動する最大試行回数。 この制限を超えると、ジョブは失敗したと報告されます。 | 3 | ||
ランタイム設定 説明 この設定は、ジョブのすべてのインスタンスが期待どおりに実行された場合にのみ有効です。 | 実行中のジョブのハング検出 | -- enable-job-hang-detection | ジョブの実行中にハング検出を有効にするかどうかを指定します。 このパラメーターは、同期ジョブに対してのみ有効です。 有効な値:
| 偽 |
-- 仕事ハング間隔 | ジョブが応答しないことができる最大期間。 有効値: 正の整数。 単位は秒です。 ジョブがこの値より長い期間応答しないままである場合、ジョブはハングとして報告され、再起動されます。 | 1800 | ||
-- enable-c4d-hang検出 | コンバージド・イーサネット診断 (C4D) 検出機能を有効にするかどうかを指定して、ジョブ実行中にジョブのハングを引き起こす低速ノードまたは障害ノードを迅速に診断および識別します。 説明 このパラメーターは、-- enable-job-hang-detectionが有効な場合にのみ有効です。 | 偽 | ||
終了ジョブのハング検出 | -- enable-job-exit-hang-detection | ジョブの終了時にハング検出を有効にするかどうかを指定します。 このパラメーターは、同期ジョブに対してのみ有効です。 有効な値:
| 偽 | |
-- job-exit-hang-interval | ジョブが終了しているときにジョブが無応答である可能性がある最大期間。 有効値: 正の整数。 単位は秒です。 この期間内にジョブが終了しなかった場合、ジョブはハングと報告され、再起動されます。 | 600 | ||
フォールトトレランスの設定 説明 この設定は、ジョブのインスタンスの実行に失敗した場合にのみ有効になります。 | フォールトトレランスポリシー | -- fault-tolerant-policy | 有効な値:
| 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インスタンスは、ジョブの進行状況を監視し、エラー発生時のフォールトトレランスを管理します。
パネルで:
[その他の設定] テキストボックスで追加のパラメーターを設定できます。 パラメーターの詳細については、「手順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は、集団通信中にすべてのノードからステータスデータを収集して、潜在的な通信および非通信の問題を分析します。 次の図にシステムアーキテクチャを示します。
すべてのパラメータ
C4D検出機能を有効にした後、[その他の設定] テキストボックスで次のパラメーターを設定できます。
パラメーター | 説明 | 例 |
-- c4d-logレベル | C4Dログレベル。 オプション:
デフォルト値は警告で、警告レベルとエラーレベルでログを出力します。 ルーチン操作の場合は、デフォルト値を使用することを推奨します。 パフォーマンスのトラブルシューティングでは、パラメーターをInfoに設定できます。 |
|
-- c4d-common-envs | C4D実行環境変数。
|
|
エラーレベルのログの場合、AIMasterは影響を受けるノードを自動的にブラックリストに登録し、ジョブを再起動します。 各レベルの処理ロジックを次の表に示します。
ログレベル | 説明 | Action |
エラー | デフォルトでは、通信レイヤーのハング時間が3分を超えると、ジョブは失敗します。 値を変更するには、C4D_HANG_TIMEOUTおよびC4D_HANG_TIMESパラメーターを指定します。 | AIMasterは、ログに示されたノードを分離します。 |
警告 | デフォルトでは、通信層のハング時間が10秒を超えると、パフォーマンスに影響を与えますが、障害は発生しません。 値を変更するには、C4D_HANG_TIMEOUTパラメーターを指定します。 | ログ内のノードは自動的に分離されません。 手動確認が必要です。 |
10秒を超える非通信層ハング時間は、ジョブ失敗を引き起こす可能性がある。 | ログ内のノードは自動的に分離されません。 手動確認が必要です。 | |
情報 | 遅い通信と非通信レイヤー。 | ログはパフォーマンスの問題であり、手動で確認する必要があります。 |
DLCジョブがスローまたはハング表示されている場合は、DLCジョブリストのジョブ名をクリックして、ジョブの詳細ページにアクセスします。 インスタンスセクションでは、C4D診断結果のAIMasterログを確認できます。 診断結果の詳細な分析については、「診断結果サンプル」をご参照ください。
診断結果サンプル
RankCommHang: 通信レイヤがノードでハングすることを示します。
RankNonCommHang: 計算などの非通信レイヤーのハングを示します。
RankCommSlow: ノードでの低速通信層の問題を示します。
RankNonCommSlow: ノードでの低速非通信層の問題を示します。
よくある質問
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