当前位置: 首页 > news >正文

ES 8.x 向量检索性能测试 把向量检索性能提升100倍!

  向量检索不仅在的跨模态检索场景中应用广泛,随着chat gpt的或者,利用es的向量检索,在Ai领域发挥着越来越大的作用。

  本文,主要测试es的向量检索性能。我从8.x就开始关注ES的向量检索了。当前ES已经发布到 8.10 版本。以下是官方文档的链接:

   https://www.elastic.co/guide/en/elasticsearch/reference/current/release-highlights.html

  本文,在测试的时候使用的是8.3版本(因为测试的时候只发布到这里 )。

  在本文中,妥妥滴都是干货,因为不仅有性能测试,还有搜索性能优化。这里预告以下,在千万规模数据中做的测试,将检索性能提升了将近100倍。在本文中可以看看性能是如何被优化的。

一、背景

测试ES - KNN向量检索性能、写入性能、准确度、资源占用情况。针对该需求,搭建一个8.3.0版本的ES节点,使用ES8.3.0版本的java Client高级API来调用KNN搜索。

测试资源介绍

机器情况

ES情况

插件

数据规模

数据情况

单台机器

48核心

64G内存
磁盘为HDD盘(也测了SSD盘)

单个节点

单个索引

单个分片

不带副本

优化后的段的个数为1

ES版本 8.3.0
JVM31G

elastiknn

 

  1. 34W(340507)
  2. 1000W

数据结构(索引结构和配置)

结构:三个字段,一个向量字段存放512维度的向量数据。一个路径字段,存放图片路径,一个文档id

二、测试结果

写入性能

批量写数据,使用es bulk提交数据,数据刷新间隔时间30s(近实时)。

数据量

总耗时

平均每张耗时

340507

170s

0.5ms

写入数34万,耗时170s。

最佳查询性能

 最终的性能如下表,千万级别的检索可以在毫秒级别。经历了两轮优化。

数据规模

检索 top-N

平均耗时

最长耗时

34w

(512维度)

检索 top-1

[3] ms

[110] ms

检索 top-10

[6] ms

[150] ms

检索 top-100

[26] ms

[810] ms

1000W

(512维度)

检索 top-1

[14] ms

[390] ms

检索 top-10

[22] ms

[220] ms

检索 top-100

[42] ms

[73] ms

~ps 最长耗时是非常重要的指标,要重点关注。这很可能是用户在第一次点击搜索的时候出现的情况。短板效应。

检索优化过程

  说明:使用ES原生KNN检索,尝试做了三轮优化。第一轮是对写入的数据,进行一次合并优化;第二轮使用使用开源的插件elastiknn进行优化。第三轮是将数据放在SSD磁盘的机器上。每轮提升两倍。整体性能提升近10倍。(测试结果会受到了Linux os cache的影响,磁盘上的数据从磁盘读取到os cache中 )如果追求检索性能,应该增加内存,来达到将更多的数据放在缓存中去做检索的目的。

  ps~ 以下相同颜色做对比。第一轮对比,是forceMerge的优化。第二轮是插件优化。第三轮在千万数据集下做测试,接近生产需求,并且包含了三项优化一起做的场景。把三种优化,放在一起,带来更多的提升!

  其中forceMerge优化,只能对不再发生变化的数据做优化。比如昨天入库的数据不再新增和修改,则优化可以生效。但是不适用于实时入库的数据!

数据规模

优化项

检索 top-N

调用次数

总耗时

平均耗时

最长耗时

30W

不优化

检索 top-2

22727

[1148351] ms

[50] ms

-

force

Merge

检索 top-2

22727

[698089] ms

[30] ms

-

不优化

检索 top-10

22727

[1962618] ms

[86] ms

[5183] ms

插件优化

检索 top-10

22727

[795893] ms

[35] ms

[360]

force

Merge

检索 top-10

22727

[1385920] ms

[60] ms

[2016] ms

1000W

不优化(HDD)

检索 top-10

-

-

10 - 20 s

20s

SSD 优化

检索 top-10

22727

[2781526] ms

[122] ms

5s

SSD + 插件 优化

