已关闭
[Bug]: mindformers/pynative Dropout 在 drop_prob=0.0 时仍下发 dropout 算子 #2330
hsshuai创建于  6月9日关闭于  6月9日
hsshuai成员
6月9日 创建

Checklist

🐞 问题详细描述

mindformers/pynative/layers/dropout.py 中 Dropout 在 drop_prob=0.0 时仍会调用底层 mindspore.mint.nn.functional.dropout。

当 dropout 概率为 0 时,语义上 dropout 已关闭,训练态下也应直接返回输入,不应继续下发 dropout 算子。当前行为会产生不必要的算子执行/图中节点,影响性能和算子行为预期。

最小复现逻辑:

import mindspore as ms
from mindspore import context
from mindformers.pynative.layers.dropout import Dropout

context.set_context(mode=context.PYNATIVE_MODE)

x = ms.ops.randn((2, 4, 16), dtype=ms.float32)
dropout = Dropout(0.0)
dropout.set_train(True)

out = dropout(x)

预期行为:

drop_prob=0.0 时直接返回输入,不调用底层 dropout 算子。
实际行为:

drop_prob=0.0 且 training=True 时仍进入底层 dropout 

### 详细的环境信息描述
            
MindFormers 分支:master / 当前开发分支
执行模式:PYNATIVE_MODE
影响模块:mindformers/pynative/layers/dropout.py
硬件/驱动/MindSpore 版本:所有版本

### 其他辅助信息

parallel_core/training_graph/transformer/dropout.py 中已有类似短路逻辑:

if not self.training or not self.use_dropout:
    return x
pynative dropout 实现应保持一致:当 drop_prob=0.0 或 eval 模式时直接返回输入。
            

### 版本信息
 
MF当前master

Thanks for contributing 🎉!

likedislike
Hhsshuai成员
6月9日 添加了label:bug
Hhsshuai成员
6月9日 添加了label:bug
Hhsshuai成员
6月9日 关联组件 由 [] 改变为 [B-SIG-MindFormers-Train]
Hhsshuai成员
6月9日 关联分支 由 [] 改变为 [master]
Hhsshuai成员
6月9日 问题后端类型 由 [] 改变为 [Ascend]
Hhsshuai成员
6月9日 修改了issue 的描述
MindSpore-BotMindSpore-Bot成员
6月9日 关闭了 issue
MindSpore-BotMindSpore-Bot成员
6月9日 issue状态由 TODO 改变为 DONE