gpu - TensorFlow 对象检测 API GPU 内存问题
问题描述
我目前正在尝试基于模型检测动物园训练模型以进行对象检测。在 CPU 上运行设置按预期工作,但在我的 GPU 上尝试相同会导致以下错误。
2021-03-10 11:46:54.286051: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library cublas64_11.dll
2021-03-10 11:46:54.751423: E tensorflow/stream_executor/cuda/cuda_blas.cc:226] failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED
2021-03-10 11:46:54.764147: E tensorflow/stream_executor/cuda/cuda_blas.cc:226] failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED
2021-03-10 11:46:54.764233: W tensorflow/stream_executor/stream.cc:1455] attempting to perform BLAS operation using StreamExecutor without BLAS support
在任务管理器中监视 GPU 信息,似乎 tensorflow(据我所知)试图分配整个内存。在达到特定峰值(大约 8Gb 的 7.3 Gb)后不久,TF 崩溃并出现上面代码段中的错误。
互联网 / stackoverflow 中针对此特定错误的解决方案提到,可以通过动态内存增长来解决此问题。这样做似乎可行,并且 TF 设法创建了至少一个新的检查点,但最终崩溃并出现类似类别的错误。在这种情况下,CUDA_OUT_OF_MEMORY 错误。
系统信息:
- 锐龙 5
- 16 GB 内存
- 具有 8Gb 显存的 RTX 2060 Super
训练设置:
- 张量流 2.4
- CUDA 11.0(也尝试了几种 CUDA cuDNN 版本的组合)
- cuDNN 8.0.4
最初我想使用预训练的 EfficientDet D6 模型,但也尝试了其他几个模型,如 EfficientDet D4、CenterNet HourGlass 512x512 和 SSD MobileNet V2 FPNLite。所有这些模型都以不同的批量大小开始,但即使批量大小为 1,问题仍然存在。训练图像也不大(平均为 600 x 800)。目前共有 30 张图像,每班 15 张用于训练(我知道训练数据集应该更大,但这只是为了测试设置)。
现在我的问题是,是否有人有根据的猜测或另一种方法来找到此错误的原因,因为我无法想象我的 2060 至少无法训练批量大小为 1 且图像相当小的 SSD。会不会是硬件故障?如果是这样,有没有办法检查?
解决方案
我已经完全重新安装了每个涉及的组件。这次我可能做了一些不同的事情,但我不能说是什么。至少我现在能够利用 GPU 进行训练。
推荐阅读
- flutter - 当我键入诸如“。”之类的字符时,如何在 TextFormField 中删除电子邮件的自动完成功能 或者 ”@”?
- android - 切换标签时BottomNavigationView标题隐藏
- jenkins - Jenkins中的文件参数上传文件丢失
- asp.net - 更改 IIS 虚拟目录路径是否是 ASP.NET (4.6) Web 应用程序的良好无停机升级策略?
- c# - 访问文件系统 UWP
- google-cloud-platform - 将 CSP 标头添加到 Google Cloud Storage
- typescript - 在打字稿中检查数组的类型
- azure-functions - 时间触发 Azure 函数显示 Microsoft.WindowsAzure.Storageb 错误
- unit-testing - JUnit 测试未按顺序运行
- java - 如何为窗口应用程序设置 setBorder?