news 2026/5/10 0:29:57

CANN/ge引擎特性分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/ge引擎特性分析

Engine 特性分析

【免费下载链接】geGE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力,并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge

1 特性背景

1.1 问题域

昇腾 AI 处理器是一种异构计算架构,其芯片内部集成了多种不同类型的计算单元——AI Core 负责密集矩阵运算(如卷积、MatMul),Vector Core 负责向量运算(如 ElementWise),AI CPU 负责不适合硬件加速的通用计算,DVPP 负责图像视频预处理,HCCL 负责多卡分布式通信。不同类型的算子需要由不同的计算单元执行,而一个完整的神经网络模型通常包含多种类型的算子。

GE(Graph Engine)作为昇腾的图编译器和执行器,需要解决的核心问题就是:如何将一个包含异构算子的计算图,正确且高效地映射到芯片上多种不同的执行单元上。这就是 Engine(引擎)特性存在的意义。

1.2 引擎总览

引擎注册名典型算子引擎目录
AI Core 融合引擎AIcoreEngineConv2D、MatMul、BiasAdd、ReLU、BatchNormcompiler/engines/nn_engine/
Vector Core 引擎VectorEngineElementWise、Sqrt、Exp、Log、Castcompiler/engines/nn_engine/
FFTS+ 组合引擎ffts_plus跨引擎融合算子、AIC+AIV 混合任务compiler/engines/ffts_engine/
AI CPU Ascend 引擎aicpu_ascend_kernelSparseToDense、Minimum、Maximum、Roundcompiler/engines/cpu_engine/aicpu_engine/
AI CPU TF 引擎aicpu_tf_kernelTensorFlow 格式的 AI CPU 算子compiler/engines/cpu_engine/tf_engine/
Host CPU 引擎DNN_VM_HOST_CPU_OP_STORE常量折叠算子、不支持昇腾设备的回退算子compiler/engines/cpu_engine/hostcpu_engine/base/host_cpu_engine/
HCCL 通信引擎ops_kernel_info_hcclAllReduce、Broadcast、AllGather、ReduceScattercompiler/engines/hccl_engine/
DVPP 预处理引擎dvpp_ops_kernelImageDecode、Resize、Crop、ColorConvertcompiler/engines/dvpp_engine/
RTS 运行时服务引擎DNN_VM_RTS_OP_STOREStreamSwitch、StreamActive、LabelGoto、LabelSetcompiler/engines/rts_engine/
GE Local 引擎DNN_VM_GE_LOCAL_OP_STORENetOutput、NoOp、Const、PhonyConcat、PhonySplitcompiler/engines/local_engine/
自定义算子引擎DNN_VM_CUSTOM用户自定义 Ascend C 算子compiler/engines/custom_engine/
DSA 引擎DSAEngineDSA 专用算子compiler/engines/nn_engine/(DSA 子模块)
  • 注:“AI Core 融合引擎” 和 “Vector Core 引擎”统一称为FE(Fusion Engine, 融合引擎)

1.3 设计哲学

Engine 特性遵循三个核心设计原则:

  • 插件化:每种引擎编译为独立的动态库(.so),通过统一的 C 函数接口与 GE 框架交互。引擎可以独立开发、独立编译、独立部署,GE 框架无需感知引擎内部实现。
  • 优先级驱动自动选择:系统通过代价模型(Cost Model)为每个算子自动选择最优引擎,用户无需手动指定。代价越低(COST_0COST_10)的引擎越优先被选择,优先选择意味着更高性能的执行路径。
  • 编译期决策 + 运行期执行:引擎选择和图分区在编译期完成,运行期直接按编译产物的执行计划驱动。这避免了运行时的引擎分发开销。

2 用户使用场景

2.1 场景一:模型训练(默认引擎选择)

用户使用 PyTorch 或 TensorFlow 训练模型时,GE 自动将模型中的计算算子分配到 AI Core 引擎,通信算子分配到 HCCL 引擎,控制流算子分配到 RTS 引擎。用户无需感知引擎存在。

