FAISS 开源项目安装与使用指南
目录结构及介绍
FAISS 是一个用于高效相似度搜索和聚类密集向量的库. 其目录结构通常包含以下关键部分:
- README.md: 提供了项目的简介、功能以及如何快速上手的信息.
- LICENSE: 描述了该项目使用的许可协议, 在本例中是MIT许可证.
- docs/: 包含所有文档和说明性文本如构建指令和API参考.
- faiss/: 库的主要C++源代码.
clustering.cpp
: 聚类算法实现.IndexFlatL2.cpp
: 实现基于L2距离的索引.- 等等...
- python/: Python绑定, 使用SWIG创建以便在Python环境中访问C++功能.
- examples/: 一系列示例脚本演示库的不同功能.
- tests/: 各种单元测试确保库的正确性和效率.
- cmake/: 构建系统的配置文件.
此外, 还可以找到其他辅助性文件夹和文件例如data/
(用于存储数据集)和.gitignore
(排除不需要版本控制的文件).
启动文件介绍
FAISS项目不以传统意义上的"启动文件"为中心 它更像是一个提供多种使用方式的库 如何使用它更多取决于您的应用程序需求. 不过, 对于新手来说 以下是从零开始设置并尝试此库的最佳起点之一:
C++
#include <faiss/index_io.h>
// 加载已训练好的索引文件 (例如 .index 文件)
std::unique_ptr<faiss::Index> index = faiss::read_index("trained_index.index");
// 假设有一个向量数组, 您想要查询这个索引寻找最近邻
float query_vector[N];
int n_query = /* your number */;
faiss::IndexFlatL2* flat_index = dynamic_cast<faiss::IndexFlatL2*>(index.get());
flat_index->search(n_query,
reinterpret_cast<const float*>(&query_vector),
1,
reinterpret_cast<float*>(),
reinterpret_cast<int*>());
Python
import faiss # 导入Faiss库
dimension = 128 # 特征维度大小
nlist = 100 # 索引分割的数量
quantiser = faiss.IndexFlatL2(dimension) # 更多建立量化器的方法参考官网文档
index = faiss.IndexIVFFlat(quantiser, dimension, nlist)
assert not index.is_trained
index.train(xb) # 训练索引
assert index.is_trained
index.add(xb) # 添加所有的向量到索引
D, I = index.search(xq, k = 4) # 执行检索操作
配置文件介绍
FAISS本身并不依赖于特定的配置文件来初始化或修改行为. 大多数选项通过编程接口在运行时设置. 但是你可以使用cmake的选项来编译时定制你的配置:
USE_GPU
: 如果您希望启用GPU支持, 设置此变量为ON.WITH_PYTHON
: 编译Python绑定的开关.
这些选项以及其他可选组件可在CMakeLists.txt
文件中找到 或者在生成项目的命令行中指定.
例如要在安装过程中添加对Python的支持:
mkdir build && cd build
cmake .. -DWITH_PYTHON=ON
make
sudo make install
对于更详细的指导 关键配置 以及构建细节 请参阅项目中的INSTALL.md
文档.