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

milvus的GPU索引

前言

milvus支持多种GPU索引类型,它能加速查询的性能和效率,特别是在高吞吐量,低延迟和高召回率的场景。本文我们将介绍milvus支持的各种GPU索引类型以及它们适用的场景、性能特点。

下图展示了milvus的几种索引的查询性能对比,通过下图我们发现批量查询的场景性能会更好

GPU_CAGRA

GPU_CAGRA是一个针对GPU优化的基于图的索引,它在GPU上能很好的执行推理。它最适合只有少量查询的场景,通过低频的内存训练的GPU通常得不到最优的结果。

  • 索引构建参数:
ParameterDescriptionDefault Value
intermediate_graph_degree

通过在剪枝之前确定图的深度来影响召回率和构建时间,推荐的值是32或者64

128
graph_degree

通过在剪枝之后设置图的深度来影响查询性能和召回率。这两个深度之间的差异越大,构建时间就越长。它的值必须小于intermediate_graph_degree的值

64
build_algo

选择剪枝之前的图生成算法。可选的值:
IVF_PQ: 提供更好的质量但是构建的时间比较慢
NN_DESCENT: 提供更快的构建但是降低了召回率

IVF_PQ
cache_dataset_on_device

决定是否在GPU内存里缓存原始数据集,可选值:

"true": 缓存原始数据集,以通过细化搜索结果来提高召回率。
"false": 不在GPU内存缓存原始数据集

"false"

  • 查询参数
ParameterDescriptionDefault Value
itopk_size

确定在查询期间中间结果的大小。比较大的值可能提高召回率但是影响查询性能。它至少要等于最终的top-k的值,并且是2的n次方(比如16, 32, 64, 128).

Empty
search_width

声明在查询期间进入CAGRA图的切入点的数量,增加它的值可以提高召回率但是影响性能

Empty
min_iterations / max_iterations

控制查询迭代进程,默认情况下它们设置为0,CAGRA根据itopk_size和search_width自动决定迭代的数量。手动调整它们的值可以平衡性能和准确率

0
team_size

声明用来在GPU上计算距离指标的CUDA线程数量。常用的值是2的n次方到32 (比如 2, 4, 8, 16, 32).它对搜索性能的影响很小,默认值是0,这样milvus会根据向量的维度自动设置team_size的值。

0

GPU_IVF_FLAT

与IVF_FLAT类似,GPU_IVF_FLAT也是将向量数据分为 nlist个聚类单元,然后比较输入的目标向量与每个聚类中心的距离。根据系统设置为查询(nprobe)的聚类数量,仅仅比较目标输入和最相似的聚类的向量来返回相似搜索结果,极大的降低了查询时间。

通过调整nprobe,针对特定的场景可以完美的平衡准确率和速度。从IVF_FLAT性能测试报告看出,随着目标输入向量数量(nq)和需要搜索的聚类数量(nprobe)的增加,查询时间急剧增加。

GPU_IVF_FLAT大部分是基于IVF索引,并且每个单元的编码数据存储与原始数据保持一致。当进行搜索的时候,我们可以对GPU_IVF_FLAT索引集合设置tok-K到256

  • 索引构建参数
ParameterDescriptionRangeDefault Value
nlist聚类单元的个数[1, 65536]128

查询参数

ParameterDescriptionRangeDefault Value
nprobe查询多少个聚类单元[1, nlist]8

搜索限制

ParameterRange
top-K<= 256

GPU_IVF_PQ

PQ(乘积量化)将原始高维向量空间均匀分解为m个低维向量空间的笛卡尔乘积,然后对分解的低维度空间进行量化。替代计算目标向量和所有单元的中心距离,乘积量化计算目标向量和每个低维空间的聚类中心的聚类,这极大的降低了算法的时间复杂度和空间复杂度。

IVF_PQ在向量乘积的量化之前执行IVF索引聚类。它的索引文件甚至比IVF_SQ8还要小,但是它也导致了在向量搜索的时候损失了精度。

注意:索引构建参数和查询参数会随着milvus的版本变化,所以我们需要先选择对应的版本。当进行搜索的时候,我们可以对GPU_IVF_PQ索引集合设置tok-K到8192

索引构建参数

ParameterDescriptionRangeDefault Value
nlist聚类单元的数量[1, 65536]128
m乘积向量因子的大小dim mod m == 04
nbits

低维度向量存储的位数(bits)

[1, 16]8

查询参数