检索 top-10

22727

[1046376] ms

[46] ms

5s

SSD + 插件 + merge优化

检索 top-10

22727

[] ms

[22] ms

[220] ms

使用elastiknn插件优化检索(只看插件优化)

数据合并

检索 top-N

调用次数

总耗时

平均耗时

最长耗时

优化前

检索 top-10

22727

[1161129] ms

[51] ms

[387]

优化后

检索 top-10

22727

[795893] ms

[35] ms

[360]

优化后

检索 top-100

22727

[5776099] ms

[254] ms

[8759]

华为云es + 自研插件 性能(性能比原生好10倍左右

测试数据集

DataSet1SIFT开源数据集,维度128Base数据集100万条

DataSet2SIFT10M开源数据集,维度128Base数据集1100万条

DataSet3GIST开源数据集,维度960Base数据集100万条

检索性能

数据

索引类型

查询Top1

查询Top10

查询Top100

Rec

RT

QPS

Rec

RT

QPS

Rec

RT

QPS

SIFT

GRAPH

0.992

2.63

6200

0.998

2.66

6000

0.992

3.79

4200

SIFT10M

GRAPH

0.998

3.20

5000

0.998

3.31

4800

0.985

4.82

3400

GIST

GRAPH

0.971

10.0

1500

0.963

12.0

1350

0.911

20.1

600

GIST

GRAPH_PQ

0.954

4.06

4000

0.934

6.54

2450

-

-

-

说明

Rec表示Topk召回率,RT表示平均查询时延(毫秒),QPS表示查询吞吐量;

由于GIST的维度较高,通过使用GRAPH_PQ加速能够极大地提升查询性能,以损失精准度为代价,来提升速度

三、索引结构

以下索引,30万数据规模用一个分片即可。1000万数据规模,给3个分片。

"knn_image_index": {"aliases": {},"mappings": {"properties": {"my_image_vector": {"type": "dense_vector","dims": 512,"index": true,"similarity": "l2_norm"},"pic": {"type": "keyword"},"pic_path": {"type": "keyword"}}},"settings": {"index": {"routing": {"allocation": {"include": {"_tier_preference": "data_content"}}},"refresh_interval": "30s","number_of_shards": "1","provided_name": "knn_image_index","creation_date": "1681825402139","number_of_replicas": "0","uuid": "KjqLhlv2SMGxlwWIjgJCMw","version": {"created": "8030099"}}}}
}

四、资源使用情况

磁盘占用量

30W数据,占用1.7G磁盘空间。

内存占用量

内存使用量极少。

五、测试结论

  ES支持ANN检索、支持删除、支持修改、数据写入性能平均每条耗时5ms。数据存储不占用内存空间,都在磁盘上。1000W图片占用磁盘空间50GB。

  检索性能以下为最佳状态。存储使用SSD盘、使用elastiknn插件做优化、对数据做合并,merge成一个segment。能够达到最好的性能如下表。

数据规模

检索 top-N

平均耗时

最长耗时

34w

(512维度)

检索 top-1

[3] ms

[110] ms

检索 top-10

[6] ms

[150] ms

检索 top-100

[26] ms

[810] ms

1000W

(512维度)

检索 top-1

[14] ms

[390] ms

检索 top-10

[22] ms

[220] ms

检索 top-100

[42] ms

[73] ms

是否能够满足使用需求

、插件调研、开源测试工具调研、向量算法

KNN - plugin

插件

优点

缺点

git地址

活跃度

elastiknn

1、性能提升一倍

2、社区持续活跃,一直跟着最新版本的ES版本去发布的插件

3、不用改官方的检索语法

暂未发现待调研

GitHub - alexklibisz/elastiknn: Elasticsearch plugin for nearest neighbor search. Store vectors and run similarity search using exact and approximate algorithms.

最后一次更新一天前。持续活跃

k-NN

相对elastiknn,该插件支持把底层生成hnsw一个结构加载进内存

基于内存构建

GitHub - opendistro-for-elasticsearch/k-NN: ��� A machine learning plugin which supports an approximate k-NN search algorithm for Open Distro.

最后一次更新时间在2021年

