CANN/runtime Model模块架构
Model 模块架构【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime1. 模块概述功能介绍Model 模块负责管理计算图的执行模型包括模型创建、Stream 绑定、任务加载、模型执行和销毁等全生命周期管理。支持普通模型Normal Model和捕获模型Capture Model两种类型通过 SQ/CQ 机制实现任务调度和执行。设计目标提供统一的模型管理接口支持多 Stream 绑定和调度实现 Task 的批量提交和执行支持 Label 分配和跳转控制提供模型执行同步/异步模式2. 使用场景与对外接口2.1 使用场景场景一创建并执行计算模型使用 ACL 接口aclmdlRI modelRI; aclmdlRIBuildBegin(modelRI, 0); // 开始构建模型 aclmdlRIBindStream(modelRI, stream, ACL_MODEL_STREAM_FLAG_HEAD); // 绑定 Stream // 添加任务到 stream aclmdlRIEndTask(modelRI, stream); // 标记任务结束 aclmdlRIBuildEnd(modelRI, nullptr); // 结束构建 aclmdlRIExecute(modelRI, -1); // 同步执行 aclmdlRIDestroy(modelRI); // 销毁模型场景二异步模型执行使用 ACL 接口aclmdlRIExecuteAsync(modelRI, execStream); // 通过 Stream 同步等待执行完成 aclrtSynchronizeStream(execStream);2.2 对外接口ACL 接口文件位置说明aclmdlRIBuildBegin()include/external/acl/acl_rt.hsrc/acl/aclrt_impl/model_ri.cpp创建模型开始构建aclmdlRIDestroy()include/external/acl/acl_rt.hsrc/acl/aclrt_impl/model_ri.cpp销毁模型aclmdlRIBindStream()include/external/acl/acl_rt.hsrc/acl/aclrt_impl/model_ri.cpp绑定 Stream 到模型aclmdlRIUnbindStream()include/external/acl/acl_rt.hsrc/acl/aclrt_impl/model_ri.cpp解绑 StreamaclmdlRIExecute()include/external/acl/acl_rt.hsrc/acl/aclrt_impl/model_ri.cpp同步执行模型aclmdlRIExecuteAsync()include/external/acl/acl_rt.hsrc/acl/aclrt_impl/model_ri.cpp异步执行模型aclmdlRIBuildEnd()include/external/acl/acl_rt.hsrc/acl/aclrt_impl/model_ri.cpp完成模型构建LoadCompleteaclmdlRIEndTask()include/external/acl/acl_rt.hsrc/acl/aclrt_impl/model_ri.cpp标记任务结束aclmdlRISetName()include/external/acl/acl_rt.hsrc/acl/aclrt_impl/model_ri.cpp设置模型名称aclmdlRIAbort()include/external/acl/acl_rt.hsrc/acl/aclrt_impl/model_ri.cpp终止模型执行3. 架构总览3.1 整体设计思路Model 采用两层继承结构基类 Model 提供普通模型的完整功能。每个 Model 绑定多个 Stream通过 ModelExecuteTask 提交执行任务使用 Notify 实现执行完成通知。设计点说明Model 作为任务容器绑定多个 Stream统一管理 SQE 下发和执行Stream 作为任务队列每个 Stream 维护 SQ 任务序列支持任务回收Label 实现控制流Model 分配 Label IDStream 记录跳转点headStreams 机制标记入口 StreamExecute 时从这里激活执行执行流机制下发模型执行任务激活模型流执行3.2 架构分层图3.3 Model-Stream-Label 三层架构关系3.4 核心模块交互图含硬件交互本节通过时序图展示 AutoSplit与非 AutoSplit 两种场景的关键差异。3.4.1 Stream 绑定阶段差异说明 | 对比项 | AutoSplit 模式 | 非 AutoSplit 模式 | |--------|----------------|-------------------| | 绑定时机 | 仅 Runtime 侧软件绑定 | 立即提交硬件绑定任务 | | 硬件交互 | LoadComplete 时才建立硬件关系 | 绑定时立即写入 SQ | | 任务队列 | Host SQE buffer可扩展 | 固定硬件 SQ |3.4.2 任务提交阶段差异说明 | 对比项 | AutoSplit 模式 | 非 AutoSplit 模式 | |--------|----------------|-------------------| | SQE存储位置 | Host sqeBuffer_ | 设备 SQ | | 容量限制 | 无限制Slave Stream 扩展 | 固定深度 | | 提交时机 | LoadComplete 时批量下发 | 实时提交 | | Slave Stream | 任务接近32K时自动创建 | 不支持 |3.4.3 EndGraph 标记阶段3.4.4 LoadComplete 阶段差异说明 | 对比项 | AutoSplit 模式 | 非 AutoSplit 模式 | |--------|----------------|-------------------| | SQ/CQ 分配 | LoadComplete 时动态分配 | Stream 创建时已分配 | | Stream 切换 | SqSwitchStreamBatch 批量切换 | 不需要切换 | | 硬件绑定 | LoadComplete 时才建立硬件关系 | 绑定时已建立 | | Slave Stream | 需处理所有 Master Slave | 仅处理绑定的 Stream |3.4.5 模型执行阶段说明模型执行阶段AutoSplit 与非 AutoSplit 流程统一。差异在于 SQE 来源AutoSplitSQE 已在 LoadComplete 时从 Host Buffer 批量下发到设备 SQ非 AutoSplitSQE 在任务提交时已直接写入设备 SQ3.4.6 模型销毁阶段4. 详细设计4.1 核心流程模型创建与初始化流程流程说明用户通过 ACL 接口发起模型创建请求Runtime 创建 Model 对象分配唯一的 modelId初始化 Label 分配器支持后续的分支跳转控制创建 Notifier 对象用于模型执行完成后的通知机制申请设备侧内存用于存储模型元数据准备参数句柄记录表管理任务的参数内存Stream 绑定流程流程说明步骤AutoSplit 模式非 AutoSplit 模式1用户请求将 Stream 绑定到 Model用户请求将 Stream 绑定到 Model2检查 Stream 状态防止重复绑定检查 Stream 状态防止重复绑定3仅在 Runtime侧添加到 streams_列表添加到 streams_列表4判断是否为 head Stream判断是否为 head Stream5建立双向引用关系建立双向引用关系6不立即提交硬件任务创建维护任务通知硬件7等待 LoadComplete提交任务到设备硬件返回 CQE8绑定完成软件侧绑定完成可开始提交任务关键差异AutoSplit模式下Stream 绑定仅完成软件侧的记录硬件绑定延迟到 LoadComplete 阶段执行这样可以实现更灵活的任务队列管理。任务提交流程流程说明对比项AutoSplit 模式非 AutoSplit 模式容量检查检查 curStreamSqeCount 是否接近32K无容量限制检查Slave创建自动创建 Slave Stream 扩展容量不支持SQE存储写入 Host sqeBuffer_直接写入设备 SQ提交时机LoadComplete 时批量下发实时提交关键机制HOST_SQ_MAX_COUNT 32KHost SQE buffer 最大容量AutoSplitSqContext维护 curStreamSqeCount 和 slaveStreams 列表Slave Stream当任务数量接近32K时自动创建实现无限队列深度EndGraph 标记流程流程说明步骤AutoSplit 模式非 AutoSplit 模式1用户标记任务下发结束用户标记任务下发结束2创建 EndGraph 任务创建 EndGraph 任务3创建 Notify 对象申请 NotifyId创建 Notify 对象申请 NotifyId4SQE 写入 Host BufferEndGraph 任务写入 SQ5等待 LoadComplete 批量下发立即下发成功6硬件执行时触发 Notify Signal硬件执行时触发 Notify SignalModel LoadComplete 流程流程说明步骤AutoSplit 模式非 AutoSplit 模式1BuildSqCqForAutoSplit()直接遍历 StreamList_2为所有 Stream含 Slave分配 SQ/CQSQ/CQ 已在创建时分配3构建 modelSwitchInfo_不需要4SqSwitchStreamBatch 批量切换不需要5SendSqe 批量下发 SQE下发 SQE6EnterBindStream 建立硬件绑定已建立硬件绑定7SQ Tail配置 SQ Tail8SetIsTsBind(true)不需要9isModelComplete_trueisModelComplete_true关键差异AutoSplit 模式在 LoadComplete 时需要动态分配 SQ/CQ 资源批量切换 Stream 到 SQ建立硬件绑定关系EnterBindStream标记 Stream 已绑定到 TSSetIsTsBind模型执行流程流程说明步骤说明AutoSplit 与非 AutoSplit 差异1用户调用 Execute触发模型执行无差异2准备执行环境获取执行 Stream无差异3检查模型状态确保 LoadComplete 已完成无差异4创建 ExecuteTask设置执行参数无差异5提交 ExecuteTask 到设备写入 SQ无差异6硬件 TS 接收执行指令激活 headStreams_无差异7TS 从 SQ 读取 SQESQE来源差异8AICore/AIVector 执行计算任务无差异9执行到 EndGraph 任务触发 Notify Signal无差异10Host 端等待完成NtyWait无差异11收到完成信号后轮询 CQ 状态无差异12确认所有任务完成返回成功无差异SQE来源差异说明AutoSplit 模式SQE 已在 LoadComplete 阶段从 Host sqeBuffer_ 批量下发到设备 SQ任务提交时写入 Host Buffer延迟提交LoadComplete 时一次性批量下发所有 SQE支持无限队列深度Slave Stream 扩展非 AutoSplit 模式SQE 在任务提交时已直接写入设备 SQ任务提交时直接写入设备 SQ实时提交EndGraph 标记时立即下发固定队列深度执行阶段统一无论哪种模式执行时 SQE 已全部驻留在设备 SQ硬件 TS 直接从 SQ 读取并执行流程完全一致。Label 控制流设置流程流程说明用户创建 Label向 Model 申请唯一的 LabelIdModel 通过 LabelAllocator 分配 ID记录映射关系Label 绑定到 Model 和 Stream用户调用 Label::Set在 Stream 上设置跳转目标点记录当前位置到设备侧地址devDstAddr_生成 SetLabel SQE写入 Stream 缓存跳转点设置完成等待后续跳转Label 控制流跳转流程流程说明用户调用 LabelSwitch接口发起跳转指令获取目标 Label 的设备侧地址devDstAddr_生成 LabelSwitch SQE包含目标跳转地址写入当前 Stream 的 SQ硬件 TS 执行到 Switch操作 跳转到目标位置模型销毁流程流程说明用户调用 Destroy触发模型销毁释放 Notify 资源删除 endGraphNotify_释放设备内存清理参数句柄记录释放 DMA 地址记录解绑所有 Label解除与 Model 的关系释放 LabelAllocator 资源创建销毁任务通知硬件销毁模型硬件确认销毁返回 CQE清理 Model 对象从 Context 移除模型销毁完成释放所有资源4.2 核心机制详解Model 容器管理机制设计思想Model 作为计算图的容器统一管理所有绑定的 Stream 和 Label实现任务批量下发和执行入口控制。机制说明Stream 绑定管理维护所有 Stream 列表headStreams_ 作为执行起点Label 控制流管理分配 Label ID管理跳转关系参数内存管理记录任务参数句柄避免重复分配执行控制Notify 机制实现异步等待状态标记确保执行顺序Stream 任务队列机制设计思想Stream 作为任务队列缓存 SQE支持任务回收和自动 SQ 切分。机制说明任务缓存delayRecycleTaskid_ 记录任务 ID等待批量下发SQE 缓冲sqeBuffer_ 存储任务描述符准备写入硬件 SQ位置映射posToTaskIdMap_ 记录 SQE 位置与任务的对应关系自动切分超过 32K 任务时自动创建 Slave Stream 扩展容量Label 控制流跳转机制设计思想Label 实现跨 Stream 跳转和循环控制通过设备侧地址实现硬件级跳转。机制说明Label 分配Model 通过 LabelAllocator 分配唯一 IDLabel 设置在目标 Stream 上记录跳转位置设置设备侧地址Label 跳转读取设备地址生成跳转 SQE硬件执行跳转控制流实现支持循环同 Stream和跨 Stream 任务切换Notify 完成通知机制设计思想Notify 实现硬件完成通知Host 通过等待 Notify 获取执行结果。机制说明Notify 创建EndGraph 任务申请 NotifyId绑定到 ModelNotify 等待Host 通过 NtyWait 轮询 Notify ValueNotify 触发硬件执行到 EndGraphSignal Notify更新 Value完成确认Host 检测到 Value 匹配确认执行完成4.3 模块职责划分Model 模块按照功能划分为核心容器、任务管理、接口层、辅助工具等子模块各模块职责清晰协同完成模型全生命周期管理。核心容器模块模块名称核心职责代码位置主要功能Model 核心类计算图容器统一管理 Stream/Label/Notifysrc/runtime/core/inc/model/model.hppsrc/runtime/feature/model/model.cc• 绑定/解绑 Stream• 分配/释放 Label• 执行同步/异步模型• 批量下发 SQE• 管理 argLoaderRecordModel C 接口对外 C 风格 API 封装src/runtime/api/api_c_model.cc• rtModelCreate• rtModelDestroy• rtModelBindStream• rtModelExecute• rtEndGraph• rtModelLoadComplete任务管理模块任务类型任务职责代码位置触发时机ModelExecuteTask触发模型执行激活 headStreamssrc/runtime/core/src/task/task_info/model/model_execute_task.ccsrc/runtime/core/src/task/task_info/model/model_execute_task_v100.ccsrc/runtime/core/src/task/task_info/model/model_execute_task_v200_base.ccExecute/ExecuteAsync 调用时ModelMaintainceTask维护 Stream 与 Model 关系src/runtime/core/src/task/task_info/model/model_maintaince_task.ccsrc/runtime/core/src/task/task_info/model/model_maintaince_task_v100.ccsrc/runtime/core/src/task/task_info/model/model_maintaince_task_v200_base.ccBindStream/UnbindStreamLoadComplete 时ModelGraphTaskEndGraph 标记创建 Notifysrc/runtime/core/src/task/task_info/model/model_graph_task.ccsrc/runtime/core/src/task/task_info/model/model_graph_task_v100.ccsrc/runtime/core/src/task/task_info/model/model_graph_task_v200_base.ccrtEndGraph 调用时辅助工具模块工具模块辅助职责代码位置服务对象LabelAllocatorLabel ID 分配器src/runtime/core/inc/launch/label.hppModel Label 管理Notify硬件完成通知对象src/runtime/core/inc/notify/notify.hppsrc/runtime/core/src/notify/notify.ccEndGraph Notify接口适配层适配层适配职责代码位置服务对象ACL 接口封装ACL → RT 接口映射src/acl/aclrt_impl/model_ri.cpp用户调用 aclmdlRI 接口API 装饰器API 错误处理装饰src/runtime/core/src/api_impl/api_decorator.ccApiImpl 调用链5 关键文件路径索引模块类别文件路径核心内容Model 头文件src/runtime/core/inc/model/model.hppModel 类定义、数据结构Model 实现src/runtime/feature/model/model.ccModel 核心实现Model C 接口src/runtime/feature/model/model_c.ccC 风格接口实现Model Execute Tasksrc/runtime/core/src/task/task_info/model/model_execute_task.cc执行任务实现Model Execute Task V100src/runtime/core/src/task/task_info/model/model_execute_task_v100.ccV100 版本适配Model Execute Task V200src/runtime/core/src/task/task_info/model/model_execute_task_v200_base.ccV200 版本适配Model Maintaince Tasksrc/runtime/core/src/task/task_info/model/model_maintaince_task.cc维护任务实现ACL 接口头文件include/external/acl/acl_rt.hACL 外部接口定义ACL 接口实现src/acl/aclrt_impl/model_ri.cppACL 接口实现aclmdlRI 系列【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

