首页 > 其他分享 >向量动态量化

向量动态量化

时间:2024-11-14 11:31:19浏览次数:1  
标签:策略 collection quantize 量化 动态 数据 向量

本文介绍向量检索服务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 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,经过实际对比、测试、验证后再确定是否可将量化策略用于生产环境。

标签:策略,collection,quantize,量化,动态,数据,向量
From: https://www.cnblogs.com/DashVector/p/18545647

相关文章

  • .NET 创建动态方法方案及 Natasha V9
    前言本篇文章前面客观评估了.NET创建动态方方案多个方面的优劣,后半部分是NatashaV9的新版特性。.NET中创建动态方法的方案创建动态方法的不同选择以下陈列了几种创建动态方法的方案:以下示例输入为value,输出为Math.Floor(value/0.3):emit版本DynamicMethoddynami......
  • MATLAB实现NGO-SVM北方苍鹰算法优化支持向量机多输入单输出回归预测(多指标,多图)
    目录项目背景介绍...1项目目标与意义...1项目挑战...2项目特点与创新...2项目应用领域...3项目效果预测图程序设计...3项目模型架构...4项目模型描述...4项目模型算法流程图...5项目结构设计...5项目部署与应用...6项目扩展...6项目应该注意事项...6......
  • java中的静态绑定与动态绑定
    个人学习记录,欢迎大家指导什么是多态?一个引用变量,它可以引用任何子类的对象,这个引用变量是多态的。绑定将一个方法调用与对应方法主体关联起来被称为绑定。(也就是,执行一条方法调用语句时所对应执行的方法体,叫做该方法体和这条方法调用语句绑定了)动态绑定来看一段代码public......
  • 动态规划习题
    动态规划需要大量的练习,运用所学习的技巧与优化,本篇为练习。ICF53EDeadEnds\(n\)很小,考虑状压,\(now\)状态是一定要有的,每加一条边我们叶子节点会变化,这启示我们记录叶子结点的集合\(p\),设\(f_{now,p}\)表示\(now\)状态下,该树叶子结点状态为\(p\)的方案数,则对于一条......
  • 处理回文串的两种方法:动态规划 | 马拉车(Manacher)算法
    一.前言对于回文串的处理方法有很多,还有中心扩展、哈希等方法。这里只是介绍两种我觉得有用的方法。这里的两种方法不针对的某一种特定题目,他们是一种解题思路,这两个算法像一个工具一样,在有需要的时候使用。二.一维动态规划首先介绍一下这个算法的作用,我们预处理出一个一维d......
  • 一、机器学习算法与实践_07支持向量机与集成学习算法笔记
    1支持向量机1.1定义SVM(SupportVectorMachine,即:支持向量机)是一种监督学习算法,主要用于分类问题,但也可用于回归分析(称为支持向量回归,SupportVectorRegression,简称SVR)1.2核心思想最大间隔原则:SVM试图找到一个超平面(在二维空间中是一条直线,在三维空间中是一个平面,在更......
  • Action动态实现菜单是否有效
     procedureTMainForm.As1Click(Sender:TObject);//涂磊添加20241113JPEG格式导出beginSavePictureDialog.FileName:=ChangeFileExt(SaveDialog.FileName,'.jpg');ifSavePictureDialog.ExecutethenSimpleGraph.SaveAsJPEG(SavePictureDialog.Fi......
  • 《统计每个月兔子的总数》 递归、记忆化数组、动态规划题解
    目录题目描述输入描述输出描述解析完整代码描述有一对兔子,从出生后第3个月起每个月都生一对兔子,一对小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月(n<=50)的兔子总数为多少对?输入描述输入1个整数n,表示第几个月输出描述第n个月兔子的总数量有多少?......
  • .net动态类ExpandoObject及使用场景
    它位于System.Dynamic命名空间中。与普通的C#类型不同,ExpandoObject允许在运行时动态地添加、删除或修改其成员(属性或方法)。这使得它在一些需要高度灵活性和动态性的数据结构场景中非常有用。ExpandoObject的基本特性动态成员访问:可以在运行时添加或移除属性和方法。弱类型......
  • 面向对象分析中的顺序图:动态行为的可视化建模
    标题:面向对象分析中的顺序图:动态行为的可视化建模摘要在面向对象分析中,顺序图(SequenceDiagram)是用于描述系统中各对象之间交互过程的重要工具,展示了对象在特定情境下如何交互,以及交互的顺序。顺序图能够帮助开发者清晰理解系统的动态行为,揭示系统运行过程中不同对象的协......