- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
TensorFlow 总是(预)分配我显卡上的所有空闲内存 (VRAM),这没关系,因为我希望我的模拟在我的工作站上尽可能快地运行。
但是,我想记录 TensorFlow 实际使用了多少内存(总计)。此外,如果我还可以记录单个张量使用的内存量,那就太好了。
此信息对于衡量和比较不同 ML/AI 架构所需的内存大小非常重要。
有什么建议吗?
最佳答案
更新,可以使用TensorFlow ops查询分配器:
# maximum across all sessions and .run calls so far
sess.run(tf.contrib.memory_stats.MaxBytesInUse())
# current usage
sess.run(tf.contrib.memory_stats.BytesInUse())
您还可以通过查看 RunMetadata
获取有关 session.run
调用的详细信息,包括在 run
调用期间分配的所有内存。 IE 是这样的
run_metadata = tf.RunMetadata()
sess.run(c, options=tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE, output_partition_graphs=True), run_metadata=run_metadata)
这是一个端到端的示例——获取列向量、行向量并将它们相加以获得加法矩阵:
import tensorflow as tf
no_opt = tf.OptimizerOptions(opt_level=tf.OptimizerOptions.L0,
do_common_subexpression_elimination=False,
do_function_inlining=False,
do_constant_folding=False)
config = tf.ConfigProto(graph_options=tf.GraphOptions(optimizer_options=no_opt),
log_device_placement=True, allow_soft_placement=False,
device_count={"CPU": 3},
inter_op_parallelism_threads=3,
intra_op_parallelism_threads=1)
sess = tf.Session(config=config)
with tf.device("cpu:0"):
a = tf.ones((13, 1))
with tf.device("cpu:1"):
b = tf.ones((1, 13))
with tf.device("cpu:2"):
c = a+b
sess = tf.Session(config=config)
run_metadata = tf.RunMetadata()
sess.run(c, options=tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE, output_partition_graphs=True), run_metadata=run_metadata)
with open("/tmp/run2.txt", "w") as out:
out.write(str(run_metadata))
如果您打开 run.txt
,您将看到如下消息:
node_name: "ones"
allocation_description {
requested_bytes: 52
allocator_name: "cpu"
ptr: 4322108320
}
....
node_name: "ones_1"
allocation_description {
requested_bytes: 52
allocator_name: "cpu"
ptr: 4322092992
}
...
node_name: "add"
allocation_description {
requested_bytes: 676
allocator_name: "cpu"
ptr: 4492163840
所以这里可以看到a
和b
各分配了52字节(13*4),结果分配了676字节。
关于python - TensorFlow:如何记录 GPU 内存(VRAM)利用率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40190510/
我正在创建类似于 CUDA 的东西,但我看到将内存从 RAM 复制到 VRAM 非常快,就像从 RAM 复制到自身一样。但是从 VRAM 复制到 RAM 比从 RAM 复制到 VRAM 慢。 顺便说一
我想知道当前 nvidia/AMD 处理 VRAM 资源分配的实现。 我们已经知道,当系统 RAM 已满时,操作系统会使用交换/虚拟内存,那么对于 VRAM 来说,交换相当于什么?它们会回退到系统 R
我想使用 SDL/OpenGl/DirectX 或任何其他 API 直接从 VRAM 获取将在屏幕上显示的帧(图像)(如果可能)以二进制(RAW)格式。 我想最大限度地减少捕获屏幕的延迟,然后将其保存
假设我加载了一个或两个纹理,可能还有一些着色器、一个 VAO、一个 VBO,然后我运行该程序。 假设程序遇到某种运行时错误并在所有这些缓冲区对象和纹理被删除之前终止。 在我重新启动计算机之前,它们是否
我正在尝试获取我的游戏当前使用的 VRAM 总量。我想在我的调试信息中显示它。 当我使用 Visual Studio Graphics Analyzer 时,我想到了一个主意。我想我可以通过添加每个图
我对 clEnqueueWriteBuffer 有一个很好奇的问题。在我当前的项目中,我想将大约 500 张图像 (1GB) 复制到显卡上并平均一些像素。图像存储在一个大的 double* 数组中(大
有谁知道如何在 os x 上获得免费的(!)vram? 我知道您可以查询注册表项: typeCode = IORegistryEntrySearchCFProperty(dspPort,kIOServ
我正在分析我的简单体素化世界渲染器的性能。我想找出不同技术的性能限制,一种压力测试。在某些时候,我发现了一些非常奇怪的东西。我正在为每个 block 使用不同的 VBO 以 block 的形式分配几何
我的游戏引擎尝试分配大型纹理数组,以便能够将大部分(如果不是全部)绘制在一起。该数组可能变得足够大而无法分配,此时我会(不断)将纹理数组分成两半。 在收到 glGetError:Out of memo
我正在开发 JavaFX 程序并希望加快我的应用程序。阅读有关大图像和与之相关的问题后here ,我决定听从那里的建议并分配更多 VRAM。我不太确定如何执行此操作,但是,尽管我知道如何执行此操作,但
我正在使用 cudaMemGetInfo 来获取系统当前使用的 vram。 extern __host__ cudaError_t CUDARTAPI cudaMemGetInfo(size_t *f
我试图将比 VRAM 更多的数据传递到 GPU,这会导致以下错误。 CudaAPIError:调用 cuMemAlloc 导致 CUDA_ERROR_OUT_OF_MEMORY 我创建了此代码来重现问
我试图将比 VRAM 更多的数据传递到 GPU,这会导致以下错误。 CudaAPIError:调用 cuMemAlloc 导致 CUDA_ERROR_OUT_OF_MEMORY 我创建了此代码来重现问
我需要大致确定系统显卡有多少 VRAM。我知道我不应该这么做的所有原因,但我还是这么做了。它不需要是完美的(有些牌是谎言等),但我需要一个大概。在 Mac 上,通过核心显卡和 IOKit 可以很容易地
我目前正在编写 GameBoy Classis 模拟器。这是 GitHub 存储库 ( https://github.com/FelixWeichselgartner/GameBoy-Classic-
我想获取‖Android 设备 VRAM 大小。 有没有从程序中获取的方法? 最佳答案 让我们使用 Nexus One 进行一些计算: 屏幕分辨率为 480x800。因此所需的最小视频内存大小为: 4
TensorFlow 总是(预)分配我显卡上的所有空闲内存 (VRAM),这没关系,因为我希望我的模拟在我的工作站上尽可能快地运行。 但是,我想记录 TensorFlow 实际使用了多少内存(总计)。
我正在尝试使用 GBA 拼贴模式从头开始显示具有单一彩色像素的单个拼贴。 它主要工作,但不是设置单个像素,而是在我打算写入的 16 位对齐位置为两个字节设置相同的颜色: 通过 mgba 模拟器运行时的
我在我的应用程序中遇到了 VRAM 内存泄漏。该应用程序经常添加和删除 THREE.Geometry 以创建体积动画。如果我使用 THREE.SphereBufferGeometry 而不是具有自己填
看起来 200 万个浮点数应该没什么大不了的,只有 8MB 的 1GB GPU RAM。我有时可以分配那么多,有时甚至更多,没有任何问题。当我执行 clEnqueueReadBuffer 时,我得到
我是一名优秀的程序员,十分优秀!