ParameterDescriptionRangeDefault Value
nprobe需要查询的单元数量[1, nlist]8

查询限制

ParameterRange
top-K<= 1024

GPU_BRUTE_FORCE

GPU_BRUTE_FORCE是专门为非常高的召回率场景进行定制的,它通过比较数据库里面所有的向量确保召回率是1,它仅仅需要度量类型(metric_type)和 top-k(limit)作为索引构建和查询参数。

对于GPU_BRUTE_FORCE,不需要额外的索引构建参数和查询参数。

结论

当前,milvus为了高效的搜索操作加载所有的索引到GPU内存。可以加载的数据量依赖于GPU内存的大小。

  • GPU_CAGRA:需要的内存大小是原始向量数据大小的1.8倍
  • GPU_IVF_FLAT和GPU_BRUTE_FORCE:需要的内存大小与原始数据大小一样
  • GPU_IVF_PQ:占用较小的内存空间,它取决于压缩参数的设置。

相关文章:

milvus的GPU索引

前言 milvus支持多种GPU索引类型&#xff0c;它能加速查询的性能和效率&#xff0c;特别是在高吞吐量&#xff0c;低延迟和高召回率的场景。本文我们将介绍milvus支持的各种GPU索引类型以及它们适用的场景、性能特点。 下图展示了milvus的几种索引的查询性能对比&#xff0c;…...

CleanMyMac2024最新免费电脑Mac系统优化工具

大家好&#xff0c;我是你们的好朋友——软件评测专家&#xff0c;同时也是一名技术博主。今天我要给大家种草一个超级实用的Mac优化工具——CleanMyMac&#xff01; 作为一个长期使用macOS的用户&#xff0c;我深知系统运行时间长了&#xff0c;缓存文件、日志、临时文件等都会…...

catia/delmia的快捷图标模式最多12个

这儿最多显示12个 根据官方文档 If you installed a configuration containing more than 12 workbenches (such as the "AL2" configuration), only the first 12 workbenches are displayed in the Favorites list. The other workbenches do not appear in the l…...

磁盘性能概述与磁盘调度算法

目录 1. 磁盘性能概述 1. 数据传输速率 2. 寻道时间 3. 旋转延迟 4. 平均访问时间 2. 早期的磁盘调度算法 1. FIFO&#xff08;First-In-First-Out&#xff09;调度算法 2. SSTF&#xff08;Shortest Seek Time First&#xff09;调度算法 3. SCAN&#xff08;Elevator…...

chrome浏览器设置--disable-web-security解决跨域

在开发人员于后台进行接口测试的时候&#xff0c;老是遇到跨域问题&#xff0c;这时前端总是会让后台添加跨域请求头来允许跨域请求&#xff0c;今天介绍一个简单的方法跨过这一步操作的设置。 –disable-web-security参数&#xff0c;禁用同源策略&#xff0c;利于开发人员本…...

Android中蓝牙设备的状态值管理

在Android中&#xff0c;蓝牙状态可以通过多种方式来描述&#xff0c;主要包括蓝牙适配器状态、蓝牙设备连接状态以及蓝牙广播状态&#xff0c;其关键的蓝牙状态实现类有BluetoothAdapter、BluetoothDevicePairer、BluetoothDevice、BluetoothProfile&#xff0c;详细介绍如下&…...

关于ReactV18的页面跳转传参和接收

一、使用路由方式进行传参和接收&#xff08;此处需使用 useNavigate 和 useParams 两个hooks&#xff09; 1 首先需要配置好路由形式如下 :id(参数) { path: "/articleDetail/:id", element: lazyElement(<ArticleDetail />), }, 2 传递参数 使用 useNaviga…...

南京观海微电子-----PCB设计怎样降低EMI

开关模式电源是AC-DC或DC-DC电源的通用术语&#xff0c;这些电源使用具有快速开关动作的电路进行电压转换/转换(降压或升压)。随着每天开发出更多的设备(潜在的EMI受害者)&#xff0c;克服EMI成为工程师面临的主要挑战&#xff0c;并且实现电磁兼容性(EMC)与使设备正常运行同等…...

黑苹果/Mac如何升级 Mac 新系统 Sequoia Beta 版

Mac升级教程 有必要提醒一下大家&#xff0c;开发者测试版系统一般是给开发者测试用的&#xff0c;可能存在功能不完善、部分软件不兼容的情况&#xff0c;所以不建议普通用户升级&#xff0c;如果实在忍不住&#xff0c;升级之前记得做好备份。 升级方法很简单&#xff1a; …...

