首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >milvus的二值索引与浮点数索引的性能对比

milvus的二值索引与浮点数索引的性能对比

作者头像
明月AI
发布2023-08-26 14:59:49
发布2023-08-26 14:59:49
7720
举报
文章被收录于专栏:野生AI架构师野生AI架构师

因为在论文查重的时候,需要从大量的文本片段中找到相似的片段,在做技术选型的时候,需要将比对库中的文本片段先生成simhash,然后选择了milvus做向量的高速检索。虽然我们本身比较熟悉ES,不过ES太重,对机器的要求很高,并不适合我们的场景,而且估计就向量检索而言,ES的性能估计会比milvus低很多。milvus很早前就有了解,不过并没有实际使用过,安排了工程师对它进行熟悉。不过同事探索一两天说,这个向量检索有问题,没有出来预期的结果。于是只能自己去探索一下,协助定位问题,顺便比较一下milvus的性能。

测试数据量:1000万随机向量,维度64,向量维度的每个值都是0或者1。

机器配置:8核16GB内存(好几年前的工作站配置)

浮点数索引

存储字段:

代码语言:javascript
复制
[
    FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True, auto_id=False),
    FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=64)
]

索引使用参数:

代码语言:javascript
复制
{
    "index_type": "IVF_FLAT",
    "metric_type": "L2",
    "params": {"nlist": 128},
}

批量查询5000个向量的相似变量,每个向量查询10个相似向量,代码如下:

代码语言:javascript
复制
vectors_to_search = data[0:5000]
search_params = {
    "metric_type": "L2",
    "params": {"nprobe": 10},
}
result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=10)

二值向量索引

存储字段:

代码语言:javascript
复制
[
    FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True, auto_id=False),
    FieldSchema(name="embeddings", dtype=DataType.BINARY_VECTOR, dim=64)
]

索引使用参数:

代码语言:javascript
复制
{
    "index_type": "BIN_IVF_FLAT",
    "metric_type": "HAMMING",
    "params": {"nlist": 128},
}

检索代码差不多,只是距离使用汉明距离。

检索性能比较

内存

耗时

二值索引

0.52GB

9.2秒

浮点数索引

2.72GB

45秒

内存计算:向量加载到内存前后的内存占用差值。(根据这个值也可以计算出我们项目大概在向量的存储上大概需要的内存配置)

这个耗时差距应该并不只是索引类型的差异,很可能跟距离指标有关,一个是使用L2距离,一个是使用汉明距离,显然前者的计算量要大于后者。

可见选择正确的存储及索引方式是非常重要的,有时间可以进行更多的比较。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 野生AI架构师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档