Paddle paddle使用cpu正常,改用gpu时报错 RuntimeError: parallel_for failed: invalid configuration argument

frebpwbc  于 2022-04-21  发布在  Java
关注(0)|答案(4)|浏览(290)

paddle-gpu: 1.8.4.post107
paddle: 1.8.1

服务器信息:nvidia-smi

部分代码:
use_cuda = True
place = fluid.CUDAPlace(0) if use_cuda else fluid.CPUPlace()
exe = fluid.Executor(place)
start_program = fluid.default_startup_program()
exe.run(start_program) # 一定要在 exe.run(start_program) 之后才能执行load_persistables加载保存的数据

报错内容:

报错段代码:

pw136qt2

pw136qt21#

您好,麻烦提供下完整复现代码,我们这边复现定位下问题,谢谢

b0zn9rqh

b0zn9rqh2#

不好意思,完整的代码比较复杂。我罗列一下出问题的地方吧。
我通过查找,发现上面的问题与 opt.minimize(self.loss) 这段代码有关。我通过修改self.loss,程序会有所变化。

第一种情况:

self.loss = self.center_loss + self.iou_loss + self.cls_loss + 0.1 * self.l1loss
在CPU下,整个程序能运行。在GPU下就报上面的错。

第二种情况

self.loss = self.iou_loss + self.cls_loss + 0.1 * self.l1loss
在GPU下能运行

第三种情况

self.loss = self.center_loss + self.cls_loss
在GPU下能运行

第四种情况

self.loss = self.center_loss + self.iou_loss
在GPU下报上面的错误

第五种情况

self.loss = self.center_loss + 0.1 * self.l1loss
在GPU下报上面的错误

第六种情况

self.loss = self.center_loss + self.l1loss
在GPU下报上面的错误

所有loss的shape 都是(1,)的tensor,dtype=float32

vohkndzv

vohkndzv3#

@shaofeifei11 你好,实现这个功能有参考哪部分代码吗?
每个loss函数都是没问题的,可以排查下计算loss的方式,centor_loss和l1 loss 是不是有冲突的地方

agxfikkp

agxfikkp4#

损失函数

center_loss = fluid.layers.sigmoid_cross_entropy_with_logits(label=self.center_ness, x=self.predict_center)

    self.center_loss = fluid.layers.reduce_mean(center_loss, name="center_loss")

    cls_loss = fluid.layers.sigmoid_cross_entropy_with_logits(label=self.mask, x=self.cls_logits)

    self.cls_loss = fluid.layers.reduce_mean(cls_loss, name="cls_loss")

    self.iou_loss = self.get_iou_loss()

    self.l1loss = self.smoothL1loss()

    self.loss = self.center_loss + self.iou_loss + self.cls_loss + 0.1 * self.l1loss

    boundaries = [10000, 20000, 40000]

    values = [1e-4, 0.5e-4, 1e-5, 0.5e-5]

    self.lr = fluid.layers.piecewise_decay(boundaries, values)

    self.opt = fluid.optimizer.AdamOptimizer(learning_rate=self.lr, beta1=0.9, beta2=0.999, epsilon=1e-7,
                                             grad_clip=fluid.clip.GradientClipByGlobalNorm(clip_norm=config.grad_clip))

    self.opt.minimize(self.loss)

上面是我的损失函数代码,我通过修改 center_loss 中的 self.center_ness 就能够控制是否会报 cast raises an exception thrust::system::system_error, parallel_for failed: invalid configuration argument 这个错误。

下面代码GPU运行报错,错误就是该issue最上面的错误

reg1 = fluid.layers.cast(reg1, "float32")

    reg2 = fluid.layers.cast(reg2, "float32")

    self.center_ness = fluid.layers.elementwise_min(reg1, reg2) + fluid.layers.elementwise_min(reg1, reg2)

下面代码GPU运行不报错

reg1 = fluid.layers.cast(reg1, "float32")

    reg2 = fluid.layers.cast(reg2, "float32")

    aaaa = fluid.layers.elementwise_min(reg1, reg2)

    self.center_ness = aaaa + aaaa

请问,我该从哪个方向入手去解决这个 self.center_ness 所引发的 cast raises an exception thrust::system::system_error, parallel_for failed: invalid configuration argument 问题呢?

相关问题