faiss
A library for efficient similarity search and clustering of dense vectors.
open-sourcememory-knowledge
39.5k
Stars
+3294
Stars/month
5
Releases (6m)
Overview
Faiss是由Meta基础AI研究团队开发的高性能向量相似性搜索和聚类库,专为处理大规模密集向量数据而设计。该库支持多种搜索算法,能够处理从小型数据集到无法完全加载到内存的超大规模向量集合。Faiss采用C++核心实现,提供完整的Python封装,支持L2欧几里得距离、点积和余弦相似性等多种度量方式。库中包含基于二进制向量和紧凑量化编码的方法,这些方法仅使用压缩表示而无需保存原始向量,能够在单服务器内存中扩展到数十亿向量的规模。同时提供HNSW和NSG等索引结构以提升搜索效率。Faiss支持CPU和GPU实现,GPU版本可作为CPU索引的直接替代,自动处理GPU内存的拷贝操作,支持单GPU和多GPU并行计算。作为机器学习和AI应用中向量搜索的标准解决方案,Faiss在推荐系统、图像检索、自然语言处理等领域得到广泛应用,其高性能和可扩展性使其成为处理大规模向量数据的首选工具。
Pros
- + 极高的搜索性能和可扩展性,支持从内存级到数十亿向量规模的高效处理
- + 完善的GPU加速支持,提供CPU和GPU的无缝切换,支持多GPU并行计算
- + 丰富的算法选择和灵活的配置,支持多种距离度量方式和索引结构优化
Cons
- - 学习曲线较陡峭,需要对向量搜索算法和参数调优有一定理解
- - 某些压缩方法会降低搜索精度,需要在性能和准确性之间权衡
- - GPU版本需要CUDA或ROCm支持,对硬件环境有特定要求
Use Cases
- • 推荐系统中的用户和商品相似性匹配,快速找到相似用户或商品
- • 计算机视觉中的图像检索和相似图片搜索,支持大规模图像数据库
- • 自然语言处理中的文档相似性搜索和语义匹配,如文本去重和内容推荐
Getting Started
通过conda安装预编译包:`conda install -c pytorch faiss-cpu`(CPU版本)或`faiss-gpu`(GPU版本);创建索引并添加向量:使用`faiss.IndexFlatL2()`创建L2距离索引,调用`add()`方法添加向量数据;执行搜索查询:使用`search()`方法传入查询向量,返回最相似的k个向量及其距离和索引。