milvus 简介
milvus是干什么的?通俗的讲,milvus可以让你在海量向量库中快速检索到和目标向量最相似的若干个向量,这里相似度量标准可以是内积或者欧式距离等。借用官方的话说就是:
Milvus 是一款开源的、针对海量特征向量的相似性搜索引擎。基于异构众核计算框架设计,成本更低,性能更好。 在有限的计算资源下,十亿向量搜索仅毫秒响应。
说白了就是速度快,先不说十亿向量,自己写代码去完成对100万300维向量的余弦相似度计算并排序就需要不小的响应时间吧,就本人测试而言,即便使用scipy库计算速度依然要比milvus慢很多。
milvus和Faiss的对比
其实在milvus开源之前,也存在高性能向量相似性搜索引擎(库),这个引擎就是Facebook的Faiss,它的功能和milvus是一样的,所以就不再做过多介绍,具体可以参考官网
就我个人而言,我是推荐使用milvus的,主要是在我个人看来,milvus有如下几个好处:
- 多平台通用,mac,windows和linux都是支持的,因为milvus可以通过docker部署,因此平台通用性好了不少。
- 支持编程语言多,Java,c,c++和python都支持,要知道Faiss是不支持java的,这一点简直让人抓狂,github上好几个项目就是关于把Faiss转成java的,因为我Java和python都是要使用的,我把github上关于faiss转java的项目都试了个遍,结论就是非常难安装,只要Faiss版本更新了,必须要重来一遍,即便最后java可以用了,也不敢保证其稳定性。所以想在Java上用Faiss还是放弃吧。
- 在速度方面,就我自己测试而言,milvus不输Faiss,但是我没有使用GPU测试,有兴趣的小伙伴可以试一下。
当然milvus也有难用的地方,我自己发现了两点,如果是我自己使用不当造成的,还请各位朋友在评论指出:
- milvus的向量格式不支持numpy,要用列表的形式存储向量,而列表占用内存要远远大于ndarray的,这对于小内存主机简直是个天灾,我16GB内存情况下,把500000*768的矩阵转成list,电脑直接卡死。
- milvus在第一次search时速度会慢,之后机会快起来了,这应该是个小bug,有人在github提出了,应该很快就可以修复,所以你们在测试milvus的速度时千万别算第一次的时间。
milvus 安装及常见问题
milvus 一共有两种安装方式:自己编译安装和使用docker安装。这里推荐大家使用docker安装,docker安装方便快捷,可在Windows上使用。自己编译安装,由于每个人环境不同,很容易出问题。本文只介绍基于docker的安装,另外因为我比较穷,所以只介绍cpu版本的安装,不过gpu安装也是大同小异。
基于docker安装milvus CPU版本
简言之安装比较简单,毕竟大佬们已经把milvus部署在了docker里,我们只要启动起来就行了
。
安装docker
首先就是要安装docker,还不了解docker可以了解一波,非常好用的虚拟机工具,直接去官网下载对应平台的安装文件即可。