NtyTcp内存池设计原理:高效内存管理的实现细节

NtyTcp内存池设计原理:高效内存管理的实现细节

NtyTcp内存池设计原理:高效内存管理的实现细节 【免费下载链接】NtyTcp 单线程用户态TCP/IP协议栈,epoll实现,包含服务器案例,并发测试案例 项目地址: https://gitcode.com/gh_mirrors/nt/NtyTcp NtyTcp作为一款单线程用户…

2026/7/11 13:22:56 阅读更多 →
Executor-Advisor架构实战:GPT-5.6与Fable 5高效AI协作方案

Executor-Advisor架构实战:GPT-5.6与Fable 5高效AI协作方案

最近在AI应用开发中,Executor-Advisor架构模式因其成本效益和性能优势受到广泛关注。特别是在GPT-5.6与Fable 5的组合方案中,这种模式展现出了显著的技术价值。本文将深入探讨这一架构的具体实现,从基础概念到完整实战,帮助开发者…

2026/7/11 13:22:56 阅读更多 →
BootDo扩展开发指南:如何基于框架定制企业级应用

BootDo扩展开发指南:如何基于框架定制企业级应用

BootDo扩展开发指南:如何基于框架定制企业级应用 【免费下载链接】bootdo 项目地址: https://gitcode.com/gh_mirrors/bo/bootdo BootDo是一个高效率、低封装、面向学习型的开源Java EE开发框架,基于SpringBoot构建,为企业级应用开发…

