Faiss 简介
Faiss 是一个用于高效相似性搜索和密集向量聚类的库。它包含在任意大小的向量组中搜索的算法,直到可能不适合 RAM 的向量组。它还包含用于评估和参数调整的支持代码。
Faiss 是用 C++ 编写的,带有完整的 Python 包装器(版本 2.0+ 和 3.0+)。一些最有用的算法是在 GPU 上实现的。它由Facebook AI Research开发。
相关链接:
开始
1. 安装faiss
推荐使用Anaconda安装,如果你的电脑上还未安装与配置Anaconda环境,请先安装Anaconda。
cpu版本:
conda install -c pytorch faiss-cpu
gpu版本
conda install -c pytorch faiss-gpu
2. 安装pytorch
cpu版本:
conda install pytorch torchvision torchaudio cpuonly -c pytorc
gpu版本的pytorch安装需要根据本机或者服务器的操作系统
和cuda版本
进行选择,具体选择可参考官网链接,以下以linux操作系统
和cuda10.1
版本为例:
conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=10.1 -c pytorch
3. 安装Jupyter-Lab(自选)
为方便后续的代码调试,我推荐你安装jupyter-lab,如果你还不会在服务器上配置jupyter-lab,可以点击这里查看配置教程。
以下任选一种安装即可:
conda安装:
conda install -c conda-forge jupyterlab
pip安装
pip install jupyterlab
测试
参照官方示例,运行以下代码:
import numpy as np
d = 64 # dimension
nb = 100000 # database size
nq = 10000 # nb of queries
np.random.seed(1234) # make reproducible
xb = np.random.random((nb, d)).astype('float32')
xb[:, 0] += np.arange(nb) / 1000.
xq = np.random.random((nq, d)).astype('float32')
xq[:, 0] += np.arange(nq) / 1000.
import faiss # make faiss available
index = faiss.IndexFlatL2(d) # build the index
print(index.is_trained)
index.add(xb) # add vectors to the index
print(index.ntotal)
k = 4 # we want to see 4 nearest neighbors
D, I = index.search(xb[:5], k) # sanity check
print(I)
print(D)
D, I = index.search(xq, k) # actual search
print(I[:5]) # neighbors of the 5 first queries
print(I[-5:]) # neighbors of the 5 last queries
若出现以下结果,恭喜你,faiss的基本安装已经完成!
[[ 0 393 363 78]
[ 1 555 277 364]
[ 2 304 101 13]
[ 3 173 18 182]
[ 4 288 370 531]]
[[0. 7.1751738 7.20763 7.2511625]
[0. 6.3235645 6.684581 6.799946 ]
[0. 5.7964087 6.391736 7.2815123]
[0. 7.2779055 7.527987 7.6628466]
[0. 6.7638035 7.2951202 7.3688145]]
[[ 381 207 210 477]
[ 526 911 142 72]
[ 838 527 1290 425]
[ 196 184 164 359]
[ 526 377 120 425]]
[[ 9900 10500 9309 9831]
[11055 10895 10812 11321]
[11353 11103 10164 9787]
[10571 10664 10632 9638]
[ 9628 9554 10036 9582]]