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

生成完整的ScaNN

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

操作步骤

  1. Gitee仓下载基于鲲鹏优化的开源ScaNN源代码,标签为v1.1.0。保存在编译机器可访问的路径中,假设位于“/path/to/scann/sra_scann_adapter”
    1
    git clone --branch v1.1.0 --single-branch https://gitee.com/openeuler/sra_scann_adapter.git
    
  2. ScaNN依赖AVX2KI库,因此需要通过以下步骤安装AVX2KI的RPM包。
    1. 安装AVX2KI之前请先从官网地址获取软件包,再进行软件包校验,确保与网站上的原始软件包一致,用户解压zip文件后可获取RPM安装包。
      获取链接

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

      软件包名称中x.x.x代表版本号。

    2. 华为企业业务网站获取校验工具和校验方法。
    3. 请参见2中下载的《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的动态库文件。

  3. 安装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
    
  4. 安装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),则表示安装成功。

  5. 安装GCC 12.3.1与GCC-C++ 12.3.1。
    1
    2
    3
    yum install gcc-toolset-12-gcc gcc-toolset-12-gcc-c++
    export PATH=/opt/openEuler/gcc-toolset-12/root/usr/bin/:$PATH
    export LD_LIBRARY_PATH=/opt/openEuler/gcc-toolset-12/root/usr/lib64/:$LD_LIBRARY_PATH
    
  6. 安装编译依赖。
    1
    yum install python python3-devel python3-pip rsync libomp libuuid-devel
    

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

  7. 请配置合适的pip源,运行以下指令以进行必要的依赖安装。
    1
    2
    cd sra_scann_adapter
    sh project.sh --prepare
    
    运行以下指令以开始ScaNN的Python安装包的构建。
    1
    sh project.sh --build_whl
    

    构建完的Python安装包scann-1.2.10-cp39-cp39-linux_aarch64.whl位于“/path/to/scann/sra_scann_adapter/scann”下。

    运行以下指令以开始ScaNN的动态库文件的构建。

    1
    sh project.sh --build_scann_cc_sve
    

    构建完的动态库文件libscann_cc.so位于“/path/to/scann/sra_scann_adapter/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过程中提示找不到证书路径的解决办法解决。

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

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