SuperAPI AI 工具集

faiss

Faiss 是由 Meta 基础人工智能研究团队开发的稠密向量相似度搜索与聚类库。它以 C++ 实现,并提供完整的 Python/numpy 封装,部分核心算法支持 GPU 加速。Faiss 将实例表示为向量并用整数标识,通过 L2 距离或点积比较向量,也支持归一化向量上的余弦相似度。它包含多种索引方法:基于二进制向量和紧凑量化编码的方法仅使用压缩表示,可单机内存扩展到数十亿向量;HNSW、NSG 等方法在原始向量上增加索引结构以提升搜索效率。GPU 实现可直接替换 CPU 索引,支持单卡与多卡。Faiss 提供 Anaconda 预编译包 faiss-cpu、faiss-gpu 和 faiss-gpu-cuvs,主要依赖 BLAS,可选 CUDA 或 AMD ROCm 支持,也可选用 NVIDIA cuVS 后端,使用 cmake 编译。

访问官网

工具介绍

用途

Faiss 是一个用于高效相似度搜索和稠密向量聚类的库。它面向需要在大量向量中快速找到相似向量的场景,例如以 L2(欧氏)距离或点积衡量相似度的检索任务。项目由 Meta 基础人工智能研究团队主要开发。

主要能力

Faiss 假设实例以向量表示并由整数标识,向量之间可以用 L2 距离或点积比较。与查询向量相似的是 L2 距离最小或点积最大的向量。由于余弦相似度等价于归一化向量上的点积,Faiss 也支持该度量。

库中包含多种相似度搜索方法:

  • 部分方法(如基于二进制向量和紧凑量化编码的方法)仅使用向量的压缩表示,不需要保留原始向量。这通常以精度下降为代价,但可在单台服务器的内存中扩展到数十亿向量。
  • 其他方法(如 HNSW 和 NSG)在原始向量之上增加索引结构,使搜索更高效。

Faiss 还包含用于评估和参数调优的辅助代码。

使用方式

Faiss 以 C++ 编写,并提供完整的 Python/numpy 封装。部分最有用的算法在 GPU 上实现。GPU 实现可接受来自 CPU 或 GPU 内存的输入;在有 GPU 的服务器上,GPU 索引可以作为 CPU 索引的直接替代(例如用 GpuIndexFlatL2 替换 IndexFlatL2),GPU 内存的复制会自动处理。如果输入和输出都驻留在 GPU 上,结果会更快。支持单 GPU 和多 GPU 使用。

Faiss 为 Python 提供 Anaconda 预编译库,包括 faiss-cpu、faiss-gpu 和 faiss-gpu-cuvs。库主要用 C++ 实现,唯一依赖是 BLAS 实现。可选 GPU 支持通过 CUDA 或 AMD ROCm 提供,Python 接口也是可选的。NVIDIA cuVS 的后端 GPU 实现也可选择启用。项目使用 cmake 编译,详见 INSTALL.md。

工作原理

Faiss 围绕一种索引类型构建:该类型存储一组向量,并提供用 L2 和/或点积向量比较进行搜索的函数。部分索引类型是简单基线,例如精确搜索。大多数可用索引结构在以下方面存在不同权衡:

  • 每个索引向量占用的内存
  • 是否需要外部数据用于无监督训练

GPU 实现提供了高速的精确与近似(压缩域)高维向量最近邻搜索、Lloyd's k-means 以及小 k 选择算法。

文档与社区

完整文档位于 wiki 页面,包含教程、FAQ 和故障排查部分。doxygen 文档提供从代码注释中提取的按类信息。若要复现研究论文(如 Polysemous codes、Billion-scale similarity search with GPUs)的结果,可参考 benchmarks README;关于 Link and code: Fast indexing with graphs and compact regression codes,参见 link_and_code README。

公开讨论或提问可访问 GitHub Discussions,仓库也会关注 issues 页面以报告缺陷或提问。

主要作者

  • Hervé Jégou 发起 Faiss 项目并编写了第一个实现
  • Matthijs Douze 实现了大部分 CPU Faiss
  • Jeff Johnson 实现了全部 GPU Faiss
  • Lucas Hosseini 实现了二进制索引和构建系统
  • Chengqi Deng 实现了 NSG、NNdescent 以及大量加性量化代码
  • Alexandr Guzhva 进行了多项优化:SIMD、内存分配与布局、向量编解码器的快速解码内核等
  • Gergely Szilvasy 负责构建系统与基准测试框架

许可

Faiss 采用 MIT 许可,详见顶层目录的 LICENSE 文件。版权所有 © Meta Platforms, Inc.。