已开启
反合 test: expand NPU unit coverage for Issue #31 #171
反合 test: expand NPU unit coverage for Issue #31 #171
已开启
xlc2020创建于 24 天前
xlc2020
24 天前

问题/功能描述

Ascend/faiss Issue #31 需要补充 NPU 适配部分的单元测试并提高覆盖率。单卡环境下现有功能测试可以通过,但 distributed、replicated、sharded 和多设备资源路径无法执行,导致分支覆盖率不足。

修改方案描述

  • 在 CopyUtils、Float16、DataCast、Tensor、DeviceTensor、DeviceVector、Operator、OpManager、DeviceUtils、资源管理和 Flat/IVF/IVFPQ/NpuIndex/Cloner 测试中补充真实的边界和契约用例。
  • 覆盖空输入、参数校验、ID 生成、分页委派、重建、资源生命周期、算子可用性和设备相关路径;无设备时沿用现有跳过机制,主机侧检查不依赖 NPU。
  • 修正 NPU IVFPQ 搜索路径的 metric 状态传递,使相关测试验证正确的 API 语义。
  • 将上游 main(1cf9386)合并到本分支,保留上游最新流水线修正,并在验收文档中记录单卡基线和本次同步状态。

验证情况

在同步上游前的单卡 HiDevLab 基线(4b9836d):

  • CTest:19/19 通过
  • GoogleTest:223 passed、12 skipped、0 failed
  • 行覆盖率:83.5%
  • 函数覆盖率:95.7%
  • 分支覆盖率:44.4%

当前 MR 提交为 7f70ea3,尚未在本地运行 NPU 测试;将使用项目 PR 流水线的真实 2 卡 A2 环境完成编译、UT 和 lcov/genhtml 验证,并单独记录多卡结果。

开发自检

test/31-ut-coverage -> Ascend/faiss:main

likedislike
合并受阻
Xxlc2020
24 天前 关联了issue:[Task]: 补充测试用例,提高仓库 ut 覆盖率
ascend-robot
ascend-robot成员
24 天前 评论:

compile

likedislike
atomgit-bot
atomgit-bot
24 天前 评论:

变更摘要

本 PR 针对 Ascend/faiss Issue #31,在现有单卡可执行的功能测试基础上,大幅补充 NPU 适配层的单元测试以提升分支覆盖率;distributed、replicated、sharded 及多设备路径无法在本地执行,故新增用例主要聚焦空输入、参数校验、ID 生成、分页委派、重建、资源生命周期、算子可用性等边界与契约行为,无设备时沿用 FAISS_NPU_SKIP_IF_NO_DEVICE 跳过机制,主机侧校验不依赖 NPU。同时修正了 NPU IVFPQ 搜索路径的 metric 状态传递:给 AscendcIvfpqSearchDistanceIp 自定义算子新增必填 metric_type 属性(0=INNER_PRODUCT、1=L2),并在 IVFPQ::runL3DistOp_ 与 tiling 逻辑中按 metric_ 选择 ReduceMode::IP 或 ReduceMode::L2,使相关测试验证正确的 API 语义。改动范围覆盖 CopyUtils、Float16、DataCast、Tensor、DeviceTensor、DeviceVector、Operator、OpManager、DeviceUtils、资源管理及 Flat/IVF/IVFPQ/NpuIndex/Cloner 等测试,并同步了上游 main(1cf9386)的流水线修正。

主要改动

  • 修正 NPU IVFPQ 搜索的 metric 传递链路: IVFPQ::runL3DistOp_ 调用 workspace 查询接口时新增 metric_ == faiss::METRIC_INNER_PRODUCT ? 0 : 1 实参;算子 host 侧在 ascendc_ivfpq_search_distance_ip_def.cpp 中注册必填 metric_type 属性,tiling 函数增加 GetAttrs() 判空与取值 0/1 校验,并据此在 ReduceMode::IP 与 ReduceMode::L2 间选择 reduce 模式。
  • 新增 NpuIndex 基类与 Flat 契约测试: 通过 CapturingNpuIndex 验证无 id 添加时顺序 ID 生成、addPaged_/addPage_ 委派、两种 min-paging 搜索分派模式及重建/残差路径;补充 ImplFlatIndex/Int8FlatIndex/NpuIndexFlat 包装类对 reconstruct、reconstruct_batch、getNormBlockSize、compute_residual 等非法参数与越界 key 的拒绝用例,以及 Int8 存储的 L2/IP 搜索精确命中与排序不变式验证。
  • 大幅扩充 IVFPQ/IVF 实现层与集成测试: 新增倒排列表与设备存储的拷贝往返(copyInvertedListsFrom/copyInvertedListsTo)、updateQuantizer 前置条件、粗量化搜索返回 ids/distances/可选 residuals 与 centroids、非法 topk 与 nprobe 拒绝、setIndex_ 对每个配置项的独立一致性校验、host id map 惰性重建与维护(ensureHostIdMap_/maintainHostIdMap)、reserveMemory/reclaimMemory/reset 空态语义、训练前置契约(已训练拒重训、就绪量化器快路径)及 copyTo 释放目标自有 quantizer 等分支。
  • 补充大量主机侧契约用例(无 NPU 亦可运行): 覆盖 CopyUtils 空/别名缓冲区与分块 ACL 助手的容量预校验、DataCast 对 host-to-host 等不支持位置的提前拒绝、Float16 大数据量并行转换及标量尾段、DeviceTensor 主机视图指针/字节大小与 fill/copy 空视图、Operator/OpManager 的移动语义、越界访问、空描述注册与未初始化算子拒绝执行、DeviceUtils 属性查询与 DeviceScope/AclEvent 移动,以及资源类 AllocTypeToString/MemorySpaceToString/NpuMemoryReservation 移动与释放路径。
  • 测试基础设施与既有用例调整: TestNpuFlatOpApi 增加缺失算子符号返回 nullptr 的断言;TestNpuCloner::UnsupportedIndexType 改用无 NPU 实现的 IndexLSH 真正验证克隆器拒绝逻辑;TestNpuTempMemory 调大临时池并排队 256 次异步 memset,用 AclEvent 状态显式断言"流未完成前不回收复用";多处 Flat/IVFPQ 测试关闭 pinned memory 或设置 copyFromBuildHostIdMap 等配置,以走自有 staging 回退与 host map 相关路径。
likedislike
不准确?
atomgit-bot
atomgit-bot
24 天前 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
此处折叠了880条消息 查看更多
Xxlc2020
8 天前 推送  1 个提交:084816cd-test(npu): add ACL fault injection tests and boundary coverage for Flat, IVFPQ, and OPQ
Xxlc2020
8 天前 推送  1 个提交:0e286be2-test(npu): expand unit test boundaries to achieve 60% branch coverage
Xxlc2020
8 天前 推送  3 个提交:873a2e71-test(npu): share Flat and IVFPQ test scenarios,e21d10e8-test(npu): reuse Cloner and OPQ test workflows,3c1e389a-test(npu): simplify ACL fault test support
Xxlc2020
7 天前 推送  2 个提交:eef60964-test(npu): preserve upstream line endings in unchanged code,969e57c5-test(npu): keep upstream test bodies out of coverage refactoring
Xxlc2020
7 天前 推送  1 个提交:40b3784a-test(npu): share IVFPQ construction and KMeans guard setup