昇腾社区首页
中文
注册
开发者
下载

gen_esb二进制工具使用

gen_esb是ES API的代码生成二进制工具,根据ASCEND_OPP_PATH环境变量读取CANN软件包包内置的op_proto子目录下的算子原型so,根据so里面存在的原型信息生成对应的ES产物; 如果是自定义的op_proto的原型so,推荐使用generate_es_package.cmake提供的add_es_library来生成ES的产物并编译。生成产物包括:

  • 所有支持的算子(ops)的C接口。
  • 所有支持的算子的C++接口。
  • 所有支持的算子的Python接口。
  • 聚合头文件,方便用户一次性包含所有算子。
  • 聚合Python文件,方便用户一次性导入所有算子。

使用前提

  • 在使用该工具之前,请先安装CANN软件包,安装完成后,该工具安装在“${INSTALL_DIR}/bin”目录。其中,${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例,则安装后文件存储路径为:/usr/local/Ascend/cann。
  • 设置环境变量(如下环境变量以root用户为例,且CANN软件包安装在默认路径)
    1
    source /usr/local/Ascend/cann/set_env.sh
    

执行完上述步骤后,在CANN软件包所在服务器任意路径执行gen_esb --help命令,若提示类似如下信息,则说明工具能正常使用:

==========================================
ES Graph Builder Code Generator v1.0
Copyright (c) 2025 Huawei Technologies Co., Ltd.
==========================================

ES Graph Builder Code Generator v1.0
Usage: ./gen_esb [--output_dir=DIR] [--module_name=NAME] [--h_guard_prefix=PREFIX] [--exclude_ops=OP_TYPE]
... ...

使用样例及参数说明

工具使用命令为:

./gen_esb [--output_dir=DIR] [--module_name=NAME] [--h_guard_prefix=PREFIX] [--exclude_ops=OP_TYPE1,OP_TYPE2]

参数说明如下:

  • --output_dir:可选参数,指定代码生成的目标目录,如果不指定,默认输出到当前目录。
  • --module_name:可选参数,控制聚合头文件的命名:
    • "math" -> es_math_ops_c.h、es_math_ops.h、es_math_ops.py
    • "all" -> es_all_ops_c.h、es_all_ops.h、es_all_ops.py
    • 不传递 -> 默认为"all"
  • --h_guard_prefix:可选参数,控制生成的头文件保护宏前缀,用于可能的内外部算子同名情况的区分:
    • 如果不指定,使用默认前缀
    • 指定时,拼接默认前缀
    • python文件不感知此参数,同名场景通过不同的路径避免冲突
  • --exclude_ops:可选参数,控制排除生成的算子。根据','分隔算子名。

使用示例如下:

  • 生成到当前目录,使用默认模块名"all",默认保护宏前缀
    ./gen_esb
  • 生成到指定目录,使用默认模块名"all",默认保护宏前缀
    ./gen_esb --output_dir=./output
  • 生成到指定目录,使用"math"模块名,默认保护宏前缀
    ./gen_esb --output_dir=./output --module_name=math
  • 生成到指定目录,使用"all"模块名,默认保护宏前缀
    ./gen_esb --output_dir=./output --module_name=all
  • 生成到指定目录,使用"math"模块名,自定义保护宏前缀"MY_CUSTOM"
    ./gen_esb --output_dir=./output --module_name=math --h_guard_prefix=MY_CUSTOM
  • 生成到指定目录,使用"math"模块名,自定义保护宏前缀"MY_CUSTOM",并排除Add算子生成
    ./gen_esb --output_dir=./output --module_name=math --h_guard_prefix=MY_CUSTOM --exclude_ops=Add

输出文件

  • es_{module_name}_ops_c.h:C接口聚合头文件
  • es_{module_name}_ops.h:C++接口聚合头文件
  • es_{module_name}_ops.py:Python接口聚合文件
  • es_<op_type>_c.h:单个算子的C接口头文件
  • es_<op_type>.cpp:单个算子的C接口实现文件
  • es_<op_type>.h:单个算子的C++接口头文件
  • es_<op_type>.py:单个算子的Python接口文件

推荐使用cmake函数封装的方式,因为Cmake函数内部保持了Python依赖的so的名字和ES产物编译出来的so的名字一致; 否则需要保证自己的Cmake工程中定义的ES的so名字命名为libes_{module_name}.so。