修改ann-benchmarks自带算法参数
执行测试命令前可以修改对应算法的参数,以获得较好的召回率和每秒查询率(QPS,Queries Per Second)。
- 以修改Milvus的相关算法参数为例,打开Milvus目录下的config.yml文件。
1
vim /data/ann-benchmarks-main/ann_benchmarks/algorithms/milvus/config.yml
- 修改Milvus-hnsw算法参数,见表1 参数说明。
表1 参数说明 参数名称
参数描述
建议值
配置原则
M
M参数表示“M-层”或“M层级”,它决定了HNSW图的层次结构深度。
M参数控制了图中每个节点的子节点数量,“M”等于“2”,表示每个节点有两个子节点,“M”等于“3”,表示每个节点有三个子节点,以此类推。
M参数越大,HNSW图的层次结构越深,搜索过程中需要遍历的节点数量减少,搜索效率越高。但是,M参数过大会增加构建索引的时间和内存消耗。
[24]
请根据数据量大小、对存储空间的要求、对搜索速度、准确性的要求等方面综合考虑M值的大小。
efConstruction
efConstruction参数决定了在构建HNSW图时,算法在每一层级所需的“有效搜索”次数(Effective Searches)。
在HNSW算法中,“有效搜索”是指从图的顶层节点开始,沿着图的层次结构向下搜索,直到找到满足一定准确性的最近邻点。
efConstruction参数的值越大,算法在构建索引时进行的有效搜索次数就越多,从而找到更准确的最近邻点。这对于需要高准确性的应用场景是有利的,但同时更多的有效搜索次数会增加构建索引的时间和内存消耗。
[200]
请根据对索引构建时间的敏感程度、对搜索准确性的要求等方面综合考虑efConstruction值的大小。
- 修改Milvus-scann算法参数,见表2 参数说明。
表2 参数说明 参数名称
参数描述
建议值
配置原则
nlist
nlist参数决定了Scann算法在每个桶(bucket)中存储的最近邻点列表的大小。
每个桶实际上是一个哈希表,用于存储与查询向量相似的点。在构建索引时,算法会为每个桶选择nlist个最近邻点,并将它们存储在该桶中。
较大的nlist参数可以提供更高的搜索准确性,因为每个桶中存储的最近邻点数量增加,搜索过程中有更多的候选点可供选择,但同时内存消耗也会越大。
在高维空间中,搜索准确性通常已经足够高,而较小的nlist参数可能会牺牲一些准确性以换取更快的搜索速度。
[128]
请根据对存储空间的要求,搜索准确性,搜索速度等方面的要求综合考虑nlist值的大小。

本次测试的M、efConstruction和nlist参数的取值是根据多次测试和分析确定的,是兼顾查询结果准确性、内存消耗、时间消耗的综合考虑。用户可以根据实际情况选择参数取值。