文件最后提交记录最后更新时间
切换最低兼容版本为CANN 8.5.0;使用AscendC CMake构建系统编译 Co-authored-by: yuantao<taoyuan18@huawei.com> # message auto-generated for no-merge-commit merge: !461 merge asc into master 切换最低兼容版本为CANN 8.5.0;使用AscendC CMake构建系统编译 Created-by: yuantao_ Commit-by: yuantao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 1. 适配asc+CMake编译系统。 2. 对于适配的调试特性(DumpTensor),在新编译系统引入后不再需要,去除相关代码,相关编译选项添加Warning。 3. 更新对应相关文档。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue --> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!4611 个月前
文档新增中英文目录、低错整改,及代码实践类文档更新 Co-authored-by: sunhao_hw<sunhao203@huawei.com> # message auto-generated for no-merge-commit merge: !555 merge docs into master 文档新增中英文目录、低错整改,及代码实践类文档更新 Created-by: sunhao_hw Commit-by: sunhao_hw Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> - docs下新增zh和en目录,原始文档迁移到zh下 - 仓内文档的批量低错整改 - docs/zh/01_Practice下补充完善部分文档 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!5551 个月前
【task】更新license Co-authored-by: yuantao<taoyuan15@h-partners.com> # message auto-generated for no-merge-commit merge: !399 merge master into master 【task】更新license Created-by: yuantao_ Commit-by: yuantao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> ## 原因 <!--说明此次改动的目的、解决的问题等,应与类型标签匹配 --> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/catlass!3995 个月前
README.md

MatmulGelu Example Readme

代码组织

├── 27_matmul_gelu
│   ├── CMakeLists.txt   # CMake编译文件
│   ├── README.md
│   └── matmul_gelu.cpp # 主文件

功能介绍

完成以下函数的计算

Gelu:

out=Gelu(a×b)out = Gelu(a × b)

其中Gelu的公式为:

Gelu(x)=0.5∗x∗(1+Tanh(2/π∗(x+0.044715∗x3)))Gelu(x) =0.5∗x∗(1+Tanh(\sqrt {2/π}∗(x+0.044715∗x^3 )))

Sigmoid:

Sigmoid(x)=11+e−xSigmoid(x)=\frac{1}{1+e^{-x}}

Tanh:

Tanh(x)=(ex−e−x)(ex+e−x)=(ex−e−x)×e−x(ex+e−x)×e−x=1−e−2x1+e−2x=1−2×e−2x1+e−2x=1−2×(1−11+e−2x)=1−2×(1−Sigmoid(2x))\begin{aligned} Tanh(x) &= \frac{(e^x - e^{-x})}{(e^x + e^{-x})}\\ &= \frac{(e^x - e^{-x})\times e^{-x}}{(e^x + e^{-x}) \times e^{-x} }\\ &= \frac{1 - e^{-2x} }{1 + e^{-2x}}\\ &= 1 - 2\times \frac{e^{-2x}}{1 + e^{-2x}}\\ &= 1 - 2\times (1 - \frac{1}{1 + e^{-2x}})\\ &= 1 - 2\times (1 - Sigmoid(2x)) \end{aligned}

因此可化简为:

Tanh(x)=2×Sigmoid(2x)−1Tanh(x) = 2\times Sigmoid(2x) - 1

基于上述讨论,回顾Gelu的计算式:

Gelu(x)=0.5∗x∗(1+Tanh(2/π∗(x+0.044715∗x3)))Gelu(x) =0.5∗x∗(1+Tanh(\sqrt {2/π}∗(x+0.044715∗x^3 )))

Z=2/π∗(x+0.044715∗x3)Z=\sqrt {2/π}∗(x+0.044715∗x^3),代入上式化简得:

Gelu(x)=x∗Sigmoid(2Z)Gelu(x) =x∗Sigmoid( 2Z )

再次展开,并取近似:8/π≈1.595769\sqrt {8/π}\approx 1.595769,有:

Gelu(x)≈x∗Sigmoid(1.595769∗(x+0.044715∗x3))Gelu(x) \approx x∗Sigmoid( 1.595769∗(x+0.044715∗x^3 ))

在上式中展开SigmoidSigmoid函数,最终Gelu的计算形式为:

Gelu(x)=x1+e−1.595769∗(x+0.044715∗x3)Gelu(x) = \frac{x}{1+e^{-1.595769∗(x+0.044715∗x^3 )}}

使用示例

  • 获取代码之后编译相应的算子可执行文件,可参考quickstart
  • 执行算子
# 编译指定用例
bash scripts/build.sh 27_matmul_gelu
cd output/bin
# 可执行文件名 |矩阵m轴|n轴|k轴|Device ID
# Device ID可选,默认为0
./27_matmul_gelu 256 512 1024 0

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

Compare success.