开发者
资源
[object Object][object Object][object Object]

问题现象[object Object][object Object]

编译Faiss 1.10.0时,出现报错信息,提示“CMake 3.24.0 or higher is required”。

问题原因[object Object][object Object]

当前CMake的版本过低,Faiss 1.10.0需要配套CMake 3.24.0及以上版本。

解决方案[object Object][object Object]

安装CMake 3.24.0或以上版本。以安装CMake 3.24.0版本为例:

  • x86环境:

    1. 获取CMake安装脚本。

      [object Object]
    2. 运行安装脚本。

      [object Object]
      [object Object]
    3. 查看CMake版本。

      [object Object]

      显示当前的CMake版本:

      [object Object]
  • aarch64环境:

    1. 获取CMake安装脚本。

      [object Object]
    2. 运行安装脚本。

      [object Object]
      [object Object]
    3. 查看CMake版本。

      [object Object]

      显示当前的CMake版本:

      [object Object]
[object Object]

问题现象[object Object][object Object]

从Faiss 1.7.1版本升级到Faiss 1.10.0版本后,IVFSQT算法在添加较大底库后,update接口性能下降。

问题原因[object Object][object Object]

IVFSQT算法在添加较大底库后,update接口会使用IndexFlat来进行CPU聚类。IndexFlat在Faiss 1.7.1版本中,使用了exhaustive_L2sqr_seq接口;在Faiss 1.10.0版本中,exhaustive_L2sqr_seq添加了omp的线程数约束,导致了性能下降。

解决方案[object Object][object Object]

Faiss源码的exhaustive_L2sqr_seq接口中去掉omp的num_threads(nt)约束后,重新编译安装Faiss 1.10.0版本。多卡场景可设置export OMP_NUM_THREADS=2。

[object Object][object Object]

问题现象[object Object][object Object]

生成算子时,发生报错,提示MemoryError错误或者multiprocessing报错。

问题原因[object Object][object Object]

生成算子的过程中资源不足。

解决方案[object Object][object Object]

在运行算子生成脚本时通过降低“-pool”参数值,重新运行脚本,可从**-pool 1**开始尝试设置。

[object Object]

问题现象[object Object][object Object]

生成算子时出现类似如下错误:

Failed to import Python module [AttributeError: `np.float_` was removed in the NumPy 2.0 release. Use `np.float64` instead.].

问题原因[object Object][object Object]

Python3.9及以上版本默认安装NumPy 2.0版本,但CANN目前未适配NumPy 2.0。

解决方案[object Object][object Object]

将NumPy版本更换到1.26。

[object Object]
[object Object]

问题现象[object Object][object Object]

生成距离算子时,ATC出现以下报错:

Call InferShapeAndType for nodeXXXX failed

问题原因[object Object][object Object]

新版CANN加强了校验,InferDataType实现不可缺少。

解决方案[object Object][object Object]

可以设置以下环境变量进行规避:

[object Object]
[object Object]

问题现象[object Object][object Object]

生成算子失败,报错信息.../libgomp.so: cannot allocate memory in static TLS block。

问题原因[object Object][object Object]

在低版本的OS上存在gcc相关bug,该bug官方说明可参见

解决方案[object Object][object Object]

请执行以下命令导入环境变量。

[object Object]
[object Object]

问题现象[object Object][object Object]

部分操作系统下,生成算子失败,报错:fatal error: 'cstdint' file not found 或 fatal error: 'cstdio' file not found。

问题原因[object Object][object Object]

问题原因一:可参见《CANN 软件安装指南》中的“执行ATC转换或模型训练时,报错:fatal error: 'cstdint' file not found”章节中的“可能原因”部分。

问题原因二:在部分特定系统中,该问题源于操作系统发行版的工具链命名差异。昇腾 CANN 软件栈在构建算子时,默认会去查找标准的 aarch64-linux-gnu 工具链目录以获取 C++ 标准库头文件。然而,在部分特定操作系统(kylin、openEuler、ctyunos)中,为了区分特定的系统 ABI,其工具链目录被重命名(例如 aarch64-kylin-linux)。由于 CANN 编译器未在默认路径中找到对应的头文件,从而导致编译中断。

解决方案[object Object][object Object]

您需要手动将系统实际的 C++ 头文件路径添加到环境变量 CPLUS_INCLUDE_PATH 中,以指引编译器找到正确的文件。以 Kylin 系统(GCC 12)为例,请执行以下命令:

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

问题现象[object Object][object Object]

检索进程执行结束后,程序退出时报错,出现“segmentation fault”或者TBE报错等提示。

问题原因[object Object][object Object]

可能是由于用户的业务进程中,有别的组件使用了ACL资源并调用aclFinalize进行释放,从而导致ACL资源重复释放。

解决方案[object Object][object Object]

可以设置环境变量“MX_INDEX_FINALIZE”为0,则Index SDK不调用aclFinalize;设置为“1”表示仍调用aclFinalize。其他为无效设置。

用户需要确保进程退出时调用一次aclFinalize进行释放,否则仍可能在进程退出时出现错误。

[object Object]

问题现象[object Object][object Object]

执行查询操作,当查询的条数大于1000时,出现了性能波动。

问题原因[object Object][object Object]

Host侧CPU并发处理时,调度到非亲和性的CPU核上,导致耗时增加。

解决方案[object Object][object Object]

需对检索应用进行绑核操作,具体过程参考如下。

  1. 获取对应的NUMA node信息。如可以看到当前查询的NPU属于“NUMA node 0”。

    图 1 获取NUMA node信息[object Object][object Object]

  2. 使用lscpu查看NUMA node 0上包含的CPU核信息,如所示,可以看到“NUMA node 0”所拥有的CPU核为“0-13,28-41”。

    图 2 使用命令确认CPU核信息[object Object][object Object]

  3. 对当前的检索应用与确认完成的CPU进行绑核,命令参考如下。

    [object Object]

    其中,mxIndexApp为待绑定的检索应用,请根据实际应用名称进行替换。

[object Object][object Object]

问题现象[object Object][object Object]

编译过程中,出现提示libascendfaiss.so not found

问题原因[object Object][object Object]

未能通过环境变量中的路径找到“libascendfaiss.so”文件。

解决方案[object Object][object Object]

请确认“libascendfaiss.so”的路径(位于安装包host/lib下),并将其添加进“LD_LIBRARY_PATH”环境变量中。

[object Object]

在openEuler release 22.03 (LTS)系统中,通过系统默认的Cmake和gcc编译安装Faiss后,在链接“libfaiss.so”时,返回undefined reference错误。

问题原因[object Object][object Object]

openEuler release 22.03 (LTS)系统默认安装或使用yum工具安装的Cmake存在兼容性问题。

解决方案[object Object][object Object]

请访问组件官网,获取对应版本的Cmake源码,重新编译安装。