2024年主流工单系统横向对比

一&#xff1a;智齿科技 智齿客服App可以接收工单、查看工单、分配工单、处理工单&#xff0c;客户问题随时随地快速解决。 与云客户中心实时连接&#xff0c;客户以往的浏览轨迹、聊天信息、通话记录、工单历史一目了然。 配合智齿云呼叫中心/机器人客服/人工在线客服&…...

实用软件下载:Studio One最新安装包及详细安装教程

Studio One 6是一款功能丰富、专业级的音乐制作软件&#xff0c;它具备灵活的工作流程和高效的团队协作能力&#xff0c;能帮助用户实现高质量的音乐创作和制作。 智能模板更快的启动&#xff0c;全新的智能模板为你手头的任务提供了必要的工具集&#xff0c;包括基本录制、混音…...

网络安全练气篇——常见服务端口对应漏洞

常见的端口所对应的已知漏洞 21 FTP服务的数据传输端口 22 FTP服务的连接端口&#xff0c;可能存在 弱口令暴力破解 389 LDAP目录访问协议&#xff0c;有可能存在注入、弱口令 443 HTTPS端口&#xff0c;心脏滴血等与SSL有关的漏洞 445 SMB服务端口&#xff0c;可能存…...

WPF学习(3)--不同类通过接口实现同种方法

一、接口概述 1.接口的概念 在C#中&#xff0c;接口&#xff08;interface&#xff09;是一种引用类型&#xff0c;它定义了一组方法、属性、事件或索引器&#xff0c;但不提供实现。接口只定义成员的签名&#xff0c;而具体的实现由实现接口的类或结构体提供。接口使用关键字…...

体验版小程序访问不到后端接口请求失败问题解决方案

文章目录 解决方案一&#xff1a;配置合法域名解决方案二&#xff1a;开发调试模式第一步&#xff1a;进入开发调试模式第二步&#xff1a;启用开发调试 注意事项结语 &#x1f389;欢迎来到Java面试技巧专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&…...

【Linux文件篇】磁盘到用户空间:Linux文件系统架构全景

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 前言&#xff1a;我们前面的博客中一直提到的是被进程打开的文件&#xff0c;而系统中不仅仅只有被打开的文件还有很多没被打开的文件。如果没有被打开&#xff0c;那么文件是在哪里进行保存的呢?那我们又如何快速定位…...

数据分析-Excel基础函数的使用

Excel基础函数&#xff1a; sum:求和 sumif:单条件求和 sumifs:多条件求和 subtotal:根据筛选求和 if:逻辑判断 vlookup:连接匹配数据 match:查找数值在区域中的位置 index:根据区域的位置返回数值 match、index:一起使用&#xff1a;自动根据列名查找数据 sumifs、match、ind…...

速盾的防护策略有哪些?

在当今数字化时代&#xff0c;网络安全至关重要&#xff0c;而速盾作为一款优秀的安全防护工具&#xff0c;拥有一系列全面且有效的防护策略。 首先&#xff0c;速盾采用了先进的访问控制策略。通过严格的身份验证和授权机制&#xff0c;确保只有合法的用户和应用程序能够访问特…...

LabVIEW RT在非NI硬件上的应用与分析

LabVIEW RT&#xff08;实时操作系统&#xff09;可运行在非NI&#xff08;National Instruments&#xff09;硬件上&#xff0c;如研华工控机&#xff0c;但需要满足特定硬件要求。本文从硬件要求、开发和运行差异、可靠性、稳定性、优势和成本等多角度详细分析在非NI硬件上运…...

使用Python批量处理Excel的内容

正文共&#xff1a;1500 字 10 图&#xff0c;预估阅读时间&#xff1a;1 分钟 在前面的文章中&#xff08;如何使用Python提取Excel中固定单元格的内容&#xff09;&#xff0c;我们介绍了如何安装Python环境和PyCharm工具&#xff0c;还利用搭好的环境简单测试了一下ChatGPT提…...

k8s+pv+pvc+nas 数据持久化volumes使用

1 k8s pod申请持久化卷配置 apiVersion: v1 kind: Service metadata:name: $IMG_NAMEnamespace: rz-dtlabels:app: $IMG_NAME spec:type: NodePortports:- port: 8091nodePort: 31082 #service对外开放端口selector:app: $IMG_NAME --- apiVersion: apps/v1 kind: Deployment …...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...