昇腾/ge自定义逻辑流分配Pass开发

发布时间:2026/11/9 3:11:22

昇腾/ge自定义逻辑流分配Pass开发 使用自定义逻辑流分配Pass定制并发【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge功能介绍由于算子执行时间、核占用、带宽等执行时的因素影响导致一套算法在不同硬件上并发效果不同并且在编译阶段无法准确预估目前并不存在一个完美的算法在任意网络、任意硬件上都能达到最佳并发。基于上述问题引入该章节的特性开放自定义逻辑流分配Pass的接入用户可以结合图的拓扑结构、根据Profiling来分析具体网络在具体硬件上的硬件利用率从而可以灵活地调整并发效果一网一策一卡一策达到最优性能。使用自定义逻辑流分配Pass定制并发一般有两种使用场景基于内置的逻辑流分配结果进行微调。基于图结构开发自研的流分配算法。相关概念逻辑流与物理流对应的概念在图上按某些条件拓扑序、引擎归属预分配的流这条逻辑流上的任务将按先后顺序执行本文讲述的流均为逻辑流。流分配指定某几个任务可以并行执行可以提升硬件利用率降低模型执行时间。本章节以场景一“基于内置的逻辑流分配结果进行微调”为例详细介绍如何使用自定义逻辑流分配Pass定制并发整体流程为首先用户可以调用REGISTER_CUSTOM_PASS注册宏按照指定的Pass名称完成Pass的注册其次通过把函数编译成动态库插件方式注册的Pass在逻辑流分配阶段之后被调用最终用户可以基于内置的流分配结果进行微调示例代码如下#include register_custom_pass.h // 用户自定义逻辑流分配函数 Status CustomStreamPassFunc(const ConstGraphPtr graph, StreamPassContext stream_context) { // 在此函数中定义逻辑流分配行为 return SUCCESS; } // Pass注册无需指定stage默认在逻辑流分配阶段之后执行 REGISTER_CUSTOM_PASS(pass_name).CustomAllocateStreamPassFn(CustomStreamPassFunc);register_custom_pass.h存储在“CANN软件安装目录/cann/include/register/”目录下包含该头文件可使用Pass注册相关类使用Pass注册相关接口。Status成功返回ge::GRAPH_SUCCESS返回其他全为失败。建议使用小于0的值作为返回的错误码大于0的值可能会和框架已使用的错误码产生冲突。CustomStreamPassFunc自定义Pass的执行函数详情请参见回调函数CustomAllocateStreamPassFunc。graph待分配逻辑流的图类型为ConstGraphPtr。stream_contextStreamPassContext类对象可参考StreamPassContext提供的方法。REGISTER_CUSTOM_PASS注册自定义Passpass_name可任意命名详情请参见REGISTER_CUSTOM_PASS。CustomAllocateStreamPassFn注册自定义的逻辑流分配Pass执行函数详情请参见CustomAllocateStreamPassFn。[!NOTE]说明开启强制单流开关时options参数说明中ge.enableSingleStream设置为true自定义逻辑流分配Pass不会被执行。开发示例前提条件结合下图结构和Profiling分析优化点图 1原图 ![图示](https://raw.gitcode.com/cann/ge/raw/243ea8d2d8f7623dd210c0867dde5782ec5594a9/docs/zh/user_guides/graph_dev/figures/original_image.png 原图?utm_sourcegitcode_repo_files)其Profiling分析结果如下图所示由Profiling分析结果可知**有并发条件无数据依赖和控制依赖**的算子1和2为串行执行在逻辑流分配以后算子1和2被分配了同一个Stream ID可以基于本节提供的功能修改为并行执行。[!NOTE]说明有并发条件的算子若使用相同的计算资源且存在资源的抢占和等待并不总是能够获得并发收益需要根据Profiling详细分析此处仅以此为例介绍如何调整。开发步骤包含如下头文件#include iostream // 自定义Pass接口头文件 #include register_custom_pass.h开发自定义Pass对节点1分配新的Stream ID。如下代码仅为示例不可执行说明用户获取待分配逻辑流的图后只能对当前图上的节点做改动即只能使用GetDirectNode接口获取本图中的所有节点。#include iostream #include register_custom_pass.h // 自定义流分配Pass graphStatus AllocateStreamPass(const ConstGraphPtr graph, StreamPassContext context) { // 遍历图中所有直接子节点即不递归子图 for (const auto node : graph-GetDirectNode()) { AscendString node_name; node.GetName(node_name); // 获取节点名称 // 判断节点是否为指定的Abs_1节点 if (std::string(node_name.GetString()) Abs_1/unary_ops_composition_0_SquareAbs_1/unary_ops_composition_1_Abs) { // 为该节点分配一个新的Stream ID context.SetStreamId(node, context.AllocateNextStreamId()); } } return GRAPH_SUCCESS; } // 注册自定义Pass REGISTER_CUSTOM_PASS(AllocateStreamPass).CustomAllocateStreamPassFn(AllocateStreamPass);如何使用自定义Pass完成上述自定义Pass后本节简单介绍如何把用户自定义逻辑流分配函数编译成动态库插件方式以便注册的Pass在逻辑流分配阶段之后被调用。前提条件请参见《CANN 软件安装》安装CANN软件包。程序编译参见样例使用指导获取其中的CMakeLists.txt编辑脚本并按照Sample中的目录结构将用户自定义逻辑流分配函数**AllocateStreamPass.cpp**文件放在src目录下。根据实际情况修改CMakeLists.txt文件中的如下信息ASCEND_PATH指定CANN软件安装后文件存储路径以root安装用户为例/usr/local/Ascend/cann。target_include_directories需要包含的头文件对于本示例无需修改。如果是用户自行开发的代码当需要添加头文件时在示例下方直接增加行即可注意不要删除原有项目。如果网络中有自定义算子请增加自定义算子的原型定义头文件。target_link_libraries需要链接的库对于本示例无需修改。如果是用户自行开发的代码当需要添加链接库时在示例下方直接增加行即可注意不要删除原有项目。执行如下命令进行编译mkdir build cd build cmake .. make编译结束后在build目录下生成动态库文件lib_AllocateStreamPass_.so。将lib_AllocateStreamPass_.so拷贝到${ASCEND_PATH}/opp/vendors/xxx/custom_fusion_passes/目录下。其中“xxx”为用户自定义目录。支持设置软链接的方式.so文件对可执行用户需要有可读权限多个${ASCEND_PATH}/opp/vendors/xxx目录按照文本序排序后遍历寻找custom_fusion_passes/子目录单个子目录内的.so按照文本序加载非.so结尾的文件在加载时跳过xxx有且仅有一层自定义目录。custom_fusion_passes该目录下不能有子目录。自定义Pass使用支持但不限于如下几种入口编译模型文件如果要查看上述自定义Pass有没有生效在编译模型前需要dump图进行查看在执行之前设置DUMP_GE_GRAPH详细说明请参见《环境变量参考》环境变量然后使用如下入口编译模型使用ATC工具进行模型转换。ATC工具使用方法请参见《ATC离线模型编译工具》。编译Graph为离线模型。编译并运行Graph。结果验证[!NOTE]说明若一个动态shape模型中有可下沉的部分框架内部会将模型拆分为动态调度和下沉调度静态子图两部分其中下沉调度可能有多个小模型因此在对一个动静混合模型做自定义流分配时自定义Pass前后的dump图将会有多份第一份对应根图后面若干份对应模型中的静态模型当希望通过dump图查看分配结果时最好通过查看build图之前最后一次自定义流分配的dump图。设置了dump环境变量后程序执行完毕会在当前路径生成ge_onnx*.pbtxt等图文件用户可以获取如下两张图然后使用Netron等可视化软件查看ge_onnx_xxx_RunCustomPass_BeforeAssignLogicStream*.pbtxtPass执行前的图*代表具体的Pass名称图结构请参见图1。ge_onnx_xxx_RunCustomPass_AfterAssignLogicStream*.pbtxtPass执行后的图*代表具体的Pass名称图结构为从图中可以看出算子1被分配了新的Stream ID。用户也可以基于模型编译完成的图并结合Profiling查看最终的效果从图2查看算子1前后产生了Send/Recv等流间同步算子执行生成Profiling图3可知算子1、2在两条流上并发执行。Profiling操作请参见Profiling性能数据采集。图 2编译完成的图 ![图示](https://raw.gitcode.com/cann/ge/raw/243ea8d2d8f7623dd210c0867dde5782ec5594a9/docs/zh/user_guides/graph_dev/figures/compiled_graph.png 编译完成的图?utm_sourcegitcode_repo_files)图 3Profiling结果 ![图示](https://raw.gitcode.com/cann/ge/raw/243ea8d2d8f7623dd210c0867dde5782ec5594a9/docs/zh/user_guides/graph_dev/figures/profiling_result.png Profiling结果?utm_sourcegitcode_repo_files)【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/6 7:01:36

