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)
### FAISS 安装教程与快速入门 FAISS 是一个用于高效相似度搜索和聚类的库,广泛应用于大规模数据集上的向量检索场景。以下是关于 FAISS安装方法以及快速入门的内容。 #### 一、FAISS 支持的操作系统 FAISS 能够运行于多种主流操作系统上,包括 Linux、macOS 和 Windows。这使得开发者可以在不同平台上轻松部署其功能[^3]。 #### 二、通过 Pip 工具安装 FAISS 为了简化安装流程,FAISS 提供了基于 Python 的 pip 包管理工具的支持。这是最为推荐的方式之一,因为它能够自动解决依赖关系并完成环境配置。具体命令如下所示: ```bash pip install faiss-cpu ``` 如果目标设备具备 NVIDIA GPU 并希望利用 CUDA 加速,则可以改用以下命令来安装带有 GPU 支持的版本: ```bash pip install faiss-gpu ``` 需要注意的是,在执行上述命令之前,请确认已正确设置好对应的开发环境,尤其是当涉及 GPU 版本时需预先满足特定硬件条件及驱动程序需求[^2]。 #### 三、从源码编译安装 FAISS (可选) 除了使用 pip 进行便捷式安装外,用户还可以选择下载 FAISS 源代码自行编译。这种方式适合那些需要定制化修改或者针对特殊平台优化的情况。不过此部分内容较为复杂,通常仅适用于高级使用者或有特别需求的情形下采用。 #### 四、FAISS 快速入门实例 下面给出一段简单的例子展示如何创建一个基本的索引结构,并实现最近邻查找操作: ```python import numpy as np import faiss # 设定维度大小 d=64 d = 64 nb = 100 # 数据集中样本数量 np.random.seed(1234) # 设置随机种子以便结果重现 data = np.random.random((nb, d)).astype('float32') # 构造测试数据集合 # 创建 L2 距离度量下的平面索引(index type),无需训练阶段 index = faiss.IndexFlatL2(d) print(f"Is trained: {index.is_trained}") # 验证当前状态是否已完成初始化准备 # 将生成的数据加入到索引当中去 index.add(data) k = 4 # 查询返回前四个最接近的结果数目 query_vector = data[:5] # 使用前五个作为查询向量 distances, indices = index.search(query_vector, k) print(distances) # 输出对应的距离值数组 print(indices) # 打印匹配项的位置编号列表 ``` 以上脚本展示了怎样定义一个基础类型的索引来存储高维空间中的点位信息,并演示了一个典型的 KNN(K Nearest Neighbor)算法应用场景[^5]。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值