ModaHub魔搭社区:向量数据库Milvus性能调优教程(二)

news2024/11/20 3:26:34

目录

索引

其他

存储优化

常见问题


索引

向量索引的基本概念请参考 向量索引概述。

选择合适的索引需要在存储空间、查询性能、查询召回率等多个指标中权衡。

  • FLAT 索引

FLAT 是对向量的暴力搜索(brute-force search),速度最慢,但召回率最高(100%),磁盘空间占用最小。

随着目标向量数量增多,使用 CPU 做 FLAT 查询的耗时呈线形上升关系;而使用 GPU 查询时,批量查询的效率高,目标向量数量增加对查询耗时影响不大。

  • IVF 系列索引

IVF 系列索引包括 IVF_FLAT、IVF_SQ8/IVF_SQ8H 和 IVF_PQ。IVF_SQ8/IVF_SQ8H 和 IVF_PQ 索引对向量数据做了有损压缩,磁盘占用量较少。

IVF 索引都有两个相同的参数:nlist 和 nprobe。nlist 是建索引参数,nprobe 是搜索参数。选取 nlist 和 nprobe 的推荐值,详见 性能优化问题 > 应如何设置 IVF 索引的nlist和nprobe参数?

根据相关原理,估算使用 IVF 索引进行查询时的计算量:

 

  • 单个数据段计算量可估算为:目标向量数量 × (nlist + (段内向量数 ÷ nlist)× nprobe)
  • 数据段的数量可估算为:集合数据总量 ÷ index_file_size
  • 对集合查询所需的计算总量则为:单个数据段计算量 × 数据段数量

通过估算得出的计算总量越大,查询耗时越长。实际使用中可根据以上公式确定合理的参数,在满足召回率的前提下获得较高的查询性能。

在持续插入数据的场景下,由于对大小未达到 index_file_size 的数据段未建立索引,对其使用的查询方式是暴力搜索。计算量为:目标向量数量 x 该数据段向量总数。

  • HNSW / RNSG / ANNOY 索引

HNSW、RNSG、ANNOY 的索引参数对查询性能的影响较为复杂,建议参考 索引概览。

其他

  • 结果集

结果集的规模取决于目标向量数量和 topk。topk 的大小对计算的影响不大。但在目标向量数量和 topk 都较大的情况下,结果集序列化和网络传输的耗时会相应增加。

  • MySQL

Milvus 使用 MySQL 作为元数据后端服务。Milvus 在查询数据时会多次访问 MySQL 以获取元数据信息,因此 MySQL 服务的响应速度对 Milvus 的查询性能有较大影响。

 

  • 预加载

首次查询需要先将数据从磁盘读入缓存,因此耗时较长。为避免首次查询加载数据,可预先调用 load_collection 接口,或使用系统参数 preload_collection 指定启动 Milvus 时要预先加载的集合。

  • 段数据整理

在 数据段整理 中提到,Milvus 在查询数据时将 delete_docs 读入内存以过滤被删除的实体。调用 compact 接口可清理被删除的实体,减少过滤操作,从而提高查询性能。

存储优化

  • 数据段整理

在 数据段整理 中提到,被删除的实体不参与计算,并且占用磁盘空间。如果有大量的实体已被删除,你可以调用 compact 接口来释放磁盘空间。

常见问题

为什么查询时 GPU 一直空闲?

此时应该是在用 CPU 进行查询。如果要用 GPU 进行查询,需要在配置文件中将 gpu_search_threshold 的值设置为小于 nq (每次查询的向量条数) 。可以将 gpu_search_threshold 的值调整为期望开启 GPU 搜索的 nq 数。若 nq 小于该值,则用 CPU 查询,否则将使用 GPU 查询。不建议在查询批量较小时使用 GPU 搜索。

为什么搜索的速度非常慢?

请首先检查 server_config.yaml 的 cache.cache_size 参数是否大于集合中的数据量。

创建集合时 index_file_size 如何设置能达到性能最优?

使用客户端创建集合时有一个 index_file_size 参数,用来指定数据存储时单个文件的大小,其单位为 MB,默认值为 1024。当向量数据不断导入时,Milvus 会把数据增量式地合并成文件。当某个文件达到 index_file_size 所设置的值之后,这个文件就不再接受新的数据,Milvus 会把新的数据存成另外一个文件。这些都是原始向量数据文件,如果建立了索引,则每个原始文件会对应生成一个索引文件。Milvus 在进行搜索时,是依次对每个索引文件进行搜索。