GSI's Elasticsearch K-NN Plugin

据说是使用GPU加速的插件

未开源,找不到

GSI's Elasticsearch k-NN Plugin | GSI Technology

-

开源向量性能测试工具

项目

优点

缺点

git地址

活跃度

对N个向量检索数据库做性能测试

GitHub - erikbern/ann-benchmarks: Benchmarks of approximate nearest neighbor libraries in Python

最近两天

对十亿规模的向量数据做测试

GitHub - harsha-simhadri/big-ann-benchmarks: Framework for evaluating ANNS algorithms on billion scale datasets.

最近两天

GSI's Elasticsearch K-NN Plugin

GitHub - jobergum/dense-vector-ranking-performance: Performance evaluation of nearest neighbor search using Vespa, Elasticsearch and Open Distro for Elasticsearch K-NN

两年前(21年)

向量检索相关算法

图像检索:向量索引 

蚂蚁金服 ZSearch 在向量检索上的探索 · SOFAStack

相关文章:

ES 8.x 向量检索性能测试 把向量检索性能提升100倍!

向量检索不仅在的跨模态检索场景中应用广泛,随着chat gpt的或者,利用es的向量检索,在Ai领域发挥着越来越大的作用。 本文,主要测试es的向量检索性能。我从8.x就开始关注ES的向量检索了。当前ES已经发布到 8.10 版本。以下是官方文…...

云计算——ACA学习 云计算架构

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号:网络豆云计算学堂 座右铭:低头赶路,敬事如仪 个人主页: 网络豆的主页​​​​​ 目录 写在前面 前期回顾 本期介绍 一.云计算架…...

基于深度学习实现一张单图,一个视频,一键换脸,Colab脚本使用方法,在线版本,普通人也可以上传一张图片体验机器学习一键换脸

基于深度学习实现一张单图,一个视频,一键换脸,Colab脚本使用方法,在线版本,普通人也可以上传一张图片体验机器学习一键换脸。 AI领域人才辈出,突然就跳出一个大佬“s0md3v”,开源了一个单图就可以进行视频换脸的项目。 项目主页给了一张换脸动图非常有说服力,真是一图…...

leetcode 21