典型流程:

  1. 用户调用Session::AddGraph添加计算图
  2. GE 编译器通过EnginePlacer自动为每个算子选择引擎
  3. EnginePartitioner按引擎分区为子图
  4. 各引擎对分配给自己的子图做引擎特定的优化(如 FE 融合引擎做算子融合)
  5. 编译产物加载到设备上执行

2.2 场景二:引擎配置与排除

用户可以通过配置选项干预引擎选择行为:

  • ge.engineType(即CORE_TYPE):设置核心计算引擎为AIcoreEngine(默认)或VectorEngine。两者互斥——选择 VectorCore 时自动排除 AI Core 引擎,反之亦然。这适用于不同型号芯片上计算单元配置不同的场景。
  • ge.exec.exclude_engines:通过加速器名称排除特定引擎,例如排除 DVPP 引擎使视觉预处理算子回退到其他引擎执行。

2.3 场景三:ACL 单算子执行

用户通过 ACL C API 执行单个算子时,可以通过aclopEngineType参数指定算子执行引擎:

  • ACL_ENGINE_SYS:由系统自动选择引擎(推荐)
  • ACL_ENGINE_AICORE:指定算子在 AI Core 上执行(影响编译产物的二进制格式,使用RT_DEV_BINARY_MAGIC_ELF魔数)
  • ACL_ENGINE_VECTOR:指定算子在 Vector Core 上执行(使用RT_DEV_BINARY_MAGIC_ELF_AIVEC魔数)

该参数通过aclopCompileaclopCompileAndExecuteaclopCompileAndExecuteV2以及aclopCreateKernel等 API 传入。

2.4 场景四:自定义算子引擎

用户开发自定义算子时,GE 提供DNN_VM_CUSTOM引擎(优先级最高,COST_0)用于承载自定义算子实现。自定义算子的OpsKernelInfoStore直接在OpsKernelManager初始化时创建,不需要编译为独立的 SO 文件。

2.5 场景五:Host CPU 回退执行

当某些算子不支持在昇腾设备上执行时,可以通过hostExecFlag选项将算子回退到主机 CPU 执行。HostcpuEngineUpdatePass会在引擎重分配阶段标记这些算子为DNN_VM_HOST_CPU引擎。Host CPU 引擎的优先级最低(COST_10),只有在所有设备引擎都不支持时才会被选中。


3 接口

3.1 ACL 层枚举

定义于inc/external/acl/acl_op.haclopEngineType枚举:

枚举值含义
ACL_ENGINE_SYS系统自动选择引擎
ACL_ENGINE_AICORE指定 AI Core 引擎
ACL_ENGINE_VECTOR指定 Vector Core 引擎

当前状态:根据docs/graph_engine_api/aclopEngineType.md的官方文档,当前仅支持ACL_ENGINE_SYSACL_ENGINE_AICOREACL_ENGINE_VECTOR暂不支持。

3.2 ACL 算子编译与执行 API

以下 API 接受aclopEngineType参数:

API说明
aclopCompile编译算子时指定引擎类型
aclopCompileAndExecute编译并执行算子
aclopCompileAndExecuteV2V2 版编译并执行
aclopCreateKernel创建自定义 Kernel 时指定引擎类型
aclGenGraphAndDumpForOp生成并 dump 算子图

3.3 GE 内部枚举

定义于inc/graph_metadef/common/ge_common/ge_types.hge::OpEngineType枚举:

枚举值含义
ENGINE_SYS默认引擎
ENGINE_AICOREAI Core 引擎
ENGINE_VECTORVector 引擎
ENGINE_AICUBEAI Cube(不支持)
ENGINE_AIVECTORAI Vector(不支持)

ACL 层的aclopEngineType在编译流水线内部转换为ge::OpEngineType(在api/acl/acl_op_executor/single_op/compile/op_compiler.cppMakeCompileParam中完成转换)。

3.4 引擎配置选项

选项 Key类型含义
ge.engineTypestring核心引擎类型:"AIcoreEngine"(默认)或"VectorEngine",两者互斥
ge.exec.exclude_enginesstring排除指定引擎,逗号分隔的加速器名称
ge.aicoreNumint32配置 AI Core 数量
ge.exec.enableEngineParallelstring是否启用引擎并行执行
ge.exec.engineParallelConfigPathstring引擎并行配置文件路径
ac_parallel_enablestring"1"启用异构引擎间并行(如 AI CPU 与 AI Core 并行)

