大数跨境

匠心时刻丨HCCL超簇建链技术,支持昇腾超节点训练上探至5万+卡

匠心时刻丨HCCL超簇建链技术,支持昇腾超节点训练上探至5万+卡 昇腾AI开发者
2026-07-24
4
前言


随着大模型参数规模的增长,超节点规模也在快速扩大。昇腾NPU作为核心算力底座,超节点规模已迅速上探至5万+卡。在5万+卡场景,HCCL通信域的初始化建链过程,面临着网络连接数激增、单点数据传输瓶颈以及系统资源严重受限等多重挑战。围绕上述问题,本文深入剖析HCCL超簇建链技术的设计原理、核心机制及其在5万+卡超节点中的使能方式,为超大规模的通信优化提供实践参考。


近期,在5万+卡训练的LongCat-2.0模型正式开源,进一步验证了超大规模超节点的工程可行性。


5万+卡超节点通信域建链挑战


集中式建链是通信域初始化建链的传统方式,其流程为:所有卡向同一个主节点(root)发起网络连接,由主节点统一收集各卡信息并构建全局拓扑,再将完整的拓扑文件广播回所有卡,完成通信域建链流程。



当规模从数百卡膨胀至数万卡,集中式建链方案将遭遇严重的可拓展性瓶颈:



单点数据传输瓶颈:主节点需向所有卡广播全局拓扑文件,而在万卡规模下,全局拓扑文件从KB级膨胀至数十MB。1-to-N网络传输模式下,主节点的出口带宽会被迅速占满,瞬时流量激增触发丢包重传,拓扑文件传输时间急剧拉长。


建链拥塞超时失败:数万卡会几乎同时涌向主节点进行连接和上传信息。主节点会瞬间承载数万个Socket长链接,主节点网络协议栈和CPU资源极易被打满。大量进程会因网络拥塞连接超时,最终导致整个通信域创建流程失败。


HCCL超簇建链技术,解决数据传输和网络超时失败难题


面对5万+卡集中式建链面临的单点数据传输和网络拥塞超时挑战,HCCL提出超簇建链技术。该技术采用“分治”策略实现分层广播机制,通过将节点分组管理,解决万卡单点数据传输瓶颈。同时设计连接重试策略,应对万卡建链拥塞超时失败问题。两者协同运作,保障5万+卡建链的可靠性与效率。



HCCL分层广播机制:万卡单点数据传输瓶颈解决方案


为解决集中式建链单节点数据传输瓶颈,HCCL引入分层广播机制,拓扑文件的传输路径由单点发散变为多点并行,有效分散主节点负载,传输效率获得近似线性加速。为达成分层广播的极致效率目标,需要构建root->leader->rank分层架构,并实现高性能数据广播引擎。



· 构建分层架构


分层架构构建的核心难点在于leader节点的合理选择和leader信息的全局同步。


构建流程如下:



信息上报:root节点与全局rank建立全连接,各rank上报拓扑信息,并压缩数据量以减轻root节点的负载压力。


分组与选举:root节点依据收集到的拓扑信息及分组配置,以拓扑亲和为原则完成分组规划,并选举最优leader。


广播与建链:root向所有rank广播leader信息,各rank向所属leader发起建链请求,同时leader保持与root的连接状态。


就绪:分层架构构建完成,进入就绪状态,等待全局拓扑文件的广播。



· 构建数据广播引擎


为提升数据分发性能,HCCL构建基于epoll+多线程的数据广播引擎



主线程通过epoll_wait监听所有未发送完成的socket的可写事件;当某个socket就绪,便将对应发送任务推入共享任务队列taskQueue中,并唤醒worker线程。各worker线程竞争消费队列任务,执行数据发送;若当前任务数据全部发完,则从epoll中移除该句柄,否则重新注册EPOLLONESHOT事件以等待下一次可写通知。主线程随后进入下一轮轮询,如此往复,直至全部广播完成。 



HCCL连接重试机制:万卡建链拥塞超时失败应对方案


为应对网络拥塞导致建链超时失败问题,设计并实现了网络连接重试机制。在建链阶段,网络连接失败时会触发重试机制,自动发起新请求。为避免重试风暴的连锁放大效应,设置重试间隔,抑制突发请求流量。同时,为确保建链过程在可控时间内结束,防止无限阻塞,引入连接超时保护机制:超过预设超时时间仍未建链成功时,直接上报异常并终止建链流程。重试策略有效缓解了网络拥塞对建链流程的冲击,提升了建链的成功率和稳定性。



HCCL超簇建链技术加速效果


在昇腾A3超节点,对比HCCL超簇建链技术与传统集中式建链的耗时,分别统计在不同规模下的建链耗时如下。



结果表明,5w卡规模下,超簇建链技术耗时比传统方式减少了91%。在实际生产环境中,超簇建链技术已支撑5万+卡完成预训练任务,充分验证了该技术在超大规模下的可行性与性能优势。



如何在昇腾A2/A3系列产品使用HCCL超簇建链技术?


在超大规模下可使用HCCL超簇建链技术加速通信域建链流程。创建通信域的示例如下:


方式一:


调用HCCL提供的C接口创建全局通信域:


// 生成 root 节点的 rank 标识信息HcclRootInfo rootInfo;HcclGetRootInfo(&rootInfo); HcclComm hcclComm;uint32_t devCount = 51200;uint32_t devId = rankId;// 使用分层建链能力初始化集合通信域// devCount:通信域大小,rootInfo:root节点信息,devId:NPU的rankId,hcclComm:通信域句柄HcclCommInitRootInfo(devCount, &rootInfo, devId, &hcclComm); // 执行 AllReduce,将通信域内所有节点的 sendBuf 进行相加后,再把结果发送到所有节点的 recvBufHcclAllReduce(sendBuf, recvBuf, count, HCCL_DATA_TYPE_FP32, HCCL_REDUCE_SUM, ctx->comm, stream); // 销毁通信域HcclCommDestroy(hcclComm);


方式二:


在python训练脚本中,可直接调用torch的init_process_group接口创建通信域。


HCCL超簇建链技术已随HCCL代码库全面开源,更多的实现细节和使用说明可以参考HCCL通信基础库开源代码:https://gitcode.com/cann/hcomm


通信域创建参考链接:


https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/910beta3/API/hcclug/docs/zh/api_ref/comm_mgr_c/HcclGetRootInfo.md


https://www.hiascend.com/document/detail/zh/Pytorch/2600/ptmoddevg/trainingmigrguide/FrameworkPTAdapter/26.0.0/zh/pytorch_model_migration_fine_tuning/launch_multi_gpu_train_demo.md


【声明】内容源于网络
0
0
昇腾AI开发者
昇腾社区
内容 983
粉丝 0
昇腾AI开发者 昇腾社区
总阅读5.6k
粉丝0
内容983