已关闭
[Documentation|文档反馈]: #1578
创建于  5月17日关闭于  6月24日
邵
5月17日 创建

Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.

一、文档链接 (必填)

https://gitcode.com/cann/ops-math/blob/master/docs/README.md

二、问题文档片段 (必填)

▎ - 样例类文档:可参考cann-samples (https://gitcode.com/cann/cann-samples)仓算子样例。
▎ - 实践类文档:建设中,请您访问项目wiki进行搜索。
▎ - FAQ类文档:建设中,请您访问项目wiki进行搜索。
💡 存在的问题(选填)
背景

docs/README.md 的"更多文档"小节中,"FAQ类文档"长期标注为"建设中,请您访问项目wiki进行搜索"。但 wiki 当前尚无聚合的 FAQ
页面,新手遇到问题往往需要翻阅 issue 历史或多份指南文档跳转拼接,体验较差。

考虑到 ops-math 是 CANN 算子库的入口级仓库之一,新接触 CANN/NPU 的开发者占比较高,建议优先建设一份面向"踩坑高频点"的
FAQ 文档,路径建议:docs/zh/FAQ.md,并在 docs/README.md 的"更多文档"小节替换原占位说明。

建议初版收录的问题(均为现有文档中分散或缺失的内容)

  1. 如何确定 ${soc_version} 取值?
    QUICKSTART.md 中要求用户先到 CANN 下载中心复制硬件查询命令、执行后回填产品名才能映射到 soc_version。建议 FAQ
    中提供"硬件命令 → 产品名 → soc_version"的速查表,并附常见误填案例(如 910B 误填为 910_93)。
  2. experimental/ 目录与 math/conversion/random/ 顶层目录的区别?我贡献的算子应放在哪里?
    CONTRIBUTING.md 提到 SIG 会"分配合适的算子分类路径(如 experimental/math)",但未明确两者的稳定性边界、API
    兼容性承诺、晋升到顶层目录的条件。这是贡献者首要疑问。
  3. build.sh 是否支持 Windows / 非 bash 环境?
    当前 build.sh 为 bash 脚本,Windows 开发者在何种环境下可编译(WSL?Docker?)官方建议是什么,文档中没有集中说明。
  4. 算子目录下若缺少 op_api/ 或 op_kernel/ 目录,应如何调用?
    docs/zh/install/dir_structure.md 中提到"若缺少 op_api 目录,说明该算子暂不支持 aclnn 调用""若缺少 op_kernel
    目录,可能调用了其他算子的 op_kernel 实现",但没有给出排查路径。建议 FAQ 给出"如何顺着 op_api/op_graph 找到实际承载
    Kernel 的算子"的具体步骤。

价值

  • 降低新手在环境搭建和首次贡献阶段的卡点;
  • 减少 issue 区里重复提问,让 maintainer 精力聚焦于真实代码问题;
  • 把 dir_structure.md、QUICKSTART.md、CONTRIBUTING.md
    中已隐含但未被显式串起来的信息,整理成可被搜索引擎检索的单页文档。
likedislike
sunchun成员
5月18日 评论:

/assign @chensi79

likedislike
CANN-robotCANN-robot成员
5月18日 将 chensi79 设为负责人
陈思陈思成员
5月18日 关联了pull request:docs(faq): 新增FAQ文档并更新README链接
陈思
陈思成员
5月18日 评论:

你好,感谢反馈。对于您提出的问题,

1. 产品名与 ${soc_version} 对应关系:

产品名 ${soc_version} 取值
Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ascend910b
Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ascend910_93
950 系列产品 ascend950

2. experimental/ 目录与顶层 math/conversion/random/ 目录的区别是什么?我的算子应放在哪里?

目录 用途 交付件要求
experimental/${op_class}/ 存放社区贡献的生态算子(用户自定义算子) 较轻量:Kernel 实现 + 测试文件 + README 即可
${op_class}/(如 math/conversion/random/ 存放项目标准算子 更完整:需包含 op_host(Tiling)、op_kernel、UT 测试等

如何选择:

  • 新贡献算子:提交 PR 时,SIG 成员会根据评审结果分配路径,通常先进入 experimental/${op_class}/。请在 Issue 中说明算子设计方案,由 Committer 指定分类。
  • 晋升为标准算子:当生态算子经过充分验证后,可由 Maintainer 讨论迁移至顶层目录,交付件需补充 op_host Tiling 实现等。

参考:贡献指南"贡献新算子"章节。


3. build.sh 是否支持 Windows 或非 bash 环境?

当前 build.sh 为 bash 脚本,仅支持 Linux 环境

  • Windows 用户:推荐使用 WSL2(Windows Subsystem for Linux)或 Docker 容器,在其中安装 CANN 工具链后执行 bash build.sh
  • 其他非 bash shell(如 zsh、fish):请使用 bash build.sh ... 显式调用。

参考:build 参数说明了解完整的编译参数列表。


4. 算子目录下缺少 op_api/op_kernel/ 目录,如何调用?

部分算子的交付件因实现方式不同而有所差异,以下是各目录缺失的含义和排查方法:

缺失目录 含义 排查建议
op_api/ 该算子暂不支持 aclnn 调用 可通过图模式(op_graph)调用,或查看该算子 README 了解支持的调用方式
op_kernel/ 可能调用了其他算子的 Kernel 实现 查看该算子 op_api/op_graph/ 目录下的源码,定位实际承载 Kernel 的算子
op_host/ 可能调用了其他算子的 Host 实现 同上,查看 op_api/op_graph/ 下的源码实现
op_graph/ 该算子暂不支持图模式调用 可通过 aclnn(op_api)方式调用

排查路径:

  1. 先查看目标算子的 README.md,了解该算子支持的调用方式。
  2. 若缺少某个子目录,查看 op_api/op_graph/ 中的源码,搜索实际引用的算子名称。
  3. 若该算子 Kernel 暂无 Ascend C 实现,欢迎参考贡献指南补充贡献。

示例:npu_format_cast 算子缺少 op_kernel/ 目录

conversion/npu_format_cast/ 目录下没有 op_kernel/,但其 op_host/op_api/aclnn_npu_format_cast.cpp 中调用了其他算子的 Kernel 实现:

// 通过 l0op::TransData 调用 trans_data 算子的 Kernel
auto outTensor = const_cast<aclTensor*>(
    l0op::TransData(formatTensor, dstTensor->GetStorageFormat(), 1, uniqueExecutor.get()));

// 通过 l0op::ViewCopy 调用 view_copy 算子的 Kernel
auto viewCopyResult = l0op::ViewCopy(outTensor, dstTensor, uniqueExecutor.get());

因此,npu_format_cast 的实际计算由 conversion/trans_data/conversion/view_copy/ 两个算子的 op_kernel/ 承载。遇到类似情况时,顺着 op_api/ 源码中的 l0op:: 调用链即可定位到实际的 Kernel 实现算子。

大部分问题在当前的math仓中都能找到答案,聚合的 FAQ页面正在持续建设中,请耐心等待。

likedislike
陈思陈思成员
6月24日 issue状态由 进行中 改变为 已完成
陈思陈思成员
6月24日 关闭了 issue
陈思陈思成员
6月24日 移除了负责人 chensi79
陈思
陈思成员
6月24日 评论:

/assign @chensi79

likedislike
CANN-robotCANN-robot成员
6月24日 将 chensi79 设为负责人
CANN-robotCANN-robot成员
6月24日 添加了label:Accepted