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被误认为已满。
➡️