Milvus 究竟是一个计算平台,还是一个数据库?应用在哪些场景?诸如此类的问题我们的开发者常常在群里被小伙伴问到。这次我们对 Milvus 做了一个简单的概述,让大家可以更清楚 Milvus 是怎样的数据平台,以及 Milvus 长远的目标为何。完整的会议实录请点击以上视频。
Attendee A:
我也是在人工智能行业做一些技术研发,包括现在会做一些 AI 赋能行业的一些应用。因为向量检索也是之前在我的工作当中一直会去涉及到的一个工作点,所以对这一块的话也是有很大的兴趣的。
然后刚刚顾老师在这个片子当中也讲到了很多的 use case,其实还对我来讲还是非常熟悉的,我之前遇到的一些问题,比方说像以图搜图那个场景,可能是说好像是 5500 万图片,然后是 20 毫秒检测出来的。那我有个问题就是它是基于一个 GPU server,它是基于多卡的来做检索是吧?因为没有具体的配置,我们说 20 毫秒这个可能对..我会想知道他这个细节,他这个配置。
顾老师 @ Milvus:
它是一个阿里云上的 T4 的双卡的服务器,但是他(用户)反映说在阿里云上的 GPU 服务器这种虚拟出来的显卡的性能其实是不如实体卡的。
Attendee A:
这是一个问题,就是虚拟化这是一个问题。就是因为我最关心的是 5500 万张图片,它通过 VGG 提取特征之后,这个特征的长度是多少?
顾老师 @ Milvus:
512。其实在搜索这个角度来讲的话,并不需要 GPU。
Attendee A:
其实只需要 GPU 来运行 VGG 模型提取特征对吧?
顾老师 @ Milvus:
对没错。
Attendee A:
Ok,所以说它的特征差不多是 100 个 GB 这样的一个数据量?
顾老师 @ Milvus:
差不多,对。
Attendee A:
然后它这个服务器的内存能存的下吗?
顾老师 @ Milvus:
是这样的,就是我们有一种叫 IVFSQ8 这种压缩型的索引,它基本上你可以理解是 1/5 的内存消耗,这就是 20 多 G。
Attendee A:
然后就是说你们对他 512 维这个特征进行了矢量量化的这种搜索方式是吧?
顾老师 @ Milvus:
应该是标量量化。
Attendee A:
就是说对它这个特征进行一个量化了。对吧?Ok 这样的话应该差不多。因为这个数据量可能还不是特别大,比方说如果说是几十亿张的话,可能会涉及到多个节点,分布式来做检索,你们这边开源的方案现在支持吗?
顾老师 @ Milvus:
我们有一个分布式部署方案,但是它现在还不是一个分布式集群的方案。对分布式部署的话,成本还是会低一点。我们感觉做成一个集群当然也很好,但是其实大家对成本还是非常敏感的。
Attendee A:
那是的。因为当数据量比较大的时候,因为这个是 5500 万,它可能通过你量化之后,它可能就是占了个 1、20 GB 的这种这种内存,你再上比方说再乘以 100 倍的话,你可能单节点就可能就存不下这个特征向量。对吧?那个时候你可能就必须得做节点。分布式这个技术的话,你们现在是支持了吗?分布式查询的这种技术。
顾老师 @ Milvus:
因为其实向量搜索的场景,它不像传统关系型数据库会有 drawing 这些,因为其实你可以想每个分布式部署,其实就类似于说我分库分表到不同的节点,然后不同的节点一起搜索之后,在最后做一次归并。
Attendee A:
其实就是说对于整个搜索的架构基本上没什么影响,还说是每个节点都是同时并发的去做这种搜索,然后再回到某一个 client 的节点,做一个汇总,对吧?还是这种架构。
顾老师 @ Milvus:
对,是的。
Attendee A:
我看到的很多片子当中都会有一个 object URI 和 vector ID,我的理解就是说这个 vector ID 你会事先把这个 vector ID 和比方说我的图片或者我的文本,在他的 object 做一个 map 的这样的一个映射关系是吧?
顾老师 @ Milvus:
对,其实这个映射的关系现在可以不放在 Milvus ,你可以自己去维护。因为其实这部分的话,刚才没有跟大家解释就是说 Milvus 如果核心的部分它其实不存那些数据的,我们会存原始的向量到但我们不存这张图片。
Attendee A:
对, 在 object store 对象存储当中。然后你们先通过 Milvus 然后返回 vector ID,然后再到对象存储里边,然后把这些实际的对象给大家映射出来。
顾老师 @ Milvus:
对,是的。
Attendee A:
Ok,所以说存储的方案得用户(使用者)他自己来选型,对吧?
顾老师 @ Milvus:
对,你想存硬盘上或是你想存分布式存储上也可以。
Attendee A:
所以说你们只给个 vector ID, 至于是后面的怎么存储,怎么高效的去找到 object,其实你们这个方案都不涉及了。
顾老师 @ Milvus:
对,因为这些存储的这种项目当中已经有很多非常优秀的项目,我们再去把它做一遍好像没什么必要。
Attendee A:
那我听下来你们其实还是类似于提供一个黑盒子,然后输入可能是 query,然后输出是它的 vector ID 这样简单的东西是吧?可以这么简单理解吗?
顾老师 @ Milvus:
对,是的。包括未来支持多模态的搜索,也是以这样的方式去做。
Attendee A:
对,也就是搜索的 input 的话,它可能是多个模态的 query vector,对吧?然后语音、图像、文本...
顾老师 @ Milvus:
对,然后我最后告诉你它的 Entity 是哪一个。
Attendee A:
对,类似于还是输出它的 vector ID,至于它怎么找到它真实的 object,就运营层来做这样的一些事情就可以了。
顾老师 @ Milvus:
对是的,因为它这个东西不是特别的相关。
Attendee B:
我这边问顾老师一个问题,我以前有用过 Faiss。 我不太知道 Milvus 的话跟 Faiss 相比的话我们有哪些不同, 或者说我们怎么会 PK 掉对手或者怎么样的。
顾老师 @ Milvus:
其实刚才有一页当中我没有讲,就是说 Milvus 要做的事情是要提供一个非结构数据服务,它其实有更多的工作要去做的。当然在向量搜索这部分,像高稠密向量的搜索部分,其实我们是从最初直接引用 Faiss 的算法,到后来自己做了很多的调整。
因为一个算法库,因为 Faiss 是个单文件的嘛,像我们这边我们因为有这种数据管理,我有这种新的数据过来,然后怎么样去为它新建索引的。所以其实一个数据这种系统它是一个多文件的分片的,有属性标签的这些东西,你要去做很多的一些这种调整和适配,包括原来在单位文件下最有效的方式在多文件下可能不是一个很好的方式,其实在这个过程当中是有很多的需要去改进的地方。
Attendee B:
Ok 明白,我大概知道你的意图了。
顾老师 @ Milvus:
因为其实你要去调整自己的模型已经要花很多时间了,如果一个应用开发 AI 算法工程师或者开发人员,还要花很多时间在向量搜索上那其实整个项目开发周期也好,硬件成本也好,都会让你原来的那些 AI 创意变得不是那么的可行。但是对于一些大产可能在成本上没有那么的敏感?
Attendee B:
也不是,如果这个东西真的很好用的话,也会直接拿来用,是这样的。
Attendee C:
顾老师你好,我上次问过你就是我们 Milvus 的数据管理方案,然后后来我发现我们整个 Milvus 它虽然是以 collection 为集合的,但是我在去建索引的时候,实际也是以 collection 作为一个大的单位去构建索引的。
顾老师 @ Milvus:
对,但是其实它是存储在每一个数据段上,每一个 segment 上建索引。
Attendee C:
上次我问你那个问题,有一个问题是这样的,我有两份向量嘛 A 和 B, 一个是 old 一个是 new,我这时需要做个 double 更新嘛。如果你是以这种 collection 为集合去做构建的话,好像我只能用 collection 这个单位去做我这种新旧向量的替换,这种管理。
顾老师 @ Milvus:
是这样的,就是说你新建的,你新插入一个 collection 的向量其实是在最后一部分 segment 里面的,但是其实我们去构建新索引的时候,是构建更新最后的 segment 建索引。
Attendee C:
但是你的 segment 那不是在数据上是分片的吗?对于对外的你是 collection 这种模式嘛,我理解是这样的。
顾老师 @ Milvus:
对,是的。最后自动建索引那些都是系统后台出发的,并不需要用户去人工干预过程。
Attendee C:
Ok,我明白了,我回头再试验再试一下。其他没有什么问题了。
有兴趣来与我们聊聊吗?我们下周二8点线上见!记得加入我们技术交流群获取会议链接~
| 欢迎加入 Milvus 社区
github.com/milvus-io/milvus | 源码
milvus.io | 官网
milvusio.slack.com | Slack 社区
zhihu.com/org/zilliz-11/columns | 知乎
zilliz.blog.csdn.net | CSDN 博客
space.bilibili.com/478166626 | Bilibili