公司动态

turbovec在ARM边缘设备的应用:如何用NEON内核实现低功耗快速向量搜索

📅 2026/9/1 10:45:16
turbovec在ARM边缘设备的应用:如何用NEON内核实现低功耗快速向量搜索
turbovec在ARM边缘设备的应用如何用NEON内核实现低功耗快速向量搜索【免费下载链接】turbovecA vector index built on TurboQuant, written in Rust with Python bindings项目地址: https://gitcode.com/GitHub_Trending/tu/turbovecturbovec是一个用 Rust 编写、带 Python 绑定的开源向量索引库基于 Google 的 TurboQuant 量化算法构建。它在 ARM 平台上通过手写的NEON SIMD 内核SDOT/SMMLA 整数点积指令执行向量搜索实测比 FAISS 快 3.5 倍——同时把内存占用压缩到原来的 1/8 到 1/16非常适合在树莓派、网关、手机等边缘设备上运行本地 RAG 和语义检索无需数据离开设备。为什么边缘设备特别适合 turbovec ARM 边缘设备树莓派、边缘网关、IoT 盒子做向量搜索传统方案有两个死穴内存太贵一个 1000 万文档的语料float32 原始向量要占 31 GBturbovec 用 2-bit 量化只需 4 GB——单条 1536 维向量从 6,144 字节压到 384 字节压缩比达 15.8 倍见 benchmarks/results/compression.json功耗受限向量搜索是带宽密集型任务量化后内存访问量成倍下降NEON 整数点积又几乎不占浮点单元单核跑满吞吐的同时保持低功耗更关键的是 turbovec完全本地运行——没有托管服务、数据不出设备配合任意开源 embedding 模型就是完整的断网air-gappedRAG 栈。NEON 内核如何做到又快又省电 ⚡turbovec 的搜索内核不是编译时自动向量化而是针对 ARM 手写汇编级指令序列核心技巧有三层SDOT 点积指令NEON 的sdot一条指令就能完成 16 个 int8 与 int4 的乘积累加是 ARM 上做量化向量点积的黄金指令单条指令的算力密度远超逐字节查表。SMMLA 矩阵微内核smmla指令按 4×4 微矩阵批量累加多查询场景下一次对 4 条查询同时打分把访存摊薄到最低。查表 块级剪枝4-bit 编码先拆高低 nibble用 NEON 的vqtbl1q查表指令直接取分搜索时按 32 向量一块处理整块不可能进 Top-K 的会提前跳过连查表都省了。这些内核都在 turbovec/src/search.rs 中实现如score_4bit_block_neon、sdot、smmla等函数并用#[target_feature]门控、运行时检测 CPU 特性自动选择最优路径。想亲手观察内核的吞吐上限可以跑 turbovec/examples/kernel_roofline_neon.rs 这个 NEON roofline 探针示例。 省电的秘密不在算得快而在读得少2-bit 编码让内核每次流式读 32 字节就覆盖 8 个向量L1 缓存命中率极高CPU 大部分时间在算、不在等内存。ARM 实测数据比 FAISS 快多少 以下数据来自 GCP c4a-standard-8Google Axion ARM8 vCPU10 万条向量、1000 条查询、k645 轮取中位数完整 JSON 在 benchmarks/results/ 目录场景单线程毫秒/查询turbovecFAISS加速比d1536 / 4-bit1.0954.0233.7×d3072 / 4-bit2.3647.9473.4×d1536 / 2-bit1.5662.0261.3×d3072 / 2-bit3.1783.9461.24×d1536 / 4-bit8 线程0.1430.4993.5×4-bit 场景平均领先 3.4–3.7 倍——SDOT/SMMLA 点积内核直接作用在 vector-major 存储布局上几乎吃满指令发射带宽多线程下 10 万条索引 4-bit 查询单查不到 0.15 ms交互应用可以完全无感。召回率方面benchmarks/results/recall_d1536_4bit.json 等校准版 TurboQuantTQ在 R1 上多数场景反超 FAISS PQ且 k8 时召回即达 1.0——省内存不等于降精度。三步在边缘设备上跑起来 ️pip install turbovecimport numpy as np from turbovec import TurboQuantIndex index TurboQuantIndex(dim1536, bit_width4) # 2-bit 更省内存 index.add(vectors) # 在线写入无需训练 scores, indices index.search(query, k10) # NEON 内核直接打分 index.sync(my_index.tv) # 增量持久化一次 fsync就这么简单没有训练步骤、没有参数调优向量加进来即索引语料增长也无需重建。需要可删除的稳定 ID时换用IdMapIndex删除是 O(1) 的 swap-and-pop。 想复现全部数字每个基准都是独立脚本例如python3 benchmarks/suite/speed_d1536_4bit_arm_st.py脚本集在 benchmarks/suite/API 完整参考见 docs/api.md框架集成LangChain / LlamaIndex / Haystack / Agno文档在 docs/integrations/。结语在 ARM 边缘设备上做向量搜索内存带宽和功耗才是真正的瓶颈——turbovec 的 NEON 内核用 2/4-bit 量化把带宽压力压下去用 SDOT/SMMLA 把算力拉满还顺手做到了比 FAISS 更高的召回。如果你的 RAG 系统正跑在树莓派、边缘网关或任何 ARM 盒子上它值得放进你的技术清单。【免费下载链接】turbovecA vector index built on TurboQuant, written in Rust with Python bindings项目地址: https://gitcode.com/GitHub_Trending/tu/turbovec创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考