文件最后提交记录最后更新时间
rotary_position_embedding, rotary_position_embedding_grad support TND for Ascend950 Co-authored-by: alfengyuan<2640706467@qq.com> # message auto-generated for no-merge-commit merge: !5055 merge master into master rotary_position_embedding, rotary_position_embedding_grad support TND for Ascend950 Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ROPE算子支持TND格式 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2302 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!505518 天前
更新license Co-authored-by: PerrySkywalker<wangmingkang1@huawei.com> # message auto-generated for no-merge-commit merge: !568 merge lic into master 更新license Created-by: PerrySkywalker Commit-by: PerrySkywalker Merged-by: cann-robot Description: ## 描述 更新license <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!5685 个月前
fix: add add_graph_plugin_sources() to enable proto generation for 6 operators Co-authored-by: cao-ren-lei<caorenlei@huawei.com> Co-authored-by: wangxun21<wangxun21@huawei.com> # message auto-generated for no-merge-commit merge: !5231 merge cherry-pick-4905-op_proto into master fix: add add_graph_plugin_sources() to enable proto generation for 6 operators Created-by: wangxun21 Commit-by: wangxun21;cao-ren-lei Merged-by: cann-robot Description: ## 描述 为6个算子的 op_graph CMakeLists.txt 添加 add_graph_plugin_sources() 调用,启用 proto 文件生成。 改动原因:上述6个算子的 op_graph 目录下缺少 add_graph_plugin_sources() 调用,导致编译时无法生成对应的 proto 文件。 改动方法:在各算子的 op_graph/CMakeLists.txt 中添加 add_graph_plugin_sources() 函数调用。 受影响的算子: - apply_rotary_pos_emb - attention_update - interleave_rope - rotary_position_embedding - rotary_position_embedding_grad - ring_attention_update ## 关联的Issue Fixes #2387 ## 测试 原 MR #4905 已通过 CI 流水线验证(ci-pipeline-passed、api-check-pass)。 ## 文档更新 无 ## 类型标签 - [x] 🐛 Bug 修复 See merge request: cann/ops-transformer!523115 天前
fix rotary_position_embedding, rotary_position_embedding_grad tnd bug Co-authored-by: alfengyuan<2640706467@qq.com> # message auto-generated for no-merge-commit merge: !5260 merge master into master fix rotary_position_embedding, rotary_position_embedding_grad tnd bug Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> tnd格式判断的变量在使用前未正确初始化,导致后续逻辑出错。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2302 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 算子二级冒烟全部pass ttk单算子用例通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!526016 天前
[RotaryPositionEmbeddingGrad] 适配REDUCE_TPL_PARAM,功能失败问题修改 Co-authored-by: Sunee<sunyi35@huawei.com> # message auto-generated for no-merge-commit merge: !2549 merge feature/reduceTmpl into master [RotaryPositionEmbeddingGrad] 适配REDUCE_TPL_PARAM,功能失败问题修改 Created-by: Sunee Commit-by: Sunee Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> RotaryPositionEmbeddingGrad算子,适配REDUCE_TPL_PARAM,功能失败问题修改 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/1195 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!25492 个月前
[aicore]整改 Co-authored-by: wuxiyuan<wuxiyuan@huawei.com> # message auto-generated for no-merge-commit merge: !1841 merge master into master [aicore]整改 Created-by: wuxiyuan Commit-by: wuxiyuan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 编译器内部已经定义了__aicore__,算子侧需要去掉这个标识 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!18412 个月前
更新license Co-authored-by: PerrySkywalker<wangmingkang1@huawei.com> # message auto-generated for no-merge-commit merge: !568 merge lic into master 更新license Created-by: PerrySkywalker Commit-by: PerrySkywalker Merged-by: cann-robot Description: ## 描述 更新license <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!5685 个月前
rotary_position_embedding, rotary_position_embedding_grad support TND for Ascend950 Co-authored-by: alfengyuan<2640706467@qq.com> # message auto-generated for no-merge-commit merge: !5055 merge master into master rotary_position_embedding, rotary_position_embedding_grad support TND for Ascend950 Created-by: alfengyuan Commit-by: alfengyuan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ROPE算子支持TND格式 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2302 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!505518 天前
README.md

RotaryPositionEmbeddingGrad

产品支持情况

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

