跳转到主要内容

可扩展最近邻搜索库

项目描述

ScaNN

ScaNN(可扩展最近邻)是一种用于大规模高效向量相似性搜索的方法。此代码实现了[1, 2],包括最大内积搜索的空间剪枝和量化,也支持其他距离函数,如欧几里得距离。实现适用于具有AVX2支持的x86处理器。ScaNN在下面的glove-100-angular数据集上达到了ann-benchmarks.com上的最先进性能,如下所示

glove-100-angular

ScaNN可以配置以适应不同大小和分布的数据集。它具有TensorFlow和Python API。对于大型数据集[1, 2],该库表现出强大的性能。代码是为了研究目的而发布的。有关算法的学术描述的更多详情,请见下文。

参考文献

  1. @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}
    }
    
  2. @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

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码发行版

此版本没有提供源代码发行版文件。请参阅 生成发行版存档的教程

构建发行版

scann-1.3.4-cp312-cp312-manylinux_2_27_x86_64.whl (11.7 MB 查看哈希)

上传时间 CPython 3.12 manylinux: glibc 2.27+ x86_64

scann-1.3.4-cp311-cp311-manylinux_2_27_x86_64.whl (11.7 MB 查看哈希)

上传时间 CPython 3.11 manylinux: glibc 2.27+ x86_64

scann-1.3.4-cp310-cp310-manylinux_2_27_x86_64.whl (11.7 MB 查看哈希)

上传时间 CPython 3.10 manylinux: glibc 2.27+ x86_64

scann-1.3.4-cp39-cp39-manylinux_2_27_x86_64.whl (11.7 MB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.27+ x86-64

支持