tensorflow/core/common_runtime/gpu/gpu_util.cc:339] CPU->GPU Memcpy failed

在使用executor进行多个神经网络的并行训练时,出现以下错误:

2024-01-28 17:30:32.433575: I tensorflow/stream_executor/stream.cc:2076] [stream=0000014F2C72CD20,impl=0000014F2DA1B340] did not wait for [stream=0000014F2C72CCA0,impl=0000014F2DA1B430]
2024-01-28 17:30:32.433750: I tensorflow/stream_executor/stream.cc:5024] [stream=0000014F2C72CD20,impl=0000014F2DA1B340] did not memcpy host-to-device; source: 0000014F2D19E0C0
2024-01-28 17:30:32.433970: F tensorflow/core/common_runtime/gpu/gpu_util.cc:339] CPU->GPU Memcpy failed

Process finished with exit code -1073740791 (0xC0000409)

查找后给出的解释是:
这个错误通常是由 GPU 内存访问问题引起的。它可能是由于要拷贝的数据过大,超出了 GPU 内存的限制。另外,也有可能是由于 GPU 驱动程序或硬件问题导致的内存拷贝失败。

要解决这个问题,可以尝试以下几种方法:

减少模型的内存占用:可以减少模型的大小、减少批处理大小或使用更小的数据类型来减少内存需求。
检查 GPU 内存使用情况:可以使用 TensorFlow 提供的工具来监视 GPU 内存的使用情况,确保没有超出 GPU 的内存限制。
更新 GPU 驱动程序:有时候,更新 GPU 驱动程序可以解决一些与 GPU 内存访问相关的问题。
检查硬件问题:检查 GPU 是否正常工作,确保没有硬件问题导致内存拷贝失败。

为了查找问题所在,我进行了消融实验,最后将问题聚焦在了我的模型网络上面(注意:在调试的时候,我的网络模型没有任何的错误出现,我是发现在我将网络模型替换为其他网络时,错误解决,才找到问题的具体位置,由此看来错误不一定是由错误本身引起的),在对网络进行逐语句消融实验后,找到是卷积步骤出现了问题,没有进行填充。
于是把代码从

x = tfkeras.layers.Conv2D(10, kernel_size=5)(inputs)

改为

x = tfkeras.layers.Conv2D(10, kernel_size=5, padding="same")(inputs)

问题解决!

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值