gpt4 book ai didi

memory - GPU PoolAllocator 爆 CPU 内存

转载 作者:IT王子 更新时间:2023-10-28 23:31:56 31 4
gpt4 key购买 nike

我用相对常见的操作(除了几个 tf.where 和索引处理)创建了一个 tensorflow 模型,但是用非常不同的不同输入形状调用它(模型中有许多未定义的张量形状)。

在 CPU 上一切正常。 但是当您使用 GPU 时,RAM 使用量(不是 GPU 内存,CPU 内存)稳步增加,以填满机器的 256GB 并自行终止。

在此过程中,我收到了通常的消息:

2017-03-17 16:42:22.366601: I tensorflow/core/common_runtime/gpu/pool_allocator.cc:247] PoolAllocator: After 18347 get requests, put_count=18345 evicted_count=1000 eviction_rate=0.0545108 and unsatisfied allocation rate=0.0763068
2017-03-17 16:42:22.366680: I tensorflow/core/common_runtime/gpu/pool_allocator.cc:259] Raising pool_size_limit_ from 4385 to 4823

据我所知,这是用于 GPU 的一些 DMA 内存的池分配器。问题是它似乎永远不会满足于它所获得的驱逐率,并且永远不会结束为自己分配更多空间。

这是正常行为吗?他们有办法控制吗?目前,在内存不足之前,我无法训练模型超过 1 小时

注意:我使用 TF 的 nigthly build 版本,因为我当前的模型运行需要一些错误修复。此外,在训练期间没有添加任何操作,因为我调用了 tf.get_default_graph().finalize()

编辑: 尝试使用 tcmalloc 而不是 malloc 运行。没有帮助。我还使用了内存分析器,这并不是说存在内存泄漏,即使 top 中的内存使用量更高并且程序最终运行 OOM,tcmalloc 的内存使用量也稳定在 500MB。那么为什么 tcmalloc 分析器不同意我在 top 中看到的内存使用情况?

编辑 2: 使用更改的硬编码参数重新编译 TF 以使其“工作”。见 here

最佳答案

TF 团队之前在更改内存分配器时解决了这个特定问题(参见 Corresponding issue on github)。

如果您在训练期间遇到内存增长,一个常见的错误是在训练期间将节点添加到图中(TF 不是 numpy,除非您使用 Eager Execution)。请务必调用 graph.finalize()在训练循环之前确保在训练过程中不添加任何节点,这样可以捕获许多内存增长问题。

关于memory - GPU PoolAllocator 爆 CPU 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42861956/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com