3.5 DNNEngine 基类接口

定义于inc/framework/engine/dnnengine.hDNNEngine类:

接口说明
Initialize(options)初始化引擎(默认空实现,由子类覆盖)
Finalize()终结引擎
GetAttributes(attr)获取引擎属性(DNNEngineAttribute
IsAtomic()是否为原子引擎

DNNEngineAttribute结构体包含以下字段:

字段类型含义
engine_namestring引擎名称
mem_typevector<string>内存类型(如 HBM)
compute_costPriorityEnum计算代价优先级(COST_0~COST_10
runtime_typeRuntimeType运行时类型:HOSTDEVICE
engine_input_formatFormat引擎输入格式
engine_output_formatFormat引擎输出格式
atomic_engine_flagbool是否为原子引擎

4 具体实现

4.1 整体架构

4.2 引擎类型体系

GE 系统中存在三套相互配合的引擎类型体系:

编译期引擎(DNNEngine 体系):15 种引擎类型,均继承自DNNEngine基类,定义于compiler/engines/manager/engine/dnnengines.h

引擎类注册名优先级运行时类型原子引擎说明
CustomDNNEngineDNN_VM_CUSTOMCOST_0DEVICE用户自定义算子引擎
AICoreDNNEngineAIcoreEngineCOST_1DEVICEAI Core 矩阵计算引擎
FftsPlusDNNEngineffts_plusCOST_1DEVICEFFTS+ 融合引擎(组合引擎)
VectorCoreDNNEngineVectorEngineCOST_2DEVICEVector Core 向量计算引擎
DSADNNEngineDSAEngineCOST_2DEVICEDSA 引擎
AICpuDNNEngineDNN_VM_AICPU_ASCENDCOST_3DEVICEAI CPU Ascend 引擎
AICpuTFDNNEngineDNN_VM_AICPUCOST_4DEVICEAI CPU TensorFlow 引擎
DvppDNNEngineDNN_VM_DVPPCOST_5DEVICEDVPP 数字视觉预处理引擎
GeLocalDNNEngineDNN_VM_GE_LOCALCOST_9DEVICEGE 本地引擎(兜底)
HostCpuDNNEngineDNN_VM_HOST_CPUCOST_10HOST主机 CPU 引擎(最低优先级)
RtsDNNEngineDNN_VM_RTSCOST_2DEVICE运行时服务引擎
RtsFftsPlusDNNEngineDNN_VM_RTS_FFTS_PLUSCOST_2DEVICERTS FFTS+ 引擎
HcclDNNEngineDNN_HCCLCOST_2DEVICE集合通信引擎
AICpuFftsPlusDNNEngineDNN_VM_AICPU_FFTS_PLUSCOST_2DEVICEAI CPU FFTS+ 引擎
AICpuAscendFftsPlusDNNEngineDNN_VM_AICPU_ASCEND_FFTS_PLUSCOST_2DEVICEAI CPU Ascend FFTS+ 引擎

优先级排列规律:自定义引擎最高(0),专用硬件引擎次之(1-2),通用 CPU 引擎较低(3-5),兜底引擎最低(9-10)。

运行时 V2 引擎(NodeConverter 体系):定义于runtime/v2/engine/,通过REGISTER_NODE_CONVERTER宏注册,按引擎名+执行位置(placement)做节点 Lowering。

引擎目录说明
aicore/AI Core 节点 Lowering 和 kernel launch
aicpu/AI CPU 节点转换
custom/自定义算子 kernel
dsacore/DSA Core 节点转换
dvpp/DVPP 预处理节点转换
ffts_plus/FFTS+ 更新操作
gelocal/GE 本地引擎(Const、NetOutput、Variable、If、While 等)
rts/运行时服务节点转换

4.3 引擎注册机制

4.3.1 编译期引擎注册(EngineManager)

引擎注册采用轻量级属性载体 + 重量级插件能力的两层分离设计。

第一层:DNNEngine 注册(属性载体)

定义于compiler/engines/manager/engine/engine_manager.cc,入口函数GetDNNEngineObjs()逐一调用RegisterAiCoreEngine()RegisterVectorEngine()等 15 个注册函数。每个注册函数的内部模式一致:

  1. 构造DNNEngineAttribute结构体(名称、优先级、运行时类型等)
  2. 创建对应的DNNEngine子类实例(如AICoreDNNEngine
  3. 调用EngineManager::RegisterEngine(name, ptr)注册到全局engine_map_

DNNEngine本身只携带属性信息,不包含任何算子编译或执行逻辑。

第二层:OpsKernelInfoStore + GraphOptimizer + OpsKernelBuilder 注册(引擎能力)

每种引擎编译为独立的.so文件,存放于plugin/opskernel/目录下:

SO 文件引擎
libfe.soAI Core / Vector Core 融合引擎
libge_local_engine.soGE 本地引擎
librts_engine.soRTS 引擎
libaicpu_ascend_engine.soAI CPU Ascend 引擎
libhost_cpu_engine.soHost CPU 引擎
libaicpu_tf_engine.soAI CPU TF 引擎
libffts.soFFTS+ 引擎
libdvpp_engine.soDVPP 引擎
libhcom_graph_adaptor.soHCCL 引擎

每个 SO 导出标准 C 接口:Initialize()GetOpsKernelInfoStores()GetGraphOptimizerObjs()Finalize()OpsKernelManager::Initialize()通过PluginManager动态加载这些 SO 并调用接口获取组件对象。

这种两层分离的设计使得引擎发现(discovery)和引擎能力(capability)解耦——DNNEngine 负责"注册身份",OpsKernelInfoStore / GraphOptimizer / OpsKernelBuilder 负责实际工作。

4.3.2 运行时 V2 引擎注册(NodeConverter)

V2 运行时通过REGISTER_NODE_CONVERTERREGISTER_NODE_CONVERTER_PLACEMENT宏注册节点转换器:

// 注册宏定义(inc/graph_metadef/register/node_converter_registry.h) REGISTER_NODE_CONVERTER(type, func) REGISTER_NODE_CONVERTER_PLACEMENT(type, placement, func)

典型注册示例:

// AI Core 引擎,设备侧 REGISTER_NODE_CONVERTER_PLACEMENT(ge::kEngineNameAiCore.c_str(), kOnDeviceHbm, LoweringAiCoreNode); // AI CPU 引擎,设备侧 REGISTER_NODE_CONVERTER_PLACEMENT(ge::kEngineNameAiCpu.c_str(), kOnDeviceHbm, LoweringAiCpuNode); // Host CPU 引擎,主机侧 REGISTER_NODE_CONVERTER_PLACEMENT(ge::kEngineNameHostCpu.c_str(), kOnHost, LoweringAiCpuNode);

NodeConverterRegistry(单例)管理全局注册表,在编译期通过GraphConverter完成节点到 kernel 的映射。

4.4 引擎管理与调度

4.4.1 编译期管理器

DNNEngineManagercompiler/engines/manager/engine_manager/dnnengine_manager.h)是编译期的引擎管理核心,采用单例模式:

核心方法职责
Initialize()加载引擎 SO、调用GetDNNEngineObjs()注册所有 DNNEngine、解析engine_conf.json配置
GetDNNEngineName(node, exclude_engines)为算子选择引擎——遍历 OpInfo 列表,调用CheckSupported(),返回第一个支持的引擎
GetExcludeEngines()根据配置排除特定引擎(CORE_TYPE互斥 +EXCLUDE_ENGINES列表)
GetCompositeEngineName()查找子图是否全部属于同一组合引擎
IsStreamAssignSkip()根据引擎配置决定是否跳过流分配

OpsKernelManagercompiler/engines/manager/opskernel_manager/ops_kernel_manager.h)连接引擎和算子内核库:

核心方法职责
Initialize()加载插件 SO、收集所有 OpsKernelInfoStore 和 GraphOptimizer
InitOpsKernelInfo()构建全局算子信息索引(按compute_cost升序排序)
GetAllOpsKernelInfo()查询某算子类型在所有引擎中的 OpInfo 列表

engine_conf.jsoncompiler/engines/manager/engine_manager/engine_conf.json)定义调度配置:

