来源:Gitee 封面人物 丨 2021-06-28
本期嘉宾
王翔宇 :开源社区爱好者,Milvus单机方案负责人,Milvus 是一款开源向量数据库,赋能 AI 应用和向量相似度搜索,加速非结构化数据检索。
Milvus :Milvus,为海量特征向量的近似最近邻搜索(ANNS)而设计。相比 Faiss 和 SPTAG 这样的算子库,Milvus 提供完整的向量数据更新,索引与查询框架。Milvus 利用 GPU(Nvidia)进行索引加速与查询加速,能大幅提高单机性能。
王翔宇: 在理解 Milvus 之前,我想简单介绍一下向量是什么。我们都知道计算机通过数字来量化这个世界,用一组数字来表示一个事物,这样的一组数字就是一个向量。对于计算机来说,万事万物皆可向量。如果一个向量由 n 个数字组成,它就是一个 n 维向量。在人工智能应用中,算法对于图片、视频和自然语言的理解都以特征向量的形式来表示,特征向量的维度从几十维到上万维度不等。Milvus 就是一款开源的、支持对海量特征向量进行检索的数据系统。
我们对 Milvus 做了很多工程方面的优化,使它能够很好地应对海量向量数据,它集成了目前在向量相似性计算领域比较知名的算法库(例如 FAISS、NMSLIB 和 Annoy 等),通过对数据和硬件算力的合理调度,以获得最优的搜索性能。 用户只需要从 Docker Hub 上下载一个 Milvus 的最新镜像,一行命令即可启动,然后可以通过 Python SDK 或者 Java SDK 进行向量插入以及搜索操作,非常方便。更重要的是,Milvus 是开源的!这意味着用户可以参与到这个产品的开发以及设计中来,把自己的想法带到产品中,打造出更符合自己使用习惯的向量检索数据库。
Milvus 整体架构
王翔宇: Milvus的产品定位是帮助用户应对数据时代爆发性增长的非结构化数据,比如图片、视频、自然文本、声音、以及化学分子式等等。这类数据往往需要针对具体应用场景,通过人工智能和机器学习算法来挖掘其中的价值。Milvus 就是从这个角度出发,为他们提供底层向量数据管理的支持。
应用场景上来说,Milvus的向量检索功能可以支持各行各业很多不同的AI场景,比如APP内的垂直搜索和机器视觉的场景,像以图搜图,视频检索等;还有推荐系统类的场景,比如给用户安利他们可能感兴趣的新闻、商品和视频;还有用户通过Milvus筛选最相近的化合物,来支持药物的研发。
王翔宇: 2020年4月,Milvus 项目正式进入 Linux AI&Data 基金会进行孵化,当时是出于开源社区建设和治理的考虑。Milvus 开源后用户数量的增长很快,这也是我们未曾预料到的。
加入到基金会之后,借助 Linux 的力量,给更多全球开发者了解 Milvus 的机会,这是很重要的。比如文档上面,不但要用全英文来写,也要更多的考虑用户需求,让全世界的用户都更容易了解我们的项目。也能感觉到社区变得更活跃了,开发者在使用过程中也会帮我们找出更多隐藏的问题。
王翔宇: 因为向量检索还是个相对较新的领域,主要的功能开发还是由 Milvus 团队来完成的。在开源到现在的一年多时间里,我们也接收了一些外部开发者的代码贡献,但更重要的是,社区里有很多活跃的用户愿意和我们交流他们遇到的问题以及他们的业务场景,这部分的贡献对于我们发现问题,打磨产品也尤为重要。
2020年 Milvus 在北京举办的一周年社区大会
王翔宇: 我们正在研发 Milvus 2.0 的过程中,在2.0版本里我们会实现更多的新特性。比如在单机部署的基础上增加分布式部署环境;针对不同的负载类型进行组件级的弹性伸缩,为更高效的资源调度提供基础支撑。除此之外,针对用户的实际应用场景,我们还会对数据入库方式和索引构建上提供新的特性支持。
王翔宇: 最早其实是要做一个图片检索的应用,在设计的时候,本着模块化的思想,我们把检索的这部分功能做成了独立的一个服务,这就是 Milvus 的原型。
当时把这个原型写出来之后我们就想过开源,之前我们对 GitHub/Gitee 上可能的方案都做过评估,发现他们都是基于开源算法简单包装的服务,没有一个生产级别的软件,我们希望能够把我们的方案放到 GitHub/Gitee 上大家一起完善而不是每一个需要这个的团队都重复造轮子。
王翔宇: 最大的困难是怎么把 Milvus 做可靠,做稳定吧。作为一个基础软件,可靠性并不仅仅是依靠好的设计来实现的,还要依靠足够多的测试用例来保证。
在早期开发的时候我们没有想明白这一点,很多时候 Bug 修完就算结束了。后来有一天发现一个问题怎么反反复复出现,分析了许久才知道有一段代码影响了不止一个地方,修的时候就像按下葫芦浮起瓢,这边好了那边又坏了,彻底修好之后复盘的时候,我们决定把以后遇到的每一个问题都编成测试用例来回归。自那以后,这类的问题再也没有出现了。
王翔宇: 当得知我们的技术论文被数据库顶会接收的时候。今年3月份的时候我们收到通知, Milvus 的技术论文被美国计算机协会(ACM)数据管理专业委员会(SIGMOD)录用,因为 SIGMOD 是全球数据库领域的顶级会议,全球的录取率只有 15%。从一个开源项目做到论文被顶会录用可是一种不多得的体验。一句话来说就是,太爽了。
被 SIGMOD 2021 录用的 Milvus 技术论文
王翔宇: 运动。运动对我来说是最好的解压方式,哪怕是在任务很紧的时候,我也会坚持去运动。一件很巧的事情是,早期 Milvus 团队的同学基本都踢球,我们每周一晚六点准时出门踢球,很多时候去球场上出一身汗压力就没有了。
Milvus 团队一起去吉林北大湖滑雪
王翔宇: 最大的变化还是能够跳出开发的视角来思考很多问题。我从高中就开始写代码,我可以很自豪地说我是热爱写代码的,我享受 Coding 的过程。但是如果是做一款软件,尤其是做一个开源基础软件,这是远远不够的。
作为负责人,你需要有技术人员的视野,有产品经理的思维,要能够和用户打好交道,想用户所想,做用户所需。很惭愧的是,这些我也还没有全做到,我也在不断地学习和思考,尝试去更好地推动项目的发展。
王翔宇: 刚开始写代码的时候,我也是想到什么写什么,经常就是一个巨大无比的函数或者嵌套很深的 IF ELSE
。后来混论坛,看了很多别人的代码之后,我的代码质量才逐渐提升上来。
所以我的总结就是多看、多写、多交流。多看优秀的项目可以提升你的代码品味,你可以知道什么是好的项目、好的代码。然后就是多写多交流了,实践类的事情都差不多,熟能生巧。
王翔宇: 如果有合适的项目,会创业的吧。创业这件事情对我来说就像和一群志同道合的人去征服一座野山,可能过程需要披荆斩棘,可能结果不一定能登顶,但是这个事情的不确定性和它能带来成就感都非常令人着迷。