Milvus的执行引擎Knowhere

news2024/10/7 9:23:01

前言

本文将会介绍Knowhere这个概念,它是milvus向量执行引擎的核心。

概览

Knowhere是milvus向量咨询引擎的核心,它将好几个向量相似搜索库聚集在一起(包括faiss、hnswlib、annoy)。Knowhere也被设计支持异构计算。它控制在什么硬件(CPU或GPU)上执行索引构建和查询请求.为什么取Knowhere作为名字的原因就是因为它知道在哪里执行这些操作。更多类型的硬件包括DPU和TPU将会在未来的版本中进行支持。

milvus架构中的Knowhere

下图展示了milvus架构中Knowhere的地位:

最底层的那一次是系统硬件。第三方索引库位于硬件之上。Knowhere通过它上层的CGO来与索引节点和查询节点进行互动。CGO是一个允许通过GO包来调用C代码的组件。

Knowhere的优势

下面通过faiss来介绍Knowhere的优势

支持Bitset视图

milvus引入Bitset机制来实现软删除。软删除的向量仍然存在数据库当中,仅仅是不会再向量相似搜索或查询的时候参与计算。

Bitset中的每一位与索引的向量相对应。如果一个向量在Bitset中被标记为“1”,则表示该向量已经被软删除并将不会参与向量搜索。在Knowhere中,所有暴露出来的faiss索引查询api都会使用bitset参数,包括CPU和GPU索引。

对于二进制向量支持多种相似度算法

Knowhere支持Hamming, Jaccard, Tanimoto, Superstructure, 和 Substructure算法,Jaccard和Tanimoto可以被用来计算两个样本集的相似度。Superstructure和 Substructure可以被用来计算化学结构的相似度。

支持AVX512指令集

除了faiss已经支持的AArch64,SSE4.2和AVX2指令集,Knowhere还支持AVX512,相比于AVX2,AVX512可以提高20%到30%的索引构建和查询的性能。

自动选择SIMD指令

Knowhere支持在任何的CPU处理器(私有部署或者云平台)自动调用合适的SIMD指令(比如SIMD SSE, AVX, AVX2, and AVX512),所以在计算过程中不需要用户手动声明SIMD标志(比如“-msse4”)

Knowhere是通过重构Faiss的代码库构建的.依赖SIMD加速的通用的功能(比如相似度计算)被分离出来,针对每个功能,4个版本(也就是SSE, AVX, AVX2, AVX512)的实现已经被分离到不同的源文件。源文件在未来将会被相应的SIMD标志独立编译。因此,在运行过程中,Knowhere可以基于当前的CPU标志自动选择最好的SIMD指令和利用钩子链接最正确的函数指针。

其他性能优化

Knowhere代码结构

milvus主要进行向量和标量操作的计算,Knowhere仅仅负责向量索引的操作。

索引的数据结构独立于原始的向量数据。通常索引需要四个步骤:创建索引,训练数据,插入数据和构建索引。在有些AI应用中,数据训练是独立于向量搜索。数据集中的数据首先被训练,然后再插入到像milvus这样的数据库中进行相似搜索。例如开源数据集sift1M和sift1B就有不同的训练数据和测试数据。

然后,在Knowhere中,数据训练和搜索是一样的,Knowhere在段里面训练所有的数据,然后插入所有的训练数据并为它们构建索引。

DataObj:基类

在Knowhere中,DataObj是所有数据结构的基类。Knowhere中唯一的虚拟方法是Size()。Index类继承DataObj并且有一个“size_”的字段。Index类也有两个虚拟方法:Serialize()和 Load()。VecIndex类继承自Index,其也是所有向量索引的虚拟基类。VecIndex提供的方法包括:Train(), Query(), GetStatistics(), 和ClearStatistics()

其他索引类型列在了上图的右边。

  • faiss索引有两个基类:FaissBaseIndex:负责所有浮点数向量的索引;FaissBaseBinaryIndex:负责所有二进制索引。
  • GPUIndex:所有faiss GPU索引的基类
  • OffsetBaseIndex:所有自己开发索引的基类,假设在索引文件中仅存储矢量ID,则128维矢量的文件大小可以减少2个数量级。

