【问题标题】:Can tensorflow consume GPU memory exactly equal to requiredtensorflow 消耗的 GPU 内存是否完全等于所需的
【发布时间】:2023-04-02 11:47:01
【问题描述】:

我使用 tensorflow c++ 版本做 CNN 推理。我已经set_allow_growth(true),但它仍然消耗比实际需要更多的 GPU 内存。

set_per_process_gpu_memory_fraction只能设置GPU显存的上限,不同的CNN模型有不同的上限。 有没有解决问题的好方法

【问题讨论】:

    标签: tensorflow tensorflow-c++


    【解决方案1】:

    不幸的是,没有开箱即用的标志,但这可以(手动)完成:

    默认情况下,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 能够运行的最小分数是多少。然后,将您找到的值设置为每个 NN 的 set_per_process_gpu_memory_fraction 值将达到您想要的效果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-06
      • 1970-01-01
      • 2021-03-10
      相关资源
      最近更新 更多