【发布时间】:2018-05-10 08:05:20
【问题描述】:
最近我使用 Tensorflow 和 PyTorch 实现了一个 VGG-16 网络,数据集是 CIFAR-10。每张图片为32 * 32 RGB。
我一开始使用 64 的批大小,而我发现 PyTorch 使用的 GPU 内存比 tensorflow 少得多。然后我做了一些实验,得到了一个数字,贴在下面。
经过一番研究,我知道了使用 BFC 算法管理内存的 tensorflow。所以它可以解释为什么 tensorflow 的内存使用减少或增加 2048、1024、... MB 并且有时当批处理大小更大时内存使用不增加。
但我仍然很困惑,为什么当批处理大小为 512 时,内存使用量比批处理大小为 384、448 等时的内存使用量更低,而批处理大小较小。与batch size为1024到1408,batch size为2048到2688时相同。
这是我的源代码:
PyTorch:https://github.com/liupeng3425/tesorflow-vgg/blob/master/vgg-16-pytorch.py
张量流:https://github.com/liupeng3425/tesorflow-vgg/blob/master/vgg-16.py
编辑: 我的电脑上有两台 Titan XP,操作系统:Linux Mint 18.2 64 位。
我使用命令 nvidia-smi 确定 GPU 内存使用情况。
我的代码在我的代码中定义的 GPU1 上运行:
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = "1"
而且我确信只有一个应用程序使用 GPU1。
GPU 内存使用情况可以通过下面的应用程序列表来确定。
例如,就像下面发布的屏幕截图一样,进程名称为/usr/bin/python3,其 GPU 内存使用量为 1563 MiB。
【问题讨论】:
-
你是如何确定内存使用的?默认情况下,TensorFlow 分配all available GPU memory。
-
@aseipel 感谢您的建议!我已经更新了我的问题。
-
TensorFlow 在开始时会分配所有可用的 GPU 内存,因此使用 nvidia-smi 进行测量不会给出准确的测量结果。相反,您应该使用 RunMetadata 进行测量:stackoverflow.com/questions/36123740/…
-
你得到答案了吗?我的代码也有类似的问题。当我采用批量大小为 128 和 256 时,分配了相同数量的 GPU 内存,它从 64 增长到 128,从 256 增长到 512。
标签: tensorflow pytorch