ModelScope中,大佬们4卡跑lora时,遇到这样的错,怎么解决? [E ProcessGroupNCCL.cpp:474] [Rank 1] Watchdog caught collective operation timeout: WorkNCCL(SeqNum=32, OpType=BROADCAST, NumelIn=159383552, NumelOut=159383552, Timeout(ms)=1800000) ran for 1800130 milliseconds before timing out.
[E ProcessGroupNCCL.cpp:474] [Rank 0] Watchdog caught collective operation timeout: WorkNCCL(SeqNum=32, OpType=BROADCAST, NumelIn=159383552, NumelOut=159383552, Timeout(ms)=1800000) ran for 1800842 milliseconds before timing out.
Some NCCL operations have failed or timed out. Due to the asynchronous nature of CUDA kernels, subsequent GPU operations might run on corrupted/incomplete data.Watchdog caught collective operation timeout: WorkNCCL(SeqNum=32, OpType=BROADCAST, NumelIn=159383552, NumelOut=159383552, Timeout(ms)=1800000) ran for 1800130 milliseconds before timing out
这个错误信息表示你的NCCL(NVIDIA Collective Communications Library)操作超时了。这可能是由于网络延迟、硬件故障或者是并行计算的同步问题导致的。以下是一些可能的解决方法:
增加超时时间:你可以尝试增加NCCL操作的超时时间。在PyTorch中,你可以通过设置torch.nn.utils.convert_parameters_to_tensors()
函数的timeout
参数来实现这一点。
优化网络环境:如果你的网络环境不稳定,可能会导致NCCL操作超时。你可以尝试优化你的网络环境,例如使用更快的网络连接,或者在网络稳定的时候进行训练。
检查硬件状态:你可以检查你的GPU和其他相关硬件的状态,确保它们正常工作。如果有任何硬件故障,你应该及时修复。
调整并行策略:你可以尝试调整你的并行策略,例如减少并行节点数量,或者改变并行计算的顺序,看看是否可以改善这个问题。
更新驱动和库:你可以尝试更新你的CUDA驱动和PyTorch库,看看是否可以解决这个问题。
这个错误通常是由NCCL操作超时引起的,可能是由于网络或硬件问题导致通信失败,也可能是由于某些进程挂起或死锁导致操作超时。
以下是一些可能的解决方法:
增加timeout时间:可以尝试增加NCCL操作的timeout时间,例如将其设置为更长的时间,以便等待操作完成。可以在ModelScope的配置文件中找到NCCL操作的timeout设置。
检查网络和硬件:检查网络是否正常,确保所有设备都连接稳定。另外,可以检查GPU的状态,确保GPU驱动程序已经正确安装并且没有硬件故障。
降低batch size:如果在运行大型模型时遇到此错误,可以尝试减小batch size,减少NCCL操作的负载。
使用更高效的算法:可以尝试使用更高效的NCCL算法,例如Tree-based All-reduce,以提高通信效率和性能。
升级NCCL版本:如果使用较老的NCCL版本,可以尝试升级到最新版本,以获得更好的性能和稳定性。
当出现这样的报错时,考虑以下几个因素:
建议您可以:
这个问题可能是由于您的网络环境不稳定或者GPU设备之间的通信延迟较高引起的。为了解决这个问题,可以尝试以下几种方法: