文件最后提交记录最后更新时间
切换最低兼容版本为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 个月前
【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

ConvBias Example Readme

代码组织

├── 24_conv_bias
│   ├── CMakeLists.txt   # CMake编译文件
│   ├── README.md
|   ├── gen_data.py   # 生成输入及标杆数据
│   └── conv_bias.cpp # 主文件

功能介绍

  • 实现3D卷积功能。

  • 计算公式: 我们假定输入(input)的shape是 (N,Cin,Di,Hi,Wi)(N, C_{\text{in}}, D_i, H_i, W_i) ,(weight)的shape是 (Cout,Cin,Kd,Kh,Kw)(C_{\text{out}}, C_{\text{in}}, K_d, K_h, K_w),输出(output)的shape是 (N,Cout,Do,Ho,Wo)(N, C_{\text{out}}, D_o, H_o, W_o),那输出将被表示为:

    out(Ni,Coutj)=bias(Coutj)+∑k=0Cin−1weight(Coutj,k)⋆input(Ni,k) \text{out}(N_i, C_{\text{out}_j}) = \text{bias}(C_{\text{out}_j}) + \sum_{k = 0}^{C_{\text{in}} - 1} \text{weight}(C_{\text{out}_j}, k) \star \text{input}(N_i, k)

    其中,⋆\star表示互相关的计算。NN代表batch size,CC代表通道数,DDHHWW分别代表深度、高度和宽度,相应输出维度的计算公式如下:

    Do=[(Di+2∗padding[0]−dilation[0]∗(Kd−1)−1)/stride[0]]+1Ho=[(Hi+2∗padding[1]−dilation[1]∗(Kh−1)−1)/stride[1]]+1Wo=[(Wi+2∗padding[2]−dilation[2]∗(Kw−1)−1)/stride[2]]+1 D_o=[(D_i + 2 * padding[0] - dilation[0] * (K_d - 1) - 1 ) / stride[0]] + 1 \\ H_o=[(H_i + 2 * padding[1] - dilation[1] * (K_h - 1) - 1 ) / stride[1]] + 1 \\ W_o=[(W_i + 2 * padding[2] - dilation[2] * (K_w - 1) - 1 ) / stride[2]] + 1

  • 当前实现相较于cann仅支持w轴全载的基础Conv3D功能,不涉及weight bypass、L1开doublebuffer、pointwise以及w轴切分等优化手段和分支,输入input、weight和bias在L1上的搬运量不能超过硬件限制,即需要满足以下条件:

    weightL1Size=Kh∗Kw∗512hoInL1Max=16/Wo+2hiInL1Max=(hoInL1Max−1)∗stride[1]+1+(Kh−1)∗dilation[1]hiInL1Max=min(Hi,hiInL1Max)inputL1Size=hiInL1Max∗Wi∗32biasL1Size=64weightL1Size+inputL1Size+biasL1Size<524288 weightL1Size = K_h * K_w * 512 \\ hoInL1Max = 16 / W_o + 2 \\ hiInL1Max = (hoInL1Max - 1) * stride[1] + 1 + (K_h - 1) * dilation[1] \\ hiInL1Max = min(H_i, hiInL1Max) \\ inputL1Size = hiInL1Max * W_i * 32 \\ biasL1Size = 64 \\ weightL1Size + inputL1Size + biasL1Size < 524288

使用示例

  • 获取代码之后编译相应的算子可执行文件,可参考quickstart
  • 第一步, 首先执行gen_data.py,生成测试样例,测试用例需要从命令行输入。
# python3 ./examples/24_conv_bias/gen_data.py |batch|cin|di|hi|wi|cout|kd|kh|kw|sD|sH|sW|dD|dH|dW|pD|pH|pW|dtype
# 最后一个参数指明数据类型为**float16**或 **bfloat16**
python3 ./examples/24_conv_bias/gen_data.py 32 64 1 32 48 128 1 1 1 1 1 1 1 1 1 0 0 0 float16

执行该命令后会在当前路径下生成data目录,包含算子的输入数据和用于精度验证的golden数据

├── data
│   ├── fmap.bin   # 卷积的featureMap(NDC1HWC0的私有格式,数据排布为[batch, di, cin1, hi, wi, cin0],其中cin0 = 16,cin1 = ceilDiv(cin, cin0))
│   ├── weight.bin  # 卷积的weight(FRACTAL_Z_3D的私有格式,数据排布为[kdc1khkw, n1, n0, cin0],其中n0 = 16,n1 = ceilDiv(cout, n0))
|   ├── bias.bin   # 卷积的bias(ND格式,数据排布为[cout])
│   └── golden.bin # cpu计算卷积的标杆结果 (NDC1HWC0的私有格式,数据排布为[batch, do, cout1, ho, wo, cout0],其中cout0=16,cout1 = ceilDiv(cout, cout0))
  • 第二步,执行算子,这里需要注意的是执行算子的输入shape和上面第一步生成数据的shape一致。
# 编译指定用例
bash scripts/build.sh 24_conv_bias
cd output/bin
# 可执行文件名 |batch|di|cin1|hi|wi|cin0|cout|kd|kh|kw|sD|sH|sW|dD|dH|dW|pD|pH|pW|Device ID
# Device ID可选,默认为0
./24_conv_bias 32 1 4 32 48 16 128 1 1 1 1 1 1 1 1 1 0 0 0 0

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

Compare success.