<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>向量检索 on FXIO 技术博客</title><link>https://fxio.site/tags/%E5%90%91%E9%87%8F%E6%A3%80%E7%B4%A2/</link><description>Recent content in 向量检索 on FXIO 技术博客</description><generator>Hugo -- 0.157.0</generator><language>zh-cn</language><lastBuildDate>Tue, 09 Jun 2026 23:00:00 +0800</lastBuildDate><atom:link href="https://fxio.site/tags/%E5%90%91%E9%87%8F%E6%A3%80%E7%B4%A2/index.xml" rel="self" type="application/rss+xml"/><item><title>向量检索太吃内存？turbovec 可能是你在找的东西</title><link>https://fxio.site/posts/ai/turbovec/</link><pubDate>Tue, 09 Jun 2026 23:00:00 +0800</pubDate><guid>https://fxio.site/posts/ai/turbovec/</guid><description>&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;最近在搞 RAG 相关的东西，向量数据库这块一直用的 FAISS。用着没啥大毛病，但有个痛点：内存占用太大。&lt;/p&gt;
&lt;p&gt;1000万条 1536 维的向量，float32 存储直接干到 31GB。服务器内存吃不住，量化方案又得单独跑 train 阶段，数据量小了码本质量还拉胯。&lt;/p&gt;
&lt;p&gt;然后在 arXiv 上刷到一篇 Google Research 的论文——TurboQuant（ICLR 2026），顺着论文找到了它的 Rust 实现：&lt;strong&gt;turbovec&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;试了一下，真香。&lt;/p&gt;
&lt;h2 id="turbovec-是什么"&gt;turbovec 是什么&lt;/h2&gt;
&lt;p&gt;一句话：&lt;strong&gt;基于 TurboQuant 算法的向量索引库，Rust 写的，有 Python 绑定。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;核心卖点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1000万 1536 维向量，31GB → &lt;strong&gt;4GB&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;没有 train 阶段&lt;/strong&gt;，&lt;code&gt;add()&lt;/code&gt; 直接索引&lt;/li&gt;
&lt;li&gt;比 FAISS IndexPQFastScan 快 12-20%（ARM）/ 持平或略快（x86）&lt;/li&gt;
&lt;li&gt;纯本地，数据不出机器&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GitHub: &lt;a href="https://github.com/RyanCodrai/turbovec"&gt;RyanCodrai/turbovec&lt;/a&gt;（9K+ stars）&lt;/p&gt;
&lt;h2 id="技术原理简化版"&gt;技术原理（简化版）&lt;/h2&gt;
&lt;p&gt;TurboQuant 的核心思路挺巧妙的：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;归一化&lt;/strong&gt;：把向量长度去掉，变成超球面上的单位方向&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;随机正交旋转&lt;/strong&gt;：旋转之后，每个坐标独立服从已知的 Beta 分布。关键点——这个分布跟输入数据无关，是数学上能推导出来的&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lloyd-Max 量化&lt;/strong&gt;：既然分布已知，最优的桶边界可以直接算出来，不需要从数据里学&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bit-pack&lt;/strong&gt;：1536维向量从 6144 字节压到 384 字节，16 倍压缩&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;省掉了 train 阶段，意味着：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数据量小也能用&lt;/li&gt;
&lt;li&gt;在线添加新向量不需要重建索引&lt;/li&gt;
&lt;li&gt;没有超参数调优的烦恼&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="实际用法"&gt;实际用法&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install turbovec
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;基础用法真的很简单：&lt;/p&gt;</description></item></channel></rss>