如何限制tensorflow GPU内存使用?

2024-01-04

我在 Ubuntu 18.04 中使用了tensorflow-gpu 1.13.1,并在 Nvidia GeForce RTX 2070 上使用了 CUDA 10.0(驱动程序版本:415.27)。

下面的代码用于管理张量流内存使用情况。我有大约 8Gb GPU 内存,因此 TensorFlow 不得分配超过 1Gb 的 GPU 内存。但是当我查看内存使用情况时nvidia-smi命令,我看到,尽管我使用 GPUOptions 限制了内存数量,但它使用了 ~1.5 Gb。

memory_config = tf.ConfigProto(gpu_options=tf.GPUOptions(per_process_gpu_memory_fraction=0.12))

memory_config.gpu_options.allow_growth = False

with tf.Session(graph=graph, config=memory_config) as sess:
    output_dict = sess.run(tensor_dict,
                           feed_dict={image_tensor: np.expand_dims(image, 0)})

为什么会这样?我如何才能避免这种情况或至少计算每个会话的内存需求?我需要对每个进程进行严格的限制,因为我有几个具有不同会话的并行实例,所以我需要确保不会出现资源竞争

顺便说一句,我尝试将 memory_config.gpu_options.allow_growth 设置为 False,但它没有任何影响。 Tensorflow 仍然以相同的方式分配内存,独立于此标志值。而且看起来也很奇怪


Solution尝试用gpu_options.allow_growth = True查看消耗了多少默认内存tf.Session创建。那段记忆将是always无论值如何分配。

根据您的结果,它应该小于 500MB。所以如果你希望每个进程truly每个有 1GB 内存,计算:

(1GB minus default memory)/total_memory

Reason

当您创建一个tf.Session,无论您的配置如何,Tensorflow 设备都是在 GPU 上创建的。和这个device需要一些最小内存。

import tensorflow as tf

conf = tf.ConfigProto()
conf.gpu_options.allow_growth=True
session = tf.Session(config=conf)

Given allow_growth=True,不应该有GPU分配。但实际上,它会产生:

2019-04-05 18:44:43.460479:我tensorflow/core/common_runtime/gpu/gpu_device.cc:1053]创建了TensorFlow设备(/job:localhost/replica:0/task:0/device:GPU:0 with 15127 MB内存)->物理GPU(设备:0,名称:Tesla P100-PCIE-16GB,pci总线id:0000:03:00.0,计算能力:6.0)

它占用内存的一小部分(根据我过去的经验,内存量因 GPU 型号而异)。NOTE:环境allow_growth占用与设置几乎相同的内存per_process_gpu_memory=0.00001,但后者将无法正确创建会话。

在这种情况下,它是345MB :

这就是您正在经历的偏移。让我们看看如果出现以下情况per_process_gpu_memory:

conf = tf.ConfigProto()
conf.gpu_options.per_process_gpu_memory_fraction=0.1
session = tf.Session(config=conf)

由于 GPU 有16,276MB记忆、设置per_process_gpu_memory_fraction = 0.1 probably让您认为只会分配大约 1,627MB。但事实是:

1,971MB已分配,但这与默认内存 (345MB) 和预期内存 (1,627MB) 的总和一致。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何限制tensorflow GPU内存使用? 的相关文章

