facebookresearch/faiss

A library for efficient similarity search and clustering of dense vectors.

解决的问题

Faiss 使高维向量的高效搜索和聚类成为可能,允许用户在任意规模的数据集中查找相似项,包括那些超出可用内存的数据集。它解决了高维向量相似性搜索的问题,当扩展到数十亿个向量时,这种搜索在计算上非常昂贵。

工作原理

Faiss 使用基于索引的系统,向量通过 L2(欧几里得)距离或点积(包括余弦相似度)进行存储和比较。为了在搜索速度、准确性和内存使用之间取得平衡,它提供了多种索引结构:

  • 精确搜索:高精度的简单基线。
  • 压缩表示:使用二进制向量和紧凑的量化码,以压缩格式存储向量,使数十亿个向量能够放入单台服务器的主内存中。
  • 基于图的索引:实现 HNSW 和 NSG,在原始向量之上添加索引结构以实现更快的检索。
  • 硬件加速:使用 C++ 编写,配有 Python 包装器,提供高精度和近似最近邻搜索、k-means 聚类和 k-选择算法的高性能 GPU 实现。

适用人群

从事高维嵌入、大规模相似性搜索和聚类任务的 AI 与机器学习领域的开发者和研究人员。

主要亮点

  • 数十亿级可扩展性:通过压缩表示处理无法放入 RAM 的数据集。
  • GPU 加速:支持单 GPU 和多 GPU 配置,显著加快搜索和聚类速度。
  • C++ 和 Python 支持:核心逻辑使用 C++ 实现,通过 Python/numpy 接口提供高性能效率。
  • 灵活的索引机制:在搜索时间、质量与内存使用之间提供多种权衡选择。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • Dispatch