name | about | labels |
---|---|---|
Bug Report | Use this template for reporting a bug | kind/bug |
Hardware Environment(Ascend
/GPU
/CPU
): Ascend
Software Environment:
-- MindSpore version (source or binary): vm+graph
-- Python version (e.g., Python 3.7.5):
-- OS platform and distribution (e.g., Linux Ubuntu 16.04):
-- GCC/Compiler version (if compiled from source):
def test_parser_switch_layer_switch_seq():
func1 = TwoLayerReLU()
func2 = TwoLayerSoftmax()
funcsa = (func1, func2)
funcsb = (func2, func1)
class SwitchSeqNet(Cell, MetaFactory):
def __init__(self, funcsa, funcsb):
super().__init__()
MetaFactory.__init__(self)
self.funcsa = funcsa
self.funcsb = funcsb
def construct(self, i, x):
x = self.funcsa[i](x)
x = self.funcsb[i](x)
return x
class ReluSoftmax(Cell):
def __init__(self):
super().__init__()
self.relu = nn.ReLU()
self.softmax = nn.Softmax()
self.neg = P.Neg()
def construct(self, x):
x = self.relu(x)
x = self.neg(x)
x = self.softmax(x)
x = self.neg(x)
return x
net = SwitchSeqNet(funcsa, funcsb)
good_net = ReluSoftmax()
inputs = Tensor(np.random.randn(2, 3, 4, 5).astype(np.float32))
i = Tensor(0, mstype.int32)
netout = net(i, inputs)
goodout = good_net(inputs)
allclose_nparray(goodout.asnumpy(), netout.asnumpy(), 0, 0)
# test backward
grad = Tensor(np.random.randn(2, 3, 4, 5).astype(np.float32))
back_net = GradOfAllInputs(net)
back_net_good = GradOfAllInputs(good_net)
back_out = back_net(i, inputs, grad)
back_out_good = back_net_good(inputs, grad)
allclose_nparray(back_out[1].asnumpy(), back_out_good[0].asnumpy(), 0, 0)
用例卡住
执行卡住,执行序如下
Index[0], node name[Default/Assign-op27], logic id[4294967295], stream id[0], node info[kernel_graph_0:[CNode]57{[0]: ValueNode Assign, [1]: inputs, [2]: x, [3]: ValueNode U}]
Index[1], node name[Default/Assign-op25], logic id[4294967295], stream id[0], node info[kernel_graph_0:[CNode]55{[0]: ValueNode Assign, [1]: inputs, [2]: x, [3]: ValueNode U}]
Index[2], node name[Default/LabelSwitch-op29], logic id[4294967295], stream id[0], node info[kernel_graph_0:[CNode]59{[0]: ValueNode LabelSwitch, [1]: i, [2]: [CNode]58}], label id[1, 2]
Index[3], node name[Default/LabelSet-op45], logic id[4294967295], stream id[0], node info[kernel_graph_1:[CNode]77{[0]: ValueNode LabelSet, [1]: ValueNode U}], label id[2]
Index[4], node name[Default/Softmax-op9], logic id[4294967295], stream id[0], node info[kernel_graph_1:x{[0]: ValueNode Softmax, [1]: inputs}]
Index[5], node name[Default/Neg-op8], logic id[4294967295], stream id[0], node info[kernel_graph_1:x{[0]: ValueNode Neg, [1]: x}]
Index[6], node name[Default/Assign-op46], logic id[4294967295], stream id[0], node info[kernel_graph_1:[CNode]78{[0]: ValueNode Assign, [1]: [Parameter]62, [2]: x, [3]: ValueNode
Index[7], node name[Default/LabelGoto-op48], logic id[4294967295], stream id[0], node info[kernel_graph_1:[CNode]80{[0]: ValueNode LabelGoto, [1]: [CNode]79}], label id[3]
Index[8], node name[Default/LabelSet-op40], logic id[4294967295], stream id[0], node info[kernel_graph_2:[CNode]72{[0]: ValueNode LabelSet, [1]: ValueNode U}], label id[1]
Index[9], node name[Default/FusionOp_ReLU_Neg-op50], logic id[4294967295], stream id[0], node info[kernel_graph_2:x{[0]: ValueNode FusionOp_ReLU_Neg, [1]: inputs}]
Index[10], node name[Default/Assign-op41], logic id[4294967295], stream id[0], node info[kernel_graph_2:[CNode]73{[0]: ValueNode Assign, [1]: [Parameter]62, [2]: x, [3]: ValueNode
Index[11], node name[Default/LabelSet-op30], logic id[4294967295], stream id[0], node info[kernel_graph_0:[CNode]60{[0]: ValueNode LabelSet, [1]: [CNode]59}], label id[3]
Index[12], node name[Default/Assign-op34], logic id[4294967295], stream id[0], node info[kernel_graph_0:[CNode]65{[0]: ValueNode Assign, [1]: inputs, [2]: [CNode]61, [3]: ValueNode<UMonad
Index[13], node name[Default/Assign-op32], logic id[4294967295], stream id[0], node info[kernel_graph_0:[CNode]63{[0]: ValueNode Assign, [1]: inputs, [2]: [CNode]61, [3]: ValueNode<UMonad
Index[14], node name[Default/LabelSwitch-op36], logic id[4294967295], stream id[0], node info[kernel_graph_0:[CNode]67{[0]: ValueNode LabelSwitch, [1]: i, [2]: [CNode]66}], label id[2, 1]
kernel_graph1和kernel_graph2被多次调用,关联多子图调用需求,使用栈解决
多子图调用,循环嵌套,死循环,需要算子支持。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
不支持要添加文档说明
贺老师修改可能能改掉这个问题,待验证后再明确是否转需求。
使用最新带贺老师修改的版本验证还是出现执行卡住的问题,需要进行适配。
没有卡主,结果不对,数据传递有问题。
03.20 分析进展:
用例的执行如图所示,从执行序上看没有明显的循环,从dump的数据上也没有循环产生。
通过dump数据分析,没有发现数据计算过程有数据踩踏等问题。
怀疑RELU_NEG融合影响精度。
03.23 分析进展:
%0 = ReLU(x_0)
%1 = Neg(%0)
%2 = SoftMax(%1)
%3 = Neg(%2)
……
%4 = Neg(……)
%5 = ReLU(x_1)
%6 = ReLUGrad(%4, %5)
……
%0 = ReLU(x_0)
和%5 = ReLU(x_1)
是相同的,输入均为最开始的用户输入x_0
和x_1
不相同,具体原因需要进一步分析。由于最新的RUN版本修改了LabelSwitch底层的一些逻辑,导致该用例在新的run包上无法验证通过。
**对于Run更新后的问题修改 **
对于相同label_id,使用新的label_id,同时插入新的label_set()
修改前:
修改后:
master PR: https://gitee.com/mind_spore/dashboard/projects/mindspore/mindspore/pulls/14149
r1.2 PR: https://gitee.com/mind_spore/dashboard/projects/mindspore/mindspore/pulls/14150
测试建议: 原用例判断条件是allclose_nparray(back_out[1].asnumpy(), back_out_good[0].asnumpy(), 0, 0)
,需要修改为allclose_nparray(back_out[1].asnumpy(), back_out_good[0].asnumpy(), 0.0001, 0.0001)
r1.2分支回归通过
master分支回归通过
登录 后才可以发表评论