云搜索服务 CSS-Elasticsearch向量检索的性能测试和比较:性能测试比较

时间:2025-02-18 16:36:44

性能测试比较

  • GRAPH类索引

    百万规模的场景推荐使用GRAPH索引类型。

    • 测试方案一:使用不同维度的数据集,在Top10召回率均达到99%的情况下,测试向量数据库能支撑的最大QPS。每个数据集均基于默认参数和调优参数分别进行测试,通过调整构建参数可以使得图索引结构更优,在同等召回精度下能取得更高的查询性能。
      测试结果
      表1 GRAPH类索引测试结果1

      数据集

      构建参数

      查询参数

      性能指标

      efc

      shrink

      ef

      max_scan_num

      QPS

      Recall

      sift-128-euclidean

      200

      1.0

      84

      10000

      15562

      0.99

      500

      0.8

      50

      10000

      17332

      0.99

      cohere-768-cosine

      200

      1.0

      154

      10000

      3232

      0.99

      500

      0.95

      106

      10000

      3821

      0.99

      gist-960-euclidean

      200

      1.0

      800

      19000

      860

      0.99

      500

      0.9

      400

      15000

      1236

      0.99

      结论:对于不同的数据集,使用默认参数均能达到99%以上的召回率。在进一步调整构建参数和查询参数后,增加了一定的索引构建开销,同时也达到更高的查询性能。

    • 测试方案二:使用同一数据集,通过调整索引参数,测试不同召回率下的查询性能。本方案用COHERE数据集,分别测试了Top10召回率为99%、98%及95%时的集群最大QPS。
      测试结果:
      表2 GRAPH类索引测试结果1

      数据集

      构建参数

      查询参数

      性能指标

      efc

      ef

      QPS

      Recall

      cohere-768-cosine

      500

      128

      3687

      0.99

      500

      80

      5320

      0.98

      500

      36

      9028

      0.95

      结论:同一集群在统一索引构建参数的情况下,通过调整ef参数可以获得不同的查询精度,在略微损失召回率的场景下可以获得成倍的性能提升。

  • GRAPH_PQ类索引

    基于图算法的索引为了保证查询性能通常需要常驻内存,因此当向量维度较高或数据量较大时,内存资源成为影响成本及性能的关键因素。具体来说,高维度的向量和大规模的数据集对内存的需求显著增加,这不仅关系到存储成本,还直接影响到索引算法的运行效率和响应速度。该场景推荐使用GRAPH_PQ索引类型。

    测试方案:使用维度较高的COHERE与GIST数据集,测试在Top10召回率达到95%时的集群最大QPS,并与GRAPH索引对比常驻内存开销

    测试结果:
    表3 GRAPH_PQ类索引测试结果

    数据集

    构建参数

    查询参数

    性能指标

    内存开销

    efc

    fragment_num

    ef

    topk

    QPS

    Recall

    GRAPH_PQ

    GRAPH

    cohere-768-cosine

    200

    64

    85

    130

    8723

    0.95

    332MB

    3.3GB

    gist-960-euclidean

    200

    120

    200

    360

    4267

    0.95

    387MB

    4.0GB

    结论:结果显示使用GRAPH_PQ类索引能够在节约10倍+内存开销的情况下,取得与GRAPH索引差不多的精度和性能。因此, CSS 向量索引的GRAPH_PQ算法融合了图索引与量化算法,能够大幅降低内存的开销,提升单机的数据容量。

测试数据中涉及的索引参数说明请参见表4,关于构建参数的详细说明请参见在Elasticsearch集群创建向量索引,关于查询参数的详细说明请参见在Elasticsearch集群使用向量索引搜索数据

表4 索引参数说明

类型

参数名称

说明

构建参数

efc

构建hnsw时考察邻居节点的队列大小,默认值为200,值越大精度越高,构建速度将会变慢。

shrink

构建hnsw时的裁边系数,默认值为1.0f。

fragment_num

段数,默认值为0,插件自动根据向量长度设置合适的段数。

查询参数

ef

查询时考察邻居节点的队列大小。值越大查询精度越高,查询速度会变慢。默认值为200。

max_scan_num

扫描节点上限。值越大精度越高,查询速度变慢。默认值为10000。

topk

查询时返回top k条数据。

support.huaweicloud.com/bestpractice-css/css_07_0050.html