0

二进制量化——Andrey Vasnetsov | Vector Space Talks

Demetrios Brinkmann

·

2024年1月9日

Binary Quantization - Andrey Vasnetsov | Vector Space Talks

“当我们真正尝试对 OpenAI 模型进行二进制量化时,一切都改变了。”
– Andrey Vasnetsov

你是否曾想过为什么向量索引需要量化?Andrey Vasnetsov 解释了通过邻近图进行搜索的复杂性和挑战。二进制量化通过将存储大小减少 30 倍来提高速度,但并非所有模型都兼容。

Andrey 职业生涯大部分时间都担任机器学习工程师。他更喜欢实践而非理论,更喜欢工作演示而非 arXiv 论文。他目前在 Qdrant 担任 CTO,Qdrant 是一种向量相似性搜索引擎,可用于语义搜索、文本、图像甚至视频的相似性匹配以及推荐。

在 Spotify、Apple Podcast、Podcast addicts、Castbox 上收听本期节目。你也可以在 YouTube 上观看本期节目。

主要收获

在我们 Qdrant 的 Vector Space Talks 的第一集中,与 Qdrant 的 CTO Andrey Vasnetsov 一起,探索过采样如何实时优化精度,在不改变存储数据结构的情况下提高准确性。

在本期节目中,Andrey 分享了关于二进制量化及其对向量空间技术的深远影响的宝贵见解。

从本集学习的 5 个关键点

  1. 量化的必要性及其有助于克服的复杂挑战。
  2. 二进制量化对处理速度和存储大小减少的变革性影响。
  3. 详细探讨过采样及其在查询搜索中的实时精度控制。
  4. 了解二进制量化的简单性和有效性,特别是与更复杂的量化方法相比。
  5. 正在进行的研究以及二进制量化对未来模型的潜在影响。

有趣的事实:二进制量化可以提供比传统量化方法快 30 倍以上的处理速度,这是向量空间技术的一项革命性进步。

笔记

00:00 HNSW 向量索引概述。
03:57 大向量尺寸需要高效存储。
07:49 过采样在实时搜索中控制精度。
12:21 使用点积比较向量。
15:20 试验模型,OpenAI 具有兼容性。
18:29 Qdrant 架构不支持删除原始向量。

更多 Andrey 的语录

“在 Qdrant 内部,我们使用 HNSW 向量索引,它本质上是一个邻近图。你可以把它想象成许多顶点,每个顶点代表一个向量,这些顶点之间的链接代表最近邻。”
– Andrey Vasnetsov

“主要思想是将向量的浮点元素转换为二进制表示。因此,它要么是零,要么是一,这取决于原始元素是正还是负。”
– Andrey Vasnetsov

“我们尝试了最流行的开源模型,不幸的是,它们与二进制量化的兼容性不如 OpenAI。”
– Andrey Vasnetsov

文字记录

Demetrios:好的,欢迎大家。这是第一届 Vector Space Talks,还有谁比 Qdrant 的 CTO 本人更好地开启它呢?Andrey V. 很高兴介绍你,并听你讲述所有关于二进制量化的内容。我有一些问题要问你,我知道聊天中也出现了一些问题。有趣的是,我们昨天在 Discord 上进行了现场录制。但 Discord 的问题在于你不能相信那里的录音。所以我们只得到了音频,我们想为那些在 YouTube 上观看的人提供更视觉化的内容。因此我们在这里再次录制。

Demetrios:所以我会为你引导一些问题,Andrey。我有一件事要问所有听众,那就是如果你想发表演讲,并且想展示你如何使用 Qdrant,如何构建 RAG,如何克服 AI 领域或生态系统或堆栈中遇到的不同功能或挑战,请联系我,我会让你在这里展示你的工作,并为 Vector Space Talk 发表演讲。所以,话不多说,让我们开始吧,Andrey,我们正在讨论二进制量化,但也许我们先退一步。我们为什么需要量化?为什么不直接使用原始向量呢?

Andrey Vasnetsov:是的。大家好。Demetrios 你好。这是一个很好的问题,我想为了回答它,我需要首先简要概述一下什么是向量索引,它是如何工作的以及它存在的挑战。所以,在 Qdrant 内部,我们使用所谓的 HNSW 向量索引,它本质上是一个邻近图。你可以把它想象成许多顶点,每个顶点代表一个向量,这些顶点之间的链接代表最近邻。所以为了搜索这个图,你实际上需要做的是进行贪婪的深度优先搜索,你可以通过贪婪搜索过程的束大小来调整搜索的精度。但是这种索引结构实际上有它自己的挑战,首先是它的索引构建复杂性。

Andrey Vasnetsov:将一个向量插入索引的复杂性与在图中搜索一个向量的复杂性相同。而且图结构总体上也有其自身的局限性。它需要大量的随机读取,你可以朝着任何方向前进。很难预测图将采取哪条路径。搜索过程将提前进行。因此,与传统数据库中的传统索引(如二叉树、倒排索引)不同,我们可以几乎序列化所有内容。在 HNSW 中,总是随机读取,而且实际上总是顺序读取,因为你需要以顺序方式从一个顶点到另一个顶点。这实际上对向量的底层存储提出了非常严格的要求。

