HCCL集合通信库深度解析:昇腾AI处理器的高性能通信架构与实战指南 HCCL集合通信库深度解析昇腾AI处理器的高性能通信架构与实战指南【免费下载链接】hccl集合通信库Huawei Collective Communication Library简称HCCL是基于昇腾AI处理器的高性能集合通信库为计算集群提供高性能、高可靠的通信方案项目地址: https://gitcode.com/cann/hccl导读HCCLHuawei Collective Communication Library是CANNCompute Architecture for Neural Networks生态的核心组件为昇腾AI处理器集群提供高性能、高可靠的集合通信与点对点通信能力是支撑大规模分布式训练与推理的关键基础软件。本文以开源仓库 cann/hccl 中的 HCCL简介 为骨架结合 通信算子接口头文件、算子源码目录 与 集合通信算法介绍 等仓库一手资料系统讲解HCCL的核心功能、分层软件架构、通信原语、通信算法、执行模式与产品支持情况。读完本文你将能够理解HCCL的内部组成与工作原理掌握在昇腾平台上选型通信算子与通信算法的基本方法并知道如何基于开源仓库进一步深入学习和二次开发。HCCL是什么面向昇腾硬件的高性能集合通信库集合通信库HCCL是基于昇腾AI处理器的高性能集合通信库为计算集群提供高性能、高可靠的通信方案。在CANN软件栈中HCCL向上支撑PyTorch、TensorFlow等主流AI框架的多卡分布式训练向下对接HCCS、RoCE、PCIe、UBUnified Bus等多种高速通信链路实现多款昇腾AI处理器之间的高效互联。从开源仓库的 README 可以确认HCCL具备以下核心能力单机/多机通信提供单机、多机环境中的高性能集合通信和点对点通信丰富的通信原语支持AllReduce、Broadcast、AllGather、ReduceScatter、AlltoAll、Send、Receive等集合通信与点对点通信原语多种通信算法支持Ring、Mesh、Recursive Halving-DoublingRHD、NHR、NB、Pipeline、Pairwise等拓扑通信算法多类高速链路支持HCCS、RoCE、PCIe、UBUnified Bus等高速通信链路两种执行模式支持单算子和图模式两种执行模式可扩展性支持基于HCOMM通信基础库进行通信算子的自定义开发。这些能力直接对应仓库源码中的组织方式每种通信算子AllReduce、AllGather、Broadcast等在 src/ops 下都有独立子目录其中包含算法实现algorithm、算法选择逻辑selector等模块印证了算子—算法—链路分层设计的基本思想。软件架构HCCL集合通信库与HCOMM通信基础库HCCL整体采用集合通信库 通信基础库两层结构包含HCCL集合通信库与HCOMMHuawei Communication通信基础库两大部分。HCCL集合通信库内置算子与扩展算子HCCL集合通信库包含内置通信算子和扩展通信算子提供对外的通信算子接口内置通信算子HCCL提供的基础通信算子包含集合通信算子和点对点通信算子。这些算子通过 include/hccl.h 中导出的HcclXXX系列C语言接口对外暴露例如HcclAllReduce、HcclBroadcast、HcclAllGather、HcclReduceScatter、HcclAlltoAll、HcclSend、HcclRecv等。扩展通信算子用户可以使用HCOMM通信基础库提供的接口自定义扩展通信算子聚焦业务创新无需关注芯片底层实现细节。仓库中的 examples/04_custom_ops_p2p、examples/05_custom_ops_allgather、examples/06_custom_ops_reduce_scatter 就是自定义通信算子的完整可运行样例涵盖aicpu、aiv、ccu等多种执行载体。HCOMM通信基础库控制面与数据面分层解耦HCOMM通信基础库采用分层解耦的设计思路将通信能力划分为控制面和数据面两部分控制面提供拓扑信息查询与通信资源管理功能。它负责为通信任务准备通信资源如通信域、QP等是数据面得以执行的前提。数据面提供本地操作、算子间同步、通信操作等数据搬运和计算功能负责实际的数据收发与计算执行。控制面提供通信资源、数据面提供操作资源的方法两层相互配合让通信算子开发人员可以聚焦于业务创新而无需关注芯片底层复杂的实现细节。从源码结构看这种控制面/数据面解耦思想也体现在仓库的算子实现中例如 src/ops/op_common 提供算子通用组件算法层、选择器、拓扑信息等而 src/common 承载类型定义、日志、配置解析等通用逻辑共同支撑上层算子的实现。通信算子与对外接口HCCL提供集合通信与点对点通信两大类原语。从 include/hccl.h 的实际声明可以看到各算子的标准接口形态下面以典型算子为例算子接口原型语义说明AllReduceHcclAllReduce(sendBuf, recvBuf, count, dataType, op, comm, stream)对所有rank的输入数据执行归约操作并将结果广播到所有rankBroadcastHcclBroadcast(buf, count, dataType, root, comm, stream)将root rank的数据广播到通信域内所有rankAllGatherHcclAllGather(sendBuf, recvBuf, sendCount, dataType, comm, stream)收集所有rank的数据并分发给每个rankReduceScatterHcclReduceScatter(sendBuf, recvBuf, recvCount, dataType, op, comm, stream)先归约再按rank切片分发ReduceHcclReduce(sendBuf, recvBuf, count, dataType, op, root, comm, stream)归约到指定root rankScatterHcclScatter(sendBuf, recvBuf, recvCount, dataType, root, comm, stream)将root的数据按切片分发到各rankAlltoAllHcclAlltoAll(sendBuf, sendCount, sendType, recvBuf, recvCount, recvType, comm, stream)全交换每个rank向其他rank发送/接收数据AlltoAllVHcclAlltoAllV(sendBuf, sendCounts, sdispls, sendType, recvBuf, recvCounts, rdispls, recvType, comm, stream)非均匀数据量的全交换AlltoAllVCHcclAlltoAllVC(sendBuf, sendCountMatrix, sendType, recvBuf, recvType, comm, stream)通过发送数据量矩阵描述的全交换Send / RecvHcclSend(buf, count, dataType, destRank, comm, stream)/HcclRecv(buf, count, dataType, srcRank, comm, stream)点对点通信BatchSendRecvHcclBatchSendRecv(sendRecvInfo, itemNum, comm, stream)批量点对点通信其中dataType为HcclDataType数据类型op为HcclReduceOp归约类型如求和、求积、取最大值/最小值等comm为基于的通信资源通信域stream为执行流。接口的完整参数说明可参见 通信算子接口文档 与 API参考。在实现侧每个算子在 src/ops 下均有对应目录例如src/ops/all_reduceAllReduce算子实现含algorithm算法实现、op_graph图模式支持、selector算法自动选择src/ops/all_gather、src/ops/reduce_scatter、src/ops/all_to_all_v分别对应AllGather、ReduceScatter、AlltoAll/AlltoAllV/AlltoAllVCsrc/ops/send、src/ops/recv、src/ops/batch_send_recv点对点通信与批量点对点通信src/ops/barrier同步屏障算子。每种算子在不同产品上的支持情况节点内/节点间通信、单算子/图模式、确定性计算、重执行等可查询 通信算子支持度清单例如 Atlas训练系列产品支持度、Atlas A2系列支持度。通信算法Ring、Mesh、RHD与更多针对同一个通信算子随着网络拓扑、通信数据量、硬件资源的不同HCCL会采用不同的通信算法从而最大化集群通信性能。根据 集合通信算法介绍HCCL在通信域内Server内支持Mesh、Ring、Double-Ring和Star算法具体使用哪种算法根据硬件拓扑自动选择用户无须配置也不支持配置。Server间/超节点间支持以下算法的自适应选择根据产品形态、数据量和Server个数自动选择默认无须配置算法全称/特征适用场景Ring环结构算法通信步数多线性复杂度时延较高但通信关系简单、受网络拥塞影响较小Server个数较少、数据量较小、网络明显拥塞且Pipeline不适用的场景RHDRecursive Halving-Doubling递归二分倍增通信步数少对数复杂度时延低但在非2次幂节点规模下引入额外通信量Server个数为2的整数次幂且Pipeline不适用或Server个数非2次幂但数据量较小的场景NHRNonuniform Hierarchical Ring非均衡层次环通信步数少对数复杂度时延较低Server个数较多且Pipeline不适用的场景NBNonuniform Bruck非均匀数据块算法通信步数少对数复杂度时延较低Server个数较多且Pipeline不适用的场景Pipeline流水线并行算法可并发使用Server内/Server间或超节点内/超节点间链路通信数据量较大且通信域内每机包含多卡的场景Pairwise逐对通信算法仅用于AlltoAll/AlltoAllV/AlltoAllVC通信步数较多线性复杂度但可避免网络一打多现象数据量较大、需规避一打多的场景AHCAsymmetric Hierarchical Concatenate层次化算法仅用于ReduceScatter/AllGather/AllReduce通信域内NPU多层次分布、层次间存在带宽收敛的场景开发者若想指定Server间或超节点间通信算法可通过环境变量 HCCL_ALGO 进行设置。需要注意一旦通过HCCL_ALGO指定了通信算法算法的自适应选择功能将不再生效以用户指定的算法为准。典型配置格式如下# 全局指定AllReduce等算子使用Ring算法 export HCCL_ALGOlevel0:NA;level1:ring # 按算子分别指定AllReduce使用RingAllGather使用RHD export HCCL_ALGOallreducelevel0:NA;level1:ring/allgatherlevel0:NA;level1:H-D_R另外针对Atlas A3系列产品还存在分组Full Mesh与NHR-HCF最大公约数等特殊算法它们不支持通过HCCL_ALGO配置而是在特定场景下默认生效。耗时评估模型HCCL采用α–β模型Hockney进行性能评估关键变量如下α节点间固定时延s由通信硬件与底层软件栈决定β每byte数据传输耗时s/Byte由通信链路能力决定n节点间通信数据大小Byte由通信算法决定γ每byte数据归约计算耗时s/Byte由计算硬件能力决定p通信域节点个数影响通信步数。单步传输并归约n byte数据的耗时为D α nβ nγ。集合通信算法通过结合网络拓扑优化通信关系和通信步骤减少通信次数以降低固定时延减少实际通信数据量以降低传输与计算耗时从而优化整体性能。分级通信原理HCCL通常按节点内/节点间分为两级拓扑或按节点内/节点间/超节点间分为三级拓扑分级执行集合通信。不同层级间链路带宽不同分级通信使通信任务编排与网络拓扑亲和从而最大化利用链路能力。以Atlas A2系列产品、单算子模式、节点内/节点间两级拓扑为例典型分级流程为集合通信算子阶段一阶段二阶段三ReduceScatterServer间ReduceScatterServer内ReduceScatter/AllGatherServer内AllGatherServer间AllGather/AllReduceServer内ReduceScatterServer间AllReduceServer内AllGatherBroadcastServer内ScatterServer间BroadcastServer内AllGatherReduceServer内ReduceScatterServer间ReduceServer内GatherAlltoAllServer内AlltoAllServer间AlltoAll/完整的表格与详细分级通信流程可参见 分级通信原理。执行模式单算子与图模式HCCL支持单算子与图模式两种执行模式单算子模式业务直接调用HcclXXX接口执行单个通信算子适用于框架侧直接下发算子或自定义脚本调用场景。仓库中的 examples/01_point_to_point 与 examples/02_collectives 即演示了单算子模式下点对点通信与各类集合通信算子的调用方式含Makefile与可编译的main.cc。图模式Ascend IR通信算子作为计算图的一部分由图编译器统一编排执行适合AI框架整图下沉到NPU的场景。仓库中 src/ops/interface_graph_mode 即为图模式接口实现各算子的op_graph子目录也承载了图模式支持逻辑。不同产品对两种模式的支持程度不同需以 通信算子支持度清单 中各产品页面的表格为准。支持的产品与版本配套HCCL当前支持的产品如下Ascend 950PR/Ascend 950DT对应 comm_ops_support_950.mdAtlas A3 训练系列产品/Atlas A3 推理系列产品Atlas A2 训练系列产品/Atlas A2 推理系列产品支持范围以Atlas 800T A2训练服务器、Atlas 900 A2 PoD集群基础单元、Atlas 200T A2 Box16异构子框为限详见 comm_ops_support_a2.mdAtlas 训练系列产品对应 comm_ops_support_910.mdAtlas 推理系列产品仅支持Atlas 300I Duo推理卡详见 comm_ops_support_300i_duo.md。[!NOTE]说明 各产品页中“√”代表支持、“×”代表不支持、“NA”代表不涉及未列出的算子与网络运行模式代表不支持。在版本配套方面本项目源码会跟随CANN软件版本发布具体版本对应关系以CANN release仓库的版本说明为准。为确保源码定制开发顺利进行应选择配套的CANN版本与对应的GitCode标签源码使用master分支可能存在版本不匹配的风险。从源码到实战如何继续深入学习阅读完本文后建议按以下路径在仓库中继续深化快速构建体验参考 源码构建指南 编译安装HCCL再按 样例执行 运行点对点与集合通信示例如 AllReduce样例深入算子实现以AllReduce为例阅读 src/ops/all_reduce 下的selector算法自动选择参考 all_reduce_auto_selector.cc、algorithm算法执行与op_graph图模式三个模块理解算子从接口调用到算法执行的完整链路掌握配置与调优结合 环境变量参考如 HCCL_ALGO、HCCL_BUFFSIZE与 性能分析 指导在实际集群上进行通信调优故障排查遇到通信初始化或执行异常时参考 故障诊断 中的典型问题定位流程。HCCL作为一个开源的高性能集合通信库其集合通信库 HCOMM基础库的分层架构、丰富的通信算法库与灵活的执行模式为昇腾AI处理器集群的分布式计算提供了坚实底座。通过本文的介绍与仓库源码的对照阅读相信你能更快地掌握其原理并在实际业务中高效使用。【免费下载链接】hccl集合通信库Huawei Collective Communication Library简称HCCL是基于昇腾AI处理器的高性能集合通信库为计算集群提供高性能、高可靠的通信方案项目地址: https://gitcode.com/cann/hccl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考