hnswlib介绍
最新消息
- [2026.03.30]:hnswlib重构版本发布于Gitcode平台,支持fp16数据类型,支持NEON向量化、预取和底库ID重排优化,重构后的hnswlib精简了代码结构,提升了易用性。
- [2025.12.30]:hnswlib发布于Gitcode平台,支持fp16数据类型,支持NEON和SVE向量化、预取和底库id重排优化。
项目介绍
基于开源hnswlib(Hierarchical Navigable Small World),引入FP16数据类型支持,并针对鲲鹏ARM平台进行深度优化。通过数据类型优化和平台特定调优,实现在保持检索精度的前提下,显著提升计算效率并降低内存占用。改造后的hnswlib将充分利用鲲鹏ARM架构的硬件特性,包括通过编译器优化、内存访问优化、以及ARM向量化改造等手段,实现跨平台性能优化。
hnswlib是一个高效的近似最近邻 (Approximate Nearest Neighbor,ANN)搜索库,特别适用于大规模数据集。它通过构建层次化的图结构,实现了快速的搜索性能。hnswlib支持多种距离度量,如L2(欧氏)距离、IP(内积)距离等,并且可以处理高维数据。
hnswlib适用于推荐系统召回阶段,当数据集的数据类型为FP16时,可使用新增的FP16接口进行图检索,从而优化计算效率与内存占用。
目录结构
hnswlib开源仓完整的目录结构如下所示:
├── docs/ // 学习文档
├── public_sys-resources/
├── 0001-hnswlib_0.8.0-optimize-fp32_fp16_dis_idsort_prefetch.patch // hnswlib源码补丁文件
├── LICENSE // 项目License文件
└── README.md // hnswlib开源仓介绍文件使能补丁后的目录结构如下所示:
├── hnswlib/ // 核心库代码目录
│ ├── bruteforce.h // 暴力搜索实现
│ ├── hnswalg.h // HNSW算法核心实现
│ ├── hnswlib.h // 主头文件,定义核心接口
│ ├── safe_memory.h // 内存安全操作工具类
│ ├── space_ip.h // 内积距离空间实现
│ ├── space_l2.h // L2距离空间实现
│ ├── stop_condition.h // 停止条件实现
│ └── visited_list_pool.h // 访问列表池实现
├── examples/ // 测试代码目录
├── tests/ // 测试代码目录
├── python_bindings/ // Python接口
├── .gitignore
├── ALGO_PARAMS.md // HNSW算法参数说明
├── CMakeLists.txt // CMake构建文件
├── LICENSE
├── Makefile // Makefile构建文件
├── MANIFEST.in
├── pyproject.toml // Python项目配置文件
├── README.md // 项目说明文档
├── setup.py // Python项目安装脚本
└── TESTING_RECALL.md // 测试召回率说明编译选项
启用NEON和FP16支持
在ARM平台上编译时,需要添加以下编译选项以启用NEON和FP16支持:
-march=armv8.2-a+dotprod+fp16fml -DUSE_NEON与原生hnswlib的兼容性
本版本保持了与原生hnswlib API的完全兼容,同时添加了以下新特性:
- 新增FP16数据类型支持(L2SpacePh、IPSpacePh)
- ARM平台上的NEON指令优化
- 底库ID重排优化
- ARM平台上的预取优化
用户可以无缝迁移现有的hnswlib代码到本版本,并根据需要使用新增的FP16接口和ARM优化特性。
版本说明
关于hnswlib算法的版本更新情况请参见《hnswlib 版本说明书》。
学习文档
免责声明
致hnswlib使用者
本项目仅供调试和开发之用,使用者需自行承担使用风险,并理解以下内容:
- 数据处理及删除:用户在使用本工具过程中产生的数据属于用户责任范畴。建议用户在使用完毕后及时删除相关数据,以防信息泄露。
- 数据保密与传播:使用者了解并同意不得将通过本工具产生的数据随意外发或传播。对于由此产生的信息泄露、数据泄露或其他不良后果,本工具及其开发者概不负责。
- 用户输入安全性:用户需自行保证输入的命令行的安全性,并承担因输入不当而导致的任何安全风险或损失。对于输入命令行不当所导致的问题,本工具及其开发者概不负责。
免责声明范围:本免责声明适用于所有使用本工具的个人或实体。使用本工具即表示您同意并接受本声明的内容,并愿意承担因使用该功能而产生的风险和责任,如有异议请停止使用本工具。
在使用本工具之前,请谨慎阅读并理解以上免责声明的内容。对于使用本工具所产生的任何问题或疑问,请及时联系开发者。
致数据所有者
如果您不希望您的模型或数据集等信息在本项目中被提及,或希望更新本项目中有关的描述,请在GitCode提交issue,我们将根据您的issue要求删除或更新您相关描述。衷心感谢您对本项目的理解和贡献。
License
hnswlib采用Apache 2.0 License许可证授权,支持修改代码和再开源。详见LICENSE文件。
本项目的文档适用CC-BY 4.0许可证,具体请参见LICENSE文件。
贡献声明
欢迎大家为社区做贡献,如果使用过程中有任何问题/建议,或者需要反馈特性需求和bug报告,可以提交Issues联系我们,具体贡献方法可参考这里。同时也欢迎大家在讨论专区展开讨论交流。感谢您的支持。
致谢
hnswlib由华为公司的下列部门联合贡献:
- 鲲鹏计算Boostkit开发部
感谢来自社区的每一个PR,欢迎贡献hnswlib!