高性能向量检索库(milvus & faiss)简介

Milvus和Faiss都是高性能向量检索库,它们能够快速检索出与目标向量最相似的向量。本文将对这两个库进行介绍和对比,并提供Milvus和Faiss的安装及使用教程。

什么是Milvus和Faiss?

Milvus是一款开源的向量数据库,专为大规模特征向量的相似性搜索而设计。它基于异构众核计算框架,具有高性能和低延迟的特点。Faiss是由Facebook Research开发的,用于高效相似性搜索和聚类的库。

Milvus和Faiss的对比

Milvus的优势:

  • 多平台支持:Milvus支持Mac、Windows和Linux平台。
  • 编程语言广泛:支持Java、C、C++和Python。
  • 速度:在个人测试中,Milvus的速度与Faiss相当。

Faiss的优势:

  • 使用方便:代码简洁,无需Docker部署。
  • 技术支持:由Facebook提供支持。

Milvus安装及使用教程

安装步骤

Step1:安装DockerDocker是一个虚拟机工具,可以在Docker官网下载安装。

Step2:下载Milvus镜像使用Docker安装Milvus,首先需要下载Milvus的Docker镜像。可以在Docker Hub搜索Milvus,选择CPU版本的镜像,使用命令docker pull milvusdb/milvus:cpu-latest进行下载。

使用教程

安装完成后,可以根据Milvus的官方文档进行使用。Milvus提供了丰富的API,支持多种编程语言。

总结

Milvus和Faiss都是优秀的向量检索库,选择哪一个取决于你的具体需求和开发环境。Milvus在多平台支持和编程语言上具有优势,而Faiss在代码简洁性和技术支持上更胜一筹。

配置 Milvus 服务前的准备工作

在开始配置 Milvus 服务之前,我们需要先设置好配置文件和工作目录。以下是详细的步骤和说明:

  1. 创建配置文件
  • 首先,在/home/$USER/milvus/conf目录下创建一个名为server_config.yaml的文件。
  • 然后,访问Milvus 官方 GitHub 仓库,将server_config.yaml文件的内容复制到你刚创建的文件中。
  1. 配置文件的修改
  • 通常情况下,server_config.yaml文件不需要进行修改。
  • 如果有特定的个人配置需求,可以参照 Milvus 官网的教程进行相应的调整。
  1. 设置工作目录
  • 接下来,需要在/home/$USER/milvus/目录下创建三个文件夹:dblogswal
  • 这些文件夹用于 Milvus 存储数据库文件、日志和预写式日志(WAL)。
  1. 目录自定义
  • 根据个人需求,上述目录可以自定义修改。
  • 重要的是,在启动 Docker 服务时,需要确保这些目录正确映射到容器中。
  1. 示例目录结构
  • 以我的个人设置为例,我的工作目录位于C:\Users\Zhdun\milvus,目录结构如下: C:\Users\Zhdun\milvus│├── conf│ └── server_config.yaml├── db├── logs└── wal 确保按照上述步骤操作,以便 Milvus 服务能够顺利启动和运行。
1
milvus  ├─conf //配置文件目录 │ server_config.yaml //配置文件 搜索引擎配置都在这里修改 │ ├─db //数据库存储目录 你的索引与向量存储的位置 │ └─logs //日志存储目录 │ └─wal // 预写式日志相关配置

Step4 启动docker服务

设置好工作目录后,就可以使用镜像创建容器了,以我自己工作目录为例,需要如下命令

1
docker run -td --name mymilvus -e "TZ=Asia/Shanghai" -p 19530:19530 -p 19121:19121 -v C:\Users\Zhdun\milvus\db:/var/lib/milvus/db -v C:\Users\Zhdun\milvus\conf:/var/lib/milvus/conf -v C:\Users\Zhdun\milvus\logs:/var/lib/milvus/logs -v C:\Users\Zhdun\milvus\wal:/var/lib/milvus/wal milvusdb/milvus:cpu-latest

Docker 容器运行命令解析

Docker 提供了强大的 docker run 命令,用于创建和启动容器。以下是一些常用参数的详细说明:

  • -d: 将容器在后台运行。
  • --name: 为容器指定一个名称,方便识别和管理。
  • -p: 端口映射,格式为 host_port:container_port,允许你自定义容器端口与宿主机端口的映射关系。
  • -v: 挂载卷,格式为 host_dir:container_dir,用于将宿主机的目录映射到容器中,实现数据共享。

