文件最后提交记录最后更新时间
修正错误的license注释 Co-authored-by: yuantao<taoyuan18@huawei.com> # message auto-generated for no-merge-commit merge: !502 merge license into master 修正错误的license注释 Created-by: yuantao_ Commit-by: yuantao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue --> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!5022 个月前
修正错误的license注释 Co-authored-by: yuantao<taoyuan18@huawei.com> # message auto-generated for no-merge-commit merge: !502 merge license into master 修正错误的license注释 Created-by: yuantao_ Commit-by: yuantao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue --> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!5022 个月前
适配CANN 9.0.0.beta2 Co-authored-by: yuantao_<taoyuan18@huawei.com> # message auto-generated for no-merge-commit merge: !530 merge cmake_adapt_900b2 into master 适配CANN 9.0.0.beta2 Created-by: yuantao_ Commit-by: yuantao;yuantao_ Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 1. 适配b2多出来的libunified_dlog.so 2. 适配msopgen的新实现 3. 补充新版本对应文档 4. 修正一处文档错误 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!5302 个月前
版本相关代码与文档优化 Co-authored-by: yuantao<taoyuan18@huawei.com> # message auto-generated for no-merge-commit merge: !572 merge feat/cmake-cann-version-detect into master 版本相关代码与文档优化 Created-by: yuantao_ Commit-by: yuantao_;yuantao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 1. 版本获取使用C接口编译一个可执行文件获取,规避pyacl的ops依赖 2. 更新一些由于版本变更导致不全面的文档 3. 删除tla中一个常量的HOST DEVICE前缀,这是不必要的,新版本编译器给出WARNING ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!5721 个月前
修正错误的license注释 Co-authored-by: yuantao<taoyuan18@huawei.com> # message auto-generated for no-merge-commit merge: !502 merge license into master 修正错误的license注释 Created-by: yuantao_ Commit-by: yuantao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue --> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!5022 个月前
【task】提供msopgen接入文档与代码示例 Co-authored-by: yuantao<taoyuan15@h-partners.com> # message auto-generated for no-merge-commit merge: !322 merge msopgen into master 【task】提供msopgen接入文档与代码示例 Created-by: yuantao_ Commit-by: yuantao Merged-by: turing_project1 Description: ## 描述 增加examples/advanced/basic_matmul_aclnn及README文档,介绍接入msopgen的交付件。 msopgen工程为编译时作为target生成,编译时调用msopgen,将必要修改的代码复制到生成的工程文件夹然后编译。 同时也提供文档说明如何创建一个全新的工程自行接入。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> ## 原因 提供稳定的工程接入方法。 ## 测试 暂时仅增加编译用例。 ## 文档更新 增加examples/advanced/basic_matmul_aclnn/README.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!3226 个月前
README.md

basic_matmul_aclnn example

aclnn接口是CANN软件栈一直沿用的接口,msOpGen工具是CANN提供可以生成该接口工程框架的工具,便于用户编写一个具有aclnn接口的算子,并使能CANN软件栈上的各种功能。该样例提供CATLASS算子模板接入msOpGen工程的示例代码与注意事项,并提供CATLASS example风格的调用示例。

下面以basic_matmul接入为例进行示例,利用msOpGen工具接入该算子模板。

1. 创建算子工程

参考创建算子工程链接编写一个算子原型的json文件,并生成对应工程。

编写json

相关示例代码:catlass_basic_matmul.json

生成工程

执行下列脚本,调用msOpGen生成算子工程。

msopgen gen -i catlass_basic_matmul.json -c ai_core-<soc_version> -lan cpp -out catlass_basic_matmul
  • 其中soc_version可通过npu-smi info查看,形如Ascendxxxyyy
  • 需保证输入的json配置文件(上例中的catlass_basic_matmul.json)具有644的权限
  • 需保证输出的文件路径(上例中的catlass_basic_matmul)具有755的权限

2. 编写Host代码

参考Host侧Tiling实现-基本流程实现TilingFunc

若需要使能算子入图,请参考算子入图(GE)图开发实现InferShapeInferDataType

相关示例代码: op_host/catlass_basic_matmul.cpp op_host/catlass_basic_matmul_tiling.h

3. 编写Device代码

参考Kernel侧算子实现,实现kernel代码。

