本文为您介绍如何使用PAI-DLC提供的基于AIMaster的容错监控功能。
背景信息
如今,深度学习已被广泛使用,随着模型和数据规模越来越大,常采用分布式方式运行深度学习任务。当同一个任务运行实例个数增大后,由于依赖的软件栈和硬件环境都有可能出现偶发异常,会导致任务停止运行。
为了保障大规模分布式深度学习任务稳定运行,PAI-DLC提供了基于AIMaster的容错监控功能。AIMaster是一个任务级别的组件,当任务开启AIMaster的容错监控功能后,会拉起一个AIMaster实例和任务其他实例一起运行,起到任务监控、容错判断、资源控制的作用。
使用流程
- 步骤一:配置容错监控参数
首先根据AIMaster支持的全量参数说明,并参考容错监控参数配置示例,来配置额外参数。
- 步骤二:开启容错监控功能
您可以在提交PAI-DLC训练任务时,通过控制台或SDK的方式开启容错监控功能。任务运行异常时,会根据配置的额外参数,对任务进行相应的处理,从而保障任务能正常运行。
- 步骤三:配置容错监控增强功能
如果当前的容错监控配置不能满足您的要求,您可以使用容错监控增强功能,通过AIMaster SDK自定义容错关键字。任务运行过程中,AIMaster会自动扫描出错节点的日志,并和自定义容错信息对比,如果满足容错条件,也会触发容错。
步骤一:配置容错监控参数
当前容错监控功能支持配置的参数如下,您可以参考常用参数配置示例,提前规划好要为任务配置的容错监控内容。后续开启容错监控功能时,将已规划的容错监控内容配置到额外参数即可。
全量参数说明
配置分类 | 功能介绍 | 配置参数 | 参数说明 | 默认值 |
---|---|---|---|---|
通用配置 | 任务运行类型 | --job-execution-mode | 配置任务运行类型,取值如下:
不同任务类型容错行为不同。对于可重试错误(请参见步骤三:配置容错监控增强功能):
|
Sync |
任务最大运行时长 | --job-max-running-time | 配置任务允许的最大运行时长,正整数,单位为分钟。
如果任务运行时长超过该值后,则将任务标记为失败。默认值为-1,表示不开启该功能。
说明
|
-1 | |
任务重启设置 | --enable-job-restart | 在满足容错条件或检测到运行时异常(请参见步骤三:配置容错监控增强功能)时,是否允许任务重启。取值如下:
|
False | |
--max-num-of-job-restart | 配置任务最大重启次数。超过最大重启次数后,会将任务标记为失败。 | 3 | ||
运行时配置
说明 针对没有Worker实例失败的场景。
|
任务Hang(停止执行)异常检测 | --enable-job-hang-detection | 是否开启任务Hang异常检测,只支持同步任务。取值如下:
|
False |
--job-hang-interval | 配置任务暂停执行的持续时长,正整数,单位为秒。
当任务停止时长超过该值时,则将任务标记为异常,并触发任务重启。 |
1800 | ||
任务退出时Hang(停止执行)异常检测 | --enable-job-exit-hang-detection | 是否开启任务退出时Hang异常检测,只支持同步任务。取值如下:
|
False | |
--job-exit-hang-interval | 配置任务退出时停止执行的持续时长,正整数,单位为秒。
当任务退出时长超过该值时,则将任务标记为异常,并触发任务重启。 |
600 | ||
容错配置
说明 针对有Worker实例失败的场景。
|
容错策略 | --fault-tolerant-policy | 容错策略参数取值如下:
|
Never |
相同错误最大允许出现次数 | --max-num-of-same-error | 配置单个Worker实例上同一错误允许出现的最大次数。
当错误出现次数超过该值时,直接将任务标记为失败。 |
10 | |
最大容错率 | --max-tolerated-failure-rate | 配置最大容错率。
当失败Worker实例比例超过该值时,直接将任务标记为失败。 |
1 |
常用参数配置示例
- TensorFlow异步训练任务
对于可重试的错误,如果Worker实例运行异常,则会重启运行异常的Worker实例。当PS或Chief实例出错时,下面的配置默认不允许重启任务。如果您希望重启任务,可以将--enable-job-restart参数配置为True。
--job-execution-mode=Async --fault-tolerant-policy=OnFailure
- 离线推理任务
各个Worker实例之间不存在依赖关系,相当于异步任务。当Worker实例运行异常时,则会重启运行异常的Worker实例。
--job-execution-mode=Async --fault-tolerant-policy=OnFailure
- 同步训练任务
当某个Worker实例运行异常时,如果退出码或错误日志信息满足容错条件,例如:抢占发生,则会重启任务。
--job-execution-mode=Sync --enable-job-restart=True --max-num-of-job-restart=3 --fault-tolerant-policy=ExitCodeAndErrorMsg
步骤二:开启容错监控功能
- 通过控制台开启容错监控功能
- 通过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提交任务时打开容错开关。
其中: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:表示容错监控额外参数。
- 通过GO SDK提交任务时打开容错开关。
您也可以在提交任务时自定义容错信息,任务运行过程中,AIMaster会自动扫描出错节点的日志,并和自定义容错信息对比,如果满足容错条件,也会触发容错。具体配置方法,详情请参见步骤三:配置容错监控增强功能。
步骤三:配置容错监控增强功能
您可以通过AIMaster的SDK,在您自己的代码里根据不同的场景配置容错监控增强功能。