实例操作

  1. 后台运行容器:使用 -d 参数,容器将在后台运行,不会阻塞当前的终端。 sh docker run -d ubuntu

  2. 命名容器:使用 --name 参数,给容器起一个容易识别的名字。 sh docker run --name my_container ubuntu

  3. 端口映射:使用 -p 参数,可以自定义宿主机与容器之间的端口映射。 sh docker run -p 8080:80 nginx

  4. 挂载卷:使用 -v 参数,将宿主机的目录挂载到容器中。 sh docker run -v /host/data:/container/data ubuntu

  5. 查看容器状态:使用 docker ps -a 命令可以查看所有容器的状态,包括已退出的。 sh docker ps -a

  6. 查看容器日志:如果容器退出了,可以使用 docker logs 命令查看容器的日志,以诊断问题。

  7. 组合使用参数:可以组合多个参数,实现更复杂的容器配置。 sh docker run -d -p 8080:80 -v /host/data:/data --name webserver nginx 以上是 docker run 命令的一些基础用法,通过这些参数,你可以灵活地控制容器的运行方式和配置。

安装问题解决方案

配置文件错误

  • 问题描述Config check fail: Invalid config version: . Expected config version: 0.1
  • 解决方法:在服务器配置文件的开头添加 version: 0.1

内存配置问题

  • 问题描述Config check fail: Invalid cpu cache capacity: 1. Possible reason: sum of cache_config.cpu_cache_capacity and db_config.insert_buffer_size exceeds system memory.
  • 解决方法:首先,检查服务器配置中的 cpu_cache_capacityinsert_buffer_size 是否设置得过大。
  • 进一步检查:使用 docker info 命令检查分配给 Docker 的内存是否充足。

Milvus 基本使用指南

安装 Milvus

  • 完成安装:在成功安装 Milvus 后,可以开始使用。

支持的语言

  • Milvus 支持 Python、Java 和 C++。

Python 使用示例

  • 安装 pymilvus 库:使用命令 pip install pymilvus 进行安装。
  • 编写代码:接下来将展示 Python 代码示例,注释中将解释每一步的具体含义及可能的扩展。 注意:如果代码中存在错误,欢迎指正。
1
# -*- coding: utf-8 -*- # 导入相应的包 import numpy as np from milvus import Milvus, MetricType # 初始化一个Milvus类,以后所有的操作都是通过milvus来的 milvus = Milvus(host='localhost', port='19530') # 向量个数 num_vec = 5000 # 向量维度 vec_dim = 768 # name collection_name = "test_collection" # 创建collection,可理解为mongo的collection collection_param = { 'collection_name': collection_name, 'dimension': vec_dim, 'index_file_size': 32, 'metric_type': MetricType.IP # 使用内积作为度量值 } milvus.create_collection(collection_param) # 随机生成一批向量数据 # 支持ndarray,也支持list vectors_array = np.random.rand(num_vec, vec_dim) # 把向量添加到刚才建立的collection中 status, ids = milvus.insert(collection_name=collection_name, records=vectors_array) # 返回 状态和这一组向量的ID milvus.flush([collection_name]) # 输出统计信息 print(milvus.get_collection_stats(collection_name)) # 创建查询向量 query_vec_array = np.random.rand(1, vec_dim) # 进行查询, status, results = milvus.search(collection_name=collection_name, query_records=query_vec_array, top_k=5) print(status) print(results) # 如果不用可以删掉 status = milvus.drop_collection(collection_name) # 断开、关闭连接 milvus.close()

Faiss 安装及其使用教程

Faiss 是一个高效的相似性搜索和密集向量聚类的库,广泛应用于机器学习和数据挖掘领域。以下是 Faiss 的安装方法和基本使用教程。

Faiss 的安装方式

Faiss 支持多种安装方式,这里主要介绍两种常见的安装方法。

  1. 源码编译安装 源码编译安装是最直接的安装方式,但可能需要解决一些依赖问题。具体步骤可以参考 Faiss 的官方文档。如果你在编译过程中遇到问题,可以联系我寻求帮助。

  2. Conda 安装 使用 Conda 安装 Faiss 是最简单快捷的方法,前提是你已经安装了 Conda 环境管理器。Conda 可以自动解决依赖问题,简化安装过程。

使用教程

安装完成后,你可以开始使用 Faiss 进行向量搜索和聚类。以下是一些基本的使用示例。

  • 向量搜索 使用 Faiss 进行向量搜索的基本步骤包括:构建索引、添加向量、执行搜索。

  • 向量聚类 Faiss 同样支持向量聚类功能,你可以使用它来发现数据中的模式和结构。 更多关于 Faiss 的使用技巧和高级特性,可以参考 官方示例代码,这些代码由社区贡献,具有很高的参考价值。

