性能白皮书

更新时间:
复制为 MD 格式

本文介绍云原生多模数据库Lindorm向量引擎的性能测试流程。

测试环境

  • 客户端ECS规格

    建议选择ecs.c9i.16xlarge及以上规格。

    CPU

    内存

    磁盘

    操作系统

    64

    128GB

    2TB

    Ubuntu 22.04 64位 UEFI

  • 服务端Lindorm规格

    引擎

    引擎版本

    CPU

    内存

    磁盘

    搜索引擎

    3.10.16及以上

    8

    32GB

    320GB 性能型云存储

    向量引擎

    3.10.16及以上

    32

    128GB

说明

ECSLindorm实例需位于相同地域和可用区,并使用相同的VPC网络,且需要将ECS地址加入到Lindorm白名单。

测试工具准备

本文使用VectorDBBench作为性能评估的基准测试工具。

  • 安装Python 3.11及以上版本的环境。

    sudo apt update
    sudo apt install python3.11
    sudo apt install python3.11-venv
  • 安装VectorDBBench项目和相关依赖。

    git clone https://github.com/zilliztech/VectorDBBench.git
    cd VectorDBBench
    #创建虚拟环境
    python3.11 -m venv venv
    source venv/bin/activate
    
    #安装python依赖
    pip3 install -U pip -i https://mirrors.aliyun.com/pypi/simple
    pip3 install --no-cache-dir -r install/requirements_py3.11.txt  -i https://mirrors.aliyun.com/pypi/simple
    pip3 install -e . -i https://mirrors.aliyun.com/pypi/simple
    
    #启动Web页面
    init_bench

性能测试

测试支持Web页面和命令行两种方式。Web页面方式操作直观,适合初次测试;命令行方式适合批量执行或重复测试。

通过Web页面运行测试

  • Run Test页面选择数据库Lindorm。

    image.png

  • 设置Lindorm实例信息和索引名称。

    image.png

    参数

    说明

    host & port

    搜索引擎的Elasticsearch兼容连接地址。如何获取,请参见Elasticsearch兼容地址

    重要

    请务必使用专有网络地址。

    user & password

    访问向量引擎的用户名和密码。

    默认用户名和密码的获取方式:在控制台的左侧导航栏,选择 数据库连接,单击搜索引擎页签,在搜索引擎页签可获取。

    index_name

    创建的向量索引的名称。

  • 选择测试项并填写索引配置。

    • 通用参数说明

      参数

      说明

      filter_type

      融合查询使用的查询模式,可选efficient_filter|pre_filter|post_filter。推荐选择efficient_filter。

      k_expand_scope

      post_filter模式下将使用该值替换k值,用来实现放大k值的效果。

      number_of_regions

      设置向量索引的regions数,如果需要测试单节点的性能表现,可将该值设置为1。

    • 索引参数说明

      HNSW索引

      image.png

      参数

      说明

      M

      每一层图的最大出边数量。

      推荐值:32。

      efConstruction

      索引构建时动态列表的长度。

      推荐值:400。

      efSearch

      索引查询时动态列表的长度。通常用于提升召回精度,但会增加性能开销。

      推荐值:100。

      IVFPQ索引

      image.png

      参数

      说明

      nlist

      聚类中心的数量。

      推荐值:n为数据总量。

      nprobe

      要查询的聚类单元的数量。通常用于提升召回精度,但会增加性能开销。

      推荐值:nlist * 0.004。

      reorder-factor

      使用原始向量进行重排序,获取原始向量的比例为topk * reorder_factor,通常用于提升召回精度,但会增加性能开销。

      推荐值:2。

      client_refactor

      是否在客户端进行重排序。

      推荐值:true。

      centroids_hnsw_M

      若在聚类中心搜索时使用HNSW算法,设定HNSW算法的每一层图的最大出边数量。

      推荐值:32。

      centroids_hnsw_efConstruction

      若在聚类中心搜索时使用HNSW算法,设定HNSW算法在索引构建时动态列表的长度。

      推荐值:500。

      centroids_hnsw_efSearch

      若在聚类中心搜索时使用HNSW算法,设定HNSW算法在查询时动态列表的长度。

      推荐值:200。

      IVFBQ索引

      image.png

      参数

      说明

      nlist

      聚类中心的数量。

      推荐值:n为数据总量。

      nprobe

      要查询的聚类单元的数量。通常用于提升召回精度,但会增加性能开销。

      推荐值:nlist * 0.004。

      reorder-factor

      使用原始向量进行重排序,获取原始向量的比例为topk * reorder_factor,通常用于提升召回精度,但会增加性能开销。

      推荐值:2。

      client_refactor

      是否在客户端进行重排序。

      推荐值:true。

      centroids_hnsw_M

      若在聚类中心搜索时使用HNSW算法,设定HNSW算法的每一层图的最大出边数量。

      推荐值:32。

      centroids_hnsw_efConstruction

      若在聚类中心搜索时使用HNSW算法,设定HNSW算法在索引构建时动态列表的长度。

      推荐值:500。

      centroids_hnsw_efSearch

      若在聚类中心搜索时使用HNSW算法,设定HNSW算法在查询时动态列表的长度。

      推荐值:200。

      exbits

      用于指定额外字节数来表示量化后的向量。exbits越大,召回率越高,内存占用越高。

      推荐值:2。