配置项含义
independent是否需要独立流(仅 HCCL 引擎为 true)
attach是否附着到其他流
skip_assign_stream是否跳过流分配
4.4.2 引擎分配(EnginePlacer)

EnginePlacercompiler/graph/partition/engine_place.h)负责为图中每个节点分配引擎,核心流程:

引擎选择采用贪心策略——按优先级从高到低遍历,第一个CheckSupported()通过的引擎被选中。使用线程池(默认 16 线程)并行为节点选择引擎,通过 mutex 保护共享数据。

引擎重分配(ReAssignEngine())通过策略模式实现。EngineReAssignPass是策略接口,当前有两种实现:

  • DynamicDataFlowEngineReassignPass:动态数据流场景下的引擎重分配
  • HostcpuEngineUpdatePass:将标记了hostExecFlag的算子重新分配到 Host CPU 引擎
4.4.3 按引擎切分子图(EnginePartitioner)

EnginePartitionercompiler/graph/partition/engine_partitioner.h)根据引擎分配结果将计算图分割为子图:

分区采用Cluster-Based 贪心算法

  1. 初始化:为每个节点创建一个 Cluster
  2. 标记:按照引擎分配结果标记每个 Cluster 的引擎
  3. 合并:如果相邻 Cluster 属于同一引擎,且不存在多条数据路径(HasSecondPath检查),则合并
  4. 分裂:按合并后的 Cluster 边界插入PlaceHolderEnd节点

