已开启
[faiss] 支持单 Faiss 内嵌 NPU Flat 并完善过滤与安装 #96
[faiss] 支持单 Faiss 内嵌 NPU Flat 并完善过滤与安装 #96
已开启
肾炝喜鲤创建于 7月6日
肾炝喜鲤
肾炝喜鲤
7月6日

变更摘要

关联 Ascend/IndexSDK#13。将 Faiss-NPU 的 FP32 主机输入 Flat 组件接入调用方已有的 Faiss,保留 selector/mask、算子安装支持及异步失败保护。

主链为 Milvus → Knowhere → 单一内嵌 Faiss → NpuIndexFlat → faiss_npu_math → CANN → NPU。无需 IndexSDK、mxIndex、OM 或第二套完整 Faiss,不允许静默 CPU 回退。

产品修复包括页级 workspace 所有权与逆序归还、add 完成确认、distance 流确认成功后再提交 TopK、完成未知时保留资源、原错误码传播及失败索引关闭。失败索引拒绝后续 add/search/reconstruct,reset 不清除失败状态,需要重建。AICPU TopK 保留等待期限、首错及合作停止逻辑。

FP32 指主机输入;FP32 设备存储仅支持 add/reconstruct/reset,search 明确返回能力限制。FP16 设备存储的既有检索支持不变。

冲突处理(2026-10-12)

当前 head:92522ceac6a6bc54c6b13fffa4165d708724cdba,保持单提交,父提交为 Ascend/faiss:main 的 4fa68470943626c7345248dec23fa95213db21f3。相对新父提交 32 文件、+4078/-1055。

安装指南保留上游 whl 离线安装、升级卸载内容及本 PR 的本地预置依赖、单 Faiss 嵌入说明;新增文字中的算子目录对齐上游 faiss_npu_math,中英文 API 文档合入上游目录/INT8 算子命名更新。28 个产品文件和 TempMemory UT 与精简后 head fd550323 字节一致,未恢复迁出的新增测试。

本次产品/测试身份、单提交与 32 文件范围、无冲突及文档/差异检查通过。新 head 的流水线 #915 已启动,结果待终态核验;下述 #836 和硬件结果仍分别归属其原受测版本。

按评审意见精简(2026-10-09)

精简后 head:fd550323f2d06a982874dc1a9a4caac2b3421164,保持单提交。相对父提交 26274fc40763167f2d9c7d9745483c1ab429bf07,diff 从 74 文件、+25154/-1057 降至 32 文件、+4077/-1057,新增量减少 83.79%。

新增 host、设备回归、故障注入与算子测试移出产品 PR,作为独立验证附件交付。附件含 42 文件测试 overlay、逐文件摘要/模式清单及恢复运行说明。请在可丢弃的源码副本恢复,不覆盖正式交付树。

原有 CMake 测试列表与 Flat UT 恢复;保留 TempMemory UT 对非抛出 release 契约的必要修正:检查错误码、拒绝释放后分配仍登记,以及正确 LIFO 顺序下重试成功。精简时,28 个产品文件及 3 份产品文档与此前完整版本 3fbbc6cc 字节相同。

验证与版本归属

  • 本次精简副本恢复测试 overlay 后,宿主回归 117 用例/966 检查/0 失败;原 UT 注册、嵌入组件源文件、格式及差异检查通过。
  • 历史精简 head fd550323f2d06a982874dc1a9a4caac2b3421164 的流水线 #836 七项检查及总流水线均 COMPLETED(2026-10-09)。平台统计 32 文件、+4081/-1061;本地父基线统计 32 文件、+4077/-1057。#752 全部通过属于此前完整版本 3fbbc6cc,本次结果独立核验。
  • 历史产品修复 2392fe6 在 910B3/CANN 9.1.0-beta.3 上完成增量算子构建、单 Faiss 审计、Core/Go 增量、quick、服务错误注入、两次十万行合并与重启,以及 full。C3/C4 各 1536 格、SKIP 0;C4 speedup 最小 1.597641(要求 ≥1.0),批次聚合召回最小 0.900000(要求 ≥0.900000)。这些历史结果保留原版本归属,本次未重复运行。
  • eb56ed9 的公开测试入口、3fbbc6cc 的 #748 定向修正与历史附件分别保留各自受测版本。测试迁出不会把历史硬件结果升级为新 head 的真机结果。
  • 首次无旧缓存冷构建、容器 NPU E2E、多卡/并发和真实硬件故障恢复仍未覆盖。算子自身 50 s 超时收尾未单独观测,不宣称未就绪块未被消费。

