faiss 安装教程

参考:https://github.com/facebookresearch/faiss

在工作中,尤其是在推荐系统中,我们经常需要处理一些向量关系比对的问题。比如说,在进行基于用户的协同过滤的时候,我们需要提取每个用户的向量,并且根据某个用户的向量来查询其临近的k个向量,
然后我们可以根据这k个用户看过的内容,推荐给这个用户。
这时候,随着用户数量的增加,获取临近的k个向量的工作会相当耗时。所以facebook开源共享的faiss,可以满足我们的需求[4核心8G内存,30w向量,一次查询10个,耗时在30ms左右],当然,这个只是faiss的
暴力搜索的效率,实际上随着我们的使用,我们可以采取预先聚类,然后再搜索的方案,可以进一步提高我们的搜索速度。

faiss 安装&初步使用

faiss安装: python2.7
wget "https://repo.anaconda.com/archive/Anaconda2-5.3.0-Linux-x86_64.sh"
交互安装:
安装地址:/usr/local/anaconda2/
export PATH=$PATH:/usr/local/anaconda2/bin
yum install blas blas-devel lapack lapack-devel atlas atlas-devel –nogpgcheck -y
yum install openblas -y

#swig安装
wget http://prdownloads.sourceforge.net/swig/swig-3.0.12.tar.gz
tar -xzvf swig-3.0.12.tar.gz
cd swig-3.0.12
bash ./configure --prefix=/usr/local/swig-3.0.12 --without-pcre
make && make install
export PATH=$PATH:/usr/local/swig-3.0.12/bin

git clone https://github.com/facebookresearch/faiss.git
cd faiss
./configure
make 
make py
mkdir /usr/local/faiss
cp -r ~/Faiss-install/faiss/python/faiss /usr/local/faiss/faiss
export PYTHONPATH=$PATH:/usr/local/faiss

初步使用:

	import faiss, os
	import numpy as np
	d = 72                           # dimension
	nb = 10000                   # database size
	nq = 10                    # nb of queries
	np.random.seed(1234)   # make reproducible

	xb = np.random.random((nb, d)).astype('float32')
	xq = np.random.random((nq, d)).astype('float32')
	xq[:, 0] = np.arange(nq)

	index = faiss.IndexFlatL2(d)
	ids = np.arange(0, nb).astype('int')
	id_maps = faiss.IndexIDMap(index)

	#xbb = np.delete(xb, 0, axis=1)
	#faiss.normalize_L2(xb)
	id_maps.add_with_ids(xb, ids)

	D, I = id_maps.search(xb[:5], 4)

	print(D)
	print(I)
发布了16 篇原创文章 · 获赞 2 · 访问量 8892

猜你喜欢

转载自blog.csdn.net/hihei_set/article/details/89679061