<antirez>
5 hours ago
- 作者暂停了HNSW的开发工作,撰写了一篇博文分享高级发现,特别是如何使HNSW在类似Redis的低延迟、高性能系统中足够快速。
- 原始HNSW论文缺少关键细节,如删除支持和多层的必要性;作者修改了HNSW以支持实际删除条目,并质疑'H'(分层)方面是否总是有益的。
- 通过使用每个向量8位量化(计算最大绝对值)来解决内存扩展问题,这带来了约4倍的加速、4倍的向量大小缩减,且几乎没有召回率损失;同时提供全精度和二进制量化选项。
- 为了提高速度,使用线程进行读取和部分写入;每个节点的纪元数组防止并发搜索中重复访问已访问节点,并且写操作分为读取半部分和提交半部分以最小化锁竞争。
- 为了回收删除操作的内存,强制链接为双向,并在已删除节点的邻居之间计算距离矩阵以贪婪地重新连接它们,从而保持图的质量。
- HNSW作为Redis数据结构(向量集)暴露,支持VADD、VREM、VSIM命令,允许跨键/实例的组合以及按用户/按项目的索引;这还简化了通过哈希元素取模N的扩展。
- 通过序列化整个图结构(节点和邻居指针)来加速加载时间,使重建仅需分配内存,实现了100倍的加速;安全检查确保即使损坏的RDB文件也能保证有效性。
- JSON筛选机制允许在贪婪搜索循环中进行混合搜索(例如,向量相似性加元数据约束),让用户指定努力程度并通过JSON属性进行筛选。
- 内存中的HNSW对许多用例是可接受的(例如,300万Word2Vec条目占用3GB RAM);作者认为HNSW将保持相关性,并鼓励进一步研究。