Generating a Complete ScaNN Library
KScaNN depends on Kunpeng-optimized open source ScaNN to provide complete functions. Therefore, after installing SRA_Recall, obtain the source code of Kunpeng-optimized ScaNN to compile a complete ScaNN Python installation package and dynamic library file.
Procedure
- Download the open source ScaNN source code optimized based on Kunpeng from Gitee. The tag is v1.1.0. Save the file to a path, for example, /path/to/scann/sra_scann_adapter, that can be accessed by the compilation computer.
1git clone --branch v1.1.0 --single-branch https://gitee.com/openeuler/sra_scann_adapter.git
- ScaNN depends on the AVX2KI library. Therefore, perform the following steps to install the AVX2KI RPM package.
- Before installing AVX2KI, obtain the software package from the official website and verify the software package to ensure that it is consistent with the original software package on the website. Decompress the ZIP file to obtain the RPM installation package.
- Obtain the verification tool and guide from the Huawei enterprise website.
- Verify the installation package integrity by following instructions in the OpenPGP Signature Verification Guide obtained in 2.
- Install the RPM package of AVX2KI.
1rpm -ivh boostkit-ksl-xxxx.aarch64.rpm
After the installation is complete, the environment variable LD_LIBRARY_PATH is automatically added to /etc/profile, that is, the /usr/local/ksl/lib directory where the AVX2KI dynamic library file is located.
In the preceding command, xxxx indicates the version.
- Run the source command or log in to the terminal again for the AVX2KI environment variable to take effect.
1source /etc/profile
- Check whether the environment variable LD_LIBRARY_PATH contains the AVX2KI installation path /usr/local/ksl/lib.
1env | grep LD_LIBRARY_PATH
If the variable contains the installation path, the installation is successful.
After the installation, the target files are generated in the installation path (the default path is /usr/local/ksl), where the include folder contains the AVX2KI header files, and the lib folder contains the AVX2KI dynamic library files.
- Install OpenJDK 11.
1yum install java-11-openjdk java-11-openjdk-devel
Check whether OpenJDK 11 is successfully installed.
1java -versionIf the command output contains "openjdk version 11. x.x", the installation is successful. An earlier OpenJDK version may cause an error during Bazel compilation.
If the preceding command output shows that there is a version conflict, perform the following steps to configure the environment variable:
1find / -name java
Configure the environment variable. Assume that the installation directory is /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
- Install Bazel 5.4.0.
- Download the Bazel 5.4.0 source code. Assume that the path is /path/to/bazel.
1wget https://github.com/bazelbuild/bazel/releases/download/5.4.0/bazel-5.4.0-dist.zip --no-check-certificate
- Decompress and compile 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
- After the build is successful, the generated executable file bazel is stored in /path/to/bazel/bazel-5.4.0/output. Configure the path in the environment variable PATH for subsequent ScaNN compilation.
1export PATH=/path/to/bazel/bazel-5.4.0/output:$PATH
- Perform the verification.
1bazel --versionIf the command output contains "bazel 5.4.0- (@non-git)", the installation is successful.
- Download the Bazel 5.4.0 source code. Assume that the path is /path/to/bazel.
- Install GCC 12.3.1 and 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
- Install the compilation dependencies.
1yum install python python3-devel python3-pip rsync libomp libuuid-devel
Confirm that KScaNN is in /usr/local/sra_recall/lib/kscann and AVX2KI is in /usr/local/ksl/lib.
- Configure an appropriate pip repository and run the following commands to install dependencies:
1 2
cd sra_scann_adapter sh project.sh --prepare
Run the following commands to build the Python installation package of ScaNN:1sh project.sh --build_whl
The built Python installation package scann-1.2.10-cp39-cp39-linux_aarch64.whl is stored in /path/to/scann/sra_scann_adapter/scann.
Run the following command to build the dynamic library file of ScaNN:
1sh project.sh --build_scann_cc_sve
The built dynamic library file libscann_cc.so is stored in /path/to/scann/sra_scann_adapter/scann.
project.sh contains the following compilation options. You can select them as required:
- --prepare: Installs Python dependencies.
- --build_whl: Builds the complete Python installation package of ScaNN.
- --build_scann_cc_sve: Builds the complete dynamic library file of ScaNN of the SVE instruction version.
- --build_scann_cc_neon: Builds the complete dynamic library file of ScaNN of the NEON instruction version.
- --build_scann_cc_sve_milvus: Builds the complete dynamic library file of ScaNN of the SVE instruction version applicable to the Milvus scenario.
- --build_scann_cc_neon_milvus: Builds the complete dynamic library file of ScaNN of the NEON instruction version applicable to the Milvus scenario.
If the message "unable to find valid certification path to requested target" is displayed during environment setup, see Error "unable to find valid certification path to requested target" Reported When Compiling ScaNN.
- Install the WHL file.
1pip install scann-1.2.10-cp39-cp39-linux_aarch64.whl
Run the pip show command to check whether ScaNN 1.2.10 has been installed.1pip show scann
If the command output contains "Name: scann Version: 1.2.10", the installation is successful.