向量动态量化

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

背景介绍

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

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

开启动态量化

前提条件

  • 已创建Cluster
  • 已获得API-KEY
  • 已安装最新版SDK

代码示例

说明

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

client = dashvector.Client(
    api_key='YOUR_API_KEY',
    endpoint='YOUR_CLUSTER_ENDPOINT'
)
assert client

# 创建带有量化策略的collection
ret = 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,经过实际对比、测试、验证后再确定是否可将量化策略用于生产环境。

DashVector 文章被收录于专栏

DashVector向量检索服务

全部评论
实践是检验真理的唯一标准,所以的实践才知道可不可用
点赞 回复 分享
发布于 01-18 19:04 云南

相关推荐

12.9 TCL java开发实习生以下是面试中面试官提出的问题总结:1. 项目细节比亚迪实习项目:“你这里的项目能不能挑一个你主要负责的讲一下?”(用户回答身份认证、测试环境连接器二次开发、时间转换器)“具体问题是什么?比如时间转换的业务逻辑?”北京掌上新机网络项目:“这个项目里处理过并发相关的,具体问题是什么?”(用户回答数据量太大导致传输失败,采用分片传输和校验)“线程池的核心参数(最大线程数、队列容量)有哪些?在项目中如何设置?”2. 技术深度提问Redis缓存:“Redis是什么?它的特点是什么?如何减少SQL压力?”Java集合:“你用双端队列处理卖家信任度排序的业务场景,具体是怎样的?”“还有哪些数据结构?各自的特点是什么?”(用户回答哈希结构等)分库分表:“比亚迪的分库分表场景是什么?为什么要分库分表?”“分库分表的类型(水平/垂直)有什么区别?”“分库分表后会有什么问题?查询效率如何体现?”JVM垃圾回收:“JVM有哪些垃圾回收算法?(标记、复制、标记整理、分代收集)”“实际项目中如何选择垃圾回收器?”3. 校园经历与能力组织活动:“你在学校组织过哪些活动?”(用户回答团日活动、党员工作站工作、足球比赛)“如何保障任务进度?举个例子说明。”(用户以红色文化活动为例,讲分工、安全、材料整理等)4. 候选人反问“你们部门的业务方向是什么?”(面试官回答研发效能、数据处理等)“团队的人员架构和工作内容是怎样的?”“后续的面试流程大概是怎样的?”总结面试官的问题主要围绕项目细节、技术深度(Redis、集合、分库分表、JVM垃圾回收)、校园经历与组织能力展开,并在最后询问了部门方向、人员架构和后续流程,体现了对候选人技术能力和岗位匹配度的关注。
查看14道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务