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

生成算子

安装Index SDK后,需要依照本章节的指导,设置算子相关的环境变量,并生成算法所需要的算子。

  • AscendIndexFlat算法L2和IP距离支持在线算子转换,如果环境变量MX_INDEX_USE_ONLINEOP设置为1(设置命令:export MX_INDEX_USE_ONLINEOP=1),则会在线转换算子并调用,不需要按照本章节生成离线算子。使用在线算子需要用户在应用程序的最后显式调用(void)aclFinalize()(需要包含头文件:#include "acl/acl.h")。
  • 对于不支持在线算子的算法,如果设置了环境变量MX_INDEX_USE_ONLINEOP=1,会导致程序运行失败。

操作步骤

  1. 进入安装目录“mxIndex-{version},目录及文件名称如表1所示。
    cd mxIndex-{version}
    表1 Index SDK目录及文件名介绍

    目录或文件名称

    说明

    device

    包含IndexIL算法的动态库和头文件。

    filelist.txt

    软件包文件列表。

    host

    检索动态库,进行特征检索时,请链接此文件夹下的动态库。

    include

    API头文件。

    lib

    检索动态库,链接到“host/lib”

    modelpath

    算子om文件存放目录。编译好算子之后,需要将om文件放置于此文件夹。

    ops

    包含“custom_opp_<arch>.run”脚本,用于检索算法算子安装。

    script

    包含卸载脚本“uninstall.sh”,用于卸载Index SDK安装包。

    tools

    包含用于算子生成python脚本。

    version.info

    包含版本相关信息。

  2. 进入“ops”目录,编译算子前需要设置“ASCEND_HOME”“ASCEND_VERSION”“ASCEND_OPP_PATH”环境变量,默认分别为~/Ascend、~/ascend-toolkit/latest和~/Ascend/ascend-toolkit/latest/opp。
    1
    2
    3
    export ASCEND_HOME=~/Ascend
    export ASCEND_VERSION=~/Ascend/ascend-toolkit/latest
    export ASCEND_OPP_PATH=~/Ascend/ascend-toolkit/latest/opp
    
    • “ASCEND_HOME”表示CANN-toolkit软件安装后文件存储路径。
    • “ASCEND_VERSION”表示当前使用的Ascend版本,如果ATC工具安装路径是“/usr/local/Ascend/ascend-toolkit/latest”则无需设置“ASCEND_HOME”“ASCEND_VERSION”
    • “ASCEND_OPP_PATH”表示算子库根目录,用户需要该目录的写权限。

    “MAX_COMPILE_CORE_NUMBER”环境变量用于指定图编译时可用的CPU核数,在算子运行时使用,当前默认为“1”,用户无需设置。

  3. 根据实际系统架构执行对应脚本。
    • ARM架构:
      1
      ./custom_opp_aarch64.run
      
    • x86_64架构:
      1
      ./custom_opp_x86_64.run
      

    执行脚本命令时,支持同时输入可选参数,如表2所示。

    表2 custom_opp_{arch}.run参数说明

    参数名称

    说明

    --help | -h

    查询帮助信息。

    --info

    查询包构建信息。

    --list

    查询文件列表。

    --check

    查询包完整性。

    --quiet|-q

    可选参数,表示静默安装。使用该参数,默认同意华为企业业务最终用户许可协议(EULA),跳过协议签署过程,并减少人机交互的信息的打印。

    --nox11

    废弃接口,无实际作用。

    --noexec

    解压软件包到当前目录,但不执行安装脚本。配套--extract=<path>使用,格式为:--noexec --extract=<path>。

    --extract=<path>

    解压软件包中文件到指定目录。可配套--noexec参数使用。

    --tar arg1 [arg2 ...]

    对软件包执行tar命令,使用tar后面的参数作为命令的参数。例如执行--tar xvf命令,解压run安装包的内容到当前目录。

    以下参数未展示在--help参数中,用户请勿直接使用。

    • --xwin:使用xwin模式运行。
    • --phase2:要求执行第二步动作。
  4. 进入“tools”目录,生成所需算子。生成算子之前,需要先确认已经安装CANN的相关依赖。
    • 只生成使用的算法所需要的算子:先参考算法介绍章节,确认算法所需要生成的算子后,再参考自定义算子介绍章节,生成对应的算子。
    • 批量生成所有算法的算子,方法如表3所示。
      表3 批量生成算子

      用法

      python3 run_generate_model.py -m <mode> -t <npu_type> -p <pipeline> -pool <pool_size>

      参数名称

      <mode>:算法模式,<mode>支持ALL以及Flat,SQ8,IVFSQ8,INT8中的一种或多种,多种之间用逗号隔开,如:python3 run_generate_model.py -m Flat,IVFSQ8。默认全选,可以直接执行python3 run_generate_model.py

      <npu_type>:npu_type表示芯片名称。

      • 对于Atlas 200/300/500 推理产品Atlas 推理系列产品,可在安装昇腾AI处理器的服务器执行npu-smi info命令进行查询,将查询到的“Name”最后一位数字删除,即是npu_type的取值
      • 对于Atlas 800I A2 推理服务器可在安装昇腾AI处理器的服务器执行npu-smi info命令进行查询,查询到的“Name”即是npu_type的取值
      • 对于Atlas 800I A3 超节点服务器,可以通过npu-smi info -t board -i 0 -c 0命令进行查询,获取NPU Name信息,910_NPU Name即是npu_type的取值。

      <pipeline>:是否使用多线程并行流水生成算子模型,默认为“true”。设置为“true”时,使用默认的“pool_size”的值为“32”

      <pool_size>:批量生成算子多进程调度的进程池大小。

      --help | -h:查询帮助信息。

      说明

      • 执行此命令,用户可以得到多组算子模型文件。执行命令前,用户需要更改当前目录下的“para_table.xml”文件,将所需的参数填入表中。
      • 1 ≤ pool_size ≤ 32

      算子生成说明表格中的约束说明,代表业务中经常涉及的参数组合,使用其他参数运行异常请参见CANN ATC离线模型编译工具用户指南

  5. 准备算子模型文件。
    • 可以将算子模型文件目录配置为环境变量“MX_INDEX_MODELPATH”(环境变量支持以~开头的路径、相对路径和绝对路径,路径中不能包含软链接;使用该变量时将统一转化为绝对路径并限制在“/home”“/root”路径下)。
      1
      2
      mv op_models/* $PWD/../modelpath
      export MX_INDEX_MODELPATH=`realpath $PWD/../modelpath`
      
    • 如未使用环境变量进行配置,需将算子模型文件移动到当前目录的“modelpath”目录下。

    算子生成后,请妥善保管相关om文件并确保文件不被篡改。

    生成算子时如果出现报错:Failed to import Python module,请参照NumPy的数据类型np.float_ 已被移除解决。