超节点的重要性随着模型参数量的上升训练任务运行所需的芯片数量也达到了万卡、十万卡级别。如何将如此庞大的芯片链接起来并且做到通信带宽和成本的平衡成为硬件层面的一大难题。图1.资源扩展方式示意图超节点方案二有以下几点优势必要性Leaf交换机需要与所有的Spine交换机互联才能组成扁平的Spine-Leaf网络。因此Spine-Leaf网络的横向扩展并不是无止境的它受限于交换机的接口数量。成本Spine-Leaf网络的带宽提升需要整个网络一起提升成本巨大。而训练场景其实只是局部TP、EP、SP对网络要求高局部带宽升级性价比更高。性能超节点可以实现超低时延超大带宽统一内存编址极大提升训练推理性能。亲和性调度的必要性通过超节点优化局部网络可以在成本和性能之间找到一个平衡点。而面对一个不对等的网络任务如何部署就显得尤为重要。一个错误的部署可能导致网络带宽降级集合通信建链失败网络资源更优但是网络性能下降等问题网络带宽降级原因HCCL集合通信在跨超通信时会进行自适应的算法选择当任务在各超节点中的服务器数量不一致时会默认启用最大公约数算法NHR Highest Common Factor,该算法通过计算超节点间服务器数的最大公约数将通信域切分为多个对称分布的逻辑超节点依次保证网络的对称性。逻辑超节点间只能走Spine-Leaf网络因此可能出现图2的情况节点1和节点4虽然在同一个超节点网络中但是只能走Spine-Leaf网络图2.网络通信方式示意图集合通信建链失败原因在昇腾社区的通信域管理文档中明确要求了同一个超节点内的服务器信息需要配置在一起也就是同一超节点内的rankId是连续的不支持两个超节点下的服务器的rankId交叉配置。网络资源更优但是网络性能下降的原因训练任务通过各种并行策略将任务分解到了多张芯片上一般来说TP、EP、SP的流量是TB级别而DP、PP流量是GB级别。假设任务的TP是8EP是2DP是5。一台服务器的芯片数量是8则该任务一共需要10台服务器。如图3所示场景一的调度方案虽然将任务平均的调度到了两个超节点中但是有一部分EP流程跑在了Spine-Leaf网络上。场景二的调度方法虽然将任务不平均的调度到了三个超节点但是所有的TP\EP流量都跑在了灵衢网络上。场景二网络性能更优。图3.网络通信方式示意图通用亲和性调度的必要性及MindCluster内部实现逻辑在第二章节中我们已经了解了超节点网络中必须要配合亲和性调度算法才能最大化的释放超节点算力。而超节点的形态随着客户的需求、产品的迭代在不断的变化定制化开发会浪费大量人力。因此需要一个通用的亲和性算法可以在多种超节点网络拓扑下保证网络的亲和性并且做到资源碎片的最小化。确定数据结构要想实现通用的亲和性算法首先要将超节点网络拓扑、任务网络诉求抽象成通用的数据结构。如图4所示图4.节点树与任务树匹配方式示意图超节点网络拓扑超节点的网络都是一个多层结构层级越低节点数量越少网络越优因此可以使用一个多层的树来表示。叶子节点就是AI服务器节点的层级代表网络的层级两个叶子节点之间的最短连线就是这两台服务器间通信的最优网络路线。一个集群中可能有多棵树。造成多棵树的原因可能是有多种不同的超节点也有可能原本是一棵树因为网络故障导致服务器被孤立成了一颗新的树。树的层级和超节点网络的层级有关但是会基于算法复杂度设置上限。任务网络诉求一个训练任务因为不同并行策略对网络的诉求不一样因此可以基于并行策略将任务看成多层的子任务。每一层子任务可以配置自己所需的网络层级。一个推理任务也会因为PD分离被看成多个子任务每个子任务可以配置自己所需的网络层级。子任务实际部署的层级可能比配置的网络层级更低实际网络比配置网络优但是不能更高实际网络比配置网络差。任务的层级和任务的切分策略和网络诉求有关但是会基于算法复杂度设置上限。如何生成数据结构通过第1步我们已经确定了数据结构MindCluster会通过自有的Ascend Device Plugin、Volcano、Ascend Operator实现数据结构的自动生成。Ascend Device Plugin组件上报了节点的所属超节点ID、所属框ID等节点基础信息Volcano组件通过监听ConfigMap感知到了网络拓扑配置。通过这两个信息就能在Volcano的内存中维护出多棵硬件的拓扑树。图5.节点树生成方式示意图Ascend Operator定义了标准的任务创建接口通过接口字段校验要求任务新增超节点网络亲和配置。如图6所示该配置表示任务一共使用8个节点第一层子任务大小为8个数为1该子任务必须部署到一个超节点中第二层子任务大小为2个数为4每一个子任务必须部署到一个框中且这些框同属一个超节点。图6.任务树生成及绑定关系示意图如何基于数据结构实现算法当复杂的网络问题被抽象成了两个基本的数据结构Volcano就可以通过算法实现通用的亲和性调度算法逻辑如图7所示图7.超节点通用亲和性调度算法示意图关键步骤解释如下调度函数从根节点递归遍历服务器资源经服务器过滤、服务器排序构建出任务树。构建遵循五大原则深度优先构建任务树首先保障资源分配满足任务网络诉求。资源利用率最优以碎片分数为首要排序键。网络带宽最优碎片分数相同时按照网络带宽优劣排序。支持优先网络带宽最优其次资源利用率最优覆盖不同调度场景。资源不足时允许使用预留服务器兼顾资源利用率与关键作业的故障恢复效率。计算碎片得分规则该规则用于评估同一颗树内节点选择的优先级也用于多棵树选择的优先级。碎片分数的计算是一个递归的过程从叶子节点开始向上聚合叶子节点的碎片得分该节点的父节点下的所有叶子节点 / 该节点的父节点下的被使用叶子节点非叶子节点的碎片得分下一层的子节点的碎片得分*10 该节点的父节点下的所有叶子节点 / 该节点的父节点下的被使用叶子节点总结MindCluster通过各组件间的配合实现了通用超节点调度算法保证任务带宽的同时还能有效减少资源碎片是企业在进行昇腾集群调度中不可或缺的重要工具。除此之外MindCluster还提供了超大规模集群调度、故障快恢、亚健康设备无感切换、指标监测等诸多能力助力企业更快、更稳的使用昇腾设备。欢迎你访问MindCluster的开源仓主页提出你宝贵的issue共同参与到社区的开发和成长。