内容提要
谷歌发布 EmbeddingGemma 2 嵌入模型,可将文本、代码、图像等映射到 768 维空间。Qdrant 测试其内存优化:全尺寸 1 比特量化向量仅需 30 倍更少内存,保留 99% 检索质量;256 维加重新评分可省 77 倍内存,保留 94.5%。建议优先压缩比特而非维度,从全尺寸 1 比特量化起步。
延伸解读
内存节省的两种路径:压缩比特 vs 缩短维度
文章对比了两种节省向量内存的方法:减少每个维度的比特数(量化)和缩短向量维度(Matryoshka)。测试显示,在相近内存预算下,全尺寸768维1比特量化保留99%检索质量,而512维1比特保留97.3%,128维4比特仅保留84.0%。因此作者建议优先压缩比特而非维度,因为高维低比特能更好地保持检索质量。
重评分对检索质量与延迟的权衡
重评分能显著提升量化后的检索质量,但会增加查询时间。例如,256维1比特量化无重评分时保留88.1%的nDCG@10,有重评分时提升至94.5%。然而,重评分需要读取原始向量,可能拖慢搜索。文章建议,如果应用依赖恢复完全相同的邻居,才启用重评分;否则可关闭以节省时间。
实际部署的起步配置与注意事项
作者推荐从全尺寸768维、1比特TurboQuant、关闭重评分开始。该配置下,1000万文档的向量仅需约1GB内存,查询时间不到float32搜索的一半,且保留99%的检索质量。但需注意,无重评分时约74%的top 10结果与精确搜索一致,若应用对结果一致性要求高,则需考虑重评分。
Q&A
EmbeddingGemma 2 是什么?它有哪些主要特点?
EmbeddingGemma 2 是谷歌基于 Gemma 4 构建的开源嵌入模型,可将文本、代码、图像、视频和音频映射到统一的 768 维空间。其纯文本路径有 2.7 亿参数,支持 8K 令牌上下文窗口,在代码检索上比第一代 EmbeddingGemma 提升 14%。
EmbeddingGemma 2 的向量内存占用有多大?如何节省内存?
全尺寸 float32 向量在 1000 万文档下占用 30.7 GB 内存。节省内存有两种方式:一是减少每个维度的比特数(量化),二是缩短向量维度。测试表明,优先压缩比特比缩短维度更有效。
使用 1 比特量化全尺寸向量能节省多少内存?检索质量如何?
使用 1 比特 TurboQuant 量化全尺寸 768 维向量,每个向量仅占 104 字节(原为 3072 字节),1000 万文档的向量内存降至约 1 GB,节省 30 倍内存,同时保留 99% 的检索质量(nDCG@10)。
缩短向量维度与量化相比,哪种方式更节省内存且保持质量?
测试表明,优先压缩比特(量化)比缩短维度更有效。例如,512 维 1 比特向量保留 97.3% 质量,而相近内存预算下 128 维 4 比特仅保留 84.0%。因此建议先尝试保持更多维度并更激进地压缩每个维度。
使用 256 维向量并重新评分能节省多少内存?质量保留如何?
使用 256 维 1 比特 TurboQuant 向量,每个向量占 40 字节,节省 77 倍向量内存。配合重新评分(4 倍过采样),可保留 94.5% 的检索质量;若不重新评分,仅保留 88.1%。
对于 EmbeddingGemma 2,推荐的初始配置是什么?
推荐从全尺寸 768 维向量、1 比特 TurboQuant 量化、关闭重新评分开始。该配置每个向量占 104 字节,1000 万文档约 1 GB 内存,保留 99% 检索质量,且查询时间比 float32 搜索减少一半以上。