tensorflow - tensorflow 消耗的 GPU 内存是否完全等于所需的
问题描述
我使用 tensorflow c++ 版本进行 CNN 推理。我已经set_allow_growth(true)
,但它仍然消耗比实际需要更多的 GPU 内存。
set_per_process_gpu_memory_fraction
只能设置GPU显存的上限,但不同的CNN模型有不同的上限。有没有解决问题的好方法
解决方案
不幸的是,没有开箱即用的标志,但这可以(手动)完成:
默认情况下,TF 会分配所有可用的 GPU 内存。设置set_allow_growth
为true
,导致 TF 以块的形式分配所需的内存,而不是一次分配所有 GPU 内存。每次 TF 需要比已分配更多的 GPU 内存时,它都会分配另一个块。
此外,正如您所提到的,TF 支持set_per_process_gpu_memory_fraction
以占总 GPU 内存的百分比来指定进程可能需要的最大 GPU 内存。这会导致内存不足 (OOM) 异常,以防 TF 需要比允许更多的 GPU 内存。
不幸的是,我认为块大小不能由用户设置,并且在 TF 中是硬编码的(出于某种原因,我认为块大小是 4GB,但我不确定)。
这导致能够指定允许 TF 使用的最大 GPU 内存量(以百分比表示)。如果您知道您总共有多少 GPU 内存(可以通过 检索nvidia-smi
,并且您知道您想要允许多少内存,您可以用百分比计算它并将其设置为 TF.
如果您运行少量的神经网络,您可以通过使用不同的允许 GPU 内存运行它来找到每个神经网络所需的 GPU 内存,例如二分搜索,并查看使 NN 能够运行的最小分数是多少。然后,将您找到的值设置set_per_process_gpu_memory_fraction
为每个 NN 的值将实现您想要的。
推荐阅读
- r - 将数据框中的周数转换为日期
- php - Laravel,ovverride 属性名称不起作用
- c++ - 无法正确实现upper_bound()
- java - 两个用于存储整数的哈希表
- python - Raspberry Pi POST 数据失败 超出最大重试次数
- vb.net - 检索已上传文档的 ID
- laravel - Laravel 登录表单路径
- python - 每次向数组添加按下的键并在每次数组为 50 时清除
- php - 第 164 行的 engine/Library/Enlight/Hook/ProxyFactory.php 中不存在类 Shopware_Controllers_Backend_MytestPaymentServices
- python - 我无法为用户显示书签(django)