以下环境变量会在程序读取时使用。
表 1 环境变量
以下环境变量用于 AscendIndexIVFRaBitQ 开发调试,默认不设置(关闭)。详细用法与日志解读参见《》。
表 2 IVFRaBitQ 调试环境变量
手册中提供了在全量和近似的场景下推荐客户所使用的性能最优的Index算法,用户可以参考此章节的参考样例以及Faiss的开源代码开发自己的应用程序,其他算法亦同理。
[object Object]
小库算法AscendIndexSQ可以根据一组数据进行训练并生成合适的量化函数,对于输入的float32的特征向量,AscendIndexSQ对其量化为Int8类型的特征向量并存储在Device侧以进一步压缩存储空间,在执行向量比对时,将Int8类型的向量反量化为原始的特征向量执行后续的计算,典型AscendIndexSQ的样例参考如下。
IndexILFlat为纯Device侧检索方案,利用昇腾AI处理器和AI Core等资源进行各个接口的使能。程序需要在Host侧编译生成二进制文件,然后将二进制文件和相关运行时依赖部署到Device侧。部署请参见下方使用指导,接口使用约束请参考。
参考用例代码[object Object][object Object]
使用指导[object Object][object Object]
IndexILFlat发布件,可在Index SDK软件包安装完成后在安装目录中找到。
- 头文件:mxIndex/device/include/IndexILFlat.h
- 动态库:mxIndex/device/lib/libascendfaiss_minios.so
代码需要使用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内存占用限制,否则无法发送全部依赖文件,用例无法执行。
算子om文件生成。
执行以下命令,会在Host侧“mxIndex/modelpath”目录下会生成相关算子文件,算子也需要部署到Device侧。
[object Object]编译用例代码。
在Index SDK工程内新建test路径(mxIndex/test),在test路径下创建“IndexILDemo.cpp”源文件,复制,编译命令参考如下。
[object Object]部署依赖。
- 在可执行二进制文件的同级路径下需要配置路径“modelpath”,放置步骤3生成的算子文件。
- CANN的相关库依赖,需要将“/usr/local/AscendMiniOSRun/aarch64-linux/lib64”部署到Device侧,并配置到“LD_LIBRARY_PATH”。
- 将动态库(mxIndex/device/lib/libascendfaiss_minios.so)部署到Device侧,并配置到环境变量“LD_LIBRARY_PATH”。
检索目前只包含标准态(即在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]
将以下依赖的库传输到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]
登录到Device侧,配置以下环境变量。
[object Object]登录到Device侧,运行用例。执行命令:./IndexILDemo