尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

31 · 量化与存储优化

31 · 量化与存储优化 31 · 量化与存储优化一句话用半精度halfvec或二值量化bit压缩向量能省一半到几十倍的内存/磁盘召回只掉一点点。1. 为什么向量这么占空间一个vector(1536)用 float4 字节存1536 维 × 4 字节 6144 字节 ≈ 6 KB / 条100 万条 ≈ 6 GB还不含索引。HNSW 索引又要额外一大块内存。数据量一大内存/磁盘成本就很可观。量化就是来降本的。2. 三种存储类型对比类型每维占用相对大小召回影响适用vector(float32)4 字节100%基准默认、精度优先halfvec(float16)2 字节50%几乎无损⭐ 性价比首选bit(二值)1 bit~3%有损需重排补偿超大规模、极致省3. halfvec半精度最推荐halfvec用 16 位浮点存空间减半精度几乎不损是最划算的优化。-- 直接用 halfvec 建列CREATETABLEitems(id bigserialPRIMARYKEY,embedding halfvec(1536));-- 插入方式和 vector 一样INSERTINTOitems(embedding)VALUES([0.1, 0.2, ...]);-- 建 halfvec 索引CREATEINDEXONitemsUSINGhnsw(embedding halfvec_cosine_ops);-- 查询同样用 SELECTidFROMitemsORDERBYembedding[...]::halfvecLIMIT10;注意操作符类是halfvec_cosine_ops不是vector_cosine_ops。4. 已有 vector 表转 halfvec 索引省索引内存即使列还是vector也能建 halfvec 索引只让索引用半精度-- 列保持 vector(1536)但索引用 halfvec省索引内存CREATEINDEXONitemsUSINGhnsw((embedding::halfvec(1536))halfvec_cosine_ops);-- 查询要对应转型SELECTidFROMitemsORDERBYembedding::halfvec(1536)[...]::halfvec(1536)LIMIT10;5. 二值量化 bit极致省空间把每一维压成 0/1一个 bit空间降到约 1/32。召回会下降需配合重排补偿。-- 用表达式索引把 vector 二值化后建 bit 索引CREATEINDEXONitemsUSINGhnsw((binary_quantize(embedding)::bit(1536))bit_hamming_ops);典型用法二值粗排 原始向量精排两阶段-- 1) 用二值快速粗排取 Top-100汉明距离很快-- 2) 再用原始 vector 对这 100 条精确重排取 Top-10SELECTidFROM(SELECTid,embeddingFROMitemsORDERBYbinary_quantize(embedding)::bit(1536)~binary_quantize([...]::vector)::bit(1536)LIMIT100)tORDERBYembedding[...]::vector-- 原始向量精排LIMIT10;~是汉明距离运算符。二值量化适合上亿级、内存极度敏感的场景。6. 降维 量化叠加Matryoshka配合第 24 章的 Matryoshka 模型还能先降维再量化进一步省-- 取前 512 维 半精度CREATEINDEXONitemsUSINGhnsw((subvector(embedding,1,512)::halfvec(512))halfvec_cosine_ops);7. 各方案节省效果1536 维、100 万条示意方案单条向量100 万条召回vector float326 KB~6 GB基准halfvec3 KB~3 GB≈ 无损512 维 halfvec1 KB~1 GB略降bit 二值192 B~0.2 GB需重排补偿8. 选型建议默认 / 精度优先 → vector 想省一半、几乎无损推荐→ halfvec 上亿级、内存极紧张 → bit 二值 原始向量重排 模型支持 Matryoshka → 降维 halfvec 叠加9. 一句话总结halfvec半精度是性价比之王省一半、几乎无损bit二值量化省到极致但要配重排补偿结合降维可进一步降本。➡️ 下一章32-大规模数据导入与索引构建.md海量数据怎么快速灌库和建索引。
返回列表