Andrey Vasnetsov:它必须具有非常低的延迟,并且必须支持这种随机分散。所以基本上,如果我们把所有的向量都存储在非常快的固态硬盘上,或者如果我们使用实际的 RAM 来存储所有东西,我们才能有效地做到这一点。而现在 RAM 并不便宜,尤其是考虑到向量的大小随着模型的每个新版本而增加。例如,OpenAI 模型已经超过 1000 维度。所以你可以想象一个向量已经是 6 数据,无论你的文本有多长,而且随着新模型的进步等等,它只会变得越来越昂贵。所以为了真正对抗这一点,为了弥补数据需求的增长,我们建议做的事情,以及我们已经通过其他量化技术做的事情,是我们将向量压缩到量化向量存储中,这通常对于内存中的表示来说更紧凑。例如,在之前的版本中,我们有标量量化和乘积量化,它们可以将向量的大小压缩多达 64 倍。我们只在快速存储中保留这些压缩向量。

Andrey Vasnetsov:我们检索它们并获得一个候选列表,稍后将使用原始向量重新评分。这里的好处是,这种重新排序或重新评分过程不需要任何类型的对数据的顺序或随机访问,因为我们已经知道所有需要重新评分的 ID,我们可以高效地使用异步 I/O 从磁盘读取它,例如,甚至可以利用非常便宜的网络挂载磁盘的优势。这就是量化的主要好处。

Demetrios:我接着这个问题有几个问题,其中一个是很快的事情,我想知道我们是否可以通过使用这种二进制量化获得双重好处,而且如果我们使用的是非 GPT 的小型模型,这是否会有帮助?

Andrey Vasnetsov:是的。所以并非所有模型都像 OpenAI 那么大,但我们看到,该领域的发展趋势,不同模型的发展趋势,表明它们会随着时间的推移变得越来越大。只是因为我们想在向量中存储更多信息,我们想要更大的上下文,我们想要更详细的信息,更详细的分离等等。这种趋势是显而易见的,如果五年前向量的通常大小是 100 维,那么现在通常大小是 700 维,所以它基本上是。

Demetrios:为未来做准备,同时优化当下。

Andrey Vasnetsov:对吗?

Demetrios:是的。好的,你在这里提到了过采样。你能再详细说明一下,给我解释一下那是什么吗?

Andrey Vasnetsov:是的,过采样是我们用来实时控制搜索精度的一种特殊技术,在查询时。问题是,我们可以在内部从量化存储中检索比我们实际需要的更多向量。当我们用原始向量重新评分时,我们分配了更精确的分数。因此,从这种过选择中,我们只能挑选那些真正适合用户的向量。这就是我们如何在不重建索引、不改变存储数据结构中任何参数的情况下,基本上控制准确性。但我们可以通过改变搜索查询本身的一个参数来实时完成。

Demetrios:我明白了,好的,所以这基本上就是量化。现在让我们深入了解二进制量化以及它是如何工作的。

Andrey Vasnetsov:是的,所以二进制量化实际上非常简单。主要思想是我们将向量的浮点元素转换为二进制表示。所以它要么是零,要么是一,取决于原始元素是正还是负。通过这样做,我们可以通过汉明距离来近似点积或余弦相似度,无论你使用什么度量来比较向量,而汉明距离被证明计算起来非常简单。它只使用了两个最优化的 CPU 指令,Pixor 和 Popcount。你只需要这些工具,而不是复杂的浮点子处理器。它适用于你拥有的任何寄存器,而且速度非常快。

Andrey Vasnetsov:它使用极少的 CPU 周期来实际产生结果。这就是为什么二进制量化比常规产品快 30 倍以上。它实际上解决了复杂索引构建的问题,因为点积的计算是 HNSW 计算要求的主要来源。

Demetrios:所以如果我理解正确的话,它基本上是取左边的所有数字,这些数字可以是十进制数字。

Andrey Vasnetsov:在左边你可以看到原始向量,它将其转换为二进制表示。当然,在这个过程中它会损失很多精度。但是因为首先我们有非常大的向量,其次我们有过采样功能,我们可以弥补这种精度损失,并且仍然在速度和存储大小方面受益。

Demetrios:所以如果我理解正确的话,它基本上是在说,二进制量化本身可能不是你想做的最好的事情。但是由于你有其他功能可以帮助抵消精度损失。你可以从二进制量化中获得速度,并从这些其他功能中获得精度。

Andrey Vasnetsov:对。速度提升如此巨大,以至于过采样多少都无所谓,我们仍然会从中受益。

Demetrios:是的。它快多少?你说了什么,快了 30 倍以上?

Andrey Vasnetsov:超过 30 倍,有些基准测试大约快 40 倍。

Demetrios:哇。是的,那太大了。然后在这里底部你有点积与汉明距离。然后是。是的,汉明。抱歉,我在你的幻灯片上发明了词。你能解释一下那里发生了什么吗?