通过命令行运行测试

  • 如果多次重复跑性能测试,可以在下述命令后面加上--skip-drop-old --skip-load跳过索引创建和数据导入。

    #HNSW索引
    vectordbbench lindormhnsw --case-type Performance768D10M --index-name <index_name> --k 10 --host <host> --port <port> --user <user> --password <password> --m <M> --ef-construction <efConstruction> --ef-search <efSearch>
    
    #IVFPQ索引
    vectordbbench lindormivfpq --case-type Performance768D10M --index-name <index_name> --k 10 --host <host> --port <port> --user <user> --password <password> --lists <nlist> --probes <nprobe> --m <centroids_hnsw_M> --ef-construction <centroids_hnsw_efConstruction> --ef-search <centroids_hnsw_efSearch> --reorder-factor <reorder_factor>
    
    #IVFBQ索引
    vectordbbench lindormivfbq --case-type Performance768D10M --index-name <index_name> --k 10 --host <host> --port <port> --user <user> --password <password> --lists <nlist> --probes <nprobe> --exbits <exbits> --m <centroids_hnsw_M> --ef-construction <centroids_hnsw_efConstruction> --ef-search <centroids_hnsw_efSearch> --reorder-factor <reorder_factor>
  • 运行测试

    如果需要跳过索引创建和数据导入,勾选Index already exists

    image.png

测试结果

Results页面查看测试结果。以下测试数据基于单节点32128GB向量引擎。

image.png

测试指标说明

测试指标

说明

QPS

每秒处理的读写操作数,单位为次/秒。

Recall

查询返回的正确topk最近邻向量的百分比。

Serial_latency_P95

95%的请求延迟低于该值,单位为毫秒。

Serial_latency_P99

99%的请求延迟低于该值,单位为毫秒。

HNSW索引Search Performance

参数

M

32

efConstruction

400

number_of_regions

1

重要

该值对于性能测试结果影响较大,本文档基于单节点32C128G向量引擎进行测试,需要将该值设置为1。

数据集

efSearch

topk

serial_latency_p95

serial_latency_p99

qps

recall

Cohere 1M

350

10

1.7

1.9

42761.0247

0.9918

900

100

2.9

3.4

16799.0671

0.9905

Cohere 10M

250

10

1.9

2.3

33730.4316

0.981

1000

100

4.1

4.5

10163.782

0.9808

Bioasq 1M

520

10

2

2.5

31060.1343

0.9501

820

100

2.8

3.2

17748.6457

0.9504

Bioasq 10M

1000

10

3.2

3.6

13943.0958

0.9405

1000

100

3.6

4

11846.4252

0.938