功能说明

  • 算子功能:执行单路旋转位置编码RotaryPositionEmbedding的反向计算。

  • 计算公式

    取旋转位置编码的正向计算中,broadcast的轴列表为dims,则计算公式可表达如下:

    • Atlas A3 训练系列产品/Atlas A3 推理系列产品、Atlas A2 训练系列产品/Atlas A2 推理系列产品:

    (1)half模式(mode等于0):

    dy1,dy2=chunk(dy,chunks=2,dim=−1)dy1, dy2 = chunk(dy, chunks=2, dim=-1)

    cos1,cos2=chunk(cos,chunks=2,dim=−1)cos1, cos2 = chunk(cos, chunks=2, dim=-1)

    sin1,sin2=chunk(sin,chunks=2,dim=−1)sin1, sin2 = chunk(sin, chunks=2, dim=-1)

    x1,x2=chunk(x,chunks=2,dim=−1)x1, x2 = chunk(x, chunks=2, dim=-1)

    dx=cat((cos1∗dy1+sin2∗dy2,cos2∗dy2−sin1∗dy1),dim=−1)dx = cat((cos1 * dy1 + sin2 * dy2, cos2 * dy2 - sin1 * dy1), dim=-1)

    dcos=sum(dy∗x,dims)dcos = sum(dy * x, dims)

    dsin=sum(dy∗cat((−x2,x1),dim=−1),dims)dsin = sum(dy * cat((-x2, x1), dim=-1), dims)

    (2)interleave模式(mode等于1):

    dy1,dy2=dy[...,::2],dy[...,1::2]dy1, dy2 = dy[..., :: 2], dy[..., 1 :: 2]

    cos1,cos2=cos[...,::2],cos[...,1::2]cos1, cos2 = cos[..., :: 2], cos[..., 1 :: 2]

    sin1,sin2=sin[...,::2],sin[...,1::2]sin1, sin2 = sin[..., :: 2], sin[..., 1 :: 2]

    x1,x2=x[...,::2],x[...,1::2]x1, x2 = x[..., :: 2], x[..., 1 :: 2]

    dx=stack((cos1∗dy1+sin2∗dy2,cos2∗dy2−sin1∗dy1),dim=−1).reshape(dy.shape)dx = stack((cos1 * dy1 + sin2 * dy2, cos2 * dy2 - sin1 * dy1), dim=-1).reshape(dy.shape)

    dcos=sum(dy∗x,dims)dcos = sum(dy * x, dims)

    dsin=sum(dy∗stack((−x2,x1),dim=−1).reshape(dy.shape),dims)dsin = sum(dy * stack((-x2, x1), dim=-1).reshape(dy.shape), dims)

    • Ascend 950PR/Ascend 950DT:

    (3)quarter模式(mode等于2):

    dy1,dy2,dy3,dy4=chunk(dy,chunks=4,dim=−1)dy1, dy2, dy3, dy4 = chunk(dy, chunks=4, dim=-1)

    cos1,cos2,cos3,cos4=chunk(cos,chunks=4,dim=−1)cos1, cos2, cos3, cos4 = chunk(cos, chunks=4, dim=-1)

    sin1,sin2,sin3,sin4=chunk(sin,chunks=4,dim=−1)sin1, sin2, sin3, sin4 = chunk(sin, chunks=4, dim=-1)

    x1,x2,x3,x4=chunk(x,chunks=4,dim=−1)x1, x2, x3, x4 = chunk(x, chunks=4, dim=-1)

    dx=cat((cos1∗dy1+sin2∗dy2,cos2∗dy2−sin1∗dy1,cos3∗dy3+sin4∗dy4,cos4∗dy4−sin3∗dy3),dim=−1)dx = cat((cos1 * dy1 + sin2 * dy2, cos2 * dy2 - sin1 * dy1, cos3 * dy3 + sin4 * dy4, cos4 * dy4 - sin3 * dy3), dim=-1)

    dcos=sum(dy∗x,dims)dcos = sum(dy * x, dims)

    dsin=sum(dy∗cat((−x2,x1,−x4,x3),dim=−1),dims)dsin = sum(dy * cat((-x2, x1, -x4, x3), dim=-1), dims)

    (4)interleave-half模式(mode等于3):

    dy1,dy2=chunk(dy,chunks=2,dim=−1)dy1, dy2 = chunk(dy, chunks=2, dim=-1)

    cos1,cos2=chunk(cos,chunks=2,dim=−1)cos1, cos2 = chunk(cos, chunks=2, dim=-1)

    sin1,sin2=chunk(sin,chunks=2,dim=−1)sin1, sin2 = chunk(sin, chunks=2, dim=-1)

    x1,x2=x[...,::2],x[...,1::2]x1, x2 = x[..., :: 2], x[..., 1 :: 2]

    dx=stack((cos1∗dy1+sin2∗dy2,cos2∗dy2−sin1∗dy1),dim=−1).reshape(dy.shape)dx = stack((cos1 * dy1 + sin2 * dy2, cos2 * dy2 - sin1 * dy1), dim=-1).reshape(dy.shape)

    dcos=sum(dy∗cat((x1,x2),dim=−1),dims)dcos = sum(dy * cat((x1, x2), dim=-1), dims)

    dsin=sum(dy∗cat((−x2,x1),dim=−1),dims)dsin = sum(dy * cat((-x2, x1), dim=-1), dims)

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
dy 输入 公式中的dy,表示正向计算输出y的导数。 BFLOAT16、FLOAT16、FLOAT32 ND
cos 输入 公式中的cos,正向计算输入,需与dy数据类型一致。 BFLOAT16、FLOAT16、FLOAT32 ND
sin 输入 公式中的sin,正向计算输入,需与dy数据类型一致。 BFLOAT16、FLOAT16、FLOAT32 ND
xOptional 可选输入 公式中的x,正向计算输入。如果为空指针,则不计算dcosOut和dsinOut。 BFLOAT16、FLOAT16、FLOAT32 ND
mode 输入 公式中的旋转模式。 INT64 -
dxOut 输出 公式中的dx,输入x的导数。 BFLOAT16、FLOAT16、FLOAT32 ND
dcosOut 输出 公式中的dcos,输入cos的导数,仅当xOptional非空时有效。 BFLOAT16、FLOAT16、FLOAT32 ND
dsinOut 输出 公式中的dsin,输入sin的导数,仅当xOptional非空时有效。 BFLOAT16、FLOAT16、FLOAT32 ND

