生成完整的ScaNN
KScaNN依赖基于鲲鹏优化的开源ScaNN以提供完整的功能。因此安装SRA_Recall后需自行获取基于鲲鹏优化的开源ScaNN代码,以编译出完整的ScaNN的Python安装包及动态库文件。
操作步骤
- 从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
- ScaNN依赖AVX2KI库,因此需要通过以下步骤安装AVX2KI的RPM包。
- 安装AVX2KI之前请先从官网地址获取软件包,再进行软件包校验,确保与网站上的原始软件包一致,用户解压zip文件后可获取RPM安装包。
- 从华为企业业务网站获取校验工具和校验方法。
- 请参见2中下载的《OpenPGP签名验证指南》进行软件包完整性检查。
- 安装AVX2KI的RPM包。
1
rpm -ivh boostkit-ksl-xxxx.aarch64.rpm
安装结束后,自动追加环境变量LD_LIBRARY_PATH到“/etc/profile”中,即AVX2KI的动态库文件所在目录“/usr/local/ksl/lib”。
上述命令中的xxxx代表版本号。
- 执行source命令或重新登录终端使AVX2KI环境变量生效。
1
source /etc/profile
- 查看环境变量LD_LIBRARY_PATH是否包含AVX2KI的安装路径“/usr/local/ksl/lib”。
1
env | grep LD_LIBRARY_PATH
如果变量包含安装路径,说明安装成功。
安装成功后在安装路径(默认路径是“/usr/local/ksl”)下生成相应文件,其中,“include”文件夹包含AVX2KI的头文件,“lib”文件夹包含了AVX2KI的动态库文件。
- 安装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
- 安装Bazel 5.4.0。
- 下载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
- 执行以下命令解压并编译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
- 构建成功后,生成的可执行文件bazel在“/path/to/bazel/bazel-5.4.0/output”路径中,将该路径配置在环境变量PATH中,以便后续编译ScaNN使用。
1
export PATH=/path/to/bazel/bazel-5.4.0/output:$PATH
- 执行以下命令验证。
1
bazel --version
如果回显包含bazel 5.4.0- (@non-git),则表示安装成功。
- 下载Bazel 5.4.0源码,假设路径为“/path/to/bazel”。
- 安装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
- 安装编译依赖。
1
yum install python python3-devel python3-pip rsync libomp libuuid-devel
确保KScaNN位于“/usr/local/sra_recall/lib/kscann”,AVX2KI位于“/usr/local/ksl/lib”。
- 请配置合适的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过程中提示找不到证书路径的解决办法解决。
- 安装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,则已安装成功。