分类信息网站怎么做SEO,电子商务类网站建设实训报告,seo关键词优化推广哪家好,公司设计一个网站前言
milvus支持多种GPU索引类型#xff0c;它能加速查询的性能和效率#xff0c;特别是在高吞吐量#xff0c;低延迟和高召回率的场景。本文我们将介绍milvus支持的各种GPU索引类型以及它们适用的场景、性能特点。
下图展示了milvus的几种索引的查询性能对比#xff0c;…前言
milvus支持多种GPU索引类型它能加速查询的性能和效率特别是在高吞吐量低延迟和高召回率的场景。本文我们将介绍milvus支持的各种GPU索引类型以及它们适用的场景、性能特点。
下图展示了milvus的几种索引的查询性能对比通过下图我们发现批量查询的场景性能会更好 GPU_CAGRA
GPU_CAGRA是一个针对GPU优化的基于图的索引它在GPU上能很好的执行推理。它最适合只有少量查询的场景通过低频的内存训练的GPU通常得不到最优的结果。
索引构建参数
ParameterDescriptionDefault Valueintermediate_graph_degree 通过在剪枝之前确定图的深度来影响召回率和构建时间推荐的值是32或者64 128graph_degree 通过在剪枝之后设置图的深度来影响查询性能和召回率。这两个深度之间的差异越大构建时间就越长。它的值必须小于intermediate_graph_degree的值 64build_algo 选择剪枝之前的图生成算法。可选的值IVF_PQ: 提供更好的质量但是构建的时间比较慢NN_DESCENT: 提供更快的构建但是降低了召回率 IVF_PQcache_dataset_on_device 决定是否在GPU内存里缓存原始数据集可选值 true: 缓存原始数据集以通过细化搜索结果来提高召回率。false: 不在GPU内存缓存原始数据集 false 查询参数
ParameterDescriptionDefault Valueitopk_size 确定在查询期间中间结果的大小。比较大的值可能提高召回率但是影响查询性能。它至少要等于最终的top-k的值并且是2的n次方(比如16, 32, 64, 128). Emptysearch_width 声明在查询期间进入CAGRA图的切入点的数量增加它的值可以提高召回率但是影响性能 Emptymin_iterations / max_iterations 控制查询迭代进程默认情况下它们设置为0CAGRA根据itopk_size和search_width自动决定迭代的数量。手动调整它们的值可以平衡性能和准确率 0team_size 声明用来在GPU上计算距离指标的CUDA线程数量。常用的值是2的n次方到32 (比如 2, 4, 8, 16, 32).它对搜索性能的影响很小默认值是0这样milvus会根据向量的维度自动设置team_size的值。 0 GPU_IVF_FLAT
与IVF_FLAT类似GPU_IVF_FLAT也是将向量数据分为 nlist个聚类单元然后比较输入的目标向量与每个聚类中心的距离。根据系统设置为查询nprobe的聚类数量仅仅比较目标输入和最相似的聚类的向量来返回相似搜索结果极大的降低了查询时间。
通过调整nprobe针对特定的场景可以完美的平衡准确率和速度。从IVF_FLAT性能测试报告看出随着目标输入向量数量nq和需要搜索的聚类数量nprobe的增加查询时间急剧增加。
GPU_IVF_FLAT大部分是基于IVF索引并且每个单元的编码数据存储与原始数据保持一致。当进行搜索的时候我们可以对GPU_IVF_FLAT索引集合设置tok-K到256
索引构建参数
ParameterDescriptionRangeDefault Valuenlist聚类单元的个数[1, 65536]128 查询参数
ParameterDescriptionRangeDefault Valuenprobe查询多少个聚类单元[1, nlist]8
搜索限制
ParameterRangetop-K 256
GPU_IVF_PQ
PQ乘积量化将原始高维向量空间均匀分解为m个低维向量空间的笛卡尔乘积然后对分解的低维度空间进行量化。替代计算目标向量和所有单元的中心距离乘积量化计算目标向量和每个低维空间的聚类中心的聚类这极大的降低了算法的时间复杂度和空间复杂度。
IVF_PQ在向量乘积的量化之前执行IVF索引聚类。它的索引文件甚至比IVF_SQ8还要小但是它也导致了在向量搜索的时候损失了精度。
注意索引构建参数和查询参数会随着milvus的版本变化所以我们需要先选择对应的版本。当进行搜索的时候我们可以对GPU_IVF_PQ索引集合设置tok-K到8192
索引构建参数
ParameterDescriptionRangeDefault Valuenlist聚类单元的数量[1, 65536]128m乘积向量因子的大小dim mod m 04nbits 低维度向量存储的位数bits [1, 16]8 查询参数
ParameterDescriptionRangeDefault Valuenprobe需要查询的单元数量[1, nlist]8 查询限制
ParameterRangetop-K 1024
GPU_BRUTE_FORCE
GPU_BRUTE_FORCE是专门为非常高的召回率场景进行定制的它通过比较数据库里面所有的向量确保召回率是1它仅仅需要度量类型metric_type和 top-k(limit)作为索引构建和查询参数。
对于GPU_BRUTE_FORCE,不需要额外的索引构建参数和查询参数。
结论
当前milvus为了高效的搜索操作加载所有的索引到GPU内存。可以加载的数据量依赖于GPU内存的大小。
GPU_CAGRA:需要的内存大小是原始向量数据大小的1.8倍GPU_IVF_FLAT和GPU_BRUTE_FORCE:需要的内存大小与原始数据大小一样GPU_IVF_PQ:占用较小的内存空间它取决于压缩参数的设置。