ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

CANN/ge拆分分组卷积Pass样例

CANN/ge拆分分组卷积Pass样例 样例使用指导【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge功能描述本样例为拆分分组卷积的自定义 pass 样例 提供在线推理与 atc 工具离线编译模型两种方式演示框架如何调用自定义 pass 完成图优化。 本样例使用 eager style api 和融合接口实现。 对应的 Python V1 对照版见 ../python/README.md。目录结构cpp/ ├── README.md // C 样例说明 ├── src │ ├──decompose_grouped_conv_to_splited_pass.cpp // pass 实现文件 ├── CMakeLists.txt // 编译脚本 ├── data | ├──torch_gen_onnx.py // torch 脚本用于导出 onnx | ├──torch_forward.py // torch 脚本用于在线推理 ├── gen_es_api | ├──CMakeLists.txt // 生成 eager style api 的编译脚本 ../python ├── README.md // Python V1 对照版说明 ├── src │ ├──test_python_decompose_pass.py // Python V1 decompose pass sample环境要求编译器GCC 7.3.x使用 python 及其依赖库版本python3.9 、pytorch2.1已完成环境准备。实现步骤定义类DecomposeGroupedConvToSplitedPass继承DecomposePass。定义构造函数使用传入的算子类型初始化基类传入的算子类型会被该 pass 捕获。重写父类DecomposePass中的 2 个函数MeetRequirements对模板匹配到的拓扑进行筛选。Replacement定义替换部分。其中InferShape进行 shape 推导CheckNodeSupportOnAicore判断 ai core 是否支持替换节点。注册DecomposeGroupedConvToSplitedPass为自定义 decompose pass构造函数中算子类型传入Conv2D执行阶段为 AfterInferShape。程序编译假设 CANN 软件包的安装目录为 INSTALL_PATH例如/home/HwHiAiUser/Ascend/。配置环境变量。运行软件包中设置环境变量脚本命令如下source ${ASCEND_PATH}/set_env.sh${ASCEND_PATH}为 CANN 软件包安装目录下的 cann 路径。请替换相关软件包的实际安装路径例如${INSTALL_PATH}/cann。根据实际情况修改当前目录CMakeLists.txt文件中的如下信息。ASCEND_PATH可以设置默认的软件包路径如果通过set_env.sh设置了$ASCEND_HOME_PATH无需修改。PASS_SO_DIR可以设置自定义融合 pass 动态库安装目录名默认为pass_so_dir。target_include_directories需要包含的头文件对于本示例无需修改。如果是用户自行开发的代码当需要添加头文件时在示例下方直接增加行即可注意不要删除原有项目。如果网络中有自定义算子请增加自定义算子的原型定义头文件。target_link_libraries需要链接的库对于本示例无需修改。如果是用户自行开发的代码当需要添加链接库时在示例下方直接增加行即可注意不要删除原有项目。禁止链接软件包中的其他 so否则后续升级可能会导致兼容性问题。执行如下命令生成 eager style api。依次执行mkdir build cd build cmake ..执行后在build目录下产生的es_all_build/generated_code目录中包含 es 构图 api 的头文件及源码。执行make命令编译自定义 pass so成功编译后通过make install将动态库文件libdecompose_grouped_conv_to_splited_pass.so安装到自定义融合 pass 目录下。 可以在make后增加可选参数-j$(nproc)用于并行执行构建任务$(nproc)动态获取 CPU 核心数。make -j$(nproc) decompose_grouped_conv_to_splited_pass make install程序运行配置环境变量如已执行跳过。运行软件包中设置环境变量脚本命令如下source ${ASCEND_PATH}/set_env.sh${ASCEND_PATH}请替换相关软件包的实际安装路径。使用 ATC 离线推理。设置环境变量dump 出编译过程中的模型图export DUMP_GE_GRAPH1进入当前目录data目录执行.py文件导出 onnx文件中使用了 torch 的 onnx 导出器依赖额外的 Python 包 onnx运行前确保安装。 此外 ATC 工具当前最高支持 onnx opset_version 18若当前 torch 默认导出更高版本请显式指定见脚本中注释python torch_gen_onnx.py执行结束后在data目录下生成.onnx格式的模型文件名称为model.onnx。执行 ATC 工具命令关于 ATC 工具的详细说明请前往昇腾文档搜索文档“ATC离线模型编译工具”soc_version请根据实际环境修改atc --model./model.onnx --framework5 --soc_versionxxx --output./model日志中出现如下打印Define MeetRequirements for DecomposeGroupedConvToSplitedPass Define Replacement for DecomposeGroupedConvToSplitedPass在线推理设置环境变量dump 出编译过程中的模型图export DUMP_GE_GRAPH1进入当前目录data目录执行.py文件进行在线推理在线推理请确保已安装torch_npu插件python torch_forward.py日志中出现如下打印Define MeetRequirements for DecomposeGroupedConvToSplitedPass Define Replacement for DecomposeGroupedConvToSplitedPass查看运行结果ATC 工具命令执行完成后目录下生成一系列.pbtxt文件。 对比以下 dump 图ge_onnx_xxxxx_PreRunBegin.pbtxt执行前 dump 图ge_onnx_xxxxx_RunCustomPass_AfterInferShape.pbtxt执行 InferShape 后的自定义 pass dump 图可以发现模型已按预期优化即groups3的分组卷积被拆分成 3 个groups1的卷积。若未获得预期结果可设置如下环境变量如使用 atc 命令还需添加参数--logdebug让日志打印到屏幕来定位原因export ASCEND_SLOG_PRINT_TO_STDOUT1 export ASCEND_GLOBAL_LOG_LEVEL0【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进