Faiss是一个库,用于有效的相似性搜索和密集向量的聚类。它包含在任何大小的向量集中搜索的算法,最多可能不适合RAM。它还包含用于评估和参数调整的支持代码。 Faiss用C ++编写,其中包含Python/Numpy的完整包装纸。 GPU上实现了一些最有用的算法。它主要是在Meta的基本AI研究小组中开发的。
有关最新功能的详细信息,请参见ChangElog.md。
Faiss包含几种相似性搜索的方法。它假设实例表示为向量并通过整数识别,并且可以将向量与L2(Euclidean)距离或点产品进行比较。类似于查询矢量的向量是具有最低L2距离或具有查询矢量的最高点产物的向量。它还支持余弦的相似性,因为这是归一化向量上的点产物。
某些方法,例如基于二进制向量和紧凑量化代码的方法,仅使用向量的压缩表示,而不需要保留原始向量。这通常是以较少精确的搜索为代价的,但是这些方法可以扩展到单个服务器上的主内存中数十亿个向量。其他方法(例如HNSW和NSG)在原始向量的顶部添加了索引结构,以使搜索效率更高。
GPU实现可以接受CPU或GPU内存的输入。在具有GPU的服务器上,GPU索引可以用于CPU索引(例如,用GpuIndexFlatL2
替换IndexFlatL2
)的置换式替换,并自动处理to to GPU内存的副本。结果将更快,但是如果输入和输出都居住在GPU上。支持单GPU的使用情况。
Faiss配备了Python的Anaconda的预编译图书馆,请参阅Faiss-CPU和Faiss-GPU。该库主要是在C ++中实现的,唯一的依赖性是BLAS实现。可选的GPU支持是通过CUDA或AMD ROCM提供的,并且Python界面也是可选的。它用cmake编译。有关详细信息,请参见install.md。
Faiss围绕着存储一组向量的索引类型构建,并提供了使用L2和/或DOT产品向量比较的函数。一些索引类型是简单的基线,例如精确搜索。大多数可用的索引结构相对于各种权衡
可选的GPU实现提供了(截至2017年3月)的最快和近似(压缩)最近的邻居搜索实现,可用于高维矢量,最快的劳埃德的K-Means和最快的小型k-selection算法。此处详细介绍了实施。
以下是文档的切入点:
Faiss的主要作者是:
在研究论文中使用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}
}
对于GPU版本的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}
}
为了公开讨论faiss或有关问题,在https://www.facebook.com/groups/faissusers/上有一个Facebook组
我们监视存储库的问题页面。您可以报告错误,提出问题等。
FAISS已获得MIT许可,请参阅顶级目录中的许可证文件。
版权所有©Meta Platform,Inc。