Exa AI 揭秘:如何构建亿级向量规模数据库实现毫秒级搜索
在 AI 搜索领域,如何平衡召回率(Recall)与延迟(Latency)一直是核心难题。Exa AI 近日在其官方博客中深度剖析了其自研的 Web 规模向量数据库架构,展示了如何通过极致的工程优化,在仅用游戏机级内存的情况下,实现100ms 内检索数十亿向量的惊人性能。
核心挑战:超越传统搜索的语义需求
Exa 的目标是重新设计 Web 搜索,以处理 Google 难以应对的复杂语义查询。例如,当用户输入"AI 初创公司,位于湾区,正在构建硬件"时,系统不仅需要理解关键词,还需精准匹配文档的深层语义。
传统方案通常将文档转换为 4096 维的浮点数嵌入(Embedding),但这带来了巨大的存储与计算开销:
- 存储瓶颈:数十亿文档的 4096 维向量将占用海量内存。
- 延迟瓶颈:全量向量检索难以在毫秒级完成。
- 成本瓶颈:高算力需求导致推理成本高昂。
五大核心优化策略
为了解决上述问题,Exa 团队实施了五项激进但高效的优化措施:
1. Matryoshka 嵌套量化:截断向量
Exa 发现,通过训练特定的嵌入模型,可以保留嵌入向量的前缀作为其近似值。这种技术被称为Matryoshka(马特洛什娃娃)。
- 原理:嵌入向量的前 256 维足以代表整个 4096 维向量的大部分语义信息。
- 效果:将向量维度从 4096 压缩至 256,内存使用量降低了 20 倍。
2. 二进制量化:极致压缩
即使 256 维的浮点数向量依然过大,Exa 进一步采用了二进制量化(Binary Quantization)技术。
- 原理:将每个浮点数转换为 1 位值(-1 或 1)。若数值大于 0 则为 1,否则为 -1。
- 效果:每个维度从 16 位(2 字节)压缩至 1 位(0.125 字节),内存使用量再降低 16 倍。
3. 混合点积优化:精度与速度的平衡
直接使用汉明距离(Hamming Distance)计算二进制向量的相似度存在精度损失。Exa 提出了一种新颖的混合方法:
- 策略:文档向量保持二进制量化,但查询向量(Query)使用未压缩的浮点数。
- 计算:使用点积(Dot Product)作为相似度度量。由于文档向量是二进制的,Exa 将向量分为长度为 4 的子向量,预计算了所有可能的点积组合(共 16 种),并存储在查找表(Lookup Table)中。
- 效果:通过查表替代循环计算,将计算量减少了 75%(即 1/4)。
4. 硬件级加速:寄存器加载
为了进一步降低延迟,Exa 将预计算的查找表直接加载到 CPU 的寄存器(Registers)中,而非普通内存(RAM)。这使得查找操作的速度达到了硬件极限。
5. 聚类剪枝:缩小搜索范围
即使经过上述优化,全量搜索依然效率低下。Exa 引入了聚类(Clustering)机制:
- 策略:将数十亿文档划分为约 10 万个相似性集群。
- 执行:搜索时,首先定位查询向量所属的集群,仅在该集群及其邻近集群中进行检索。
- 效果:吞吐量提升了约 1000 倍,且对最终召回率的影响极小。
技术价值与应用前景
Exa 的这一架构突破,为 AI 搜索、RAG(检索增强生成)及 Agent 系统提供了新的可能性:
- 低成本部署:极致的内存效率使得在普通消费级硬件上运行大规模向量数据库成为可能。
- 高延迟容忍度:100ms 的响应时间满足了实时交互应用的需求。
- 复杂语义理解:通过保留关键维度信息,确保了在压缩后仍能准确理解复杂的自然语言查询。
正如 Exa 团队所言,他们不仅是在构建一个数据库,而是在重新定义 Web 搜索的底层逻辑,让机器能够像人类一样理解并精准匹配复杂的语义需求。