前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Milvus 最佳实践之如何设置API参数 (3)

Milvus 最佳实践之如何设置API参数 (3)

作者头像
Zilliz RDS
发布2020-03-31 16:20:05
2.8K0
发布2020-03-31 16:20:05
举报

在上文《 Milvus 最佳实践之如何设置系统配置项 (2) 》中,针对 Milvus 0.6.0 版本的关键系统配置项给予了详细说明。本文针对 Milvus 0.6.0 版本的 API 关键参数进行详细说明与测试验证,并给予如何设置的建议。

这些API参数包括调用 create_table,create_index

和 search 时进行的参数设置,它们会对搜索性能产生影响。

index_file_size

在调用 create_table 时有一个 index_file_size 参数,用来指定数据存储时单个文件的大小,其单位为 MB,默认值为1024。

我们知道,当向量数据不断导入时,Milvus 会把数据增量式地合并成文件,当某个文件达到 index_file_size 所设置的值之后,这个文件就不再接受新的数据,Milvus 会把新的数据存成另外一个文件。这些都是原始向量数据文件,如果建立了索引,则每个原始文件会对应生成一个索引文件,对于IVFLAT 索引来说,索引文件的大小基本等于对应的原始文件大小,而对于 SQ8 索引来说,索引文件大小大约是原始文件的30%左右。

Milvus 在进行搜索时,是依次对每个索引文件进行搜索。根据我们的经验,当 index_file_size 从1024改为2048时,搜索性能会有30%~50%左右的提升。但要注意如果该值设的过大,有可能导致大文件无法加载进显存(甚至内存),比如显存只有2GB,该参数设为3GB,显存明显放不下。常用的 index_file_size 为1024MB和2048MB。

以下是使用公开测试数据集 sift1b 的5000万条数据针对 index_file_size 的一个测试,索引类型为 SQ8:

如上图所示,在 CPU 模式和 GPU 模式下,index_file_size 设为2048MB,其搜索性能相对于1024MB有显著提高。

nlist和nprobe

nlist 是调用 create_index 时设置的参数,nprobe 则是调用 search 时设置的参数。我们知道,IVFLAT 和 SQ8 索引都是通过聚类算法把大量的向量划分成很多‘簇’(也可以叫‘桶’),nlist 指的就是聚类时划分桶的总数。通过索引查询时,第一步先找到和目标向量最接近的若干个桶,第二步在这若干个桶里通过比较向量距离查找出最相似的 k 条向量。nprobe 指的就是第一步若干个桶的数量。

通常来说,增大 nlist 会使得桶数量变多,每个桶里的向量数量减少,所需的向量距离计算量变小,因此搜索性能提升,但由于比对的向量数变少,有可能会遗漏正确的结果,因此准确率下降;增大 nprobe 就是搜索更多的桶数,因此计算量变大,搜索性能降低,但准确率上升。具体情况在面对不同分布的数据集时会产生一些差异,数据集的规模也会影响 nlist 和 nprobe 的选择。通常情况下,我们推荐的 nlist 值为4 * sqrt(n),其中n为数据的向量总数;而 nprobe 的值则需要综合考虑在可接受的准确率条件下兼顾效率,比较好的做法是通过多次实验确定一个合理的值。

以下是使用公开测试数据集 sift1b 的5000万条数据针对 nlist 和 nprobe 的一个测试,索引类型为 SQ8:

上图分别是采用不同的 nlist/nprobe 组合时的搜索性能和准确率对比。因 CPU 和 GPU 测试结果类似,此处仅展示 GPU 测试的结果。在本次测试中,对成比例增长的 nlist/nprobe 而言,随着他们的增大,准确率呈现上升的趋势,性能则在 nlist 为4096和 nprobe 为128时呈现最好的情况。因此在实际选择 nlist 和 nprobe 的值时,需要针对不同数据集,根据用户自己的需求,在速度和准确率两者之间进行合适的取舍。

总结

→ index_file_size:数据量大于该值时,参数值越大搜索性能越好。

→ nlist 和 nprobe:两者结合综合考虑,需用户在性能和准确率之间进行取舍。

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

本文分享自 ZILLIZ 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档