文件最后提交记录最后更新时间
fix chunk_gated_delta_rule example bug Co-authored-by: tangyulong6<tangyulong6@huawei.com> # message auto-generated for no-merge-commit merge: !5189 merge cgdr-docs into master fix chunk_gated_delta_rule example bug Created-by: tangyulong6 Commit-by: tangyulong6 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!518917 天前
fix chunk_gated_delta_rule example bug Co-authored-by: tangyulong6<tangyulong6@huawei.com> # message auto-generated for no-merge-commit merge: !5189 merge cgdr-docs into master fix chunk_gated_delta_rule example bug Created-by: tangyulong6 Commit-by: tangyulong6 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!518917 天前
Add ChunkGatedDeltaRule Co-authored-by: lilening<lilening@huawei.com> # message auto-generated for no-merge-commit merge: !2821 merge stage1 into master Add ChunkGatedDeltaRule Created-by: lilening Commit-by: lilening Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 新增算子 ChunkGatedDeltaRule ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/1201 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 已本地泛化测试验证 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!28211 个月前
修复输入不连续时,会出现报错拦截的问题 Co-authored-by: yiqiao-wjp<wangjianping48@huawei.com> # message auto-generated for no-merge-commit merge: !5158 merge GDN_conti into master 修复输入不连续时,会出现报错拦截的问题 Created-by: yiqiao-wjp Commit-by: yiqiao-wjp Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> aclnn 修改输出连续性位置,用viewcopy替代 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2356 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!515816 天前
ChunkGatedDeltaRule算子性能优化 Co-authored-by: lilening<lilening@huawei.com> # message auto-generated for no-merge-commit merge: !3547 merge stage1-new into master ChunkGatedDeltaRule算子性能优化 Created-by: Vivia Commit-by: lilening Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修改chunk_gated_delta_rule算子kernel中各阶段输出改为bf16,优化流水 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> 关联Issue [#2205](https://gitcode.com/cann/ops-transformer/issues/2205) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 联调通过,本地泛化测试通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [x] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!354729 天前
fix(gated_delta_rule): rename global test variables to avoid ODR violation in opapi UT Co-authored-by: huang-chuhong<huangchuhong1@h-partners.com> # message auto-generated for no-merge-commit merge: !5747 merge fix/gated-delta-rule-opapi-ut-rename into master fix(gated_delta_rule): rename global test variables to avoid ODR violation in opapi UT Created-by: huang-chuhong Commit-by: huang-chuhong Merged-by: cann-robot Description: ## 描述 recurrent_gated_delta_rule 与 chunk_gated_delta_rule 的 opapi UT 文件中均声明了同名全局变量 test,联合编译时触发 ODR(One Definition Rule)冲突,导致链接失败(multiple definition of test)。 ## 改动 - 将 recurrent_gated_delta_rule opapi UT 中 test 重命名为 rgdr_test - 将 chunk_gated_delta_rule opapi UT 中 test 重命名为 cgdr_test - 变量名带算子缩写前缀,避免不同算子 UT 之间命名冲突,不影响单个算子独立编译行为 ## 关联的Issue #2596 ## 测试 - bash build.sh -u --opapi --ops=recurrent_gated_delta_rule,chunk_gated_delta_rule:42 tests PASSED(chunk 20 recurrent 22) - bash build.sh -u --opapi --ops=recurrent_gated_delta_rule:22 tests PASSED(单独编译不受影响) ## 类型标签 - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!57477 天前
Add ChunkGatedDeltaRule Co-authored-by: lilening<lilening@huawei.com> # message auto-generated for no-merge-commit merge: !2821 merge stage1 into master Add ChunkGatedDeltaRule Created-by: lilening Commit-by: lilening Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 新增算子 ChunkGatedDeltaRule ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/1201 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 已本地泛化测试验证 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!28211 个月前
新增chunk_gated_delta_rule的文档 Co-authored-by: tangyulong6<tangyulong6@huawei.com> # message auto-generated for no-merge-commit merge: !4513 merge cgdr-docs into master 新增chunk_gated_delta_rule的文档 Created-by: tangyulong6 Commit-by: tangyulong6 Merged-by: cann-robot Description: ## 描述 新增chunk_gated_delta_rule算子的文档 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/1201 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 attention\chunk_gated_delta_rule/README.md attention\chunk_gated_delta_rule\docs\aclnnChunkGatedDeltaRule.md attention\chunk_gated_delta_rule\examples\test_aclnn_chunk_gated_delta_rule.cpp ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!451322 天前
README.md

ChunkGatedDeltaRule

产品支持情况

产品 是否支持
Ascend 950PR/Ascend 950DT ×
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品
Atlas 200I/500 A2 推理产品 ×
Atlas 推理系列产品 ×
Atlas 训练系列产品 ×

功能说明

  • 算子功能:完成chunk版的Gated Delta Rule计算。

  • 计算公式:

    Gated Delta Rule(门控Delta规则,GDR)是一种应用于循环神经网络的算子,也被应用于一种线性注意力机制中。在每个时间步 tt,GDR根据当前的输入 qtq_tktk_tvtv_t、上一个隐藏状态 St−1S_{t-1}、衰减系数 αt\alpha_t 以及更新强度 βt\beta_t,计算当前的注意力输出 oto_t 和新的隐藏状态 StS_t,其计算公式如下:

    St:=St−1(αt(I−βtktktT))+βtvtktT=αtSt−1+βt(vt−αtSt−1kt)ktTS_t := S_{t-1}(\alpha_t(I - \beta_t k_t k_t^T)) + \beta_t v_t k_t^T = \alpha_t S_{t-1} + \beta_t (v_t - \alpha_t S_{t-1}k_t)k_t^T

    ot:=St(qt⋅scale)o_t := S_t (q_t \cdot scale)

    其中,St−1,St∈RDv×DkS_{t-1},S_t \in \mathbb{R}^{D_v \times D_k}qt,kt∈RDkq_t, k_t \in \mathbb{R}^{D_k}vt∈RDvv_t \in \mathbb{R}^{D_v}αt∈R\alpha_t \in \mathbb{R}βt∈R\beta_t \in \mathbb{R}ot∈RDvo_t \in \mathbb{R}^{D_v}

    Chunked Gated Delta Rule是GDR的chunk版实现(参考论文),它通过将输入序列切块,实现了一定的并行效果,在长上下文场景其计算效率相对Recurrent Gated Delta Rule更高,适用于prefill阶段。输入一个长度为L的序列,该算子可以计算出每一步的输出 ot,t∈{1,2,..,L}o_t, t \in \{1, 2, .., L\} 以及最终的状态矩阵 SLS_L

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
query 输入 公式中的q。 BFLOAT16 ND
key 输入 公式中的输入k。 BFLOAT16 ND
value 输入 公式中的输入v。 BFLOAT16 ND
beta 输入 公式中的β。 BFLOAT16 ND
initial_state 输入 初始状态矩阵,公式中的输入S_0。 BFLOAT16 ND
actual_seq_lengths 输入 每个batch的序列长度。 INT32 ND
g 输入 衰减系数,公式中的α=e^g FLOAT32 ND
out 输出 每一步的attention结果,公式中的o_t。 BFLOAT16 ND
final_state 输出 最终的状态矩阵,公式中的S_L。 BFLOAT16 ND
scale_value 可选属性 query的缩放因子,公式中的scale。默认为1.0 FLOAT -

约束说明

  • 为方便理解后续排布格式(如 BNSD、TND 等),统一说明各缩写维度含义:

    • B:输入样本批量大小(Batch)。
    • T:设 LiL_i 为第 ii 个序列长度,则 T=∑iBLiT=\sum_i^B L_i 表示累积序列长度。
    • Nk:Query 和 Key 头数。
    • Nv:Value 头数。
    • Dk:Query 和 Key 隐藏层维度。
    • Dv:Value 隐藏层维度。
  • 当前仅支持 TND 布局:

    • query、key 形状:(T,Nk,Dk)(T, Nk, Dk)
    • value、out 形状:(T,Nv,Dv)(T, Nv, Dv)
    • beta、g 形状:(T,Nv)(T, Nv)
    • actual_seq_lengths 形状:(B,)(B,)
    • initial_state、final_state 形状:(B,Nv,Dv,Dk)(B, Nv, Dv, Dk)

    维度需满足以下约束:

    • 0<Nv≤64,0<Nk≤640 \lt Nv \le 64,0 \lt Nk \le 64,且 Nv mod Nk=0Nv \bmod Nk = 0
    • 0<Dv≤128,0<Dk≤1280 \lt Dv \le 128,0 \lt Dk \le 128
    • B>0,T>0B \gt 0,T \gt 0
  • 受算法数值特性限制,需满足以下取值约束,否则易出现数值溢出、精度异常:

    • 张量元素:0<query<10 < \text{query} < 1
    • 张量元素:0<key<10 < \text{key} < 1
    • 张量元素:g<0g < 0
    • 张量元素:0<beta<10 < \text{beta} < 1

调用说明

调用方式 样例代码 说明
aclnn test_aclnn_chunk_gated_delta_rul.cpp 通过aclnnChunkGatedDeltaRule调用aclnnChunkGatedDeltaRule算子