两级分区(Composite + Atomic)的设计原因:融合引擎(如 FFTS+)需要先看到完整的可融合区域做融合优化,原子引擎分区是在融合优化之后才做精细划分。

分区后,各子图被分配给不同引擎,通过线程池并行执行引擎特定的子图优化(OptimizeFusedGraph)。

4.5 各类引擎实现细节

4.5.1 nn_engine(AI Core / Vector Core 融合引擎)

目录compiler/engines/nn_engine/

SO 文件libfe.so

这是最核心、最复杂的引擎,负责 AI Core 和 Vector Core 上的所有密集计算。实现包含三大组件:

组件文件职责
FEOpsKernelInfoStoreoptimizer/ops_kernel_store/fe_ops_kernel_info_store.h算子信息管理(从 JSON 加载算子描述)、CheckSupported()检查支持性、CompileOp()调用 TBE 编译器
FEGraphOptimizeroptimizer/graph_optimizer/fe_graph_optimizer.h多阶段图优化(原始图优化、融合后优化、流图优化、全图优化),包含 FormatDtypeSetter、OpCompiler、TransNodeManager、BufferFusion 等子组件
AICoreOpsKernelBuilderoptimizer/ops_kernel_builder/aicore_ops_kernel_builder.h计算运行参数(workspace 大小)、生成设备执行任务

目录结构:

nn_engine/ fusion/ -- 融合规则管理 opskernel/ -- OpsKernelInfoStore 实现 optimizer/ graph_optimizer/ -- 核心图优化器及子优化器 ops_kernel_store/ -- FE OpsKernelInfoStore ops_kernel_builder/ -- FE OpsKernelBuilder fusion_manager/ -- 融合管理 cmo/ -- Cache Management Optimization utils/ -- 工具函数
4.5.2 cpu_engine(AICPU / HostCpu)

目录compiler/engines/cpu_engine/

SO 文件libaicpu_ascend_engine.solibhost_cpu_engine.solibaicpu_tf_engine.so

架构特点:

  • BaseEnginecommon/engine/base_engine.h)是 CPU 引擎的内部基类,与公共层的DNNEngine不同。每个 CPU 引擎包含三个组件:AicpuOpsKernelInfoStoreAicpuGraphOptimizerAicpuOpsKernelBuilder
  • 使用工厂模式(FACTORY_ENGINE::Register<CLASS>宏)注册子引擎
  • 通过extern "C"导出标准接口