接口与兼容性

公开接口新增 deallocMemoryNoThrow()、完成欠账钩子及 completionUnknownActive()、NpuMemoryReservation::lastError()、ACL runtime 状态/隔离计数与 FlatIndex 失败状态查询;具体声明见产品头文件。新增虚函数改变 vtable,调用方必须使用匹配头文件重新编译,不保证旧二进制兼容。

完成欠账采用固定 32 槽、范围与流配对及计数,溢出后保守拒绝释放。完成未知的资源不会自动 reset/free;隔离保留与错误传播不等同真实硬件故障恢复。

依赖与复验入口

C1!969 → C2!970 → C3!971 → C4!974 → C5!976。IndexSDK !285 是历史独立增强,不是前置。

C5 的 review.sh quick/full 使用 Milvus Go 生命周期与 C3/C4,保持原字节及可执行位,不依赖迁出的 Faiss 测试。按 C5 README 准备 native 环境后执行 ./review.sh quick --env review.env 或 ./review.sh full --env review.env。

2026-10-09 精简及本次变基只调整 Faiss PR,C5 README/env 的正式输入仍固定历史完整版本 eb56ed9c1ece2ba0eb80216fe8ef4c546c3fad60,由 fork 标签 indexsdk13-reviewed-r9-20260922 保留;历史附件与 DOCX/CSV 不改写。

开发自检

  • 规范:新增仍超过 1k,备案状态待维护者确认。
  • 规范:关联 IndexSDK#13;保留原 UT,新增验证资产以独立附件提供。
  • 安全:未引入三方开源软件;测试替身不进入产品 target 或安装。
  • 安全:新增接口及二进制兼容性限制见上文。
  • 规范:中英文 Flat API 文档同步能力限制与失败关闭语义。
  • 验证环境:精简阶段完成宿主回归,本次变基完成产品/测试字节身份、合并及文档检查;历史真机为 Linux arm64、Ascend910B3、CANN 9.1.0-beta.3、driver 25.2.0。

历史交付附件(2026-09-23)

以下附件固定历史完整版本,独立测试资产见本轮精简一节。

likedislike
合并受阻
肾炝喜鲤肾炝喜鲤
7月6日 关联了issue:[Feature]: 新增 presmoke 预冒烟流水线
ascend-robot
ascend-robot成员
7月6日 评论:

compile

likedislike
xiangjie10成员
7月6日 评论:
🔍 PR 规范审计未通过,以下项目需要修正:
  • ⚠️ PR 代码变更未包含测试用例(变更文件路径中均不包含 test 或 ut),请确认已经备注原因!

请修正后重新提交,或联系仓库管理员。

likedislike
ascend-robotascend-robot成员
7月6日 添加了label:ascend-cla/yes
此处折叠了168条消息 查看更多
肾炝喜鲤肾炝喜鲤
1 天前 修改了pull request 的描述
肾炝喜鲤肾炝喜鲤
1 天前 修改了pull request 的描述
AtlasAccountAtlasAccount成员
1 天前 删除了label:ci-pipeline-running
AtlasAccountAtlasAccount成员
1 天前 添加了label:ci-pipeline-passed
AtlasAccount
AtlasAccount成员
1 天前 评论:
流水线 PR-pipeline_faiss#915 [ commitID:92522cea ] 已完成
>>>代码风格自动修复执行成功(无修复内容)
阶段 任务名 状态 详情
编译构建 PR-build-SAST-check ✅ COMPLETED >>>
Build_arm ✅ COMPLETED >>>
恶意代码检查 Antipoison ✅ COMPLETED >>>
编码安全与规范检查 pre-commit ✅ COMPLETED >>>
开源片段检查 SCA ✅ COMPLETED >>>
开发者测试 PreSmoke ✅ COMPLETED >>>
UT ✅ COMPLETED >>>
流水线 PR-pipeline_faiss ✅ COMPLETED >>>
此流水线已支持下列评论快捷指令,仅PR创建者和白名单成员评论有效
  • compile : 运行流水线
  • retry : 重试流水线所有失败子任务
  • retry <任务名> : 仅重试指定失败子任务
  • stop : 停止流水线
likedislike