写点什么

向量动态量化

作者:DashVector
  • 2024-11-14
    陕西
  • 本文字数:1144 字

    阅读完需:约 4 分钟

向量动态量化

本文介绍向量检索服务 DashVector 动态量化功能和作用。

背景介绍

量化(Quantization)是向量检索技术中一种常用的优化方法,通过一定程度的精度(召回率)损失,来换取性能的大幅度提升,以及内存占用(索引文件大小)大幅度降低。


向量检索服务 DashVector 支持向量的动态量化,用户仅需在新建 Collection 时选择对应的量化策略,即可无感的使用量化功能。


重要


量化功能 局限性 说明:现阶段,开启量化功能的 Collection 无法使用 Sparse Vector 功能。若您有量化+SparseVector 结合使用的需求,可加群(官方钉钉群:25130022704)联系我们。

开启动态量化

前提条件

  • 已创建 Cluster

  • 已获得 API-KEY

  • 已安装最新版 SDK

代码示例

说明


  1. 需要使用您的 api-key 替换示例中的 YOUR_API_KEY、您的 Cluster Endpoint 替换示例中的 YOUR_CLUSTER_ENDPOINT,代码才能正常运行。

  2. Cluster Endpoint,可在控制台"Cluster 详情"中查看。


import dashvectorimport numpy as npfrom dashvector import VectorParam
client = dashvector.Client( api_key='YOUR_API_KEY', endpoint='YOUR_CLUSTER_ENDPOINT')assert client
# 创建带有量化策略的collectionret = client.create('quantize_demo', vectors=VectorParam(768, quantize_type='DT_VECTOR_INT8'))print(ret)
collection = client.get('quantize_demo')
# 正常写入向量数据,该向量数据会按照创建collection时定义的量化策略自动进行量化collection.insert(('1', np.random.rand(768).astype('float32')))
# 通过id获取对应的doc,需注意,这里获取到的向量数据是经过反量化后的近似值,非插入时的原值doc = collection.fetch('1')
# 若检索时设置返回向量数据,返回的向量数据同样是经过反量化后的近似值,非插入时的原值docs = collection.query( vector=np.random.rand(768).astype('float32'), include_vector=True)
复制代码


说明


通过获取 Doc 获取到的向量数据,是经过反量化后的近似值,非插入时的原值。

参数描述

创建 Collection 时可通过VectorParam类的quantize_type字段来定义量化策略。quantize_type当前可选值如下:


  • DT_VECTOR_INT8:将 Float32 向量量化为 INT8 类型

性能和召回率参考

基于 1 百万 768 维数据集

  • DashVector 规格 :P.large

  • 度量方式 :cosine

  • topk :100


说明


  1. 可以看到这个示例中,以 4.38%的召回率下降为代价,将索引大小缩减为原来的 1/3,同时 QPS 提升了 48%。

  2. 以上数据为基于Cohere数据集实测结果,但不同数据集的数据分布对 QPS、召回以及压缩比有影响,上述数据仅供参考。

更多参考


重要

可以看到,DashVector 量化策略并非适用于所有数据集。在实际生产环境中,请谨慎使用量化策略。


建议创建不带量化策略、带量化策略的两个 Collection,经过实际对比、测试、验证后再确定是否可将量化策略用于生产环境。


发布于: 刚刚阅读数: 5
用户头像

DashVector

关注

还未添加个人签名 2024-05-14 加入

向量检索服务DashVector基于通义实验室自研的高效向量引擎Proxima内核,提供具备水平拓展能力的云原生、全托管的向量检索服务。

评论

发布
暂无评论
向量动态量化_数据库_DashVector_InfoQ写作社区