可扩展最近邻搜索库
项目描述
ScaNN
ScaNN(可扩展最近邻)是一种用于大规模高效向量相似性搜索的方法。此代码实现了[1, 2],包括最大内积搜索的空间剪枝和量化,也支持其他距离函数,如欧几里得距离。实现适用于具有AVX2支持的x86处理器。ScaNN在下面的glove-100-angular数据集上达到了ann-benchmarks.com上的最先进性能,如下所示
ScaNN可以配置以适应不同大小和分布的数据集。它具有TensorFlow和Python API。对于大型数据集[1, 2],该库表现出强大的性能。代码是为了研究目的而发布的。有关算法的学术描述的更多详情,请见下文。
参考文献
-
@inproceedings{avq_2020, title={Accelerating Large-Scale Inference with Anisotropic Vector Quantization}, author={Guo, Ruiqi and Sun, Philip and Lindgren, Erik and Geng, Quan and Simcha, David and Chern, Felix and Kumar, Sanjiv}, booktitle={International Conference on Machine Learning}, year={2020}, URL={https://arxiv.org/abs/1908.10396} }
-
@inproceedings{soar_2023, title={SOAR: Improved Indexing for Approximate Nearest Neighbor Search}, author={Sun, Philip and Simcha, David and Dopson, Dave and Guo, Ruiqi and Kumar, Sanjiv}, booktitle={Neural Information Processing Systems}, year={2023}, URL={https://arxiv.org/abs/2404.00774} }
安装
manylinux_2_27
兼容的wheels在PyPI上可用
pip install scann
ScaNN 支持运行 Python 3.9-3.12 的 Linux 环境。请参阅 docs/releases.md 获取发行说明;该页面还包含 1.1.0 版本之前的 ScaNN 轮文件下载链接,这些文件未在 PyPI 上发布。
根据 manylinux_2_27
规范,ScaNN 需要从操作系统获取 3.4.23 或更高版本的 libstdc++
。请参阅 此处 了解如何查找系统中的 libstdc++
版本;通常可以通过安装较新版本的 g++
来升级。
与 TensorFlow Serving 的集成
我们提供了与 ScaNN TF ops 链接的定制 Docker 镜像的 TF Serving。有关更多信息,请参阅 tf_serving
目录。
从源代码构建
要从源代码构建 ScaNN,首先安装构建工具 bazel(使用 7.x 版本),Clang 17,以及与 C++17 相关的 libstdc++ 标头(这些由 GCC 9 提供)。此外,ScaNN 还需要安装在此版本的 Python 上(Python 3.9.x 或更高版本)的 TensorFlow 2.17。一旦满足这些先决条件,请在存储库的根目录中运行以下命令
python configure.py
CC=clang-17 bazel build -c opt --features=thin_lto --copt=-mavx --copt=-mfma --cxxopt="-std=c++17" --copt=-fsized-deallocation --copt=-w :build_pip_pkg
./bazel-bin/build_pip_pkg
成功完成这些命令后,应在存储库的根目录中生成一个 .whl 文件。此 .whl 可以通过 pip 安装。
用法
请参阅 docs/example.ipynb 中的示例。有关 ScaNN 技术的更深入解释,请参阅 docs/algorithms.md。
项目详情
哈希值 for scann-1.3.4-cp312-cp312-manylinux_2_27_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6004c5d02f044ff40946e8c10878df5b5d981dcd4f0239084440ca1da680b4d3 |
|
MD5 | f10fbec69904a87a68220101aed84f41 |
|
BLAKE2b-256 | 7c99c78203733141e916df1802c47e62617913cff5f57cb691c90ce8e9520031 |
哈希值 for scann-1.3.4-cp311-cp311-manylinux_2_27_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 279906134989ff86dc431eb9f57c5a473ffd4ac01d49dab5876e8f8edde0c4b0 |
|
MD5 | f692f54111af8db5bee8dff6919c0872 |
|
BLAKE2b-256 | 31a00dd27277b10b9537ec149626252549d789622c75d9051a65d46aac11bde3 |
哈希值 for scann-1.3.4-cp310-cp310-manylinux_2_27_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3b794a92820286e9ec2615e98ca83c5f43773cc1528c8df843ae350c015e7fbc |
|
MD5 | 8f1e9d5ff091bb1c73fc66bc223956bd |
|
BLAKE2b-256 | d9e5d9bb7d34f824ded668ded87c9c95dedfa922eab90451e2f86b6f3b121bd4 |
哈希值 for scann-1.3.4-cp39-cp39-manylinux_2_27_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 197963037dfbeecf6dba5c40e724ef333db7ab33672d6e134c20142f2b8a2a0a |
|
MD5 | 1c1e396712f2e8a1c886d27aefbaa61e |
|
BLAKE2b-256 | 464719cbee9ad6d538d4071d905a2aaf335775e0754ed4c4acd4f0fe02c12c71 |