Tensorflow 在训练 yolo 时报告了 CUDA_ERROR_ILLEGAL_ADDRESS 错误
Posted
技术标签:
【中文标题】Tensorflow 在训练 yolo 时报告了 CUDA_ERROR_ILLEGAL_ADDRESS 错误【英文标题】:Tensorflow reported CUDA_ERROR_ILLEGAL_ADDRESS bug while train yolo 【发布时间】:2020-07-01 09:47:09 【问题描述】:这是一个非常奇怪的错误。 环境:tf 1.12 + cuda9.0 + cudnn 7.5 + 单RTX 2080
今天我尝试在我的新设备上训练 YOLO V3 网络。批量大小为 4。一开始一切都很顺利,训练照常开始,我可以看到训练过程中的损失减少。
但是,在大约 35 轮时,它报告了一条消息:
2020-03-20 13:52:01.404576:E tensorflow/stream_executor/cuda/cuda_event.cc:48] 事件状态轮询错误:查询事件失败:CUDA_ERROR_ILLEGAL_ADDRESS:遇到非法内存访问 2020-03-20 13:52:01.404908: F tensorflow/core/common_runtime/gpu/gpu_event_mgr.cc:274] 意外事件状态:1
并退出火车进程。
我已经试过好几次了。它是随机发生的。培训过程开始后可能需要 30 分钟或几个小时。
但如果我将批量大小更改为 2。它可以成功训练。
那么为什么会这样呢?如果我的环境不合适或者不适合RTX 2080,这个bug应该发生在train progress的早期开始但中间。我的 yolo 网络中的层在开始时都是可训练的,因此在训练过程中没有任何变化。为什么它可以在第一轮训练正确但在中间失败?为什么较小的批量可以成功训练?
我现在该怎么办?我能想到的解决方案是: 1:在cuda 10 + cudnn 7.5中编译tf 1.12再试一次。 2:也许更新tensorflow和cuda? 都花了不少钱。
【问题讨论】:
不看你的代码,很难判断问题是什么......请提供Minimal, Reproducible Example根据你的描述,它可以是任何东西,包括你的代码中的问题,out-of-内存错误等等... 嗨,您找到解决方法了吗?我有一个类似的问题。我有两个 Titan RTX。它通常发生在较大的批量大小中,例如 128 及以上。但它是间歇性的,它会训练一两个时代然后出错。我正在运行 Ubuntu 18.04、TensorFlow 2.2.0(也尝试过 2.1.0,同样的问题)。它似乎与某些层有关 - 如果我删除模型中的两个 GRU 层,问题就会消失。 @ChrisM 你找出问题所在了吗?我认为这与卡的内存不足有关。当我有一个大批量时,它会在训练中的某个时刻崩溃,但是当批量小时,它会训练,但需要很长时间,所以我必须做出牺牲,以免我的电脑在 6 小时内不开机训练。 @Rajivrocks 您好,感谢您的询问。在尝试了很多事情(多次重新安装 CUDA、更改 TF 版本等)之后,我运行了一个名为 gpu-burn 的小工具,这表明我的一个 GPU 出现了故障。我已经联系了我的机器供应商,正在等待新的设备。机器和卡是全新的,所以我还是有点怀疑……我收到新卡后会更新! @TaylrCawte 感谢您的提问。我们使用了gpu-burn,它告诉我们我们的第一张卡有问题(虽然不是什么方式)。查找有关它的更多信息here。只要您指定,它就会运行一个大的 MatMul 操作。与所有可能给您的系统带来压力的程序一样,请小心使用。您还可以通过运行 cuda 示例获得一些信息,但您必须构建这些示例。它们的位置取决于您的 cuda 工具包的安装位置,可能在/usr/local/cuda-10.1/lib64
下(对我们来说,在 Ubuntu 18.04 下)。
【参考方案1】:
检查 Cuda/Cudnn/Driver 版本是否适合您的卡 https://docs.nvidia.com/deeplearning/cudnn/support-matrix/index.html#cudnn-versions-764-765。
如果上面的检查结果正常,那么这个问题可能是因为@ChrisM 评论的 GPU 卡损坏。
【讨论】:
以上是关于Tensorflow 在训练 yolo 时报告了 CUDA_ERROR_ILLEGAL_ADDRESS 错误的主要内容,如果未能解决你的问题,请参考以下文章
SVN中与资源库同步时报告了错误。1 中的 0 个资源已经同步
TensorFlow:如何测量每个张量占用多少 GPU 内存?