faiss - 用于高效相似性搜索和密集向量聚类的库。

Created at: 2017-02-08 00:07:05
开发语言: C++
授权协议: MIT

费斯

Faiss 是一个用于高效相似性搜索和密集向量聚类的库。它包含在任何大小的向量集中进行搜索的算法,直到可能不适合RAM的向量。它还包含用于评估和参数调整的支持代码。费斯是用C++写的,有完整的Python/numpy包装器。一些最有用的算法是在GPU上实现的。它主要由脸书人工智能研究所开发。

新闻

有关最新功能的详细信息,请参阅 CHANGELOG.md

介绍

Faiss 包含几种相似性搜索方法。它假定实例表示为向量并由整数标识,并且向量可以与 L2(欧几里得)距离或点积进行比较。与查询向量相似的向量是那些与查询向量具有最低 L2 距离或最高点积的向量。它还支持余弦相似性,因为这是归一化向量上的点积。

一些方法,如基于二进制向量和紧凑量化码的方法,仅使用向量的压缩表示,不需要保留原始向量。这通常是以不太精确的搜索为代价的,但这些方法可以扩展到单个服务器上的主内存中的数十亿个向量。其他方法,如HNSW和NSG,在原始向量之上添加索引结构,以提高搜索效率。

GPU 实现可以接受来自 CPU 或 GPU 内存的输入。在具有 GPU 的服务器上,GPU 索引可以直接替换 CPU 索引(例如,替换为 ),并且自动处理往返 GPU 内存的副本。但是,如果输入和输出都驻留在GPU上,则结果会更快。支持单 GPU 和多 GPU 使用。

IndexFlatL2
GpuIndexFlatL2

安装

费斯在Python中为 anaconda 预编译了库,参见费斯-cpu费斯-GPU。该库主要在C++中实现,唯一的依赖项是BLAS实现。可选的 GPU 支持通过 CUDA 提供, anaconda 接口也是可选的。它使用生成器进行编译。有关详细信息,请参阅 INSTALL.md

费斯如何工作

Faiss 是围绕存储一组向量的索引类型构建的,并提供了一个函数,用于通过 L2 和/或点积向量比较在其中进行搜索。某些索引类型是简单的基线,例如精确搜索。大多数可用的索引结构对应于与

  • 搜索时间
  • 搜索质量
  • 每个索引向量使用的内存
  • 培训时间
  • 添加时间
  • 需要外部数据进行无监督训练

可选的GPU实现提供了可能(截至2017年3月)高维向量的最快精确和近似(压缩域)最近邻搜索实现,最快的劳埃德k均值和最快的小k选择算法。此处详细介绍了实现。

费斯的完整文档

以下是文档的入口点:

作者

费斯的主要作者是:

参考

在研究论文中使用Faiss时的引用:

@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}
}

加入费斯社区

对于费斯的公开讨论或问题,有一个Facebook小组 https://www.facebook.com/groups/faissusers/

我们监控存储库的问题页面。你可以报告错误,提出问题等。

许可证

费斯是 MIT 的许可。