概述
引言
随着大语言模型规模不断增长,训练和推理逐渐从单个NPU扩展到大规模集群。多个NPU需要协同完成计算和数据处理,NPU间的通信效率因此成为影响系统整体性能的关键因素。
不同业务场景的模型结构、消息规模和网络拓扑各不相同,预置的通信算法难以在所有场景下保持较优性能。同时,通信与计算的进一步融合也对通信算子的编程灵活性提出了更高要求。Ascend C提供面向Kernel的通信编程能力,将底层通信平台与算子实现解耦,使开发者可以根据业务特点定制通信算法,专注于算法的设计与实现。
本章以通信算子的开发过程为主线,首先通过编程范式说明通信资源准备与Device侧算子执行之间的协作关系,然后介绍如何根据硬件与组网条件确定通信通路、如何选择通信方式,以及通信资源和任务在各类模型中的组织方式。
Ascend C通信编程范式
Ascend C通信编程采用控制面与数据面分工的方式。控制面运行在Host侧,负责查询拓扑、建立通信关系、注册通信内存和准备同步资源;数据面运行在Device侧,使用控制面准备的通信关系和资源完成通信操作。控制面准备的信息传递给Device侧Kernel后,可在Kernel执行期间复用。
从开发者视角出发,一次通信过程可以分为资源准备、前同步、算子执行和后同步四个阶段,如图1所示。
- 资源准备:根据通信成员和拓扑结构选择可用链路,建立通信关系,并准备通信内存和同步资源。
- 前同步:在算子执行前确认源数据已就绪,并确保相关通信成员和执行单元满足通信条件。
- 算子执行:使用已准备的通信资源,根据通信算法,通过与实际链路匹配的协议完成数据搬运、同步和归约等操作。
- 后同步:确认通信任务已达到完成条件后,再读取输出数据或复用相关内存和任务资源。
上述四个阶段仅描述通信编程的基本逻辑,并不表示各项操作必须完全串行执行。在满足数据依赖、资源使用和同步要求的前提下,开发者可以组织通信任务与计算任务并行执行。
编程模型概览
后续各章节的内容如表1所示。
表1 后续章节内容
| 章节 | 主要内容 |
|---|---|
| 抽象硬件架构 | 介绍参与通信的硬件组件、NPU间的数据通路及多NPU组网方式,帮助开发者识别可达链路并规划数据路径。 |
| 通信方式分类及选择 | 介绍驱动模式、通信引擎和通信协议的分类,以及结合组网与性能目标选择通信方式的方法。 |
| 通信模型 | 介绍通信实体、Endpoint、Channel和通信内存等对象之间的关系。 |
| 内存模型 | 介绍通信相关存储资源、通信内存的远端可见性、访问授权和寻址方式。 |
| 执行模型 | 介绍通信任务从准备、提交、执行、同步到完成的过程。 |
| CCU编程 | 介绍CCU的架构和编程模型。 |
产品支持情况
- Ascend 950PR&950DT系列产品:支持
- Atlas A3系列产品:不支持
- Atlas A2系列产品:不支持
- Atlas 200I/500 A2推理产品:不支持
- Atlas推理系列产品:不支持
- Atlas训练系列产品:不支持