约束说明

  • Ascend 950PR/Ascend 950DT: 输入张量dy支持BNSD、BSND、SBND、TND排布。各参数的shape约束可以描述如下:

    • 输入张量dy、cos、sin及输出张量dx的最后一维大小必须相同,且小于等于1024。对于half、interleave和interleave-half模式,最后一维必须能被2整除,对于quarter模式,最后一维必须能被4整除。
    • 输入张量dy和输出张量dx的shape必须完全相同。
    • 输入张量cos和sin的shape必须完全相同,cos和sin的shape需要与dy满足broadcast关系,且广播后的shape必须等于dy的shape。
    • 当dy为TND时,cos、sin支持T1D、TND。
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品、Atlas A2 训练系列产品/Atlas A2 推理系列产品:

    • 输入张量dy支持BNSD、BSND、SBND排布。
    • 输入张量dy、cos、sin、xOptional及输出张量dxOut、dcosOut、dsinOut的D维度大小必须相同,满足D<896,且必须为2的倍数。
    • 输入张量dy、xOptional和输出张量dxOut的shape必须完全相同。
    • 输入张量cos、sin和输出张量dcosOut、dsinOut的shape必须完全相同,且cos和sin的shape必须完全相同。
    • half模式:
      • B,N < 1000;当需要计算dsin、dcos时,B * N <= 1024
      • 当dy为BNSD时,cos、sin支持11SD、B1SD、BNSD;当cos、sin为B1SD时需满足B < S
      • 当dy为BSND时,cos、sin支持1S1D、BS1D、BSND;当cos、sin为BS1D时需满足B < S
      • 当dy为SBND时,cos、sin支持S11D、SB1D、SBND
    • interleave模式:
      • B * N < 1000
      • 当dy为BNSD时,cos、sin支持11SD
      • 当dy为BSND时,cos、sin支持1S1D
      • 当dy为SBND时,cos、sin支持S11D

调用说明

调用方式 调用样例 说明
aclnn调用 test_aclnn_rotary_position_embedding_grad 通过aclnnRotaryPositionEmbeddingGrad接口方式调用RotaryPositionEmbeddingGrad算子。