有奖捉虫:行业应用 & 管理与支持文档专题 HOT
腾讯云向量数据库(Tencent Cloud VectorDB)采用开源工具 ann-benchmark 进行性能测试,并且为适应云上测试场景,对 ann-benchmark 工具进行了改造适配。本文详细介绍基于 ann-benchmark 工具进行数据库性能测试的方法。

下载并上传工具与数据集

1. 下载测试工具。
2. 获取腾讯云向量数据库提供的数据集。
说明:
ann-benchamrk 官方数据集默认不需要提前下载,测试工具运行时会自动检查?./data?目录下是否存在数据集文件,如果不存在则会主动联网下载。
3. 登录云服务器 CVM 环境,使用 rz 命令上传测试工具于 CVM。CVM 要求,请参见 测试环境
4. 执行unzip ann-benchmarks-dev.zip命令解压测试工具压缩包 ann-benchmarks-dev.zip
5. 使用 rz 命令上传数据集于测试工具解压目录../ann-benchmarks-dev/ann-benchmarks/data

测试 128 维数据在 HNSW 索引下单核查询性能

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

进入已解压的测试工具包的路径,安装 python 运行依赖。
cd?ann-benchmarks?
pip3 install?-r?requirements.txt?

步骤2:修改配置文件

执行如下命令,拷贝配置文件,并打开配置文件,配置相关参数。需配置的参数信息,请参见下表,其余参数保持默认值即可。
cp?ann_benchmarks/algorithms/vector_db/config.yml?mytest.yml
vi?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

探索指定召回率,需设置的查询 EF 值

步骤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的召回率。
?
?
?

Search 检索查询性能

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

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

步骤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 同时进行压测。
?


http://www.vxiaotou.com