2026/7/11 13:20:47 阅读更多 →

最新新闻

经常跑线下采访的记者,智能笔记生成工具怎么选才好用

经常跑线下采访的记者,智能笔记生成工具怎么选才好用

2026年经常跑线下采访的记者,或是需要做访谈调研、整理课堂录音的学生,选智能笔记生成工具其实不用追热门瞎买,核心盯三个判断标准就行:第一是语音转写准确率够不够,能不能适配口音、专业术语;第二是能不能…

2026/7/11 14:09:17 阅读更多 →
重新发现XCOM 2模组管理:AML启动器的革命性架构解析

重新发现XCOM 2模组管理:AML启动器的革命性架构解析

重新发现XCOM 2模组管理:AML启动器的革命性架构解析 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/…

2026/7/11 14:07:17 阅读更多 →
北光恒电运维心得:泰克MSO58示波器常见故障排查与保养技巧

北光恒电运维心得:泰克MSO58示波器常见故障排查与保养技巧

泰克MSO58是5系列旗舰八通道混合信号示波器,凭借多通道同步测试、高带宽、高精度采样性能,广泛应用于新能源电控调试、车载电子开发、高速数字电路测试、工业精密设备检测等高端研发场景。八通道并行测试的优势,让它成为多信号同步分析的核心…