子引擎:

  • AicpuEnginecpu_engine/aicpu_engine/):在设备侧 AI CPU 上执行昇腾原生算子
  • HostCpuEnginecpu_engine/hostcpu_engine/):在主机 CPU 上执行算子,runtime_type = HOST,优先级最低
  • TfEnginetf_engine/):执行 TensorFlow 格式的 AI CPU 算子
4.5.3 hccl_engine(HCCL 集合通信引擎)

目录compiler/engines/hccl_engine/

SO 文件libhcom_graph_adaptor.so

  • 处理分布式训练中的集合通信操作(AllReduce、Broadcast、AllGather、ReduceScatter 等)
  • 唯一使用独立流的引擎engine_conf.jsonindependent: true),不与其他引擎共享流
  • 支持通信融合优化(hcom_broadcast_fusion、hcom_reduce_fusion 等)
  • 包含自动调优模块(auto_tuning/
4.5.4 dvpp_engine(DVPP 数字视觉预处理引擎)

目录compiler/engines/dvpp_engine/

SO 文件libdvpp_engine.so

  • 处理图像/视频的解码、缩放、色彩转换等预处理操作
  • 按芯片型号有不同实现(如ascend910b/),通过DvppChipCapability做能力适配
  • 包含DvppOpsKernelInfoStoreDvppGraphOptimizerDvppOpsKernelBuilder三个标准组件
4.5.5 rts_engine(RTS 运行时服务引擎)

目录compiler/engines/rts_engine/

SO 文件librts_engine.so

  • 处理运行时控制流算子(StreamSwitch、StreamActive、Label 等)
  • 包含两个 OpsKernelInfoStore:常规 RTS 和 FFTS+ 模式
  • 配置为skip_assign_stream: true, attach: true(附着到其他流,不需要独立流分配)
4.5.6 local_engine(GeLocal 兜底引擎)

目录compiler/engines/local_engine/

SO 文件libge_local_engine.so

  • 处理不属于任何专用引擎的算子(如 NetOutput、NoOp、Const 等)
  • 优先级COST_9(倒数第二低),作为兜底引擎
  • OpFactory管理各种本地算子
  • 配置为skip_assign_stream: true, attach: true
4.5.7 ffts_engine(FFTS+ 融合引擎)

目录compiler/engines/ffts_engine/

SO 文件libffts.so

  • 唯一的组合引擎atomic_engine_flag = false),优先级COST_1
  • 统一管理子图中跨原子引擎的算子融合调度
  • 任务构建器按上下文分类型:AIC+AIV 混合、AICPU、DSA、RuntimeOps、CollectionOps
  • 配置为skip_assign_stream: true(由 FFTS+ 自身管理流)
  • 通过GetCompositeEngines()声明其包含的原子引擎集合
4.5.8 custom_engine(自定义算子引擎)

目录compiler/engines/custom_engine/

  • 优先级最高(COST_0),确保用户自定义算子优先被选中
  • 直接在OpsKernelManager::Initialize()中创建,不从 SO 文件加载
  • CustomOpsKernelInfoStore维护自定义算子的 OpInfo 映射
4.5.9 HostCpuEngine(base 层基础实现)

目录base/host_cpu_engine/

