当我增加批量大小时,为什么tensorflow GPU内存使用量会减少?

时间:2017-11-27 06:12:27

标签: tensorflow pytorch

最近我使用Tensorflow和PyTorch实现了VGG-16网络,数据集是CIFAR-10。每张图片为32 * 32 RGB。

我在开始时使用64个批量大小,而我发现PyTorch使用的GPU内存比tensorflow少得多。然后我做了一些实验,得到了一个数字,发布在下面。

Figure : GPU memory use compare

经过一番研究,我知道使用BFC算法管理内存的张量流。因此,它可以解释为什么张量流的内存使用减少或增加2048,1024,... MB,有时当批量大时,内存使用不会增加。

但我仍然感到困惑,为什么当批量大小为512时,内存使用率低于批量大小为384,448等,批量大小较小。与批量大小为1024到1408,批量大小为2048到2688时相同。

这是我的源代码:

PyTorch:https://github.com/liupeng3425/tesorflow-vgg/blob/master/vgg-16-pytorch.py

Tensorflow:https://github.com/liupeng3425/tesorflow-vgg/blob/master/vgg-16.py

编辑: 我的计算机上有两个Titan XP,操作系统:Linux Mint 18.2 64位。

我使用命令nvidia-smi确定GPU内存使用情况。

我的代码在GPU1上运行,GPU1在我的代码中定义:

os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = "1"

我确信只有一个应用程序使用GPU1。

GPU内存使用量可以通过下面的应用程序列表确定。 例如,与下面发布的屏幕截图类似,进程名称为/usr/bin/python3,其GPU内存使用量为1563 MiB。

Figure : terminal nvidia-smi

1 个答案:

答案 0 :(得分:1)

如评论中所述,默认情况下,TensorFlow始终占用GPU上的所有内存。我假设您已为此测试禁用了该功能,但是它确实表明算法通常不会尝试最小化保留的内存,即使计算中并未全部利用它。

为了找到适合您的设备和代码的最佳配置,TensorFlow通常会多次运行(部分)第一次计算。我怀疑其中包括用于将数据预加载到GPU的设置。这意味着您看到的数字恰好是设备和配置的最佳值。

由于TensorFlow并不介意使用更多内存,因此此处的“最佳”是根据速度而不是内存使用情况来衡量的。