当前位置: 首页 > news >正文

CANN/ge函数处理点API

FuncProcessPoint

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

产品支持情况

产品是否支持
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品

函数功能

FuncProcessPoint的构造函数,返回一个FuncProcessPoint对象。

函数原型

class FuncProcessPoint(compile_config_path: Optional[str] = None, name: Optional[str] = None, py_func: Optional = None, workspace_dir: Optional = None)

参数说明

参数名称数据类型取值说明
compile_config_pathstrUDF的编译配置文件,与py_func互斥。传入py_func参数后compile_config_path不生效。
namestr处理点名称,框架会自动保证名称唯一,不设置时会自动生成FuncProcessPoint, FuncProcessPoint_1, FuncProcessPoint_2,...的名称。
py_funcclass用户开发的自定义Python UDF类(需要使用proc_wrapper(func_list="ix:ox")注册输入输出),与compile_config_path互斥。传入py_func参数后compile_config_path不生效。
workspace_dirstr自动生成的Python UDF临时工作空间目录,和py_func配合使用,
该字段为空时使用py_func的名字拼接“_ws”使用。

UDF的编译配置文件示例如下:

``` {"func_list":[{"func_name":"Add", "inputs_index":[1,0], "outputs_index":[0]}],"input_num":2,"output_num":1,"target_bin":"libadd.so","workspace":"./","cmakelist_path":"CMakeLists.txt","compiler": "./cpu_compile.json","running_resources_info":[{"type":"cpu","num":2},{"type":"memory","num":100}],"heavy_load":false} ```

表 1FuncProcessPoint的json配置文件

配置项可选/必选描述
workspace必选值为字符串,UDF的工作空间路径。
target_bin必选值为字符串,UDF工程编译出来的so名字,为防止被非法篡改,该字符串需要以lib***.so来命名,合法的字符包含大小写字母、数字、下划线和中划线。
input_num必选值为数字,表示UDF的输入个数,即FuncProcessPoint的输入个数。
output_num必选值为数字,表示UDF的输出个数。即FuncProcessPoint的输出个数。
func_list必选值为list,list的元素为单个function的描述,当前只支持一个function。
func_list.func_name必选值为字符串,函数名称,要和UDF里定义的function名称一致。多function场景下,func_name不允许重复。
func_list.inputs_index可选值为list,list元素为数字,表示该function取FuncProcessPoint的哪些输入,单function情况下当前无效;多function情况下该字段必选。且多个处理函数input index不共享,不能重复。
func_list.outputs_index可选值为list,list元素为数字,表示该function对应FuncProcessPoint的哪些输出,单function情况下当前无效。多function情况下output index可共享。
cmakelist_path可选值为字符串,源码编译的CMakeLists文件相对于workspace的路径,如果未指定,则取workspace下面的默认CMakeLists文件。
compiler可选值为字符串,异构环境下编译源码的交叉编译工具路径配置文件,如果未指定,则取资源类型默认的编译工具。
running_resources_info可选值为list,运行当前so需要的资源信息,list的元素为单个资源信息的描述。
running_resources_info.type可选当配置了running_resources_info时,该字段必选。
值为字符串,运行当前so需要的资源信息的类型,可选类型是"cpu"和"memory"。当资源类型是"memory"时,单位是M。
running_resources_info.num可选当配置了running_resources_info时,该字段必选。
值为数字,运行当前so需要的资源信息的数量。
heavy_load可选表示节点对算力的诉求。

- true:重载,表示对算力的诉求大。
- false:轻载,表示对算力的诉求小。

默认值为false。
当该参数取值为"true"时会影响UDF的部署位置。
buf_cfg可选用户可以自定义配置内存池档位,通过自定义档位可以提升内存申请效率及减少内存碎片,如未设置该参数,将使用默认的档位配置初始化内存模块,该配置最多支持64个档位,超过64编译报错。

compiler的json配置内容示例和各字段解释如下。

``` {"compiler":[{"resource_type":"X86","toolchain":"/usr/bin/g++"},{"resource_type":"Aarch","toolchain":"/usr/bin/g++"},{"resource_type":"Ascend","toolchain":"/usr/local/Ascend/hcc"}]} ```

表 2compiler的json配置文件

配置项可选/必选描述
compiler必选值为list,list的元素为单个资源类型的编译工具的描述。
compiler.resource_type必选值为字符串,设备支持的资源类型。
compiler.toolchain必选值为字符串,该资源类型对应的编译工具路径。

buf_cfg的json配置内容示例和各字段解释如下。

``` "buf_cfg":[{"total_size":2097152,"blk_size":256,"max_buf_size":8192,"page_type":"normal"}, // 1.total:2M max:8K {"total_size":10485760,"blk_size":4096,"max_buf_size":8388608,"page_type":"normal"}, // 2.total:10M max:8M {"total_size":2097152,"blk_size":256,"max_buf_size":8192,"page_type":"huge"}, // 3.total:2M max:8K {"total_size":10485760,"blk_size":8192,"max_buf_size":8388608,"page_type":"huge"}, // 4.total:10M max:8M {"total_size":69206016,"blk_size":8192,"max_buf_size":67108864,"page_type":"huge"}] // 5.total:66M max:64M ```