文件host_cpu_engine.h/host_cpu_engine.cc

  • 与 compiler 侧的HostCpuEngineBaseEngine子类)互补,提供更基础的主机 CPU 执行能力
  • 单例模式(HostCpuEngine::GetInstance()
  • 通过dlopen动态加载libconstant_folding_ops.solibops_host_cpu.so
  • 用于编译期的常量折叠和运行期的 Host CPU 算子执行

4.6 运行时引擎执行

4.6.1 Runtime V2(ExeGraph 执行引擎)

V2 采用编译期 Lowering + 运行时直接执行模式。

核心区别:V1 在运行时动态分派NodeExecutor,V2 在编译期通过NodeConverter将计算图节点"降级"为可执行的 ExeGraph(执行图),运行时直接按 ExeGraph 拓扑顺序执行 kernel 函数指针,消除了运行时的分发开销。

NodeConverter 的标准 Lowering 流程

  1. InferShape— 推导输出 shape
  2. AllocOutputMemory— 分配输出内存
  3. AllocWorkspace— 分配 workspace
  4. Build Launch Graph— 构建启动 kernel 的执行图节点
  5. FreeWorkspace— 释放 workspace
  6. 返回LowerResult(包含 order_holders、out_shapes、out_addrs)

AI Core 引擎的 Lowering更复杂,额外涉及:

  • Tiling 数据计算(runtime/v2/graph_builder/bg_tiling.h
  • kernel 编译结果查找
  • 原子操作处理
  • FFTS Plus 子任务刷新

V2 执行器类型runtime/v2/core/executor/):

执行器说明
SequentialExecutor顺序执行(静态图)
TopologicalExecutor拓扑排序执行(动态图)
MultiThreadTopologicalExecutor多线程拓扑执行
PriorityTopologicalExecutor优先级拓扑执行

StreamExecutorruntime/v2/core/stream_executor.cc)为每个 stream 创建独立的ModelV2Executor,实现 stream 级别的执行隔离。

Host CPU 在 V2 中的实现:Host CPU 和 AICPU 共享同一个 Lowering 函数LoweringAiCpuNode,通过placement参数(kOnHostvskOnDeviceHbm)区分执行位置。这种设计减少了代码重复,统一了 CPU 类算子的 Lowering 逻辑。

4.7 引擎在编译流程中的完整位置

4.8 原子引擎与组合引擎

GE 将引擎分为两种角色:

  • 原子引擎 (Atomic Engine)atomic_engine_flag = true,直接处理单个算子。大多数引擎都是原子引擎。
  • 组合引擎 (Composite Engine)atomic_engine_flag = false(当前仅ffts_plus),统一管理多个原子引擎,支持跨引擎的算子融合调度。

OpsKernelManager维护atomic_2_composite_映射表,将原子引擎映射到所属的组合引擎。引擎分区时先按组合引擎分区(让组合引擎看到完整的可融合区域),再按原子引擎做精细分区。

【免费下载链接】geGE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力,并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 0:29:52

NCM格式解密指南:3步教你解锁网易云音乐播放限制

NCM格式解密指南&#xff1a;3步教你解锁网易云音乐播放限制 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM加密文件无法在其他设备播放而烦恼吗&#xff1f;本文将为你详细介绍NCM格式解密技术&#xff…

作者头像 李华
网站建设 2026/5/10 0:29:42

生成式AI行业落地实战:从评估模型到部署策略全解析

1. 项目概述&#xff1a;当生成式AI走出实验室最近和几个不同行业的老朋友聊天&#xff0c;发现一个挺有意思的现象&#xff1a;做广告的朋友在琢磨怎么用AI批量生成营销文案和海报初稿&#xff1b;搞游戏开发的在尝试用AI辅助生成角色对话和场景描述&#xff1b;甚至一位在传统…

作者头像 李华
网站建设 2026/5/10 0:27:37

抖音批量下载终极指南:解锁无水印视频下载的完整解决方案

抖音批量下载终极指南&#xff1a;解锁无水印视频下载的完整解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…

作者头像 李华
网站建设 2026/5/10 0:26:06

基于角色的AI能力框架:重塑工程教育中的人机协作新范式

1. 项目概述&#xff1a;当AI遇见工程教育&#xff0c;我们需要怎样的“角色”&#xff1f;最近和几位在高校任教的朋友聊天&#xff0c;他们不约而同地提到了一个共同的困惑&#xff1a;ChatGPT、Copilot这些工具&#xff0c;学生们用得很溜&#xff0c;但老师们却有点“跟不上…

作者头像 李华
网站建设 2026/5/10 0:22:00

纯C语言实现10亿参数大模型推理:在10美元开发板上运行TinyLlama

1. 项目概述&#xff1a;在10美元开发板上运行10亿参数大模型如果你和我一样&#xff0c;对“在资源极度受限的嵌入式设备上运行现代AI”这件事着迷&#xff0c;那么PicoLM的出现&#xff0c;绝对会让你眼前一亮。这个项目用最纯粹、最硬核的方式&#xff0c;回答了那个萦绕在许…

作者头像 李华