runtime 仓库所体现的组件是整个计算栈的动态执行控制平面。它负责接收图引擎(GE)编译好的静态执行计划,并将其转化为在异构硬件上高效并发执行的物理任务序列。Runtime 的设计哲学是最大化硬件吞吐量,同时通过精细的内存管理和事件同步机制,确保大型模型(如 LLM)推理的低延迟和高稳定性。

CANN 组织链接: https://atomgit.com/cann
Runtime 仓库链接: https://atomgit.com/cann/runtime


1. 执行上下文的构建与异构资源隔离机制

Runtime 启动的每一步都致力于为计算任务提供一个隔离、优化且资源完备的执行环境。

1.1 执行会话(Session)与流(Stream)的精细化管理

  • 会话隔离:Runtime 为每个独立的推理批次或模型加载请求创建独立的执行会话。这确保了不同用户或不同批次之间不会发生资源竞争或数据污染。会话内封装了设备句柄、内存池引用和全局同步锁。
  • 异步流的资源绑定:计算任务被逻辑划分为多个并发流(Stream)。Runtime 调度器负责将这些逻辑流与物理计算资源(如不同的 AI Core 组或 Tensor Core 集群)进行映射。这种划分使得计算与数据搬运可以深度重叠。
    • 延迟掩盖:通过将下一个算子所需的数据拷贝任务放入 Stream A,当前算子的数据计算任务放入 Stream B,Runtime 实现了计算与传输的时间重叠,这是降低端到端延迟的关键。

1.2 显存资源的层次化管理与优化

高带宽内存(HBM)的有效利用依赖于 Runtime 的地址管理能力。

  • 静态内存池的预分配:Runtime 不依赖运行时内存申请,而是根据 GE 提供的内存拓扑图,一次性从驱动层预分配大块连续物理内存。
  • 生命周期驱动的地址复用:这是内存效率的核心。Runtime 维护着一个张量生存期表,精确追踪每个中间结果的最后使用时间。它在时间轴上寻找不相交的内存使用区间,并将这些区间映射到同一块物理显存上,实现内存的“时间复用”,极大降低了峰值显存占用。

2. 异步调度引擎:Event 驱动的任务编排

Runtime 的调度核心是 Device 侧的事件同步机制,旨在将控制权从 Host CPU 转移到硬件调度器。

2.1 任务描述符与依赖链的构建

Runtime 接收 GE 编译输出的 Task 序列,并将其转化为可执行的硬件描述符。

  • Task 封装:每个 Task 封装了算子 ID、输入输出的物理地址、MetaDef 属性以及依赖的 Event 列表。
  • 依赖图的实例化:Runtime 将 GE 中定义的逻辑依赖转化为硬件级的同步操作。如果 Task B 依赖 Task A 的输出,Runtime 会在 Task B 的启动前注入一个 Event Wait 指令,确保硬件调度器在 A 完成前不会启动 B。

2.2 跨流同步的零成本机制

  • 硬件级同步:Event 的等待和触发操作是直接由硬件任务调度器处理的,无需 Host CPU 的频繁轮询(Polling)。这使得 Stream 间的协作延迟极低,为高并发场景提供了保障。
  • 死锁检测与避免:在复杂的图结构中,Runtime 具有基础的死锁检测机制,尤其是在涉及显存释放和跨流同步点时,以防止系统挂起。

3. 维测组件:全链路性能观测与诊断机制

Runtime 仓库集成了全套的维测(Maintenance & Measurement)工具,为性能调优和错误排查提供了必需的数据层。

3.1 底层硬件计数器的精确采集

  • PMU 接口的封装:Runtime 提供了直接读取 NPU 硬件性能监控单元(PMU)的接口。这允许开发者统计精确的微架构事件,如 Cube 单元的 MAC 吞吐量、L0 缓存的命中率、以及 MTE 的有效带宽利用率。
  • 算子级时间戳关联:采集到的时间戳和硬件计数器数据,被 Runtime 准确地关联到计算图中的特定算子节点和执行流上,使得性能瓶颈的定位可以精确到某一行代码或某一种特定的融合算子。

3.2 异常捕获与上下文状态快照

  • 异步错误拦截:当设备侧的任何核函数(Kernel)报告执行错误时,Runtime 会即刻拦截该异常,暂停所有相关的 Stream,防止错误扩散。
  • 诊断信息回溯机制:Runtime 会触发一次上下文转储(Context Dump)。这个过程会保存:
    • 执行失败的 Task 描述符和 PC(程序计数器)。
    • 失败时所有相关寄存器的状态快照。
    • 失败时刻的输入张量数据快照(如果配置开启)。

4. 算子实例的动态加载与参数注入

Runtime 必须能根据 GE 编译的 OM 文件,动态地准备并启动正确的底层核函数。

4.1 运行时核函数查找与实例化

  • MetaDef 索引:Runtime 使用算子 ID 索引 MetaDef 注册表,查找对应算子的物理实现入口(可能是 Catlass 模板实例化后的代码,或 ops-nn 的优化实现)。
  • 参数注入:针对模板化的算子(如 Catlass GEMM),Runtime 负责将 GE 编译时固化的 Tiling 尺寸、精度模式以及运行时动态传入的 Batch/Shape 信息,构建成核函数启动所需的参数结构体,并将其安全地传递给硬件。

4.2 动态形状输入时的适配逻辑

  • Shape 匹配与执行路径选择:对于支持动态形状的算子,Runtime 在执行前会检查实际输入形状。如果形状符合某一预编译的档位,则加载该档位的优化代码;如果不匹配任何档位,则可能需要触发更通用的、但性能稍次的路径。

5. 总结:Runtime 作为执行一致性的最终保障者

runtime 仓库定义了计算的执行规范。它通过 Stream/Event 机制实现了高度并行的异步调度,通过静态内存池技术解决了 LLM 部署中的显存瓶颈,并通过深度集成的维测组件提供了系统级诊断能力。Runtime 确保了无论 GE 编译出多么复杂的执行图,都能在物理硬件上以最高效、最稳定、可观测的方式准确执行。


CANN 组织链接: https://atomgit.com/cann
Runtime 仓库链接: https://atomgit.com/cann/runtime

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