我测试过构建一个包含250,000 matmul
个操作的深图(每个操作都使用“ slim” 2x2张量)。运行代码后,我发现在图的构建过程中,内存消耗急剧增加,总计达到3.28 GiB。
x = tf.placeholder(shape=(2, 1), dtype=tf.float64)
for i in range(250000):
x = tf.eye(2, dtype=tf.float64) @ x
考虑到每个操作都由2x2-float64张量组成的事实,这应该占用大约250000 * 4 * 8 = 8 MiB
,这意味着剩余的内存消耗必须以某种开销的形式出现,以维持图形结构。对于给定的参数,每次操作总计13.12 KiB,这看起来太多了。我无法想象为什么张量流需要分配这么多的内存才能构建图形。
所以我有两个问题:
我在Ubuntu 16.04上使用Python 3.6,并通过不支持GPU的pip安装了tensorflow 1.12.0。
与PyTorch上类似的图形结构相比,可以合理地消耗162 MiB的内存。
x = torch.ones(size=(2, 1), dtype=torch.float64, requires_grad=True)
for i in range(250000):
x = torch.eye(2, dtype=torch.float64) @ x