说明:
- 如上样例共配置了5个内存档位,前两条针对普通内存,后三条针对大页内存。
- 使用该配置初始化内存管理模块后,如果进程申请8M大页内存,驱动会根据第4条配置项,生成并管理一个10M内存池,从其中申请8M内存。
- 如本进程需要再次申请1M大页内存,由于第三条配置项中一次最大只能申请8K,因此仍然会落到第4条配置项对应的内存池中,此时上一次申请10M只使用了8M,剩余的内存仍大于1M,因此会在上一次生成的10M内存池中申请1M内存供本次使用。


默认档位如下:

IDtotal_sizeblk_sizemax_buf_sizepage_type
02M256B8Knormal
132M8K8Mnormal
32M256B8Khuge
466M8K64Mhuge

表 3buf_cfg的json配置说明

配置项可选/必选描述
total_size必选当前档位内存池的大小,单位Byte
约束:
普通内存total_size是4K的倍数,大页内存total_size是2M的倍数,且total_size是blk_size的倍数
blk_size必选当前档位一次可以申请的最小内存值,单位Byte
约束:
要求满足2^n,且在(0,2M]之间,小于max_buf_size
max_buf_size必选当前档位一次可以申请的最大内存值,单位Byte
约束:小于total_size
page_type必选当前档位对应的内存类型,
约束:
有效值huge或normal,分别表示大页内存和普通内存