根据我们的经验,当 index_file_size 从 1024 改为 2048 时,搜索性能会有 30% ~ 50% 左右的提升。但要注意如果该值设得过大,有可能导致大文件无法加载进显存(甚至内存)。比如显存只有 2 GB,该参数设为 3 GB,显存明显放不下。

如果向集合中导入数据的频率不高,建议将 index_file_size 的值设为 1024 MB 或者 2048 MB。如果后续会持续地向集合中导入增量数据,为了避免查询时未建立索引的数据文件过大,建议这种情况下将该值设置为 256 MB 或者 512 MB。

可参阅 如何设置 Milvus 客户端参数。

为什么同样的数据量,用 GPU 查询比 CPU 查询慢?

 

一般来说,当 nq(每次查询的向量条数)较小时,用 CPU 查询比较快。只有当 nq 较大(约大于 500)时,用 GPU 查询才会更有优势。

因为在 Milvus 中,每次用 GPU 查询都需要将数据从内存加载到显存。只有当 GPU 查询节省的计算时间能抵消掉数据加载的时间,才能体现出 GPU 查询的优势。

为什么有时候小的数据集查询时间反而更长?

如果数据文件的大小小于创建集合时 index_file_size 参数的值,Milvus 则不会为此数据文件构建索引。因此,小的数据集有可能查询时间会更长。你还可以调用 create_index 建立索引。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/694166.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt/C++编写监控实时显示和取流回放工具(回放支持切换进度)

一、前言 现在各个监控大厂做的设备,基本上都会支持通过rtsp直接取流显示,而且做的比较好的还支持通过rtsp回放取流,基本上都会约定一个字符串的规则,每个厂家都是不一样的规则,比如回放对应的rtsp地址还要带上时间范…

Spring专家课程Day02_Spring-DI

文章目录 一、依赖注入_Autowired1.配置类中Bean 方式注入1.1)注入实例1.2)自动注入的匹配原则 2.组件扫描实现自动注入 Autowired3.set方法注入 二、接口解耦_自动注入规则1)利用接口解耦2)Autowired的注入规则3)Qual…

学高性能计算难吗?猿代码科技国内首家专注高性能计算人才培养与推荐 ...

高性能计算(HPC)作为一门专业领域,涉及到复杂的计算架构、并行计算模型和算法优化等方面的知识。因此,学习高性能计算可能对一些人来说是一项挑战。然而,随着正确的学习方法和适当的资源,掌握高性能计算并不…

【UCOS-III】自我学习笔记→第35讲→软件定时器实验

文章目录 前言实验步骤1.复制消息队列工程,并创建单次定时器和周期定时器,并删除task3及其相关内容2.添加task1按键处理和软件定时器超时函数3.查看串口现象 测试代码工程文件总结 前言 无,仅作记录,不具有参考价值,所…

【MATLAB第43期】基于MATLAB的BO-NAR贝叶斯优化动态神经网络NAR时间序列股票预测模型

【MATLAB第43期】基于MATLAB的BO-NAR贝叶斯优化动态神经网络NAR时间序列股票预测模型 一、效果展示 二、模型介绍 1.数据情况 一列数据,499个值 ratio 0.9;% 训练集比例 MaxEpochs 600;% 最大训练次数 % % 导入股票数据 xall importdata(数据.xlsx);2.优化参…

MySQL MMM 双主架构 主主复制 高可用

MMM(Master-Master replication manager for MvSQL,MySQL主主复制管理器) 是一套支持双主故障切换和双主日常管理的脚本程序。MMM 使用 Perl 语言开发,主要用来监控和管理 MySQL Master-Master (双主)复制&…

全志V3S嵌入式驱动开发(windows平台镜像烧入)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 对于很多第一次学习嵌入式linux和开发板的同学来说,如何烧入镜像文件常常成为他们要面对的第一个难题。从拿到板子开始,他们…

每个前端开发者都应知道的25个实用网站

