已合并
feat(sgd): 新增SGD优化器算子arch35实现(Ascend 950PR/950DT,GE图模式) #8155
raoliang_sac创建于 8月1日
feat(sgd): 新增SGD优化器算子arch35实现(Ascend 950PR/950DT,GE图模式) #8155
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 raoliang_sac 的贡献)8月1日 创建了 pull request,commit 771a2155
8月1日 添加了label:cann-cla/yes
CANN-robot
8月1日 评论:
8月1日 评论:
Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| */*/README.md | ✅ 汤平川, 刘波, 陈娇 (3/2) | ✅ 陈娇 (1/1) |
| */*/op_graph/*_proto.h | ✅ 汤磊, 汤平川, 刘波 (3/2) | ✅ 汤磊 (1/1) |
| */*/op_host/*_def.cpp | ✅ 汤平川, 刘波, 汤磊 (3/2) | ✅ 汤磊 (1/1) |
| docs | ✅ 刘波, 汤平川, 陈娇 (3/2) | ✅ 陈娇 (1/1) |
| optim | ✅ 汤平川, 於欣洁, 刘波 (3/2) | ✅ 汤平川, 於欣洁 (2/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
raoliang_sac, thanks for your pull request. All authors of the commits have signed the CLA. 👍


CANN-robot
8月1日 评论:
8月1日 评论:
8月1日 将zengjuan,chenfeng61,crystalhu,yu-xinjie62,yangyang016,fanqirui,gitee-duhuiping,su-yueming,tang-lei01,chenqi317,wang-xing001,liubo75,tangweiwei2,gitcode-chenjiao,pingchuantang,zhouwenfang,wangyongguang,wuyao51511,caiwenwen设为评审人
8月1日 将zengjuan,chenfeng61,crystalhu,yu-xinjie62,yangyang016,fanqirui,gitee-duhuiping,su-yueming,tang-lei01,chenqi317,wang-xing001,liubo75,tangweiwei2,gitcode-chenjiao,pingchuantang,zhouwenfang,wangyongguang,wuyao51511,caiwenwen设为评审人
此处折叠了10条事件消息 查看更多
8月1日 添加了label:cann-cla/yes
raoliang_sac
8月2日 评论:
8月2日 评论:
compile


Rraoliang_sac
8月2日 update merge request[project id: 7665709, iid: 8155, commit_id: b874de0a69a18f9e48b23e76f871c63b69dae9e9] virtual merging success
8月2日 update merge request[project id: 7665709, iid: 8155, commit_id: b874de0a69a18f9e48b23e76f871c63b69dae9e9] virtual merging success
8月2日 添加了label:ci-pipeline-running
CANN-robot
8月2日 评论:
8月2日 评论:
流水线任务触发成功
任务链接 [d5f6cb255177403fb9e499f22407d65b][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| Compile_Ascend_X86_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_X86_mobile_station | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_ARM | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_single | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_experimental | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_X86_950 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_ARM_950 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Pre | ✅ SUCCESS | >>>>> | |
| pre_comment | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_X86_mobile_station_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_X86_950_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_ARM_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_single_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_experimental_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_Ascend_ARM_950_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_X86_monitor_910b | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_X86_monitor_910c | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_X86_monitor_950 | ✅ SUCCESS | >>>>> | >>>>> |
| Compile_classify | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86_mobile_station_9030_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| UT_Test_ophost | ✅ SUCCESS | ||
| UT_Test_opapi | ✅ SUCCESS | ||
| UT_Test_kernel | ✅ SUCCESS | ||
| UT_Test_opgraph | ✅ SUCCESS | ||
| PreSmoke_A900 | ✅ SUCCESS | >>>>> | |
| API_Check | ⚠️ WARNING | >>>>> | |
| PreSmoke_ATK_Test_A2 | ✅ SUCCESS | >>>>> | |
| UT_Test_harmony-infer-chs-nn | ✅ SUCCESS | ||
| UT_Test_harmony-infer-chs-nn-1 | ✅ SUCCESS | ||
| UT_Test_harmony-infer-cpro-nn | ✅ SUCCESS | ||
| UT_Test_report_lcov | ✅ SUCCESS | >>>>> |
[2026-08-02 01:29:18] CI执行结束


CANN-robot
8月2日 评论:
8月2日 评论:
流水线任务触发成功
任务链接 [bf7e6117ed3a48fe9f50fb4d4b07c66a][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| antipoison | ✅ SUCCESS | >>>>> | |
| codecheck_checkpr | ✅ SUCCESS | ||
| StaticCheck_codespell | ⚠️ WARNING | >>>>> | |
| StaticCheck_link_validity | ✅ SUCCESS | ||
| StaticCheck_resource_existence | ✅ SUCCESS | ||
| StaticCheck_tag_closed | ✅ SUCCESS | ||
| StaticCheck_markdownlint | ✅ SUCCESS | ||
| codecheck_precommit | ✅ SUCCESS | >>>>> | |
| SCA | ✅ SUCCESS | >>>>> |
[2026-08-02 01:16:00] CI执行结束


8月2日 添加了label:api-check-failed
8月2日 删除了label:ci-pipeline-running
8月2日 添加了label:ci-pipeline-passed
tang-lei01
8月4日 评论:
8月4日 评论:
/approve


TangPC
8月4日 评论:
8月4日 评论:
/lgtm
/approve


chenfeng
8月4日 评论:
8月4日 评论:
刷新issue等具体信息


Rraoliang_sac
8月4日 修改标题为 “feat(sgd): 新增SGD优化器算子arch35实现(Ascend 950PR/950DT,GE图模式)”,原标题为“feat(sgd): 新增 SGD 优化器算子 arch35 实现(Ascend950 / regbase)”
8月4日 修改标题为 “feat(sgd): 新增SGD优化器算子arch35实现(Ascend 950PR/950DT,GE图模式)”,原标题为“feat(sgd): 新增 SGD 优化器算子 arch35 实现(Ascend950 / regbase)”
8月4日 修改了pull request 的描述
8月4日 添加了label:lgtm
8月4日 添加了label:approved
8月4日 关闭了关联的issue
8月4日 合入了pull request
描述
本 PR 为Ascend 950PR/Ascend 950DT (arch35 / DAV_3510 / regbase)上的 Ascend C 实现,共 22 个文件、+2719 行,纯新增,不修改任何存量文件(唯一的非新增改动是在
optim/sgd新增 SGD(带动量的随机梯度下降)优化器算子在docs/zh/op_list.md中追加一行算子登记)。改动原因
optim目录下已有fused_sgd,但那是语义不同的另一个算子;本仓此前不存在 SGD 算子,Ascend 950 上缺失该优化器的 Ascend C 实现。910B/910C 上 SGD 由 CANN 内置的 TBE 实现承载,Ascend 950 需要在本仓补齐。改动方法
1. 计算语义 —— 与 910B/910C 基线(canndev
nn_training_ops.h的REG_OP(SGD)与aic-ascend910b-ops-info.ini的[SGD]段)逐字对齐:parameters / gradient / learning_rate / accum / momentum / stat,图上只声明一个输出parameters——accum与stat靠覆写输入 GM 原地回写,与 A2 形态一致(A2 的 TBE 实现声明reuse=('accum','parameters','stat'))。momentum == 0(含-0.0)时accum/stat完全不写、逐位保持输入值;parameters照常更新。sgd_proto.h与 README 显式记录:PyTorch 把 dampening 放在 momentum 块内部,本算子(同 A2)放在外部,故m==0 && d>0 && stat==0时结果差(1-d)倍。这是对齐 A2 的有意选择,不是缺陷。2. Kernel 实现 ——
op_kernel/arch35/,基于 ATVOSS DAG +ElementwiseSch:sgd_dag.h用算子级 DAG 描述上述公式;sgd.cpp在运行期按momentum == 0选择两套 DAG(该掩码不是 TilingKey 维度:momentum是 Device 侧[1]张量,Host Tiling 阶段拿不到其数值,只能做运行期分支,binary 数量不变)。schMode / useNesterov / hasWeightDecay / hasDampening。非法组合nesterov==1 && dampening!=0由ASCENDC_TPL_SEL两组ARGS_SEL在编译期剪除,不生成对应 binary;Host 侧 InferShape 与 Tiling 亦对该组合报attribute_value_out_of_range。2×2×2 − 2 = 6(K0~K5)→ TPL_SEL 展开 12 → binary12 × 3 dtype = 36。3. Host 实现 ——
op_host/:sgd_def.cpp:dtypeFLOAT / FLOAT16 / BFLOAT16,format 仅ND,DynamicShapeSupportFlag(true)/DynamicRankSupportFlag(true)/PrecisionReduceFlag(false)(对齐 A2precision_reduce.flag=false);只AddConfig("ascend950"),不触碰任何 A2 配置。format 只做 ND 是跟随本仓 arch35 全族 optim 算子(apply_momentum/apply_ftrl/apply_adam_w_v2/apply_adamax/apply_centered_rms_prop)的既定约定 —— 这些算子的def.cpp一律只声明ge::FORMAT_ND,无一例声明私有 format。sgd_infershape.cpp:校验nesterov==true时dampening必须为 0、weight_decay >= 0;rank 限[1,8](rank-0 拒绝);空 tensor(任一轴为 0)拒绝为null_input;-1(UNKNOWN_DIM)支持、-2(UNKNOWN_RANK)透传。arch35/sgd_tiling.cpp:基于ElewiseBaseTiling。4. 交付形态:GE 图模式,不提供 aclnn 接口。
sgd_def.cpp保持ACLNNTYPE aclnn_exclude。依据:CANN 9.1.0 的include/aclnnop/无aclnn_sgd.h、libopapi.so未导出任何aclnnSgd*符号(阴性对照:同库确实导出aclnnFusedSgd,证明查法有效)、canndev 全仓无aclnn_sgd定义 —— SGD 在上游本就是纯图模式算子,本算子与之对齐。故docs/zh/op_list.md中op_api列填✗,docs/zh/op_api_list.md不涉及。关联的Issue
关联Issue #4554 —— https://gitcode.com/cann/ops-nn/issues/4554
测试
全部在
Ascend950PR真机 + CANN 9.1.0 上实测,合计 1081 项、0 失败:bin_precision100.0%、memory_oob_status全 PASS;6 个 tilingKey × 3 dtype 零缺失ratio_mare恒为 1.000,最大 MERE 1.553e-03examples/test_geir_sgd.cpp,accum/stat两条回写分支各 60/60 元素逐一核对边界覆盖:空 tensor(1D
[0]、2D[0,C]/[N,0]、多轴[0,0]、高 rank 混合)逐形态拒绝;rank-0 与 rank-9 两端拒绝;-2动态 rank 透传;inf/nan按 IEEE 语义无条件传播(判定方式是按 NaN/+Inf/-Inf 三张掩码逐位array_equal,不套相对误差)。性能判据说明(供评审取用):按仓内
verification.md §7.1「mean ≥ 1.2 且 min ≥ 0.5」口径为 200/200 PASS;按测试侧 test-bot-dev 的芯片对阈值((950PR, A100) = 0.5,逐例npu/gpu ≤ 0.5)为 191/200,9 条超阈值全部落在numel = 4M档、其中 7 条是momentum == 0。成因是访存量不对等而非实现慢:m == 0时 torch 不需要 momentum buffer,而本算子的契约要求无条件读accum;最差的一条 NPU 搬运 1.67 倍数据、耗时反而更短,按达成带宽折算NPU/GPU = 2.03x。对等访存量下 NPU 仍显著更快。本地 CI 复现:单算子包 @ascend950、910b、910_93、整仓 JIT(默认 soc,2144 targets)、整仓 A5@950(2527 targets)共 5 项编译全过、0 error。其中 910b 一项专门验证
sgd_infershape.cpp在 A2 上仍参与编译(kernel/tiling 由On [ascend910b], [sgd] not supported.排除,infershape 不排除),确认未引入会破坏 A2 的 arch35-only 头文件。文档更新
optim/sgd/README.md(185 行):产品支持情况、计算公式、参数说明、约束与注意事项。产品支持表按 SGD 在各产品形态上的可得性填写,并在表下显式声明「本仓的 Ascend C 实现只适配 Ascend 950PR/950DT,其余形态由 CANN 内置 TBE 实现提供」。docs/zh/op_list.md新增一行optim / sgd登记,op_kernel ✓ / op_host ✓ / op_api ✗ / op_graph ✓。docs/zh/op_api_list.md不涉及(本算子不提供 aclnn 接口)。类型标签
AI/Agent生成声明