2026/7/11 14:07:17 阅读更多 →
StormScope-GOES-MRMS配置指南:轻松搭建你的高分辨率气象预测系统

StormScope-GOES-MRMS配置指南:轻松搭建你的高分辨率气象预测系统

StormScope-GOES-MRMS配置指南:轻松搭建你的高分辨率气象预测系统 【免费下载链接】stormscope-goes-mrms 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/stormscope-goes-mrms 想要快速搭建一个专业级的气象预测系统吗?StormScope-GOES-…

2026/7/11 14:05:17 阅读更多 →
3种方式用Fort Firewall解决Windows网络流量监控难题

3种方式用Fort Firewall解决Windows网络流量监控难题

3种方式用Fort Firewall解决Windows网络流量监控难题 【免费下载链接】fort Fort Firewall for Windows 项目地址: https://gitcode.com/GitHub_Trending/fo/fort 你是否曾经遇到过这样的场景:Windows系统后台某个应用突然开始疯狂上传下载,网络变…

2026/7/11 14:03:16 阅读更多 →
ScreenshotFramer高级技巧:使用变量和条件逻辑创建动态截图

ScreenshotFramer高级技巧:使用变量和条件逻辑创建动态截图

ScreenshotFramer高级技巧:使用变量和条件逻辑创建动态截图 【免费下载链接】ScreenshotFramer Create localized App Store screenshots 项目地址: https://gitcode.com/gh_mirrors/sc/ScreenshotFramer ScreenshotFramer是一款强大的本地化App Store截图创…

2026/7/11 14:01:16 阅读更多 →

日新闻

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想要让AI图像生成真正听从你的指挥吗&…

2026/7/11 0:02:12 阅读更多 →
PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

1. 项目背景与核心需求 在工业控制、安防系统和智能家居等领域,可靠的声音警报系统是不可或缺的基础组件。传统蜂鸣器存在音量不足、音质模糊等问题,而基于压电陶瓷技术的EPT-14A4005P蜂鸣器配合PIC18F45K42微控制器,能够构建一套适应性强、音…

2026/7/11 0:04:12 阅读更多 →
大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm Attention 的 CUDA Kernel 手写与验证 一、GPU 利用率 30%:分开的算子吃掉所有带宽 推理服务的 GPU 利用率监测显示一个反直觉的现象:计算核心(SM)利用率不到 30%,但…

2026/7/11 0:04:12 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/10 19:03:29 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/9 21:41:05 阅读更多 →

月新闻