向量数据库 测试方法

腾讯云向量数据库(Tencent Cloud VectorDB)采用开源工具 ann-benchmark 进行性能测试,并且为适应云上测试场景,对 ann-benchmark 工具进行了改造适配。这篇详细介绍基于 ann-benchmark 工具进行数据库性能测试的方法。

相关产品
向量数据库 产品页,含版本规格、价格与购买入口。

一、下载并上传工具与数据集

1. 下载测试工具。

ann-benchmarks-dev.zip

2. 获取腾讯云向量数据库提供的数据集。

注意:说明:

注意:ann-benchmark 数据集默认不需要提前下载,测试工具运行时会自动检查 ./data 目录下是否存在数据集文件,如果不存在则会主动联网下载。

3. 登录云服务器 CVM 环境,使用 rz 命令上传测试工具于 CVM。CVM 要求,请参见 测试环境。

4. 执行unzip ann-benchmarks-dev.zip命令解压测试工具压缩包 ann-benchmarks-dev.zip。

5. 使用 rz 命令上传数据集于测试工具解压目录../ann-benchmarks-dev/ann-benchmarks/data。

二、步骤1 : 安装工具环境依赖

进入已解压的测试工具包的路径,安装 python 运行依赖。

cd ann-benchmarks pip3 install -r requirements.txt

三、步骤2:修改配置文件

执行如下命令,拷贝配置文件,并打开配置文件,配置相关参数。需配置的参数信息,请参见下表,其余参数保持默认值即可。

cp ann_benchmarks/algorithms/vector_db/config.yml mytest.ymlvi mytest.yml

配置文件参数 参数含义 建议值
arg_groups 下的第一个参数 索引类型为 HNSW 的参数 M,指每个节点在检索构图中可以连接多少个邻居节点 设置16
HttpBase 连接向量数据库访问地址 获取向量数据库实例的内网 IP 地址与网络端口。具体操作,请参见 查看实例信息。
User 连接用户名 root
ApiKey 向量数据库的 API 访问密钥 如何获取,请参见 密钥管理。
IndexType 索引类型 HNSW
MetricType 相似度计算方法 L2
ColReplicaNum 副本数 2
Threads 单线程进行测试 1
ColShardNum 分片数量 3
EfConstruction 索引类型为 HNSW 的参数 ef,搜索时,指定寻找节点邻居遍历的范围 500
BuildIndexOnUpsert 指定插入数据时,同步更新索引 true:重新创建索引。false:不重新创建索引。
query_args 指定了在数据插入完成后,需要进行ef为10,15,20等的查询 [ 10, 15, 20, 25, 30, 35, 40, 50, 60, 80, 120, 200, 400 ]

float: any: – base_args: [ '@metric' ] constructor: VectorDb disabled: false docker_tag: ann-benchmarks-vector_db module: ann_benchmarks.algorithms.vector_db name: vector_db run_groups: vector_db: arg_groups: – [ 16 ] – DbName: db-test HttpBase: http://127.0.0.1:18100 NeedAuth: true User: root ApiKey: invalid-by-default DropDb: false CreateDb: true ReCreateCollection: false DropCollectionOnDone: false IndexType: HNSW MetricType: L2 ColReplicaNum: 2 ColShardNum: EfConstruction: 500 ExitOnError: true Threads: 1 MultiCpuUpsert: true UpsertBatchSize: 500 BuildIndexOnUpsert: true KNNSeekMode: false KNNSeekStartEf: 90 KNNSeekStep: 1 KNNSeekExpect: 0.95 args: { } query_args: – [ 10, 15, 20, 25, 30, 35, 40, 50, 60, 80, 120, 200, 400 ] – RetrieveVector: false

四、步骤3:运行测试工具

执行如下命令,运行测试工具。其中,–dataset 指明数据集名称。 vector_db 指明了数据库名,数据库名从 mytest.yml 中获取。具体参数含义,请参见 测试工具。

注意:说明:

注意:euclidean 使用的是 L2 相似度算法,angular 使用的是 IP 算法。

python3 run.py –dataset sift-128-euclidean –local –force –parallelism 1 –algorithm vector_db –definitions=mytest.yml –runs 1

五、步骤4:查看测试运行结果

测试结束后,测试结果保存在 results 文件夹中,需要使用如下命令将结果转换为可读的 csv 文件。如下所示,可通过生成的 mytest.csv 文件,查看128维数据在 HNSW 索引下单核的性能表现。

python3 data_export.py –output=mytest.csv

六、步骤1:打开探索模式

打开配置文件 mytest.yml,修改配置文件中的 KNNSeekMode 参数为 true, 该模式测试工具会反复运行不同 ef 值的查询,直到获得最匹配的召回率为止。

七、步骤2:配置探索参数

配置文件参数 参数含义 建议值
KNNSeekStartEF 指定开始查询 ef 设置的起始值,即从哪一个ef 参考值开始查询 90
KNNSeekStep 指定探索模式中,每次 ef 值变化几个单位。如1,则表示 KNNSeekStartEF+=1 或相减,每次递增或递减的步长 1
KNNSeekExpect 期望找到的召回率 0.95

八、步骤3:运行工具

具体参数含义,请参见 测试工具。

python3 run.py –dataset sift-128-euclidean –local –force –parallelism 1 –algorithm vector_db –definitions=mytest.yml –runs 1 –only_query

九、步骤4: 查看运行结果

结果显示如下所示,KNNSeekExpect=0.95,即在 ef=61时,可获得最接近0.95的召回率。

十、步骤1:设置期望的 EF 值,压测查询配置

在配置文件中,如下使用8核压测查询ef=111的情况。 注意需要设置 KNNSeekMode为 false。

十一、步骤2:运行工具

压测命令,压测时需要打开 –batch 参数,同时设置 –runs 为较大值以便长时间运行。具体参数含义,请参见 测试工具。

python3 run.py –dataset sift-128-euclidean –local –force –parallelism 1 –algorithm vector_db –definitions=mytest.yml –runs 999 –only_query –batch

十二、步骤3:查看结果

腾讯云向量数据库控制台提供了实例的 CPU,内存、QPS,时延等关键性能指标监控。具体操作,请参见 查看监控数据。

注意:说明:

注意:受限于 python 语言的线程模型,有时测试工具无法把测试压力打满,导致实例性能无法达到极限,此时可使用多进程或多台 CVM 同时进行压测。

赞 (0)
上一篇 4天前
下一篇 4天前