递归的方式 class Solution { public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {if(l1 nullptr){return l2;}else if(l2 nullptr){return l1;}else if(l1->val < l2->val){l1->next mergeTwoLists(l1->next, l2);return l1;}else if(l1->va…...

【Spring Cloud】openfeign负载均衡方案(和lb发展历史)

文章目录 版本1&#xff1a;原始loadBalancerClient方案版本2&#xff1a;ribbon-loadbalancer方案版本3&#xff1a;openfeign方案&#xff08;即**方案2openfeign版本**&#xff09; 本文描述了Spring Cloud微服务中&#xff0c;各个服务间调用的负载均衡方案的升级历史&…...

R语言:主成分分析PCA

文章目录 主成分分析处理步骤数据集code主成分分析 主成分分析(或称主分量分析,principal component analysis)由皮尔逊(Pearson,1901)首先引入,后来被霍特林(Hotelling,1933)发展。 主成分分析是一种通过降维技术把多个变量化为少数几个主成分(即综合变量)的统计分…...

Linux下磁盘备份、文件备份和定时备份命令指南

文章目录 磁盘备份和定时备份命令指南1. 引言2. 磁盘备份命令dda. 简介和基本用法b. dd命令的参数和选项说明c. 使用dd命令进行磁盘镜像备份的步骤d. 恢复备份数据的方法和注意事项e. 示例&#xff1a;使用dd命令备份和还原磁盘镜像 3. 磁盘备份命令tara. 简介和基本用法b. tar…...

电脑软件:推荐一款非常强大的pdf阅读编辑软件

目录 一、软件简介 二、功能介绍 1、界面美观&#xff0c;打开速度快 2、可直接编辑pdf 3、非常强大好用的注释功能 4、很好用的页面组织和提取功能 5、PDF转word效果非常棒 6、强大的OCR功能 三、软件特色 四、软件下载 pdf是日常办公非常常见的文档格式&#xff0c;…...

Android 13.0 系统开机屏幕设置默认横屏显示

1.概述 在13.0的系统产品开发中,对于产品需求来说,由于是宽屏设备所以产品需要开机默认横屏显示,开机横屏显示这就需要从 两部分来实现,一部分是系统开机动画横屏显示,另一部分是系统屏幕显示横屏显示,从这两方面就可以做到开机默认横屏显示了 2.系统开机设置默认横屏显…...

Redis -- 基础知识1

1.介绍 1.初识Redis Redis&#xff1a;The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker. in-memory data&#xff1a;在内存中存储&#xff0c;Redis是在分布式系统中存储起作用的 解释&am…...

ubuntu 20.04 passwd 指令不能使用

Linux 更改用户密码报Changing password for user 用户名. passwd: Module is unknown或更改新增用户密码passwd&#xff1a;未知的用户名 报错信息如下&#xff1a; 解决方法&#xff1a; 可以排查 /etc/pam.d/passwd配置文件 注释掉包含pam_passwdqc.so模块的行&#xff0c…...

单片机郭天祥(02)

1&#xff1a;解决keil5软件的乱码问题&#xff0c;修改编码为UTF-8 2&#xff1a;打开keil5使用debug对编写好的程序进行调试 给程序打上断点 使用仿真芯片 更改设备管理器相关设置 接通电源后点击debug连接到51单片机 使用stc-isp获取延时函数 将延时函数添加进入创建好的…...

Hadoop3教程(三十五):(生产调优篇)HDFS小文件优化与MR集群简单压测

文章目录 &#xff08;168&#xff09;HDFS小文件优化方法&#xff08;169&#xff09;MapReduce集群压测参考文献 &#xff08;168&#xff09;HDFS小文件优化方法 小文件的弊端&#xff0c;之前也讲过&#xff0c;一是大量占用NameNode的空间&#xff0c;二是会使得寻址速度…...

metersphere 接口自动化

Metersphere 使用步骤大致如下&#xff1a; 安装 Metersphere Metersphere 是一款基于 Docker 的应用程序&#xff0c;因此在使用 Metersphere 之前&#xff0c;需要先安装 Docker。安装 Docker 后&#xff0c;再下载 Metersphere 的安装包并解压缩。 启动 Metersphere 在终…...

Mac上安装和配置Git

在Mac上安装和配置Git是一个相对简单的过程&#xff0c;以下是一份详细的步骤指南。 首先&#xff0c;你需要确保你的Mac已经安装了Homebrew&#xff08;如果还没有安装&#xff0c;可以通过以下命令安装&#xff1a;&#xff09;&#xff0c;Homebrew是一个包管理器&#xff…...

【文件操作】Java -操作File对象

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 文件操作 Java - File对象 Java - File对象 Fi…...

Socks5代理技术:驱动数字化时代跨界发展的利器

随着全球数字化进程的加速推进&#xff0c;Socks5代理技术作为一项关键的网络技术正日益成为推动跨界电商、爬虫数据分析、企业出海以及游戏体验优化等领域发展的重要驱动力。其高效稳定的网络连接能力以及灵活的应用方式&#xff0c;不仅为企业提供了全球市场拓展的无限可能&a…...

基于二维小波变换的散斑相位奇异构造算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 图(1)表示散斑原图像&#xff0c;(2)表示对(1)图像进行x轴方向的极化分析的小波相位图&#xff0c;呈周期的水平条纹&#xff0c;(3)表示对(1)图像…...

为啥么有奖章

6.1 域名系统 DNS 应用层的许多协议都是基于客户服务器方式。即使是 P2P 对等通信方式&#xff0c;实质上也是一种特殊的客户服务器方式。这里再明确一下&#xff0c;客户(client)和服务器(server)都是指通信中所涉及的两个应用进程。客户服务器方式所描述的是进程之间服务和被…...

【报错】Unbalanced delimiter found in string

Unbalanced delimiter found in string uniapp报错Unbalanced delimiter found in string 查看代码发现原来是粗心导致的。条件编译删漏了一条 hid.close()// #endif加上前面的条件编译 or减去后面的即可...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...