开源向量数据库基准测试工具
VectorDBBench是一个开源的向量数据库基准测试工具。它提供15个测试用例,评估容量、搜索性能和过滤搜索性能。支持多种数据库客户端,具有可视化界面,方便复现测试和评估新系统。工具还包含性能分析报告和排行榜功能,有助于比较不同向量数据库的性能。
排行榜: https://zilliz.com/benchmark
python >= 3.11
仅安装 PyMilvus 的 vectordb-bench
pip install vectordb-bench
安装所有数据库客户端
pip install vectordb-bench[all]
安装指定数据库客户端
pip install vectordb-bench[pinecone]
支持的所有数据库客户端及其安装命令如下:
可选数据库客户端 | 安装命令 |
---|---|
pymilvus(默认) | pip install vectordb-bench |
all | pip install vectordb-bench[all] |
qdrant | pip install vectordb-bench[qdrant] |
pinecone | pip install vectordb-bench[pinecone] |
weaviate | pip install vectordb-bench[weaviate] |
elastic | pip install vectordb-bench[elastic] |
pgvector | pip install vectordb-bench[pgvector] |
pgvecto.rs | pip install vectordb-bench[pgvecto_rs] |
pgvectorscale | pip install vectordb-bench[pgvectorscale] |
redis | pip install vectordb-bench[redis] |
memorydb | pip install vectordb-bench[memorydb] |
chromadb | pip install vectordb-bench[chromadb] |
awsopensearch | pip install vectordb-bench[awsopensearch] |
init_bench
或:
vectordbbench [OPTIONS] COMMAND [ARGS]...
要列出可通过命令行选项运行的客户端,请执行: vectordbbench --help
$ vectordbbench --help Usage: vectordbbench [OPTIONS] COMMAND [ARGS]... Options: --help Show this message and exit. Commands: pgvectorhnsw pgvectorivfflat test weaviate
要列出每个命令的选项,请执行 vectordbbench [command] --help
$ vectordbbench pgvectorhnsw --help Usage: vectordbbench pgvectorhnsw [OPTIONS] Options: --config-file PATH 从yaml文件读取配置 --drop-old / --skip-drop-old 删除旧有或跳过 [default: drop-old] --load / --skip-load 加载或跳过 [default: load] --search-serial / --skip-search-serial 串行搜索或跳过 [default: search-serial] --search-concurrent / --skip-search-concurrent 并发搜索或跳过 [default: search-concurrent] --case-type [CapacityDim128|CapacityDim960|Performance768D100M|Performance768D10M|Performance768D1M|Performance768D10M1P|Performance768D1M1P|Performance768D10M99P|Performance768D1M99P|Performance1536D500K|Performance1536D5M|Performance1536D500K1P|Performance1536D5M1P|Performance1536D500K99P|Performance1536D5M99P|Performance1536D50K] 测试用例类型 --db-label TEXT 数据库标签, 默认为当前日期格式 [default: 2024-05-20T20:26:31.113290] --dry-run 只打印配置并退出, 不运行任务 --k INTEGER 搜索的最近邻数量 [default: 100] --concurrency-duration INTEGER 并发搜索的持续时间(秒) [default: 30] --num-concurrency TEXT 并发搜索时的并发值, 逗号分隔 [default: 1,10,20] --user-name TEXT 数据库用户名 [required] --password TEXT 数据库密码 [required] --host TEXT 数据库主机 [required] --db-name TEXT 数据库名称 [required] --maintenance-work-mem TEXT 设置维护操作(索引创建)的最大内存使用, 可以以字符串形式指定单位如'64GB', 或直接整数KB --max-parallel-workers INTEGER 设置维护操作(索引创建)的最大并行进程数 --m INTEGER hnsw m --ef-construction INTEGER hnsw ef-construction --ef-search INTEGER hnsw ef-search --help 显示帮助信息并退出
vectordbbench 命令可以选择性地从 yaml 格式的配置文件中读取部分或全部选项。
默认情况下,配置文件预期位于 vectordb_bench/config-files/ 目录下, 可以通过设置环境变量 CONFIG_LOCAL_DIR 或传递完整路径来覆盖。
所需的格式如下:
命令名: 参数名: 参数值 参数名: 参数值
示例:
pgvectorhnsw: db_label: pgConfigTest user_name: vectordbbench password: vectordbbench db_name: vectordbbench host: localhost m: 16 ef_construction: 128 ef_search: 128 milvushnsw: skip_search_serial: True case_type: Performance1536D50K uri: http://localhost:19530 m: 16 ef_construction: 128 ef_search: 128 drop_old: False load: False
注意:
- 命令行传递的选项将覆盖配置文件*
- 参数名使用下划线 _ 而不是 -
VectorDBBench 不仅提供了主流向量数据库和云服务的基准测试结果, 更是一个帮助用户进行性能和成本效益对比的工具。它旨在让用户, 甚至非专业人士也能轻松复制结果或测试新系统, 大大简化了在众多云服务和开源向量数据库中选择最优选择的过程。
为了提升用户体验, 我们提供了一个直观的可视化界面。这不仅使用户能轻松启动基准测试, 还能查看对比报告, 轻松复制基准测试结果。
为了提高相关性和实用性, 我们提供了特别针对云服务的成本效益报告, 使基准测试过程更加切合实际。
我们设计了包括插入、搜索和过滤搜索在内的多种测试场景, 以更贴近真实生产环境。为了提供可信赖的数据, 我们使用了来自实际生产场景的公开数据集, 如 SIFT、GIST、Cohere 和由 OpenAI 从开源原始数据集生成的数据集。这让我们有机会发现一些鲜为人知的开源数据库在某些情况下可能会有出色的表现!
准备好投入 VectorDBBench 的世界吧, 让它引导你发现最适合自己的向量数据库!
为了便于展示测试结果并提供全面的性能分析报告,我们提供了排行榜页面。它允许我们选择QPS、QP$和延迟指标,并根据各种用例的测试结果和一组评分机制(稍后介绍)对系统的性能进行全面评估。在这个排行榜上,我们可以选择要比较的系统和模型,并过滤掉我们不想考虑的 用例。综合得分始终从最好到最差排序,每个查询的具体测试结果将在下面的列表中显示。
对于每个用例,选择一个基准值并根据相对值对每个系统进行评分。
base_QPS
或base_QP$
,每个系统的得分为(QPS/base_QPS) * 100
或(QP$/base_QP$) * 100
。base_Latency
,每个系统的得分为(base_Latency + 10ms)/(Latency + 10ms) * 100
。我们希望给不同用例平等的权重,而不让一个具有高绝对结果值的用例成为总体评分的唯一原因。因此,在每个用例中为不同系统评分时,我们需要使用相对值。
此外,对于延迟,我们在分子和分母中添加10毫秒,以确保如果每个系统在某个用例中都表现特别出色,其优势不会在延迟趋近于0时被无限放大。
对于在特定用例中失败或超时的系统,我们会给它们一个得分,该得分比最差结果低两倍。例如,在QPS或QP$中,它将是最低值的一半。对于延迟,它将是最大值的两倍。
对于每个系统,我们将取其在所有用例中得分的几何平均值作为其在特定指标上的综合得分。
pip install -e '.[test]' pip install -e '.[pinecone]'
$ python -m vectordb_bench
或者:
$ init_bench
或者:
如果您使用了开发容器,请先创建以下数据集目录:
# 将本地 ~/vectordb_bench/dataset 挂载到容器的 /tmp/vectordb_bench/dataset。 # 如果您对路径名不太舒服,可以在 devcontainer.json 中自行更改。 mkdir -p ~/vectordb_bench/dataset
在容器的 bash 中运行 python -m vectordb_bench
。
$ ruff check vectordb_bench
如果要自动修复编码风格,请添加 --fix
$ ruff check vectordb_bench --fix
这是VectorDBBench的主页,显示了我们提供的标准基准测试结果。此外,用户自己进行的所有测试结果也将在此显示。我们还提供了同时选择和比较多个测试结果的功能。
这里显示的标准基准测试结果包括我们目前支持 的15个用例,涉及6个客户端(Milvus、Zilliz Cloud、Elastic Search、Qdrant Cloud、Weaviate Cloud和PgVector)。但是,由于一些系统可能由于内存不足(OOM)或超时等问题无法成功完成所有测试,因此并非所有客户端都包含在每个用例中。
所有标准基准测试结果都是由一台位于被测试服务器所在区域的8核心、32GB主机上运行的客户端生成的。该客户端主机配备了Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz
处理器。同时,我们在基准测试中测试的所有开源系统的服务器都运行在相同类型的处理器上。
这是运行测试的页面:
我们的客户端模块的设计以灵活性和可扩展性为目标,旨在无缝集成来自不同系统的API。目前,它支持Milvus、Zilliz Cloud、Elastic Search、Pinecone、Qdrant Cloud、Weaviate Cloud、PgVector、Redis和Chroma。敬请关注更多选择,因为我们正在不断努力扩展到其他系统。
我们开发了15个全面的基准测 试用例,用于测试向量数据库的各种功能,每个都旨在为您提供问题的不同部分。这些用例分为三大类:
每个案例都对矢量数据库的功能进行了深入的检查,为您提供了对数据库性能的全面了解。
通过 /custom
页面,用户可以使用本地数据集自定义性能案例。保存后,可以从 /run_test
页面选择相应的案例进行测试。
我们对数据集格式有严格要求,请遵循以下要求:
Folder Path
- 包含所有文件的文件夹路径。请确保文件夹中的所有文件均为 Parquet
格式。
train.parquet
,应包含两列: id
作为递增的 int
和 emb
作为 float32
数组。test.parquet
,应包含两列: id
作为递增的 int
和 emb
作为 float32
数组。neighbors.parquet
,应包含两列: id
对应查询向量和 neighbors_id
作为 int
数组。Train File Count
- 如果向量文件过大,您可以考虑将其拆分为多个文件。拆分文件的命名格式应为 train-[index]-of-[file_count].parquet
。例如, train-01-of-10.parquet
表示 10 个拆分文件中的第二个(0 索引)。
Use Shuffled Data
- 如果选中此选项,需要修改向量数据文件。VectorDBBench 将加载标记为 shuffle
的数据。例如,使用 shuffle_train.parquet
而不是 train.parquet
,以及 shuffle_train-04-of-10.parquet
而不是 train-04-of-10.parquet
。在乱序数据中,id
列可以是任意顺序。
我们的基准测试目标如下:
VectorDBBench 的主要目标之一是使用户能够快速轻松地复制基准测试结果,或测试自定义场景。我们相信降低进行这些测试的障碍将增强社区对向量数据库的理解和改进。我们的目标是创造一个环境,任何用户,无论其技术专长如何,都可以快速设置和运行基准测试,并以直观的方式查看和分析结果。
VectorDBBench 旨在提供更全面、多方面的测试环境,以准确反映向量数据库的复杂性。通过超越简单的算法速度测试,我们希望为更好地理解向量数据库在现实场景中的表现做出贡献。通过尽可能包含更多复杂场景,包括各种测试用例和数据集,我们旨在反映现实条件,并为我们的社区提供有形的意义。我们的目标是提供可以推动向量数据库开发和使用的切实改进的基准测试结果。
步骤 1: 创建新客户端文件
步骤 2: 实现 new_client.py 和 config.py
from ..api import VectorDB class NewClient(VectorDB): # 实现 VectorDB 类中定义的抽象方法 # ...
from pydantic import SecretStr from clients.api import DBConfig, DBCaseConfig class NewDBConfig(DBConfig): # 实现数据库连接所需的必填配置字段 # ... token: SecretStr uri: str class NewDBCaseConfig(DBCaseConfig): # 实现可选的特定于案例的配置字段 # ...
步骤 3: 导入 DB 客户端并更新初始化
在最后一步中,您将导入 DB 客户端到 clients/init.py 并更新初始化过程。
#clients/__init__.py # 将 NewClient 添加到 DB 枚举 class DB(Enum): ... DB.NewClient = "NewClient" @property def init_cls(self) -> Type[VectorDB]: ... if self == DB.NewClient: from .new_client.new_client import NewClient return NewClient ... @property def config_cls(self) -> Type[DBConfig]: ... if self == DB.NewClient: from .new_client.config import NewClientConfig return NewClientConfig ... def case_config_cls(self, ...) if self == DB.NewClient: from .new_client.config import NewClientCaseConfig return NewClientCaseConfig
步骤 4: 实现 new_client/cli.py 和 vectordb_bench/cli/vectordbbench.py 在这个(可选的,但建议添加的)步骤中,您将能够从命令行运行测试。
from typing import Annotated, Unpack import click import os from pydantic import SecretStr from vectordb_bench.cli.cli import ( CommonTypedDict, cli, click_parameter_decorators_from_typed_dict, run, ) from vectordb_bench.backend.clients import DB class ZillizTypedDict(CommonTypedDict): uri: Annotated[ str, click.option("--uri", type=str, help="uri 连接字符串", required=True) ] user_name: Annotated[ str, click.option("--user-name", type=str, help="数据库用户名", required=True) ] password: Annotated[ str, click.option("--password", type=str, help="Zilliz 密码", default=lambda: os.environ.get("ZILLIZ_PASSWORD", ""), show_default="$ZILLIZ_PASSWORD", ), ] level: Annotated[ str, click.option("--level", type=str, help="Zilliz 索引级别", required=False), ] @cli.command() @click_parameter_decorators_from_typed_dict(ZillizTypedDict) def ZillizAutoIndex(**parameters: Unpack[ZillizTypedDict]): from .config import ZillizCloudConfig, AutoIndexConfig run( db=DB.ZillizCloud, db_config=ZillizCloudConfig( db_label=parameters["db_label"], uri=SecretStr(parameters["uri"]), user=parameters["user_name"], password=SecretStr(parameters["password"]), ), db_case_config=AutoIndexConfig( params={parameters["level"]}, ), **parameters, )
具有多个索引配置的 cli 模块:
- pgvector: vectordb_bench/backend/clients/pgvector/cli.py
- milvus: vectordb_bench/backend/clients/milvus/cli.py
就这样!您已成功将新的 DB 客户端添加到 vectordb_bench 项目中。
规则: 安装:测试系统可以以任何形式进行安装以实现最佳性能,包括但不限于二进制部署、Docker和云服务。 微调:对于被测系统,我们使用默认的服务器端配置以保持结果的真实性和代表性。对于客户端,我们欢迎任何参数调优以获得更好的结果。 不完整的结果:许多数据库可能由于内存不足、崩溃或超时等问题无法完成所有测试用例。在这些情况下,我们将明确说明这些情况。 错误或失实:我们努力确保准确地了解和支持各种向量数据库,但可能会存在疏忽或误用的情况。对于任何此类情况,欢迎您在我们的 GitHub 页面上提出问题或进行修订。 超时:
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号