用途:在 AscendC 算子代码生成完成后,编译 ascend-kernel 工程、安装 whl 包、生成并运行精度测试,并在编译或测试失败时进行排错。通常由 ascendc-operator-code-gen 技能调用。
前置条件:op_host、op_kernel 代码已生成;ops.h、register.cpp、csrc/CMakeLists.txt 已更新;CANN 环境可用。
主要能力与流程:
- 环境准备:每条 shell 命令前必须加载环境,禁止硬编码或自行搜索路径。检查 ASCEND_HOME_PATH 与 CONDA_DEFAULT_ENV,未设置时须向用户询问 CANN 路径和 conda 环境名,然后执行 source ${CANN_PATH}/*/set_env.sh 与 conda activate <env_name>。
- 编译:cd ascend-kernel;chmod +x build.sh;bash build.sh。以 ls ./output/ascend_kernel*.whl 存在 whl 判断成功。
- 安装:pip install output/ascend_kernel*.whl --force-reinstall --no-deps。
- 生成测试:若 tests/test_<op_name>.py 不存在则创建,包含 torch、torch_npu、pytest 导入、NPU 可用性检查、参数化 shape 与 dtype 的精度对比,以及 run_simple_test 简单功能测试。
- 运行测试:功能测试 python tests/test_<op_name>.py;精度测试 pytest tests/test_<op_name>.py -v。
排错:失败后分析日志、定位文件行号、修复并重编,最多 3 次,仍失败则向用户报告。资料给出编译错误与测试错误决策树,以及可修改文件范围(op_host、op_kernel、ops.h、register.cpp、csrc/CMakeLists.txt、测试文件)。
限制与反模式:不得硬编码或搜索 CANN/Conda 路径;不得修改 cmake/ 或 csrc/utils/;不得删除其他算子注册代码;不得跳过功能测试直接做精度测试;不得忽略编译 warning;不得在 EXEC_KERNEL_CMD 传入右值;超过 3 次排错应停止并报告。具体算子名、shape 与参考实现需按实际算子填写,资料未提供固定值。