在不影响大模型训练性能和精度的前提下,能快速稳定发现错误。WatchDog监视进程,可显著提高使用HCCL的PyTorch分布式训练的可靠性。WatchDog本质上是通过捕获集合通信中出现的错误,从子进程抛出异常,停止主进程训练,来防止分布式训练被阻塞。
上图展示了WatchDog进程在分布式训练中如何工作。首先,WatchDog线程在每一个进程初始化process_group时拉起,一个WatchDog线程监视一个进程中的process_group。然后,WatchDog线程在workCleanupLoop子函数中异步监视集合通信异常,捕获到异常后在WatchDog主函数中将异常重新抛出,使得训练的主进程能感知到异常,从而快速结束训练任务。
WatchDog不仅支持算子执行异常监测、通信超时监测、超时分析,还支持ERROR CQE检测。CQE检测是检测Device网口通信链路情况,当通信链路异常时,通常反映为ERROR CQE。
大模型训练过程中,模型集合通信异常后卡住,不能及时结束训练,造成资源损耗。使用该特性可避免该情况发生。
通过环境变量HCCL_ASYNC_ERROR_HANDLING可以设置是否启用WatchDog。
HCCL_ASYNC_ERROR_HANDLING取值情况:
当PyTorch版本为1.11.0时,默认值为0;当PyTorch版本大于等于2.1.0时,默认值为1。
此环境变量使用详情请参考《环境变量参考》中的“HCCL_ASYNC_ERROR_HANDLING”章节。
开启异步错误处理:
export HCCL_ASYNC_ERROR_HANDLING=1