背景介绍
什么是吞吐?
吞吐量(Throughput)指的是系统在单位时间内可以处理的请求数。对于向量数据库而言,吞吐的优化主要体现在 数据写入、检索查询、Embedding 向量化等方面。
哪些场景需要优化吞吐?
- 高并发请求:需要短时间内处理大量检索请求。
- 大规模数据写入:数据量大,需要高效存储和索引构建。
- Embedding 向量化任务:涉及大规模向量化计算的场景,如推荐系统、搜索引擎、RAG。
优化方案
通用方法
- 增加并发请求:
- 在不限流的情况下,尽可能提高并发请求数,以最大化吞吐量。并发请求可以充分利用服务器的计算资源,减少请求排队等待的时间,提高整体吞吐。
- 调整配额:
- 若数据量特别大,可联系客户支持或产品团队,申请调整配额。具体配额限制参考向量库配额说明文档。
数据写入 QPS 优化
- 调整写入方式:
- 异步接口:
- 采用异步写入方式,可支持 10000 QPS,减少同步操作的阻塞,提高写入吞吐量。
- 异步方式可以让请求不必等待写入完成,即可继续处理新的请求,提高系统的并发能力。
- 已有向量数据写入优化:
- 采用精度无损的向量压缩技术,可降低单条请求的存储和计算成本,提高写入速度。
- 向量压缩减少了数据存储的大小,使得每次写入操作的 I/O 开销降低,从而提高吞吐。
- 参考相关文档,选择合适的压缩方法,以在性能与精度之间取得平衡。
量化方式 | 描述 | 场景 |
|---|
int8 | 将4字节的 float 压缩为单个字节,以获取内存和计算延迟的收益,会造成微小的损失精度,比如 cosine 距离会出现大于1的分值。 | 适用于hnsw、hnsw_hybrid、flat索引算法,距离方式为ip、consine。 |
float | 全精度,未做压缩量化。 | 适用于hnsw、hnsw_hybrid、flat、diskann索引算法,距离方式为ip、l2、consine。 |
fix16 | 将4字节的 float 压缩为两个字节,以获取内存和计算延迟的收益,会造成微小的损失精度。通过损失一定的检索精度,提升检索性能,节约资源成本。 | 适用于hnsw、hnsw_hybrid、flat索引算法,距离方式为ip、l2、consine。 |
pq | 将高维向量转换为低维码本向量,以减少内存占用并提高搜索效率。 | 适用于diskann、ivf索引算法,距离方式为ip、l2、consine。 |
检索 QPS 优化
- 手动增加 CU 资源:
- 通过增加 CU 资源,预计每 CU 可额外提升 100 QPS。
- 增加计算单元(CU)可直接提升并行计算能力,提高查询的处理速度。
- 使用更高效的量化方式:
- 切换为 int8 量化,在精度接近的情况下,可大幅提升检索性能。
- 量化降低了数据存储大小和计算复杂度,使得向量计算更快,从而提高 QPS。
- 开启自动分片:
- 在需要分片的场景下,尽量启用自动分片,优化查询性能和吞吐量。
- 自动分片可以将数据分布到多个节点上,提高并行处理能力,减少单个节点的查询负载。
Embedding QPS 优化
- 图片压缩:
- 采用高效的图片压缩方法,可减少数据传输和计算开销,提高 QPS。
- 压缩后的图片数据更小,使得网络传输更快,减少请求处理延迟。