NCCL AllReduce CudaGraph 时 hang 问题分析

💡 原文中文,约4600字,阅读约需11分钟。
📝

内容提要

在压测中发现阻塞问题,调试工具分析后确认是workFifo满导致。通过分析nccl模块结构和任务分配,建议升级到最新版本以修复bug。

🎯

关键要点

  • 在压测中发现阻塞问题,经过调试工具分析确认是workFifo满导致的。
  • nccl模块使用ncclInfo结构存放集合通信相关参数,ncclGroupStart和ncclGroupEnd期间可能会发起多个集合通信操作。
  • ncclKernelPlan中存放着从任务队列中抽取的集合通信操作相关信息,计划使用多个channel来处理任务。
  • workBuf指向的内存块需要足够大以容纳所有任务的ncclDevWorkColl结构。
  • 在上传工作时,存在一个bug导致在persistent状态下错误更新fifo相关字段,导致fifo被误认为已满。
  • 建议升级到nccl最新版本以修复该bug,新的版本引入了ncclDevWorkStorageTypeArgs类型的workBuf,减少了对fifo的依赖。

延伸问答

在压测中遇到的阻塞问题是什么原因导致的?

阻塞问题是由于workFifo满导致的。

nccl模块中workFifo的作用是什么?

workFifo用于存储集合通信操作的任务信息。

如何解决nccl中的workFifo满的问题?

建议升级到nccl最新版本以修复相关bug。

ncclKernelPlan中存放了哪些信息?

ncclKernelPlan中存放着从任务队列中抽取的集合通信操作相关信息。

在nccl中,如何处理多个集合通信操作?

在ncclGroupStart和ncclGroupEnd期间,可以发起多个集合通信操作。

nccl中persistent状态下的bug是什么?

在persistent状态下,错误更新fifo相关字段,导致fifo被误认为已满。

🏷️

标签

➡️

继续阅读