Runtime 架构介绍【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime1 系统架构总览功能概述CANN Runtime 是华为昇腾 AI 处理器的运行时组件提供设备管理、任务调度、内存管理、内核执行等核心功能是上层AI计算框架如 Pytorch, Mindspore, Tensorflow和加速库如 算子库、通信库、领域加速库、图引擎等与底层驱动之间的桥梁。1.1 Runtime逻辑架构图Runtime 接口层对外提供 C/C 语言 API封装核心实现和特性功能。主要分为三类以 rt 为前缀的底层运行时接口如rtSetDevice、rtMalloc、以 aclrt 为前缀的 ACL 运行时功能接口如 aclrtStreamCreate、aclrtLaunchKernel、以及以aclmdlRI 为前缀的 ACL Graph/Model 特性接口。接口层统一处理参数校验、错误码转换。Runtime 特性层基于核心层能力构筑可插拔的特性功能包括ACL Graph流捕获与图构建、Model模型加载与执行、Fusion算子融合、Snapshot进程快照与故障诊断等。Runtime核心层提供设备管理Device、上下文管理Context/主上下文、流管理Stream/SQ-CQ异步机制、任务调度Engine/TaskFactory、内存管理MemoryPool、内核执行Kernel/Program、事件同步Event、通知机制Notify等核心功能是 Runtime 的核心实现主体。驱动适配层适配层为 Runtime核心层和特性层提供不同代际芯片的抽象和适配屏蔽硬件和驱动接口差异。通过driver/v100、v200 等版本目录支持多代际芯片通过 config/ 目录如 910、310P、BS9SX1A 等管理芯片特性配置通过HAL 驱动接口ascend_hal.h统一驱动调用入口。1.2 Runtime部署视图Runtime 以动态库形式部署在用户态进程空间作为上层应用与底层驱动之间的桥梁。下图展示了 Runtime 在系统中的部署位置和层级关系部署层级说明层级组件部署位置说明应用层AI框架、算子库、通信库用户态进程PyTorch、MindSpore、TensorFlow 等 AI 框架以及 ACL 算子库、HCCL 通信库等Runtime层CANN Runtime用户态动态库提供libacl_rt.so、libruntime.so、libruntime_v100/v200.so、libruntime_common.so库文件以动态链接方式加载到应用进程驱动层Ascend Driver内核态驱动模块ascend_km运行在内核空间通过/dev/davinci*设备文件与用户态交互硬件层Ascend NPU物理设备昇腾 AI 处理器如 910、310P、950 等提供 AI Core、AI CPU、CCU 等计算单元进程模型Runtime 采用进程内单例模式运行单进程多设备一个进程可管理多个 NPU 设备通过aclrtSetDevice切换单进程多上下文一个进程可创建多个 Context每个 Context 关联一个 Device单进程多 Stream一个 Context 可创建多个 Stream实现任务并行多进程隔离不同进程的 Runtime 实例完全隔离各自维护独立的资源状态1.3 核心模块介绍1.3.1 Runtime 全局管理组件职责单例管理全局资源包括设备、上下文、程序、内核的创建、引用计数和销毁。核心流程全局资源初始化与去初始化设备获取与释放DeviceRetain/DeviceRelease主上下文管理PrimaryContextRetain/PrimaryContextRelease内核注册与查找KernelRegister/KernelLookup性能分析启停ProfilerStart/ProfilerStop1.3.2 Device 设备管理组件职责管理昇腾 AI 处理器的设备资源对外提供计算设备设置重置查询和配置功能。内部包括了设备初始化、启动、停止、状态管理、任务提交、资源池管理等能力。核心流程设备初始化驱动初始化 → 获取设备属性 → 创建资源池 → 启动调度引擎任务提交检查设备状态 → Engine.SubmitTask → Stream 分配 → 发送到 SQ错误处理检测错误 → 设置设备状态 → 停止设备 → 触发回调1.3.3 Context 上下文管理组件职责管理计算设备的执行上下文环境。对外提供上下文创建销毁属性查询、配置接口。内部关联 Device 和 Stream管理程序加载和内核执行等。核心流程上下文创建关联 Device → 创建默认 Stream程序加载BinaryLoad → 加载内核二进制到设备内核执行KernelLaunch → 提交任务到 Stream1.3.4 Memory 内存管理组件职责管理设备内存和主机内存的分配、操作和释放。对外提供内存申请释放、内存拷贝、内存设置等接口。内部支持多种内存类型管理、内存池机制、异步内存操作、物理内存管理和进程间内存共享。核心流程内存分配参数校验 → 选择内存类型 → 调用驱动分配 → 返回地址内存拷贝确定拷贝方向 → 创建拷贝任务 → 提交到 Stream → DMA 执行内存释放地址校验 → 调用驱动释放 → 更新资源池1.3.5 Stream 流管理组件职责管理Device提供的逻辑任务队列对外提供Stream创建、销毁属性配置流同步和状态管理等接口。内部通过 SQ/CQ 机制与硬件交互实现任务的异步执行。核心流程流创建分配 streamId → 绑定 SQ/CQ → 初始化资源任务提交AllocTask → 填充参数 → 发送到 SQ → 等待 CQ 完成流同步Synchronize → 等待所有任务完成 → 返回结果1.3.6 Kernel 核函数管理组件职责管理 AI CoreAI Cube、AI Vector、AICPU 等算子二进制的注册、查找和执行。支持按核函数名称/核函数标识两种查找方式。核心流程二进制注册aclrtBinaryLoadFromFile/FromData → BinaryLoader::Load → Program::Register → UnifiedKernelRegisterElfProgram或 RegisterCpuKernelPlainProgram内核查找aclrtBinaryGetFunction → Program::GetKernelByName按核函数名称或 aclrtBinaryGetFunctionByEntry → Program::AllKernelLookup按核函数标识二分查找设备加载Program::Load2Device → 分配设备内存 4K 对齐 H2D 拷贝内核执行Kernel::GetFunctionDevAddr → 返回设备端函数地址 → 配合 ArgLoader 加载参数 → 下发 Task1.3.7 Task 任务管理组件职责管理各类任务的创建、执行和回收支持多种任务类型包括计算类任务内存拷贝任务事件同步类任务等等。核心流程任务分配TaskFactory.AllocTask → 填充 TaskInfo任务提交填充 SQE → 发送到 SQ → 等待 CQ任务回收从 CQ 获取完成状态 → RecycleTask → 更新资源池1.3.8 Event 事件同步组件职责提供同步机制Event是用于流间任务的同步支持事件记录、等待和状态查询和事件时间戳功能。核心流程事件记录EventRecord → 在 Stream 中记录位置事件等待EventWait → 等待事件完成状态查询EventQuery → 返回事件状态1.4 核心模块类关系模块类图核心模块关系关系说明Runtime → DeviceRuntime 管理所有设备实例通过 DeviceRetain/Release 管理引用计数Runtime → ContextRuntime 管理主上下文每个设备对应一个主上下文Runtime → ProgramRuntime 维护 Program支持内核二进制管理Program → KernelProgram 包含多个 Kernel通过 kernelNameMap_ 和 KernelTable_ 支持按名称和 tilingKey 注册查找PlainProgram → ProgramPlainProgram 继承 Program管理 CPU 算子简单二进制ElfProgram → ProgramElfProgram 继承 Program管理 ELF 内核解析与注册BinaryLoader → ProgramBinaryLoader 加载二进制创建 ProgramModule → ProgramModule 将 Program 二进制加载到设备侧内存Device → StreamDevice 包含多个 Stream 实例Device → EventDevice 包含多个 Event 实例管理事件注册与销毁Context → StreamContext 创建和管理 Stream作为 Stream 的容器Context → DeviceContext 关联 Device持有设备引用Stream → TaskInfoStream 分配和管理任务信息Stream → ContextStream 关联 Context持有上下文引用Stream → DeviceStream 关联 Device持有设备引用Event → DeviceEvent 关联 Device持有设备引用Event → ContextEvent 关联 Context持有上下文引用TaskInfo → KernelTaskInfo 关联 Kernel指向执行的内核函数2 特性功能介绍2.1 ACL Graph流捕获特性功能说明支持流捕获允许将 Stream 中的任务序列捕获为可复用的图结构实现任务下沉到 Device 执行减少 Host 侧任务下发开销。性能收益如下图所示特性设计初衷在主流框架如 PyTorch采用的 Eager 模式下每个操作或任务都是边下发边执行这种模式带来便捷的调试功能但同时也带来了 Host 的下发开销。随着性能优化的深入这些 Host 开销逐渐成为瓶颈。通过捕获 Stream 任务到模型中并执行可以将相关任务下沉到 Device 上执行从而减少 Host 开销。ACL Graph支持如下功能单流捕获将单个 Stream 上的任务序列捕获为可复用的图结构通过aclmdlRICaptureBegin/End接口将任务暂存到模型中支持多次调用aclmdlRIExecuteAsync执行减少 Host 侧重复下发开销。捕获过程中禁止对 Stream、Event、Device、Context 的同步或查询操作。跨流捕获通过 Event 建立 Stream 间依赖关系将多个 Stream 上的任务捕获到同一模型中。主流调用aclmdlRICaptureBegin开始捕获其他 Stream 通过aclrtRecordEvent/StreamWaitEvent直接或间接依赖主流进入捕获状态最终需通过 Event 返回主流实现跨 Stream 任务协同执行。任务更新支持运行时更新已捕获任务的参数或任务本身。提供两种方式分界点捕获将待更新任务前后分模型执行适合大量任务更新和任务组标记更新通过aclmdlRICaptureTaskGrpBegin/End标记待更新任务支持并发更新适合少量任务更新适配动态 Shape 或参数调整场景。2.2 Snapshot进程快照特性功能说明对外提供aclrtSnapShot*接口支持Context/算子/Driver/设备全栈控制信息支持进程状态保存和恢复用于故障快速恢复。本特性支持回调机制允许业务层自定义快照状态的保存与恢复逻辑架构上具备更强的可扩展性。特性设计初衷大规模AI集群的故障恢复效率直接影响训练任务的可用性与资源利用率。传统故障恢复链路涉及容器调度、进程重建、主机与设备建链、算子编译、权重加载等多个串行环节单次恢复耗时可达十余分钟万卡规模下训练中断的算力损失极为可观。快照机制将关键执行状态提前持久化故障发生后跳过冗长的初始化流程直接从快照点恢复可将训练任务恢复时间压缩至分钟以内推理服务冷启动同样获得数量级提升。特性功能使用场景和价值弹性推理任务快速冷启NPU任务快速切换容错的长时运行任务2.3 Fusion任务融合特性功能说明对外提供rtFusionLaunch接口支持多个不同类型子任务AI Core、AI CPU、CCU等的融合执行。由于通过将多个算子或任务组合为一个融合任务提交减少任务调度开销更重要的是调度器会采用gang-sched调度模式在确保融合算子所需的所有计算单元满足后一并发起调度。特性设计初衷在传统模式下若要并行调度多个不同类型的任务时要将多个任务分别提交到不同 Stream 。然而调度器并不感知不同流上任务的相关性也就不会确保这些并行任务资源满足后同时调度。因此传统调度方式要么会导致先调度的任务等待后调度的任务导致核空闲浪费甚至会产生任务死锁问题。任务融合调度功能应运而生。Fusion 支持如下子任务类型AI Core 任务AI Core 算子执行支持 AI Core、AI Cube、AI Vector 等不同计算单元。AI CPU 任务AI CPU 算子执行在 CPU 上运行的算子。CCU 任务CCU任务(Collective Communication Unit集合通信处理单元)。典型融合组合模式AI CPU AI CoreAI CPU 算子和AI Core算子融合调度执行实现AI CPU和AI Core的计算并行或通算并行业务。CCU AI CoreCCU 任务和AI Core 算子融合调度执行实现通算并行业务。3 设计原则3.1 架构设计原则原则说明实现方式分层设计采用 API/Feature/Core/Driver 四层架构分离确保各层职责清晰、边界明确目录结构按层级划分api/、feature/、core/src/、driver/核心层精简核心层作为 Runtime 最小功能集合支持所有形态的复用与依赖定义核心功能集合基于单一职责原则界定核心对象的能力边界特性高内聚特性功能层实现端到端的接口定义与功能实现确保模块独立性特性以独立目录组织feature/aclgraph、feature/snapshot、feature/model特性可插拔特性功能采用独立目录管理支持按需加载与灵活扩展可按特性目录进行选择性编译和动态加载抽象接口Device 采用抽象接口设计实现接口与实现解耦Device → GroupDevice → RawDevice 三层继承体系硬件差异适配通过 config/ 目录统一管理不同芯片的配置差异按芯片型号组织配置config/as31xm1/、config/bs9sx1a/ 等3.2 高性能设计原则Runtime 提供极致性能运行时功能代码遵循高性能设计原则。原则说明任务预分配TaskFactory 预分配任务对象减少分配开销资源池复用内存、Event、Notify 池复用避免频繁创建销毁SQ/CQ 池化多 Stream 共享 SQ/CQ 资源原子状态关键状态使用原子操作减少锁开销异步任务提交任务异步提交不阻塞调用线程内核表快速查找KernelTable 采用二分查找优化查找效率本架构文档基于源码src/runtime/core/src/分析。【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考