facebookresearch/faiss

GitHub: facebookresearch/faiss

Faiss 是 Meta 开发的高效向量相似性搜索与聚类库,支持 CPU/GPU 加速,可扩展到十亿级向量规模。

Stars: 39259 | Forks: 4259

# Faiss Faiss 是一个用于密集向量高效相似性搜索和聚类的库。它包含在任意大小的向量集中搜索的算法,甚至支持可能无法装入 RAM 的超大规模数据集。它还包含用于评估和参数调优的辅助代码。Faiss 使用 C++ 编写,并提供了完整的 Python/numpy 封装。一些最有用的算法已在 GPU 上实现。它主要由 Meta 的 [Fundamental AI Research](https://ai.facebook.com/) 团队开发。 ## 新闻 有关最新功能的详细信息,请参阅 [CHANGELOG.md](CHANGELOG.md)。 ## 简介 Faiss 包含多种相似性搜索方法。它假设实例表示为向量并由整数标识,且向量可以通过 L2(欧几里得)距离或点积进行比较。与查询向量相似的向量是指那些与查询向量具有最低 L2 距离或最高点积的向量。它也支持余弦相似度,因为这本质上是对归一化向量进行点积运算。 某些方法,如基于二进制向量和紧凑量化码的方法,仅使用向量的压缩表示,而不需要保留原始向量。这通常以降低搜索精度为代价,但这些方法可以在单台服务器的主内存中扩展到数十亿个向量。其他方法,如 HNSW 和 NSG,在原始向量之上添加了索引结构,以提高搜索效率。 GPU 实现可以接受来自 CPU 或 GPU 内存的输入。在配备 GPU 的服务器上,GPU 索引可以直接替代 CPU 索引(例如,用 `GpuIndexFlatL2` 替换 `IndexFlatL2`),并且与 GPU 内存之间的复制会自动处理。但是,如果输入和输出都驻留在 GPU 上,结果会更快。支持单 GPU 和多 GPU 使用。 ## 安装 Faiss 为 Anaconda in Python 提供了预编译库,请参阅 [faiss-cpu](https://anaconda.org/pytorch/faiss-cpu)、[faiss-gpu](https://anaconda.org/pytorch/faiss-gpu) 和 [faiss-gpu-cuvs](https://anaconda.org/pytorch/faiss-gpu-cuvs)。该库主要用 C++ 实现,唯一的依赖项是 [BLAS](https://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms) 实现。可选的 GPU 支持通过 CUDA 或 AMD ROCm 提供,Python 接口也是可选的。NVIDIA [cuVS](https://github.com/rapidsai/cuvs) 的后端 GPU 实现也可以选择启用。它使用 cmake 编译。有关详细信息,请参阅 [INSTALL.md](INSTALL.md)。 ## Faiss 的工作原理 Faiss 围绕索引类型构建,该类型存储一组向量,并提供一个函数,通过 L2 和/或点积向量比较在其中进行搜索。一些索引类型是简单的基线,例如精确搜索。大多数可用的索引结构对应于以下方面的各种权衡: - 搜索时间 - 搜索质量 - 每个索引向量使用的内存 - 训练时间 - 添加时间 - 无监督训练是否需要外部数据 可选的 GPU 实现(截至 2017 年 3 月)可能是高维向量最快的精确和近似(压缩域)最近邻搜索实现、最快的 Lloyd's k-means 以及已知最快的小 k 选择算法。[实现详情请见此处](https://arxiv.org/abs/1702.08734)。 ## Faiss 完整文档 以下是文档的入口点: - 完整文档可以在 [wiki 页面](http://github.com/facebookresearch/faiss/wiki)上找到,包括 [教程](https://github.com/facebookresearch/faiss/wiki/Getting-started)、[FAQ](https://github.com/facebookresearch/faiss/wiki/FAQ) 和 [故障排除部分](https://github.com/facebookresearch/faiss/wiki/Troubleshooting) - [doxygen 文档](https://faiss.ai/) 提供了从代码注释中提取的各类信息 - 要重现我们研究论文 [Polysemous codes](https://arxiv.org/abs/1609.01882) 和 [Billion-scale similarity search with GPUs](https://arxiv.org/abs/1702.08734) 的结果,请参阅 [benchmarks README](benchs/README.md)。对于 [ Link and code: Fast indexing with graphs and compact regression codes](https://arxiv.org/abs/1804.09996),请参阅 [link_and_code README](benchs/link_and_code) ## 作者 Faiss 的主要作者是: - [Hervé Jégou](https://github.com/jegou) 发起了 Faiss 项目并编写了其最初的实现 - [Matthijs Douze](https://github.com/mdouze) 实现了大部分 CPU Faiss - [Jeff Johnson](https://github.com/wickedfoo) 实现了所有 GPU Faiss - [Lucas Hosseini](https://github.com/beauby) 实现了二进制索引和构建系统 - [Chengqi Deng](https://github.com/KinglittleQ) 实现了 NSG、NNdescent 和大部分加性量化代码。 - [Alexandr Guzhva](https://github.com/alexanderguzhva) 许多优化:SIMD、内存分配和布局、向量编解码器的快速解码内核等。 - [Gergely Szilvasy](https://github.com/algoriddle) 构建系统、基准测试框架。 ## 参考 当你在研究论文中使用 Faiss 时,请引用: ``` @article{douze2024faiss, title={The Faiss library}, author={Matthijs Douze and Alexandr Guzhva and Chengqi Deng and Jeff Johnson and Gergely Szilvasy and Pierre-Emmanuel Mazaré and Maria Lomeli and Lucas Hosseini and Hervé Jégou}, year={2024}, eprint={2401.08281}, archivePrefix={arXiv}, primaryClass={cs.LG} } ``` 对于 Faiss 的 GPU 版本,请引用: ``` @article{johnson2019billion, title={Billion-scale similarity search with {GPUs}}, author={Johnson, Jeff and Douze, Matthijs and J{\'e}gou, Herv{\'e}}, journal={IEEE Transactions on Big Data}, volume={7}, number={3}, pages={535--547}, year={2019}, publisher={IEEE} } ``` ## 加入 Faiss 社区 如需公开讨论 Faiss 或有问题,请访问 https://github.com/facebookresearch/faiss/discussions。 我们会监控仓库的 [问题页面](http://github.com/facebookresearch/faiss/issues)。 你可以报告错误、提出问题等。 ## 法律 Faiss 根据 MIT 许可,请参阅顶层目录中的 [LICENSE 文件](https://github.com/facebookresearch/faiss/blob/main/LICENSE)。 Copyright © Meta Platforms, Inc.
标签:ANN, Apex, C++, CUDA, Embedding, FAIR, HNSW, k-NN, Meta, NumPy, Python, Vectored Exception Handling, 人工智能, 代码示例, 余弦相似度, 倒排索引, 向量化, 向量搜索, 向量数据库, 大规模检索, 推荐系统底层, 数据分析, 数据擦除, 无后门, 机器学习, 欧氏距离, 深度学习, 用户模式Hook绕过, 相似性搜索, 科学计算, 稠密向量, 聚类算法, 近似最近邻, 逆向工具, 量化压缩, 高性能计算