开发者
下载
[object Object][object Object]

软件中包含的公网地址请参见

[object Object]

以下环境变量会在程序读取时使用。

表 1 环境变量

[object Object]undefined
[object Object]

以下环境变量用于 AscendIndexIVFRaBitQ 开发调试,默认不设置(关闭)。详细用法与日志解读参见《》。

表 2 IVFRaBitQ 调试环境变量

[object Object]undefined
[object Object][object Object]

手册中提供了在全量和近似的场景下推荐客户所使用的性能最优的Index算法,用户可以参考此章节的参考样例以及Faiss的开源代码开发自己的应用程序,其他算法亦同理。

[object Object]
[object Object]

小库算法AscendIndexSQ可以根据一组数据进行训练并生成合适的量化函数,对于输入的float32的特征向量,AscendIndexSQ对其量化为Int8类型的特征向量并存储在Device侧以进一步压缩存储空间,在执行向量比对时,将Int8类型的向量反量化为原始的特征向量执行后续的计算,典型AscendIndexSQ的样例参考如下。

[object Object]
[object Object]

IndexILFlat为纯Device侧检索方案,利用昇腾AI处理器和AI Core等资源进行各个接口的使能。程序需要在Host侧编译生成二进制文件,然后将二进制文件和相关运行时依赖部署到Device侧。部署请参见下方使用指导,接口使用约束请参考

参考用例代码[object Object][object Object]

[object Object]

使用指导[object Object][object Object]

  1. IndexILFlat发布件,可在Index SDK软件包安装完成后在安装目录中找到。

    • 头文件:mxIndex/device/include/IndexILFlat.h
    • 动态库:mxIndex/device/lib/libascendfaiss_minios.so
  2. 代码需要使用CANN内置的HCC编译器(默认CANN安装路径下,编译器路径为“/usr/local/Ascend/ascend-toolkit/latest/toolkit/toolchain/hcc/bin/aarch64-target-linux-gnu-g++”)进行编译,编译完成后部署到Device侧(具体请参见《CANN 软件安装 (开放态, [object Object]Atlas 推理系列产品[object Object])》的“”章节进行部署)。

    如果需通过SSH服务直接拷贝依赖到Device侧或通过SSH登录到Device上直接运行样例,则需要参考《CANN 软件安装 (开放态, [object Object]Atlas 推理系列产品[object Object])》的“”章节解除SSH服务的50MB内存占用限制,否则无法发送全部依赖文件,用例无法执行。

  3. 算子om文件生成。

    执行以下命令,会在Host侧“mxIndex/modelpath”目录下会生成相关算子文件,算子也需要部署到Device侧。

    [object Object]
  4. 编译用例代码。

    在Index SDK工程内新建test路径(mxIndex/test),在test路径下创建“IndexILDemo.cpp”源文件,复制,编译命令参考如下。

    [object Object]
  5. 部署依赖。

    • 在可执行二进制文件的同级路径下需要配置路径“modelpath”,放置步骤3生成的算子文件。
    • CANN的相关库依赖,需要将“/usr/local/AscendMiniOSRun/aarch64-linux/lib64”部署到Device侧,并配置到“LD_LIBRARY_PATH”。
    • 将动态库(mxIndex/device/lib/libascendfaiss_minios.so)部署到Device侧,并配置到环境变量“LD_LIBRARY_PATH”。
[object Object]

检索目前只包含标准态(即在Host侧运行检索业务),但有的应用场景需要在Device侧运行检索业务,属于一种特定场景。下面介绍在Device侧进行检索的方法。

前提条件[object Object][object Object]

  • 已经按照开放态的流程安装CANN,确保“/usr/local/AscendMiniOSRun/”文件夹已存在。具体操作请参见《》。
  • 已经解除SSH服务的50MB内存占用限制,确保可以发送全部依赖文件。具体操作可参考《CANN 软件安装 (开放态, [object Object]Atlas 推理系列产品[object Object])》的“”章节。
  • Host侧需为ARM架构。
  • P2P内存在device侧预留4GB,该部分内存默认不可用。若要使用这部分内存,达到最大库容,需使用**npu-smi info set -t p2p-mem-cfg -i "id" -d "value"**命令设置芯片BAR空间拷贝使能状态为“禁用”状态。命令使用可参考《Atlas 中心推理卡 25.3.RC1 npu-smi 命令参考》中的“”章节。

操作步骤[object Object][object Object]

  1. 生成要运行的算法所需要的算子。算法介绍请参考

  2. 将以下依赖的库传输到Device侧上。

    • openblas:/opt/OpenBLAS/lib

    • Faiss:/usr/local/faiss/faiss1.10.0/lib

    • 运行态toolkit so:/usr/local/AscendMiniOSRun/acllib/lib64和/usr/local/AscendMiniOSRun/aarch64-linux/data

    • 检索so:${MX_INDEX_HOME}/mxIndex/host/lib,其中{MX_INDEX_HOME}为Index SDK的安装目录。

    • Host侧编译器中的libgfortran.so:/usr/lib/aarch64-linux-gnu/libgfortran.so*

    • Demo编译出来的二进制

    • toolkit目录下的latest/opp/version.info文件

    • 算子文件:${MX_INDEX_HOME}/modelpath/

      [object Object]
  3. 登录到Device侧,配置以下环境变量。

    [object Object]
  4. 登录到Device侧,运行用例。执行命令:./IndexILDemo

[object Object][object Object]undefined