CANN/ge:基于Pattern匹配实现Pass

基于Pattern匹配实现Pass 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、T…

2026/11/6 22:34:49

Android性能优化实战:R8编译器与内存管理技巧

1. Android性能优化周:全面解析与实战指南 最近在开发者社区掀起了一股Android性能优化热潮,各大技术论坛都在讨论如何让应用跑得更快、更流畅。作为一名经历过多次性能优化战役的老兵,我想分享一些真正实用的经验。性能优化不是简单的参数调…

2026/11/9 3:38:30

岳阳到哪里补办电工证?内部消息教你避坑

岳阳到哪里补办电工证?内部消息教你避坑 怕考不过白交培训费?岳阳到哪里补办电工证,很多人一上来就找培训机构,结果被坑了培训费不说,最后考试还挂了。其实, 内部消息…

2026/11/9 3:38:30

学汽修要电工证嘛?低学历也能考,关键是在哪考

学汽修要电工证嘛?低学历也能考,关键是在哪考 你是不是也担心学历不高,根本报不上名?学汽修要电工证嘛,这个事其实很多人搞不清楚,尤其是刚开始接触行业的新人。今天咱们就聊聊这个话题,看看低学历能不能考, 在哪考…

2026/11/9 3:33:30

哪些岗位需要电工证?含金量高的电工证怎么选和用

