详细说明:向量数据库Faiss的搭建与使用

devtools/2024/9/22 17:00:00/

当然,Faiss(Facebook AI Similarity Search)是一个用来高效地进行相似性搜索和密集向量聚类的库。它能够处理大型数据集,并且在GPU上的性能表现尤为出色。下面详细介绍Faiss的搭建与使用。

1. 搭建Faiss

1.1 安装依赖包

首先,需要安装Faiss及其依赖包。可以使用如下命令:

# 如果使用CPU版本
pip install faiss-cpu# 如果使用GPU版本
pip install faiss-gpu
1.2 编译Faiss(可选)

在某些特定需求下,你可能需要从源代码编译Faiss。以下是从GitHub仓库克隆并编译Faiss的步骤:

# 克隆Faiss仓库
git clone https://github.com/facebookresearch/faiss.git
cd faiss# 创建并进入构建目录
mkdir build
cd build# 运行CMake以生成构建文件
cmake ..# 编译Faiss
make -j4  # “-j4”表示使用4个核心进行编译,可根据你的CPU情况调整# 安装Faiss
sudo make install

2. 使用Faiss

2.1 导入Faiss库

在安装完Faiss后,您可以在Python中导入Faiss库来进行向量搜索和聚类。

import faiss
import numpy as np
2.2 创建索引

创建一个索引用于向量搜索。例如,创建一个100维的扁平L2距离索引(最简单和最常用的类型)。

d = 100  # 向量的维度
index = faiss.IndexFlatL2(d)  # 创建一个L2距离索引
2.3 添加向量到索引

向索引中添加向量数据:

# 生成一些随机向量
n = 1000  # 向量数量
vectors = np.random.random((n, d)).astype('float32')
2.4 搜索相似向量

搜索与查询向量最接近的k个向量:

# 生成一些查询向量
query_vectors = np.random.random((5, d)).astype('float32')  # 5个查询向量

# 搜索最相似的k个向量
k = 4  # 查找前4个最近邻
distances, indices = index.search(query_vectors, k)

print("Indices of nearest neighbors:\n", indices)
print("Distances to nearest neighbors:\n", distances)
 

3. 使用高级索引(可选择GPU加速)

3.1 使用IVF索引

IVF(Inverted File Index)是一种分层索引方法,对于大规模数据更有效:

nlist = 100  # 聚簇中心的数量
quantizer = faiss.IndexFlatL2(d)  # 用于量化的索引
index_ivf = faiss.IndexIVFFlat(quantizer, d, nlist, faiss.METRIC_L2)

# 训练索引(对于IVF索引必须先训练)
index_ivf.train(vectors)

# 添加向量到索引
index_ivf.add(vectors)

# 搜索
index_ivf.nprobe = 10  # 搜索时使用的聚簇数量
distances, indices = index_ivf.search(query_vectors, k)

print("Indices of nearest neighbors:\n", indices)
print("Distances to nearest neighbors:\n", distances)
 

3.2 使用GPU加速

可以把索引移至GPU上以提高查询速度:

res = faiss.StandardGpuResources()  # 使用默认GPU资源
index_flat_gpu = faiss.index_cpu_to_gpu(res, 0, index)  # 0表示第一个GPU# 之后的操作与CPU版类似
index_flat_gpu.add(vectors)
distances, indices = index_flat_gpu.search(query_vectors, k)print("Indices of nearest neighbors (GPU):\n", indices)
print("Distances to nearest neighbors (GPU):\n", distances)

通过以上步骤,您可以成功搭建并使用Faiss进行高效的相似性搜索和聚类。Faiss提供了多种索引类型和优化手段,使其适用于不同规模和需求的应用场景。在实际应用中,可以根据具体需求选择合适的索引类型和加速方式。


http://www.ppmy.cn/devtools/100208.html

相关文章

WEB渗透Win提权篇-AccountSpoofing

渗透测试60w字全套md笔记:夸克网盘分享 需要MachineAccountQuota > 0检查账户的MachineAccountQuota >crackmapexec ldap 10.10.10.10 -u username -p Password123 -d domain.local --kdcHost 10.10.10.10 -M MAQ >StandIn.exe --object ms-DS-MachineAcc…

comfyUI使用flux模型报错got promptUsing pytorch attention in VAE,

使用的flux模型如下,应该下载的模型都已经下载好放在正确位置 但是执行之后报错如下 got prompt Using pytorch attention in VAE Using pytorch attention in VAE 然后comfyUI的命令行就强制退出了。 解决方法: 改虚拟内存为系统管理的大小即可

深度学习--对抗生成网络(GAN)

对抗生成网络(Generative Adversarial Network, GAN)是一种深度学习模型,由伊恩古德费洛(Ian Goodfellow)及其同事在2014年提出。GAN通过两个神经网络的对抗过程来生成数据,这两个网络分别是生成器&#xf…

patch-package|npm补丁修复

可以用来修复依赖代码缺陷,或者按照自己需求做一点小东西 做小改动可以,大改动最好还是 fork 仓库发包 1.开发环境安装 npm i patch-package --save-dev2.手动去node_module 中修改(我要修改fastify的代码) 3.修改完成后&…

Java 应用的无服务器架构:探索 Serverless

Java 应用的无服务器架构:探索 Serverless 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 无服务器架构(Serverless)是一种新的应用架构模式,它允…

Spire.PDF for .NET【文档操作】演示:创建 PDF 组合

PDF 作品集是一组文件,其中可以包含文本文档、电子表格、电子邮件、图像、PowerPoint 演示文稿和绘图。尽管 PDF 作品集将不同类型的文件组合成一个单元,但其中的每个文件都保留了其原始格式、分辨率和大小。在本文中,您将学习如何使用Spire.…

Python -- GUI图形界面编程—GUI编程实例 博主也在持续学习中[ 持续更新中!!! 欢迎白嫖 也求粉啊啊啊~ ]

本文继上篇文章http://t.csdnimg.cn/rrsIL继续介绍GUI的图形界面编程(相关视频是哔站上的应该搜这个题目就能找到),文章还是很基础的,目前博主处于有一点基础的状态。 文章的主要介绍了依旧非常重要的结构tinkter库、重要组件简介…

SQL Server事务日志文件过大的处理方法

正常情况下事务日志文件过大时可以右点数据库--任务--收缩--文件--选择日志进行收缩,从而达到减小事务日志文件的目的。 但在有些情况下没有达到执行收缩条件,无法执行收缩: 1、数据库恢复模式 为 完整恢复模式(FULL&#xff09…