已开启
[Bug]: A3(Ascend910_9382)环境下 Flat FP16/INT8 功能测试失败 #47
haozhang创建于 3 天前
xiangjie10
3 天前 评论:
3 天前 评论:
👋 您好,感谢向 faiss 提交 Issue!
🎉 我们已收到您的反馈,感谢你对开源社区的支持!
📅 处理时效 维护团队将在工作日 24 小时内查看并回复您的问题。
🔍 自助排查(推荐优先查看) 在等待回复期间,您可以先查阅仓库README以及历史 Issue 中相似问题的解决方案,多数问题可快速解决。
💡 为了更快定位问题,请您确保 Issue 包含:
- 清晰的问题描述
- 可复现的操作步骤
- 相关日志、截图或环境信息
我们会尽快跟进,感谢您的理解与配合!


xiangjie10
3 天前 评论:
3 天前 评论:
/label add triaged


3 天前 添加了label:bug
3 天前 添加了label:triaged
1 天前 关联了pull request:【fix】修复flat算法在A3上无法正常执行问题
在提交新问题之前,请确保您已经在社区中搜索过相关问题,并使用了社区中提供的资源/工具后,仍未找到满意的解决方式。
⚠️ 安全信息提醒:请仔细检查提供的文本内容,确保其不包含敏感数据信息,包括但不限于:
在分享配置信息或代码示例时,请将敏感信息脱敏处理,或使用
<TOKEN>等占位符替代原有内容。环境信息
架构:aarch64
SoC:Ascend910_9382
算子编译目标:ascend910_93
CANN:9.1.0
Python:3.12.13
Faiss:faiss-ascend 1.13.2
可见 NPU:2 个,健康状态均为 OK
🐛 问题描述
标题
A3(Ascend910_9382)环境下 Flat FP16/INT8 功能测试失败
问题描述
在 Ascend A3 设备上分别搭建了 Ubuntu 22.04 和 openEuler 24.03 环境,对 Faiss NPU 源码进行了编译、安装和真机功能测试。
两个环境均使用以下配置:
源码可以正常完成编译和安装,但执行以下 Flat 精度测试时,四个测试项全部失败:
cd faiss/npu/test/scripts python3 test_flat_accuracy.py失败项目包括:
未修复时的测试结果为:
Ubuntu 和 openEuler 环境均能复现相同问题,说明该问题与具体 Linux 发行版无关。
遇到的问题
1. FP16 Flat 使用了错误的核心数
在以下文件中:
核心数被固定为 40:
constexpr int32_t coreNum = 40;但当前设备的 SoC 为
Ascend910_9382,实际需要使用 48 个核心。使用 40 核时,FP16 L2/IP 会返回无效结果,例如:
部分运行还会出现异常的大整数 ID、异常距离、
nan,以及以下运行时错误:我们对 DistanceFlatL2 算子进行了 A/B 测试:
使用 40 核时:
仅将核心数改为 48 后:
因此确认 FP16 失败是由硬编码的 40 核导致的。
2. INT8 Flat L2 未注册 ascend910_93
以下文件只注册了
ascend910b和ascend910_95:缺少:
this->AICore().AddConfig("ascend910_93");因此在
Ascend910_9382上执行 INT8 L2 时出现:3. INT8 Flat COS 未注册 ascend910_93
以下文件只注册了
ascend910b:同样缺少:
this->AICore().AddConfig("ascend910_93");因此 INT8 COS 也会出现:
修复方法
我们进行了以下三处修改。
1. 根据设备动态获取核心数
在
faiss/npu/impl/FlatIndex.cpp中引入:#include <faiss/npu/utils/NpuSocInfo.h>并将:
constexpr int32_t coreNum = 40;修改为:
const int32_t coreNum = NpuSocInfo::getInstance().getCoreNum();这样可以根据实际 SoC 获取核心数,
Ascend910_9382会使用 48 核。2. 为 INT8 Flat L2 注册 ascend910_93
在:
中增加:
this->AICore().AddConfig("ascend910_93");3. 为 INT8 Flat COS 注册 ascend910_93
在:
中增加:
this->AICore().AddConfig("ascend910_93");修复后的验证结果
应用上述三处修改后,分别在 Ubuntu 22.04 和 openEuler 24.03 环境中重新编译、安装并执行相同的真机测试。
两个环境均得到以下结果:
欢迎加入社区,感谢您对社区的贡献 🎉!