1
# CPU version only conda install faiss-cpu -c pytorch # GPU version conda install faiss-gpu cudatoolkit=8.0 -c pytorch # For CUDA8 conda install faiss-gpu cudatoolkit=9.0 -c pytorch # For CUDA9 conda install faiss-gpu cudatoolkit=10.0 -c pytorch # For CUDA10

第三方预编译库使用指南

概述

在Python环境中,有时我们需要使用到一些第三方库,但由于编译环境的复杂性,直接编译安装可能会遇到各种问题。幸运的是,有些热心的开发者会提供预编译的库,方便我们直接通过pip命令安装使用。

预编译库来源

  • 项目名称:faiss
  • 预编译库链接点击访问
  • 编译者信息:由社区成员提供,非官方版本
  • 稳定性说明:虽然非官方,但据使用者反馈,稳定性和成功率尚可,作者本人使用未发现明显问题

安装指南1. 打开终端或命令提示符。2. 输入安装命令:pip install faiss3. 等待安装完成。

注意事项

  • 环境依赖:确保已安装openblas,而不是blasopenblas对于多核处理器的利用率远高于blas

使用示例以下是faiss库的使用示例,类似于Milvus的使用方式,提供了一份示例代码,并附有详细注释。

python# 示例代码# 此处应放置具体的faiss使用代码,由于示例代码未给出,无法提供具体实现。# 请根据实际代码情况进行填充。

错误与反馈

  • 如果在使用过程中遇到任何问题或错误,欢迎指正和反馈。

结语希望这份指南能帮助你顺利地安装和使用faiss库。如果有任何建议或问题,欢迎交流讨论。

1
# 导入库 import numpy as np import faiss # 向量个数 num_vec = 5000 # 向量维度 vec_dim = 768 # 搜索topk topk = 10 # 随机生成一批向量数据 vectors = np.random.rand(num_vec, vec_dim) # 创建索引 faiss_index = faiss.IndexFlatL2(vec_dim) # 使用欧式距离作为度量 # 添加数据 faiss_index.add(vectors) # 查询向量 假设有5个 query_vectors = np.random.rand(5, vec_dim) # 搜索结果 # 分别是 每条记录对应topk的距离和索引 # ndarray类型 。shape:len(query_vectors)*topk res_distance, res_index = faiss_index.search(query_vectors, topk) print(res_index) print(res_distance)

Faiss 向量检索库简介与使用流程

Faiss 是一个高效的向量相似性搜索和聚类库,由 Meta AI Research 主导开发,支持 C++ 和 Python 语言。它提供了多种算法来处理大规模向量集合的搜索问题,甚至可以处理那些无法完全装入 RAM 的数据集。Faiss 的核心功能是构建数据结构,以快速找到与给定向量最相似的向量。

相似性搜索基础

相似性搜索是在给定一组向量集合后,为新的查询向量找到最相似的向量。Faiss 构建的索引允许快速执行此操作,同时支持多种高级功能,如批量处理和精度与速度的权衡。

功能特点

  • 多近邻搜索:返回查询向量的第 k 个最近邻。
  • 批量处理:同时搜索多个向量,提高效率。
  • 精度与速度的权衡:在速度和内存使用上提供不同的搜索策略。
  • 内积搜索:支持最大内积搜索,以及其他距离度量方式。
  • 范围搜索:返回查询点给定半径内的所有元素。
  • 磁盘存储:支持将索引存储在磁盘上。
  • 二进制向量索引:支持对二进制向量进行索引。
  • 向量ID过滤:根据向量 ID 的谓词条件忽略索引中的子集。

使用流程

  1. 安装 Faiss:根据官方文档安装 Faiss 库。
  2. 构建索引:使用 Faiss 构建数据结构,为向量集合创建索引。
  3. 添加向量:将向量添加到索引中。
  4. 执行搜索:使用构建好的索引进行向量搜索。
  5. 结果分析:分析搜索结果,根据需要进行后续处理。

高级用法

对于更高级的用法,如 GPU 加速、自定义索引策略等,推荐访问 Faiss 官方 Wiki 获取详细信息。

结语

本文旨在介绍 Faiss 的基本使用流程,希望能够帮助到对向量检索感兴趣的开发者。如果需要更深入的了解,可以访问上述提供的资源链接。 版权声明:文章内容可以转载,但请注明出处。

出处链接