Andrey Vasnetsov:对,点积是我们通常用来比较一对向量的度量。它基本上和余弦相似度一样,只是上面多了一个归一化。所以从内部来看,余弦和点积实际上都只进行点积,这是我们常用的度量。为了执行这个操作,我们首先需要将每对元素与另一个向量的相同元素相乘,然后将所有这些乘法加到一个数字中。这将是我们的分数,而不是在二进制量化中,在二进制向量中,我们进行异或操作,然后计算一的个数。所以基本上,汉明距离是这个二进制空间中点积的近似值。

Demetrios:太棒了。好的,那么它看起来足够简单,对吧?为什么你在实现了更复杂的乘积量化之后才现在实现它?

Andrey Vasnetsov:这确实是一个很好的问题。答案是二进制量化看起来太简单了,难以置信,好得令人难以置信。我们当时就是这么想的,我们尝试了不同的开源模型,但效果不佳。但当我们真正尝试对 OpenAI 模型进行二进制量化时,一切都改变了。事实证明,OpenAI 模型与这种类型的量化具有非常好的兼容性。不幸的是,并非每个模型都与 OpenAI 具有相同的良好兼容性。老实说,我们还不完全清楚是什么让模型兼容,什么不兼容。我们确实知道它与维度数量相关,但这并不是唯一的因素。

Andrey Vasnetsov:所以存在一些秘密配方,我们应该找到它,它应该使模型与二进制量化兼容。我认为这实际上是这个领域的未来,因为汉明距离的优势,二进制量化的优势是如此之大,以至于在模型的学习过程中融入这些技巧,使它们更具兼容性是有意义的。

Demetrios:你提到 OpenAI 的模型显然与二进制量化配合得很好,但也有一些模型与它配合得不好,哪些模型表现不佳?

Andrey Vasnetsov:所以现在我们正在试验不同的模型。我们尝试了最流行的开源模型,不幸的是,它们与二进制量化的兼容性不如 OpenAI。我们还尝试了不同的闭源模型,例如 Cohere AI,它与 OpenAI 在二进制量化方面具有相同的兼容性水平,但它们实际上具有更大的维度。所以它们有 4000 维度而不是 1500。目前还不清楚是否只有维度才能使这个模型兼容。或者训练过程中还有其他东西,但是有一些开源模型接近 OpenAI 的 1000 维度,但在这种压缩兼容性方面,它们远不如 Openi。

Demetrios:那么,希望社区能帮助我们弄清楚,为什么它在这些闭源模型上表现得如此出色,而在开源模型上却不行?也许我们遗漏了什么。

Andrey Vasnetsov:并非所有闭源模型都兼容,有些模型与开源模型相似,但少数模型表现良好。

Demetrios:有意思。好的,那么有没有计划实现其他量化方法,比如四比特量化,甚至将两个浮点数压缩成一个比特?

Andrey Vasnetsov:好的,所以我们选择量化方法主要取决于我们可以应用哪些 CPU 指令来执行这些计算。在二进制量化的情况下,它是直接且非常简单的。这就是为什么我们如此喜欢二进制量化。例如,在四比特量化的情况下,我们应该使用哪种操作尚不清楚。将它转换为四比特然后应用四比特乘法是否高效尚不清楚。这需要额外的研究,我不能说我们有立即的计划这样做,因为二进制量化领域尚未 100% 探索,我们认为它比目前已解锁的潜力更大。

Demetrios:是的,二进制量化领域还有一些唾手可得的成果,所以先解决这些,然后再转向四比特和所有有趣的东西。我给你的最后一个问题是,我们可以删除原始向量只保留量化向量以节省磁盘空间吗?

Andrey Vasnetsov:好的?不幸的是,Qdrant 架构并非为此类行为设计和预期,原因有几个。首先,删除原始向量会损害一些功能,如过采样、段构建。实际上,删除这些原始向量只与某些类型的量化兼容,例如,它不与标量量化兼容,因为在这种情况下,我们将无法重建索引来维护系统。为了保持 API 的一致性、引擎的一致性,我们决定始终强制存储原始向量。但好消息是,您始终可以将原始向量仅保留在磁盘存储上。它非常便宜。通常比 RAM 便宜十倍甚至更多,这已经为您带来了巨大的价格优势。这个答案太棒了。

Demetrios:好的,伙计,我想就是这样了,感觉这是结束的完美时机。正如我之前提到的,如果有人想来我们的向量空间讲座发表演讲,我们希望每两周举办一次,如果能找到足够多的人,也许每周一次。所以这是一个公开的邀请,如果你来发表演讲,我保证会寄给你一些周边商品。这是我对你的承诺。如果你事后收听并有任何问题,请到 Qdrant 的 Discord 服务器上,向我或 Andrey 提出你在听这次关于二进制量化的演讲时可能遇到的任何问题。我们稍后会再见。

Demetrios:再见,祝你有美好的一天。保重。

免费开始使用 Qdrant

开始使用