最近我使用Tensorflow和PyTorch实现了VGG-16网络,数据集是CIFAR-10。每张图片为32 * 32 RGB。
我在开始时使用64个批量大小,而我发现PyTorch使用的GPU内存比tensorflow少得多。然后我做了一些实验,得到了一个数字,发布在下面。
经过一番研究,我知道使用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。
答案 0 :(得分:1)
如评论中所述,默认情况下,TensorFlow始终占用GPU上的所有内存。我假设您已为此测试禁用了该功能,但是它确实表明算法通常不会尝试最小化保留的内存,即使计算中并未全部利用它。
为了找到适合您的设备和代码的最佳配置,TensorFlow通常会多次运行(部分)第一次计算。我怀疑其中包括用于将数据预加载到GPU的设置。这意味着您看到的数字恰好是设备和配置的最佳值。
由于TensorFlow并不介意使用更多内存,因此此处的“最佳”是根据速度而不是内存使用情况来衡量的。