相关示例代码: op_kernel/catlass_basic_matmul.cpp 注意事项

  • 我们需要增加编译选项来引入CATLASS的头文件。在op_kernel/CMakeLists.txt中增加包含路径架构宏选项。

    • 添加包含路径选项-I${CATLASS_INCLUDE_PATH}。其中${CATLASS_INCLUDE_PATH}是CATLASS代码仓下的include文件夹的路径,需根据环境实际情况进行配置。
    • 添加架构宏选项-DCATLASS_ARCH=${ARCH}。其中${ARCH}是对应架构的编号。
  • 根据CANN版本的不同,默认写法有所不同:

    • CANN版本>=9.0.0.beta2

      # ...
      + npu_op_kernel_options(ascendc_kernels ALL OPTIONS -I${CATLASS_INCLUDE_PATH})
      # ...
      
    • CANN版本<9.0.0.beta2

      # set custom compile options
      if ("${CMAKE_BUILD_TYPE}x" STREQUAL "Debugx")
          add_ops_compile_options(ALL OPTIONS -g -O0)
      endif()
      + add_ops_compile_options(ALL OPTIONS -I${CATLASS_INCLUDE_PATH})
      add_kernels_compile()
      
  • msOpGen工程的分离编译模式不支持直接将结构体(如Catlass::GemmCoord)作为kernel的参数传入。当需要使用结构体时,需要通过tiling地址传递成员数据,然后在kernel侧重新构造。

    // 正确
    extern "C" __global__ __aicore__ void
    catlass_basic_matmul(GM_ADDR self, GM_ADDR mat2, GM_ADDR out, GM_ADDR workspace, GM_ADDR tiling)
    {
        GET_TILING_DATA(tiling_data, tiling);
        Catlass::GemmCoord problemShape{tiling_data.m, tiling_data.n, tiling_data.k};
        // ...
    }
    // 暂不支持
    extern "C" __global__ __aicore__ void
    catlass_basic_matmul(GM_ADDR self, GM_ADDR mat2, GM_ADDR out, GM_ADDR workspace,  Catlass::GemmCoord problemShape)
    {
        // ...
    }
    

4. 编译、部署

参考算子工程编译算子包部署进行编译、部署,并设定环境变量。

一般来说,调用者需要添加头文件aclnn_catlass_basic_matmul.h并链接libcust_opapi.so。在不修改工程参数的情况下,这两个文件的位置如下:

$ASCEND_HOME_PATH/opp/vendors/customize/op_api/include/aclnn_catlass_basic_matmul.h
$ASCEND_HOME_PATH/opp/vendors/customize/op_api/lib/libcust_opapi.so

这可作为Makefile/CMakeLists.txt的编写参考。可在5. 调用中查看CMake编写示例。

5. 调用

参考接口简介了解aclnn接口的相关概念,并参考basic_matmul_aclnn.cpp尝试调用。

可参考以下内容编写CMakeLists.txt

project(basic_matmul_aclnn)
cmake_minimum_required(VERSION 3.22)
set(CATLASS_REPO_DIR <修改为实际环境上的CATLASS仓库路径>)
add_executable(basic_matmul_aclnn basic_matmul_aclnn.cpp)
target_include_directories(basic_matmul_aclnn PRIVATE
    ${CATLASS_REPO_DIR}/examples/common
    ${CATLASS_REPO_DIR}/include
    $ENV{ASCEND_HOME_PATH}/include
    $ENV{ASCEND_HOME_PATH}/include/aclnn
    $ENV{ASCEND_HOME_PATH}/include/experiment/runtime
    $ENV{ASCEND_HOME_PATH}/include/experiment/msprof
    # 自定义算子包头文件目录
    $ENV{ASCEND_HOME_PATH}/opp/vendors/customize/op_api/include
)
target_link_directories(basic_matmul_aclnn PRIVATE
    $ENV{ASCEND_HOME_PATH}/lib64
    # 自定义算子包库文件目录
    $ENV{ASCEND_HOME_PATH}/opp/vendors/customize/op_api/lib/
)
target_link_libraries(basic_matmul_aclnn PRIVATE 
    ascendcl 
    nnopbase
    # 自定义算子包库文件名称
    cust_opapi 
)

预置示例

我们对以上操作过程进行了集成,以便快速体验aclnn工程接口。

编译指定用例

bash scripts/build.sh basic_matmul_aclnn
cd output/run
chmod +x ./custom_opp_*.run
./custom_opp_*.run
export LD_LIBRARY_PATH=$ASCEND_HOME_PATH/opp/vendors/customize/op_api/lib/:${LD_LIBRARY_PATH}
cd output/bin
# 可执行文件名 |矩阵m轴|n轴|k轴|Device ID
# Device ID可选,默认为0
./basic_matmul_aclnn 256 512 1024 0

执行结果如下,说明精度比对成功。

Compare success.

注意事项

  • 本示例仅用于CATLASS算子接入msopgen的参考,为保证代码简洁,不进行泛化的支持,如多个算子、多个平台等。
  • 目前仅提供basic_matmul算子接入示例。
  • 示例仅支持以下产品:
    • Atlas A2 训练系列产品 / Atlas A2 推理系列产品(2201架构)
    • Atlas A3 训练系列产品 / Atlas A3 推理系列产品(2201架构)