微信搜索 【大迁世界】, 我会第一时间和你分享前端行业趋势,学习途径等等。 本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试完整考点、资料以及我的系列文章。 快来免费体验ChatGpt plus版本的,我们出的钱 体验地…

Soybean Admin - 基于 Vue3 / vite3 等最新前端技术栈构建的中后台模板,免费开源、清新优雅,主题丰富

一款专业好看、完成度很高的 admin 开源项目,无论是用于生产还是学习,都非常值得尝试。 关于 Soybean Admin Soybean Admin 是一个基于 Vue3 / Vite3 / TypeScript / NaiveUI / Pinia 和 UnoCSS 的中后台模版,它使用了最新流行的前端技术栈…

poium测试库介绍

poium测试库前身为selenium-page-objects测试库,我在以前的文章中也有介绍过:这可能是最简单的Page Object库,项目的核心是基于Page Objects实现元素定位的封装。该项目由我个人在维护,目前在公司项目中已经得到的应用。 ### poium的优势 Pa…

cmd和android studio同时使用adb,解决冲突的方案

问题: android studio 在Terminal使用adb后,cmd的adb就会掉线;同样cmd的adb使用中,android studio的logcat 的设备就是Offline状态,得重新在Terminal adb connect,并且关闭掉cmd窗口,否则adb反…

Centos ifconfig不显示IP地址解决办法之一

虚拟机使用命令ifconfig不显示IP地址,情况如下 原因:我们的虚拟机网络服务没有设置为开机自启动 解决: 1,进入目录 /etc/sysconfig/network-scripts/ cd /etc/sysconfig/network-scripts/ 2,路径下有一个 ifcfg-en…

4.蜂鸣器

1.了解蜂鸣器: 蜂鸣器在使用3.3V无法驱动,需要借助到三极管的放大特性(IcβIb)将蜂鸣器驱动;本次原理图中,接R33电阻是因为当STM32单片机复位时处于浮空状态,防止小电流让蜂鸣器响而添加的。 2.蜂鸣器原理图&#xf…

十一、jenkins将构建时间作为Jenkins变量(BUILD_TIMESTAMP)

插件管理中安装Build Timestamp 插件后可以使用 构建时间变量,变量名称【BUILD_TIMESTAMP】 引用变量方法: linux : ${BUILD_TIMESTAMP} 或 $BUILD_TIMESTAMP 推荐使用 ${BUILD_TIMESTAMP} Windows: %BUILD_TIMESTAMP%

TypeScript——泛型

泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。 函数泛型 本来函数参数类型的不同时,要写多个,现在用泛型,只需要使用时传参即可…

android studio 一直卡在Build android:Download maven-metadata.xml

在android studio进行此操作,关闭gradle的联网功能

使用MM32L0130和HYS1254的电子秤方案验证

使用MM32L0130和HYS1254的电子秤方案验证 文章目录 使用MM32L0130和HYS1254的电子秤方案验证引言电路设计软件设计采集HYS1254数据软件滤波算法换算压力为ADC采样值 实验过程数据可视化优化电路使用软件滤波降低ADC的采样速率使用独立的供电电源再次调整滤波算法 验证总结参考文…

M1 macbook上安装docker 编译内核 并使用qemu启动内核。

1、在M1上安装docker这个就不用提供步骤了,网上自行搜索。 2、在M1上pull一个ubuntu的容器。docker pull ubuntu:18.04 docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 18.04 d1a528908992 …

python实现Edge的爬虫

python实现Edge的爬虫 查看Edge的版本号 下载对应的驱动 官网驱动链接: link 根据自己的系统选择相应的驱动 解压后放在自己的python的Scripts路径,并改名为 MicrosoftWebDriver 安装python库 常用的爬虫库: from bs4 import BeautifulSoup import …

回归预测 | MATLAB实现基于QPSO-GRU、PSO-GRU、GRU多变量回归预测

回归预测 | MATLAB实现基于QPSO-GRU、PSO-GRU、GRU多变量回归预测 目录 回归预测 | MATLAB实现基于QPSO-GRU、PSO-GRU、GRU多变量回归预测效果一览基本描述程序设计参考资料 效果一览 基本描述 1.Matlab实现QPSO-GRU、PSO-GRU和GRU门控循环单元多变量回归预测; 2.输…