大家好,我是不会写代码的纯序员。今天我来跟大家聊聊Caiss的一些性能指标。
衡量一个组件的好坏有很多标准,比如易用性、容错性、可扩展性、性能指标等。关于前面几点,我在之前的文章中都已经有了介绍。接下来,我主要说一下Caiss的性能指标——这对于一个算法组件来说,至关重要。
在开始之前,还是先显式的附上传送门:Caiss源码 Github链接
前期说明 |
Caiss内部Ann查询方法,主要是在HNSW和MRPT的算法结构上做了一些优化,将原先vec-2-vec的查询方式优化成了label-2-label的方式。纯Ann算法效果,大家可以参考一些既有工作,这些性能测试的结果相对比较公正可信的。
参考链接:Ann算法性能测试总汇。
需要说明的是,哪怕是相同维度、相同数量的数据,用相同的算法做索引的时候,也会由于算法中的一些不可控因素而出现一些偏差。对于所有Ann算法,在建模完成后,还是建议自己做一下性能测试。
性能对比 |
Show肌肉的时间到了。
下面的表格,是Caiss在开启全部加速后的查询耗时,和暴力循环求解的耗时对比。数据仅供大家参考,主要为了表明两点:
- Caiss可以在保证超高准确率的同时,极大的降低海量数据相似计算的耗时。
- Caiss性能上的优势,会随着数据量的增加而越发明显。
查询方式 | 数据量 | 维度 | 千次查询耗时(ms) | 准确率 |
---|---|---|---|---|
Caiss | 2500 | 768 | 246 | 99% |
Force | 2500 | 768 | 2590 | 100% |
Caiss | 72900 | 768 | 480 | 98% |
Force | 72900 | 768 | 61854 | 100% |
可以明显看出,随着数据量的增加(2500->72900),暴力查询(Force)的耗时基本成线性增加,但是Caiss查询耗时仅增加约一倍。需要强调的是,这里的准确率,计算的是Caiss查询返回的top5结果和真实的top5完全相同的情况的比例。
以上这些数据都是在我的2019款macbook pro上实测的数据。其中并没有加入Caiss中提供的降维算法、多线程、缓存等方法。如果把这些优化效果都加上,那对比的结果更会是“降维打击”、“以多欺少”和“不劳而获”,哈哈。
结束语 |
对于Ann算法来说,无论是哪种数据结构、哪种算法,最终所追求的目标,无非是两个:更快和更准。在这条没有终点路上,从最早的树递归查询到现在的图导航查询,很多公司、研究机构和高等院校都做出了巨大的努力。
正如我在Caiss的说明文件中提到的,我所做的这一点工作中,又有很大一部分都是基于众多科技巨头开源的现有成果。它们在开源社区所做的付出,同它们在商业战场上披荆斩棘所取得的那些成就同样值得他人仰望。我也相信一家伟大的公司,不光会在意几颗白菜、几斤水果的流量,更会为科技进步和技术创新的星辰大海贡献自己的力量。
在这里,感谢这些科技巨头和精英程序员们为改变世界做出的贡献。也感谢在我做Caiss的过程中,给我提供帮助和支持我的朋友们。我也要努力成为一个为社会做贡献的会写代码的程序员。
[2021.02.02 by Chunel]
个人信息
微信: ChunelFeng
邮箱: chunel@foxmail.com
个人网站:www.chunel.cn
github地址: https://github.com/ChunelFeng