鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

生成完整的ScaNN

KScaNN依赖基于鲲鹏优化的开源ScaNN以提供完整的功能。因此安装KScaNN后需自行获取基于鲲鹏优化的开源ScaNN代码,以编译生成完整的ScaNN的Python安装包及动态库文件。

操作步骤

  1. 从GitCode获取KScaNN软件包BoostKit-boostsra-kscann_2.2.0.zip,解压后得到二进制RPM包。

    软件包构成如下所示。

    1
    2
    3
    ├── boostsra-kscann-xxxx.aarch64.rpm
    ├── 鲲鹏应用使能套件BoostKit用户许可协议 2.0.txt
    └── Kunpeng BoostKit User License Agreement 2.0.txt
    

    其中,boostkit-sra_kscann-xxxx.aarch64.rpm包含KScaNN的头文件、动态库文件与静态库文件,xxxx表示KScaNN软件包的版本号。

  2. 安装RPM包。
    1
    rpm -ivh boostsra-kscann-xxxx.aarch64.rpm
    

    安装结束后,自动追加环境变量LD_LIBRARY_PATH到“/etc/profile”中,即KScaNN的动态库文件与静态库文件所在目录“/usr/local/sra_kscann/lib/”“/usr/local/sra_kscann/lib/sve”

    上述命令中涉及的xxxx代表版本号。

  3. Gitee仓下载基于鲲鹏优化的开源ScaNN源代码,标签为v2.2.0。保存在编译机器可访问的路径中,假设位于“/path/to/kscann-build”
    mkdir /path/to/kscann-build && cd /path/to/kscann-build
    git clone --branch v2.2.0 --single-branch https://gitee.com/openeuler/sra_scann_adapter.git
  4. 获取google-research的开源代码,其中包含ScaNN v1.2.10代码。假设代码存放于“/path/to/kscann-build”。
    cd /path/to/kscann-build
    git clone https://github.com/google-research/google-research.git
    cd google-research
    git reset --hard 03c4c851a28dffe0244c65089e68d6cbf73c730b
    cp -r scann/ ../sra_scann_adapter
  5. 合入ScaNN v1.2.10使能KScaNN所需的补丁文件0001-boostsra-kscann-adapter.patch。
    cd /path/to/kscann-build/sra_scann_adapter
    patch -p1 < 0001-boostsra-kscann-adapter.patch
  6. ScaNN依赖AVX2KI库,因此需要通过以下步骤安装AVX2KI的RPM包。
    1. 安装AVX2KI之前请先从鲲鹏社区获取软件包,再进行软件包校验,确保与网站上的原始软件包一致,用户解压zip文件后可获取RPM安装包。

      使用软件包前请先阅读鲲鹏应用使能套件BoostKit用户许可协议 2.0,如确认继续使用,则默认同意协议的条款和条件。

    2. 华为企业业务网站获取校验工具和校验方法。
    3. 请参见6.b中下载的《OpenPGP签名验证指南》进行软件包完整性检查。
    4. 安装AVX2KI的RPM包。
      1
      rpm -ivh boostkit-ksl-xxxx.aarch64.rpm
      

      安装结束后,自动追加环境变量LD_LIBRARY_PATH到“/etc/profile”中,即AVX2KI的动态库文件所在目录“/usr/local/ksl/lib”

      上述命令中的xxxx代表版本号。

    5. 执行source命令或重新登录终端使AVX2KI环境变量生效。
      1
      source /etc/profile
      
    6. 查看环境变量LD_LIBRARY_PATH是否包含AVX2KI的安装路径“/usr/local/ksl/lib”
      1
      env | grep LD_LIBRARY_PATH
      

      如果变量包含安装路径,说明安装成功。

      安装成功后在安装路径(默认路径是“/usr/local/ksl”)下生成相应文件,其中,“include”文件夹包含AVX2KI的头文件,“lib”文件夹包含了AVX2KI的动态库文件。

  7. 安装OpenJDK 11。
    1
    yum install java-11-openjdk java-11-openjdk-devel
    

    检查OpenJDK 11是否安装成功。

    1
    java -version
    

    如果回显包含openjdk version "11.x.x",则表示安装成功。若OpenJDK版本低于此版本,则后续编译Bazel可能会发生错误,导致无法正常构建Bazel。

    若执行上述命令发现版本不匹配,请按以下步骤配置环境变量。

    1
    find / -name java
    
    找到安装目录后,配置环境变量,假设安装目录为“/usr/lib/jvm/java-11-openjdk-11.0.23.9-2.oe2203sp3.aarch64”
    1
    2
    export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.23.9-2.oe2203sp3.aarch64
    export PATH=/usr/lib/jvm/java-11-openjdk-11.0.23.9-2.oe2203sp3.aarch64/bin:$PATH
    
  8. 安装Bazel 5.4.0。
    1. 下载Bazel 5.4.0源码,假设路径为“/path/to/bazel”
      1
      wget https://github.com/bazelbuild/bazel/releases/download/5.4.0/bazel-5.4.0-dist.zip --no-check-certificate
      
    2. 执行以下命令解压并编译Bazel。
      1
      2
      3
      unzip bazel-5.4.0-dist.zip -d bazel-5.4.0
      cd bazel-5.4.0
      env EXTRA_BAZEL_ARGS="--tool_java_runtime_version=local_jdk" bash ./compile.sh
      
    3. 构建成功后,生成的可执行文件bazel在“/path/to/bazel/bazel-5.4.0/output”路径中,将该路径配置在环境变量PATH中,以便后续编译ScaNN使用。
      1
      export PATH=/path/to/bazel/bazel-5.4.0/output:$PATH
      
    4. 执行以下命令验证。
      1
      bazel --version
      

      如果回显包含bazel 5.4.0- (@non-git),则表示安装成功。

  9. 安装GCC 12.3.1与GCC-C++ 12.3.1。
    1. 鲲鹏社区获取对应的GCC。
    2. 请参见《GCC for openEuler 用户指南》的安装GCC for openEuler章节完成安装。
      export CC=/opt/aarch64/compiler/gcc-12.3.1-2025.06-aarch64-linux/bin/gcc
      export CXX=/opt/aarch64/compiler/gcc-12.3.1-2025.06-aarch64-linux/bin/g++
  10. 安装编译依赖。
    1
    yum install python python3-devel python3-pip rsync libomp libuuid-devel
    

    确保KScaNN位于“/usr/local/sra_recall/lib/kscann”,AVX2KI位于“/usr/local/ksl/lib”

  11. 配置合适的pip源。
    1. 运行以下指令以进行必要的依赖安装。
      1
      2
      cd /path/to/scann
      sh project.sh --prepare
      
    2. 指定KScaNN的安装目录。
      export KSCANN_PATH=/usr/local/sra_kscann
    3. 运行以下指令以开始ScaNN的Python安装包的构建。
      1
      sh project.sh --build_whl
      
    4. 构建完的Python安装包scann-1.2.10-cp39-cp39-linux_aarch64.whl位于“/path/to/kscann-build/scann”下。
    5. 运行以下指令以开始ScaNN的动态库文件的构建。
      1
      sh project.sh --build_scann_cc_sve
      
      构建完的动态库文件libscann_cc.so位于“/path/to/kscann-build/scann”下。

      project.sh中包含以下编译选项,可根据需求进行选择:

      • --prepare:进行Python依赖安装。
      • --build_whl:构建完整的ScaNN的Python安装包。
      • --build_scann_cc_sve:构建SVE指令版本的完整的ScaNN的动态库文件。
      • --build_scann_cc_neon:构建NEON指令版本的完整的ScaNN的动态库文件。
      • --build_scann_cc_sve_milvus:构建适用于Milvus场景的SVE指令版本的完整的ScaNN的动态库文件。
      • --build_scann_cc_neon_milvus:构建适用于Milvus场景的构建NEON指令版本的完整的ScaNN的动态库文件。

      若环境搭建过程中提示“unable to find valid certification path to requested target”,请参见《ScaNN 移植指南》中的编译ScaNN过程中提示找不到证书路径的解决办法章节解决。

  12. 安装whl。
    1
    pip install scann-1.2.10-cp39-cp39-linux_aarch64.whl
    
  13. 执行pip show命令确认scann==1.2.10已安装。
    1
    pip show scann
    

    如果输出包含Name: scann Version: 1.2.10,则已安装成功。

RPM包卸载

若不再需要使用KScaNN,可卸载KScaNN。卸载KScaNN将会影响您正在执行的业务流,建议先停止正在执行的业务流再进行卸载操作。若操作过程中使用了RPM包管理工具支持但本文档中未说明的参数,可能会引入未定义行为,请谨慎操作。

  1. 执行rpm -e命令卸载RPM安装包。
    1
    rpm -e boostsra-kscann
    
  2. 确认安装目录“/usr/local/sra_kscann”被删除。
  3. 确认“/etc/profile”文件中无“/usr/local/sra_kscann”相关环境变量。

whl卸载

  1. 执行pip uninstall命令卸载whl文件。
    1
    pip uninstall scann
    
  2. 执行pip show命令确认scann==1.2.10已卸载。
    1
    pip show scann
    

    如果输出包含WARNING: Package(s) not found: scann,则已卸载成功。