哪些岗位需要电工证?含金量高的电工证怎么选和用 证书过期了不知道怎么复审延期,你不是一个人。很多持证人因为工作变动、信息闭塞,导致电工证过期却浑然不知,最终影响了工作机会甚至被单位辞退。电工证的 含金量…

2026/11/9 0:37:55

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/9 0:03:09

建设厅的特种工有哪些含金量高?别交完钱考不过

建设厅的特种工有哪些含金量高?别交完钱考不过 怕考不过白交培训费?别急,先搞清楚建设厅的特种工有哪些含金量高的证,再决定是不是值得投入时间和金钱。 建设厅的特种工证是建筑行业里最基础、也最实用的证书之一,涉及多个作业类别,每种证的 含金量…

2026/11/9 0:03:09

荆门市电工证报名怎么考才靠谱 全国通用证别交冤枉钱

荆门市电工证报名怎么考才靠谱 全国通用证别交冤枉钱 怕考不过白交培训费?荆门市电工证报名前必须知道这些避坑指南。别看网上一堆培训机构广告,真要报个电工证,很多人被坑得一塌糊涂。特别是那些打着“包过”旗号的,最后不是考试不过,就是证不是全国通…

2026/11/9 0:03:09

高空电工作业过程通过率揭秘:怎么选靠谱机构不被坑

高空电工作业过程通过率揭秘:怎么选靠谱机构不被坑 不知道去哪报名怕被中介坑?你不是一个人。现在特种作业证报名渠道五花八门,从线下培训机构到线上代理,真假难辨。尤其是像高空电工作业这类高风险、高门槛的作业类型,证书含金量和考试通过率直接影响你…

2026/11/7 14:54:47

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/7 14:50:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