随机推荐

  • 如何正确使用HTTP_X_FORWARDED_FOR?

    好的 我有一个小的身份验证问题 我的 Web 服务允许使用用户名和密码通过 HTTP 连接到我的 API 但此连接也可以限制为特定的 IP 地址 这意味着 SERVER REMOTE ADDR 可能是不正确的 我已经知道任何 IP 信息永远
  • 如何在 iOS 中从 MTKView 制作屏幕截图图像?

    我指的是金属套件必需品 https developer apple com metal 并通过以下方式制作模型查看器应用程序MetalKit in iOS 9 1 我想制作屏幕截图图像 RGBA 格式 MTKView 但是 我只得到黑色图像
  • 使用storm时如何将拓扑上下文中的对象访问到bolt中?

    我们在创建拓扑时需要传递一个对象 以便 Bolt 可以访问该对象并基于该对象进行一些进一步的处理 是否可以通过传递对象TopplogyContext如果是 怎么办 或者是否有其他方法可以在提交拓扑时传递对象 然后再提交 以便 Bolt 可以
  • 以编程方式更改 Xib 方向的最佳方法

    我有一个应用程序 它有一个设置页面 用户可以在其中更改应用程序的语言 最终 xibs的方向将会改变 解释一下 例如 如果语言是英语 则方向将为 LTR 但如果是阿拉伯语 则为 RTL Question 实现这一目标的最佳方法是什么 尝试解决
  • C# 中的正则表达式负向前瞻

    我需要匹配 this 但不是 this 我有这个代码 Match match Regex Match result RegexOptions IgnoreCase while match Success MessageBox Show ma
  • 如何使用代码更改组合框的边框颜色?

    我有一个组合框 我想将边框的颜色更改为红色以将其标记为必填字段 我正在通过我的代码动态生成此组合框列 为了更改边框颜色 我应该设置哪些属性 DataGridTemplateColumn dataGridComboBoxTemplateCol
  • 无法通过 PowerShell 将角色添加到 Azure 应用程序注册

    我正在使用 Powershell 将角色添加到 Azure 中的现有应用程序注册 我正在使用这个命令 Set AzureADApplication ObjectId myApp ObjectId AppRoles newAppRoles n
  • Pico 容器异常:org.picocontainer.injectors.AbstractInjector$UnsatisfiableDependencyException:?

    我似乎遇到了 pico 容器异常 org picocontainer injectors AbstractInjector UnsatisfiableDependencyException 我的代码如下 代表网站特定页面的页面对象 publ
  • Linux 上的集群与lockf

    If lockf与 0 偏移量一起使用 两者之间有什么区别flock and lockf当在独占模式下使用时 如果有的话 我这么问是因为我正在阅读根据平台有条件地在这两个函数中进行编译的代码 并且我想了解可能的原因 之间的实际区别flock
  • 在 QTabWidget 中动态设置单个选项卡的样式

    如何单独 动态地访问单个选项卡 不是其内容或选项卡中的小部件 以实现样式目的 例如更改背景颜色或向其添加图形效果 应用程序可以通过让选项卡以另一种颜色闪烁来通知用户该选项卡需要他们的注意 就像在 Windows 任务栏中 如果窗口想要获得焦
  • Vue路由器不渲染/挂载根路径组件

    我正在制作一个页面vue vue router and laravel 问题 当我进入localhost myproject public html the Home组件未渲染在router view 如果我单击指向服务组件的路由器链接 它
  • 如何正确钳位贝克曼分布

    我正在尝试实现 Microfacet BRDF 着色模型 类似于 Cook Torrance 模型 但我在使用本文中定义的贝克曼分布时遇到了一些问题 https www cs cornell edu srm publications EGS
  • 如何运行快捷方式

    我想知道从另一个应用程序中运行应用程序快捷方式的 官方 方式是什么 像这样 string program application exe Process Start program 这不会工作 如果application exe是一条捷径
  • .Net 4 - 在程序集中包含自定义信息

    我正在构建一个可扩展的应用程序 它将在运行时加载其他程序集Assembly LoadFile 这些附加程序集将包含 WPF 资源字典 外观等 普通资源 Resx 和 或插件类等内容 程序集也可以不包含公共类 只包含资源或资源字典 我正在寻找
  • 如何在SQL Server中生成Guid?

    我需要在 SQL 中创建一个 Id 作为 Guid 无身份 我该怎么做 我将 Id 定义为 uniqueidentifier 但保存在 Db 中的是 00000000 0000 0000 0000 000000000000 Use NEWI
  • Visual Studio 调试器值“{ }”是什么意思?

    我在 Visual Studio 2008 NET C 项目中观察到一个属性 并且调试器显示打开和立即关闭的大括号 我相信它是未初始化的 I 列表 但为什么它不显示 null 或 uninitialized 这是什么意思 br 米兰 最可能
  • 如何在 Swift 中使用 UISplitViewController

    所以我添加一个UISplitViewController到一个嵌入了UITabBarController The UISplitViewController has a UINavigationController作为与其自己的根控制器的主
  • 使用 CIImage 添加纯色边框

    我正在寻找一种使用 Core Image 将纯色边框添加到现有图像的方法 我找到了过滤器列表参考 但没有人制作它 Help 我们需要有要在其中创建实线边框的 CIImage 范围或 CGRect 然后 我们可以在指定区域绘制一个形成实线的C
  • ViewDidLoad 期间 ViewModel 为 null

    我正在开始在 iOS 中使用 MvvmCross public class MainView MvxTabBarViewController public override void ViewDidLoad base ViewDidLoad
  • 如何限制tensorflow GPU内存使用?

    我在 Ubuntu 18 04 中使用了tensorflow gpu 1 13 1 并在 Nvidia GeForce RTX 2070 上使用了 CUDA 10 0 驱动程序版本 415 27 下面的代码用于管理张量流内存使用情况 我有大