向量数据库Faiss的搭建与使用(python)

1. 安装 Faiss
1.1 通过 pip 安装
如果你使用的是 Python 环境,可以通过 pip 安装 Faiss 的 Python 绑定:

pip install faiss-cpu

如果你需要 GPU 支持,还需要安装 CUDA 和 cuDNN,并安装相应的 Faiss 版本:

pip install faiss-gpu

1.2 从源代码编译
如果你需要定制化编译,可以从 GitHub 获取源代码并自行编译:

git clone https://github.com/facebookresearch/faiss.git
cd faiss
make
make python
sudo make install
sudo make python_install

2. 使用 Faiss
2.1 准备数据
假设你已经有一些向量数据,这些数据可以是图像特征向量、文本嵌入向量等。这里我们创建一些随机向量作为示例:

import numpy as np
from faiss import IndexFlatL2

# 创建一个 10000 x 128 的随机向量矩阵
d = 128  # 向量维度
nb = 10000  # 向量数量
xb = np.random.random((nb, d)).astype('float32')
xb[:, 0] += np.arange(nb) / 1000.

2.2 构建索引
接下来,我们将使用 Faiss 构建一个 L2 距离的索引,并将向量数据添加到索引中:

index = IndexFlatL2(d)   # 创建一个 L2 距离的索引
print(index.is_trained)
index.add(xb)                  # 添加向量数据
print(index.ntotal)

2.3 搜索向量
现在我们可以使用 Faiss 来搜索最近邻向量:

# 创建一些查询向量
nq = 1000
xq = np.random.random((nq, d)).astype('float32')
xq[:, 0] += np.arange(nq) / 1000.

# 搜索最近的 k 个向量
k = 4
D, I = index.search(xq, k)  # 实际上返回的是距离和索引
print(I[:5])               # 输出最近的 5 个索引
print(D[:5])               # 输出最近的 5 个距离

3. 更高级的索引类型
Faiss 支持多种索引类型,例如 IVF (Inverted File) 索引,可以进一步提高搜索效率:

from faiss import IndexIVFFlat

nlist = 100
quantizer = IndexFlatL2(d)  # 量化器
index_ivf = IndexIVFFlat(quantizer, d, nlist, IndexFlatL2.METRIC_L2)
index_ivf.train(xb)
index_ivf.add(xb)

D, I = index_ivf.search(xq, k)
print(I[:5])
print(D[:5])

4. 使用 GPU
如果你的系统支持 GPU,可以使用 GPU 版本的 Faiss 来加速搜索:

from faiss import StandardGpuResources, GpuIndexFlatL2

res = StandardGpuResources()  # 使用 GPU 资源
gpu_index = GpuIndexFlatL2(res, d)

gpu_index.add(xb)
D, I = gpu_index.search(xq, k)
print(I[:5])
print(D[:5])

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Faiss是一个用于高效向量检索的开源库。它通过将数据转换为向量使用索引结构和距离度量来实现快速的相似性搜索。在Faiss中,实现了一些细节操作,如将查询向量和簇心的向量转化为残差,以及使用PQ计算距离等,以提高搜索的准确性和效率。通过使用Faiss的索引结构,如IndexFlatL2,我们可以在向量数据库中进行快速搜索。例如,可以生成一些查询向量,并找到每个查询向量的最近的几个相似向量Faiss不仅仅可以应用于图片和文件的搜索,还可以应用于任何可以表示为向量的数据,如音频、视频等。因此,它成为处理大规模数据和进行相似性搜索的强大工具。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Github 15K! 亿级向量相似度检索库Faiss 原理+应用](https://blog.csdn.net/Kaiyuan_sjtu/article/details/121551473)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [向量数据库Faiss搭建使用](https://blog.csdn.net/xudepeng0813/article/details/131659050)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小绵羊不怕大灰狼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值