遇到这样一个奇怪问题:
[E ProcessGroupNCCL.cpp:737] [Rank 3] Watchdog caught collective operation timeout: WorkNCCL(SeqNum=1751615, OpType=ALLREDUCE, Timeout(ms)=1800000) ran for 1800265 milliseconds before timing out.
…
[E ProcessGroupNCCL.cpp:414] 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. To avoid this inconsistency, we are taking the entire process down.
…
说明系统在使用标准的P2P通信路径时遇到了问题。
临时的解决方案:export NCCL_P2P_DISABLE=1
理想的情况是深入了解为何P2P通信在你的特定配置中存在问题,并找到一个更根本的解决方案。这可能涉及更新固件、驱动程序、调整NCCL配置或优化网络设置等。
P2P通信问题:NCCL利用GPU之间的直接通信(如果可用)来加速操作。然而,在某些系统上,这种直接通信可能会有问题,特别是在复杂的多节点或多卡设置中。
网络拓扑和硬件兼容性:在不同的硬件和网络配置下,P2P通信的性能和稳定性可能会有很大差异。有时,某些通信路径可能由于硬件限制或驱动问题而表现不佳。
禁用P2P通信:通过设置NCCL_P2P_DISABLE=1,你实际上告诉NCCL不要尝试使用直接的GPU-GPU通信,而是使用其他通信方式(例如通过CPU或网络)。这可能会绕过导致超时的问题,但可能会牺牲一些性能。