msOpGen 常见问题
编译报错:fatal error: aclnn_xxx.h: No such file or directory
问题现象
编译调用算子的程序时,提示找不到 aclnn_xxx.h 头文件。
原因分析
算子部署时,头文件未正确安装到 op_api/include 目录。常见原因包括:
- 环境变量
ASCEND_CUSTOM_OPP_PATH值不正确 - 存在多个以冒号分隔的路径,但头文件仅拷贝到了第一个路径
解决方案
- 删除环境变量:
unset ASCEND_CUSTOM_OPP_PATH - 重新部署算子包:
./build_out/custom_opp_*.run - 确认已追加动态库路径:
export LD_LIBRARY_PATH=${ASCEND_OPP_PATH}/vendors/customize/op_api/lib:$LD_LIBRARY_PATH
编译时提示 soc_version 不匹配
问题现象
创建算子工程或编译时提示芯片型号(soc_version)配置错误。
解决方案
- 执行
npu-smi info查询 Chip Name - 将
-c ai_core-Ascend<Chip_Name>改为正确值 - 注意
ai_core与芯片型号之间用中划线-连接,例如:ai_core-ascend910b
运行报错:aclrtSetDevice failed
问题现象
执行算子调用程序时提示 aclrtSetDevice failed. ERROR: xxxxxx。
原因分析
可能原因包括:
- NPU 设备繁忙或硬件故障
/dev/hisi_hdc设备异常(如容器内未成功挂载、缺乏访问权限)- 驱动/固件版本不匹配
- 系统资源(如内存)不足
解决方案
- 使用
npu-smi info检查 NPU 状态 - 尝试切换 NPU 设备:通过
-d <device_id>指定其他空闲设备 - 容器环境中确认
--device=/dev/davinciX已正确挂载 - 检查驱动安装是否正确,参考《CANN 软件安装指南》
- 错误码详见《ACL错误码表》
运行结果全为 0 或随机值
问题现象
算子执行完成但输出结果与预期不符,全部为 0 或包含随机值。
原因分析
常见原因包括:
- Kernel 侧代码中 EnQue/DeQue 流水线同步错误
- DataCopy 的数据长度(repeatTimes)与实际数据量不匹配
- Tiling 分块计算参数(totalLength、tileNum)有误
解决方案
- 检查
op_kernel/*.cpp中每个AllocTensor是否都有对应的FreeTensor - 确认
EnQue和DeQue成对调用且顺序正确 - 验证 Tiling 参数传递是否正确
- 可使用 msOpST 工具进行精度对比验证
算子包部署时提示权限不足
问题现象
执行 .run 算子安装包时提示权限不足。
解决方案
- 使用
--install-path=<path>指定有写权限的自定义安装目录 - 执行
source <path>/vendors/<vendor_name>/bin/set_env.bash使环境生效 - 或联系 CANN 安装用户修改
vendors目录权限
算子部署后未生效
问题现象
算子包已部署但在程序中仍找不到算子。
解决方案
- 确认
.run包执行成功(无错误输出) - 检查
ASCEND_CUSTOM_OPP_PATH环境变量是否包含正确的部署路径 - 检查
opp/vendors/config.ini中的load_priority配置 - 指定目录安装时需执行
source <path>/vendors/<vendor_name>/bin/set_env.bash