IDMAP:暴力搜索

从技术上讲,IDMAP不是索引,而是用于暴力搜索。当向量插入到数据库,既不需要数据训练也不需要索引构建,就能直接搜索插入的数据。

然而,为了代码一致性,IDMAP也继承自VecIndex类,这样IDMAP也使用也就和其他的索引一样。

IVF索引

IVF(倒排文件)索引非常频繁的被用到。IVF类继承自VecIndex和 FaissBaseIndex,进一步扩展到IVFSQ和IVFPQ.GPUIVF继承自GPUIndex和IVF.它也进一步扩展到GPUINVFSQ,GPUIVFPQ.

IVFSQHybrid是自主研发的混合索引。当在CPU上面搜索桶的时候,粗放的量化器将会在GPU上面执行。这种类型的索引利用GPU的算力可以降低CPU和GPU之间的内存拷贝。IVFSQHybrid拥有和GPUIVFSQ一样的召回率同时还有更好的性能。

二进制索引的类结构相对比较简单,BinaryIDMAP和BinaryIVF继承自FaissBaseBinaryIndex和VecIndex.

第三方索引

当前除了Faiss,只有两种类型的第三方索引被支持:基于树的索引 Annoy和基于图的索引HNSW。这两个经常被用到的第三方索引都继承VecIndex.

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

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

相关文章

如何使用WindowsSpyBlocker防止Windows系统被恶意监控和跟踪

关于WindowsSpyBlocker WindowsSpyBlocker是一款功能强大的Windows系统安全防护工具,该工具基于Go语言开发,WindowsSpyBlocker以一个单独的可执行程序发布,可以帮助广大用户防止自己的Windows系统被恶意监控和跟踪。 WindowsSpyBlocker能够利…

使用 LlamaParse 进行 PDF 解析并创建知识图谱

此 Python 笔记本提供了有关利用 LlamaParse 从 PDF 文档中提取信息并随后将提取的内容存储到 Neo4j 图形数据库中的综合指南。本教程在设计时考虑到了实用性,适合对文档处理、信息提取和图形数据库技术感兴趣的开发人员、数据科学家和技术爱好者。 该笔记本电脑的主…

人工智能是“数字鹦鹉”还是有了自我意识?

相关说明 这篇文章涉及到的书籍是《解构大语言模型:从线性回归到通用人工智能》,欢迎有兴趣的读者多多支持。 部分章节内容可以参考: 理解大语言模型(二)——从零开始实现GPT-2利用神经网络学习语言(四&…

ICRA 2024: NVIDIA 联合多伦多大学、加州大学伯克利分校、苏黎世联邦理工学院等研究人员开发了精细操作的手术机器人

英伟达(NVIDIA)正与学术研究人员合作,研究手术机器人。 NVIDIA 联合多伦多大学、加州大学伯克利分校、苏黎世联邦理工学院和佐治亚理工学院的研究人员开发了 ORBIT-Surgical,一个训练机器人的模拟框架,可以提高手术团…

拥抱红利行业,短视频带货助力普通人逆袭

短视频带货,作为当下最热门的副业选择之一,不仅迎合了现代消费者购物习惯的改变,还借助了互联网平台的强大传播力,让每一个普通人都有机会成为带货达人。 首先,短视频带货具有低门槛、易上手的特点。你无需具备专业的…

Docker-数据卷的挂载

文章目录 数据卷概念数据卷实现机制数据卷特性数据卷操作数据卷挂载通用命令匿名挂载具名挂载数据卷继承容器数据卷只读容器数据卷读写-默认 总结 数据卷概念 为了很好的实现数据保存和数据共享,Docker提出了Volume这个概念,简单的说就是绕过默认的联合文…

upload-labs 通关方法

目录 Less-1(JS前端验证) Less-2(MIME验证) Less-3(黑名单,特殊过滤) Less-4(黑名单验证,.htaccess) Less-5(黑名单,点空格点绕过…

「项目」负载均衡在线OJ(ONLINE_JUDGE)系统

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…

Unity 开发Hololens,制作面板跟随眼镜一起移动,(面板跟踪)

Hololens滑动框以及面板跟踪 创建空物体,并添加组件 SolverHandler、RedialView、FollowMeToggle 创建按钮,控制停止/开始跟踪 创建一个Hololens自带的按钮放到右上角,并添加事件 创建蓝色背景板 创建空物体Backplate,下面再…

专题汇编 | ChatGPT引领AIGC新浪潮(一)

ChatGPT的产生与迭代 2022年11月末,美国人工智能研究实验室OpenAI推出ChatGPT。上线的ChatGPT只用了2个月,活跃用户数就突破了1亿,创造了应用增速最快的纪录。 ChatGPT是什么 ChatGPT是一种人工智能技术驱动的自然语言处理(Natural Language Processing,NLP)工具,使用的…

【Linux学习】进程基础API

下面是有关进程基础API的相关介绍,希望对你有所帮助! 小海编程心语录-CSDN博客 目录 1. 僵尸进程与孤儿进程 1.1 孤儿进程 1.2 僵尸进程 2. 监视子进程 2.1 wait() 2.2 waitpid() 3. 执行新程序 exec族函数 4. 守护进程 1. 僵尸进程与孤儿进程…

PHP报错 Notice: Undefined index: action in

upload靶场PHP报错 Notice: Undefined index: action in 修改 php.ini 中的 error配置下错误显示方式:将error_reporting E_ALL 修改为 error_reporting E_ALL & ~E_NOTICE 修改后重启下APCHE服务即可。

Java方法的基本用法

Java方法的基本用法 前言一、什么是方法方法存在的意义示例 二、方法定义语法基本语法代码示例注意事项 三、方法调用的执行过程基本规则代码示例计算两个整数相加计算 1! 2! 3! 4! 5! 四、实参和形参的关系代码示例交换两个整型变量原因分析解决办法 五、没有返回值的方法…

SWM190系列应用

一、SWM190系列IO端口应用 1.1、SWM19SCBT6 B0端口引起的漏电流 SWM19S的IAP升级必须上拉B0,但B0会漏电,B0接高对方不止需要改版还会增加大概50ua的功耗。由于芯片内置的ROMCode默认B0脚切下拉。所以说接高电平会漏电。 在APP应用中,测试了直…

【C语言】strstr函数的使用和模拟

前言 今天给大家带来一个字符串函数,strstr()的使用介绍和模拟实现。 模拟实现这个函数,可以帮助我们更深刻地理解这个函数的功能和提高解决字符串相关问题的能力,有兴趣的话就请往下看吧。 strstr函数介绍 函数功能: strstr函…

CentOS 服务器系统常用命令

本文系统centos 8.5 1 w 显示当前登录到系统的用户信息,比如IP ,执行程序等 2 who 用于显示当前登录到系统的用户列表 3 last 显示最近登录到系统的用户列表. 4 df -h 查看磁盘信息 5 fdisk -l 查看机器所挂硬盘个数及分区情况. 6 passwd 修改密码 7 find …

AWS容器之Amazon ECS

Amazon Elastic Container Service(Amazon ECS)是亚马逊提供的一种完全托管的容器编排服务,用于在云中运行、扩展和管理Docker容器化的应用程序。可以理解为Docker在云中对应的服务就是ECS。

RPC原理技术

RPC原理技术 背景介绍起源组件实现工作原理 背景 本文内容大多基于网上其他参考文章及资料整理后所得,并非原创,目的是为了需要时方便查看。 介绍 RPC,Remote Procedure Call,远程过程调用,允许像调用本地方法一样调…

VLAN创建及配置

V-- 虚拟 LAN ---局域网 ---地理覆盖范围较小的网络 MAN ---城域网 WAN ---广域网 VLAN ---虚拟局域网 --- 交换机和路由器协同工作后,将原先的一个广播域,逻辑上切分为多个 第一步:创建VLAN [Huawei]display vlan---查看VLAN信息 VID -- VLAN ID ----…

专为汽车内容打造的智能剪辑解决方案

汽车内容创作已成为越来越多车主和汽车爱好者热衷的活动。然而,如何高效、便捷地将行车途中的精彩瞬间转化为高质量的视频作品,一直是困扰着广大用户的一大难题。美摄科技凭借其深厚的视频处理技术和智能分析能力,推出了专为汽车内容记录而生…