向量动态量化

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

免费体验阿里云高性能向量检索服务https://www.aliyun.com/product/ai/dashvector


背景介绍

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

数据压缩是将一串模拟数据或非常高速的离散数据转换为相对低速的数据流,用于在数字通信链路上进行通信或存储在数字存储器中。随着数字通信和安全通信变得越来越重要,数据压缩的理论和实践得到了越来越多的关注。虽然在许多系统中带宽相对廉价,例如光纤和电缆网络,但在大多数系统中,用户希望传输或存储的信息量不断增长,这就需要对通信或存储介质进行某种形式的压缩,以实现高效、安全和可靠的使用。

一个典型的例子是图像数据,简单的方案所需的比特率对于许多通信链路或存储设备来说都太大。另一个需要压缩的例子源于以下事实:如果使用由采样器和标量量化器组成的简单PCM系统对语音进行数字化,得到的信号的带宽将不再足够小,以适应普通电话通道。也就是说,数字化(可能出于安全性或可靠性的考虑)导致了带宽的扩展。因此,如果要使用原始的通信信道,就需要进行数据压缩。

图像压缩和语音压缩(通常被称为图像编码和语音编码)是当前最重要的数据压缩应用之一。它们也是最有趣的研究对象之一,因为经验表明,这两种类型的数据都具有足够的结构,可以通过足够复杂的编码实现相当大的压缩。将相对高速的数据转换为较低速的数据几乎总会导致保真度降低或失真增加。因此,数据压缩的一个基本目标是在给定比特率下获得尽可能好的保真度,或者等效地说,对于给定的保真度,尽量减小所需的比特率。

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


开启动态量化

前提条件


代码示例

说明

  1. 需要使用您的api-key替换示例中的YOUR_API_KEY、您的Cluster Endpoint替换示例中的YOUR_CLUSTER_ENDPOINT,代码才能正常运行。
  2. Cluster Endpoint,可在控制台“Cluster详情”中查看。


import dashvector
import numpy as np
client = dashvector.Client(
    api_key='YOUR_API_KEY',
    endpoint='YOUR_CLUSTER_ENDPOINT'
)
assert client
# 创建带有量化策略的collection
ret = client.create(
    'quantize_demo',
    dimension=768,
    extra_params={
        '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
)

python

说明

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


参数描述

创建Collection时可通过extra_params: Dict[str, str]参数的quantize_type字段来定义量化策略。quantize_type当前可选值如下:

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


性能和召回率参考

基于1百万768维数据集

  • DashVector规格:P.large
  • 度量方式:cosine
  • topk:100


量化策略

索引比

QPS

召回率

100%

495.6

99.05%

DT_VECTOR_INT8

33.33%

733.8(+48%)

94.67%


说明

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

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


更多参考

数据集

量化策略

索引比

召回比

QPS比

Cohere 10M 768 Cosine

DT_VECTOR_INT8

33%

95.28%

170%

GIST 1M 960 L2

DT_VECTOR_INT8

35%

99.54%

134%

OpenAI 5M 1536 Cosine

DT_VECTOR_INT8

34%

67.34%

189%

Deep1B 10M 96 Cosine

DT_VECTOR_INT8

52%

99.97%

135%

内部数据集 8M 512 Cosine

DT_VECTOR_INT8

38%

99.92%

152%


重要

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

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



了解更多阿里云向量检索服务DashVector的使用方法,请点击:

https://help.aliyun.com/product/2510217.html?spm=a2c4g.2510217.0.0.54fe155eLs1wkT

相关文章
|
2月前
|
存储 自然语言处理 数据可视化
可视化FAISS矢量空间并调整RAG参数提高结果精度
随着开源大型语言模型的性能不断提高,编写和分析代码、推荐、文本摘要和问答(QA)对的性能都有了很大的提高。但是当涉及到QA时,LLM通常会在未训练数据的相关的问题上有所欠缺,很多内部文件都保存在公司内部,以确保合规性、商业秘密或隐私。当查询这些文件时,会使得LLM产生幻觉,产生不相关、捏造或不一致的内容。
57 0
|
5天前
|
前端开发 数据可视化
R语言广义线性混合模型(GLMM)bootstrap预测置信区间可视化
R语言广义线性混合模型(GLMM)bootstrap预测置信区间可视化
|
10天前
线性回归前特征离散化可简化模型、增强稳定性、选有意义特征、降低过拟合、提升计算效率及捕捉非线性关系。
【5月更文挑战第2天】线性回归前特征离散化可简化模型、增强稳定性、选有意义特征、降低过拟合、提升计算效率及捕捉非线性关系。但过多离散特征可能增加复杂度,丢失信息,影响模型泛化和精度。需谨慎平衡离散化利弊。
16 0
|
13天前
|
算法 数据可视化 数据挖掘
r语言有限正态混合模型EM算法的分层聚类、分类和密度估计及可视化(上)
r语言有限正态混合模型EM算法的分层聚类、分类和密度估计及可视化
|
13天前
|
算法 数据可视化 前端开发
r语言有限正态混合模型EM算法的分层聚类、分类和密度估计及可视化(下)
r语言有限正态混合模型EM算法的分层聚类、分类和密度估计及可视化
|
23天前
|
数据可视化 测试技术
R语言线性混合效应模型(固定效应&随机效应)和交互可视化3案例
R语言线性混合效应模型(固定效应&随机效应)和交互可视化3案例
|
25天前
|
数据可视化
R语言用Rshiny探索lme4广义线性混合模型(GLMM)和线性混合模型(LMM)
R语言用Rshiny探索lme4广义线性混合模型(GLMM)和线性混合模型(LMM)
|
24天前
|
数据可视化
R语言非参数模型厘定保险费率:局部回归、广义相加模型GAM、样条回归
R语言非参数模型厘定保险费率:局部回归、广义相加模型GAM、样条回归
|
25天前
R语言中使用线性模型、回归决策树自动组合特征因子水平
R语言中使用线性模型、回归决策树自动组合特征因子水平
|
9月前
|
算法
【模型预测控制MPC】使用离散、连续、线性或非线性模型对预测控制进行建模(Matlab代码实现)
【模型预测控制MPC】使用离散、连续、线性或非线性模型对预测控制进行建模(Matlab代码实现)
197 0