Generated by Answer me with HTML 0.5.7 · 2026-10-23 09:43 · ★ Star on GitHub

和你现在的 ChromaDB 比运行内存

同一份 1911 条 1024 维向量,同一进程内实测

sourcefaiss-cpu 1.15.1 · chromadb 1.5.9 · 实测 /proc VmRSS
结论
  • 同一份库同一次查询:ChromaDB 129 MB,FAISS+HNSW 48 MB,FAISS+IVF-PQ 58 MB。
  • 省下的 81 MB 来自换掉 chroma 这层壳,不是来自压缩向量。
  • IVF-PQ 比 FAISS+HNSW 还多占 10 MB,且召回从 0.989 掉到 0.675。
A

实测内存阶梯

阶段 ChromaDB FAISS+HNSW FAISS+IVF-PQ
导入后含 numpy 72.0 MB 39.2 MB 39.2 MB
打开库或建索引 84.0 MB 55.3 MB 48.8 MB
装库加查询稳态 128.9 MB 48.2 MB 58.3 MB
相对 numpy 增量 +104.7 MB +23.6 MB +33.8 MB
索引本体 7.83 MB 9.10 MB 1.43 MB
020406080100120104.7ChromaDB 全栈33.8FAISS IVF-PQ全栈23.6FAISS HNSW全栈7.83ChromaDB 索引本体1.43FAISS IVF-PQ索引本体
数据
ChromaDB 全栈104.7
FAISS IVF-PQ 全栈33.8
FAISS HNSW 全栈23.6
ChromaDB 索引本体7.83
FAISS IVF-PQ 索引本体1.43
B

81 MB 差在哪

chromadb 库本体47.8 / max 14.7 MB
client 打开 sqlite 段12 / max 0 MB
取向量 Python 副本44.9 / max 0 MB
压缩省下的部分max 6.4 MB
  • chromadb 导入即占 47.8 MB,faiss 只占 14.7 MB。
  • chroma 打开 sqlite 与向量段再加 12.0 MB。
  • 调 get 取向量走 Python list 副本,峰值多 44.9 MB。
  • 压缩本身只值 6.4 MB,不是主因。
C

精度代价实测

recall@10,100 次随机查询,真值取 IndexFlatL2 精确解:

方案 召回 备注
HNSW M16 ef32 0.989 现在这套
IVFFlat nlist64 nprobe8 0.916 不压缩,仅聚类
IVF-PQ m128 全探簇 0.799 压缩 32 倍
IVF-PQ m64 nprobe8 0.675 压缩 64 倍
你的库量撑不起 IVF-PQ

faiss 训练时报:1911 点聚 256 簇,至少需 9984 点。码本严重欠采样,召回因此掉三分之一。

D

该怎么做

换壳省下的 RSS
81 MB
占现进程 331 MB
24 %
算法变更
保持 HNSW
精度损失
0
faiss 磁盘占用
139 MB
  • 要省运行内存:chroma 换 faiss,算法保持 HNSW,精度不变。
  • 不要换 IVF-PQ:你的 1911 条喂不饱码本训练。
  • 代价是元数据、过滤、全文检索要自己补,chroma 自带这些。
  • 还要改 hy_memory 的存储层,不是换库就能跑。