CMakeLists文件相关内容如下:
DataFlow UDF编译模块解析异构环境的resource.json资源配置和cpu_compiler配置,根据resource.json资源配置类型匹配选择cpu_compiler中指定的交叉编译工具,如果用户未指定cpu_compiler.json配置文件或者cpu_compiler.json未配置该类型的编译工具,则取环境上默认的编译工具进行编译。不同资源类型的编译工具名称和路径如下。${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。若安装的Ascend-cann-toolkit软件包,以root安装举例,则安装后文件存储路径为:/usr/local/Ascend/cann。

  • X86和Aarch场景下:g++

  • Ascend场景下:${INSTALL_DIR}/toolkit/toolchain/hcc/bin/aarch64-target-linux-gnu-g++

    用户的源代码工程要遵从如下规则:

  • 用户提供的源码工程目录下要包括所有执行代码和依赖库源码。

  • 用户要配置好FuncProcessPoint执行代码和依赖库的编译脚本。

  • 编译脚本要使用RELEASE_DIR变量作为最终输出目录,如果有依赖的so文件,用户需要把依赖的so文件拷贝到该路径下。

  • 编译脚本要使用RESOURCE_TYPE变量判断资源类型,如果当前UDF不支持某一个资源类型,需要将对应的注释放开。

  • CMakeLists sample如下:

    ``` cmake_minimum_required(VERSION 3.5) PROJECT(UDF) if ("x${RESOURCE_TYPE}" STREQUAL "xAscend") message(STATUS "ascend compiler enter") # if unsupport current resource type, please uncomment the next line. # message(FATAL_ERROR "Unsupport compile Ascend target!") elseif("x${RESOURCE_TYPE}" STREQUAL "xAarch") message(STATUS "aarch64 compiler enter") # if unsupport current resource type, please uncomment the next line. # message(FATAL_ERROR "Unsupport compile Aarch64 target!") else() message(STATUS "x86 compiler enter") # if unsupport current resource type, please uncomment the next line. # message(FATAL_ERROR "Unsupport compile X86 target!") endif() if(DEFINED ENV{ASCEND_HOME_PATH}) set(ASCEND_HOME_PATH $ENV{ASCEND_HOME_PATH}) message(STATUS "Read ASCEND_HOME_PATH from ENV: ${ASCEND_HOME_PATH}") else() message(FATAL_ERROR "ASCEND_HOME_PATH is not set, please export ASCEND_HOME_PATH based on actual installation path.") endif() # set dynamic library output path set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${RELEASE_DIR}) # set static library output path set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${RELEASE_DIR}) message(STATUS "CMAKE_LIBRARY_OUTPUT_DIRECTORY= ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") set(INC_DIR "${ASCEND_HOME_PATH}/include")flow_func") file(GLOB SRC_LIST "*.cpp") # Specify cross compiler add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) # set c++ compiler set(CMAKE_CXX_COMPILER ${TOOLCHAIN}) # =========================UDF so compile============================ # check if SRC_LIST is exist if("x${SRC_LIST}" STREQUAL "x") message(UDF "=========no source file=============") add_custom_target(${UDF_TARGET_LIB} COMMAND echo "no source to make lib${UDF_TARGET_LIB}.so") return(0) endif() add_library(${UDF_TARGET_LIB} SHARED ${SRC_LIST} ) target_include_directories(${UDF_TARGET_LIB} PRIVATE ${INC_DIR} ) target_compile_options(${UDF_TARGET_LIB} PRIVATE -O2 -std=c++11 -ftrapv -fstack-protector-all -fPIC ) if ("x${RESOURCE_TYPE}" STREQUAL "xAscend") target_link_libraries(${UDF_TARGET_LIB} PRIVATE -Wl,--whole-archive ${ASCEND_HOME_PATH}/devlib/device/libflow_func.so -Wl,--no-whole-archive ) # If there have any dependent so, please release the following comments and copy dependent so to ${PROJECT_BINARY_DIR}/${RELEASE_DIR} # [[execute_process( COMMAND cp libdepend_xxx.so ${PROJECT_BINARY_DIR}/${RELEASE_DIR} )]] elseif("x${RESOURCE_TYPE}" STREQUAL "xAarch") target_link_libraries(${UDF_TARGET_LIB} PRIVATE -Wl,--whole-archive ${ASCEND_HOME_PATH}/devlib/linux/aarch64/libflow_func.so -Wl,--no-whole-archive ) # If there have any dependent so, please release the following comments and copy dependent so to ${PROJECT_BINARY_DIR}/${RELEASE_DIR} # [[execute_process( COMMAND cp libdepend_xxx.so ${PROJECT_BINARY_DIR}/${RELEASE_DIR} )]] else() target_link_libraries(${UDF_TARGET_LIB} PRIVATE -Wl,--whole-archive ${ASCEND_HOME_PATH}/devlib/linux/x86_64/libflow_func.so -Wl,--no-whole-archive ) # If there have any dependent so, please release the following comments and copy dependent so to ${PROJECT_BINARY_DIR}/${RELEASE_DIR} # [[execute_process( COMMAND cp libdepend_xxx.so ${PROJECT_BINARY_DIR}/${RELEASE_DIR} )]] endif() ```

返回值

正常场景下返回None。

返回“TypeError”表示参数类型不正确。

调用示例

import dataflow as df pp = df.FuncProcessPoint(...)

约束说明

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

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

http://www.jsqmd.com/news/782738/

相关文章:

  • 如何用纯C语言将网易云NCM加密音乐转换为通用MP3格式:完整技术解析与操作指南
  • 2026年一千京东卡回收多少钱,最新折扣率表 - 猎卡回收公众号
  • 【官方首发】亨得利高端腕表服务最新公告:2026年全国售后服务网络优化升级官方解读(附统一服务标准全国网点预约通道防伪指南) - 亨得利腕表维修中心
  • Gemma-4模型在NPU上推理
  • CANN/metadef算子平铺构建
  • 如何用Sunshine搭建个人游戏串流服务器:跨设备畅玩3A大作的完整指南
  • 浅谈GaussDB (DWS)技术【玩转PB级数仓GaussDB(DWS)】
  • 2026年不干胶标签与办公用纸一站式采购完全指南 - 优质企业观察收录
  • PotPlayer字幕翻译插件深度解析:打破语言壁垒的专业解决方案
  • 根脉——溯源
  • B站视频转文字终极指南:如何用AI技术快速提取视频内容并生成文字稿
  • PotPlayer字幕翻译插件架构解析:百度翻译API集成与性能优化指南
  • InsMatrixAutomation 日志系统设计深度解析:从 Loguru 到企业级日志实践
  • CANN Alpamayo-R1智驾优化
  • 2026法治教育展厅怎么做?未成年法治教育展厅展馆设计 - 新闻快传
  • 微信立减金闲置率近五成,教你合规盘活你的支付权益 - 团团收购物卡回收
  • CANN算子库GeGluV3算子
  • Kubernetes存储深度解析与实践
  • nvm安装node的目录
  • 职场人的「深夜困境」:为什么我选择用AI社交平台倾诉
  • 湖州黄金回收怎么选?6 大品牌覆盖吴兴 / 南浔 / 德清 / 长兴 / 安吉,免费上门 + 实时金价 + 当场结款 - 金掌柜黄金回收
  • 江阴黄金回收认准这 6 家!7 街道 10 乡镇全覆盖,上门秒结无套路 - 金掌柜黄金回收
  • CANN多模态推理拉起架构设计
  • 五大数据采集服务平台深度测评:从全网公开数据到 AI 专用数据集
  • CANN/sip Strmm三角矩阵乘法
  • 20万奖金!昇腾 Model‑Agent 模型适配大赛邀你来战
  • 学生党 Obsidian 同步最省心方案:坚果云官方插件 Nutstore Sync 完整教程 - nut-king
  • 墨观|水性凹版油墨行业资讯:法规收紧与技术突破并行,规模化量产成竞争分水岭
  • 从视频中智能提取PPT:5分钟快速上手教程
  • 透明计费与用量预警,Taotoken如何帮助个人开发者控制预算