为了了解TensorFlow可以节省多少GPU内存资源,我做了一些实验。
我的网络是vgg-16,数据集是mnist,批处理大小是128。我估计我的GPU内存使用量是2.8GB。
我关闭所有RewriterConfig
,例如:
rewrite_options.memory_optimization = rewriter_config_pb2.RewriterConfig.NO_MEM_OPT
rewrite_options.layout_optimizer = rewriter_config_pb2.RewriterConfig.OFF
rewrite_options.function_optimization = rewriter_config_pb2.RewriterConfig.OFF
rewrite_options.constant_folding = rewriter_config_pb2.RewriterConfig.OFF
rewrite_options.arithmetic_optimization = rewriter_config_pb2.RewriterConfig.OFF
rewrite_options.loop_optimization = rewriter_config_pb2.RewriterConfig.OFF
rewrite_options.dependency_optimization = rewriter_config_pb2.RewriterConfig.OFF
然后我逐渐减少GPU内存使用量。
我观察到TensorFlow的方法是在缺少GPU内存的情况下重新进行计算机处理。为什么要使用再计算机技术而不是交换技术?重新计算比交换更快吗?
在memory_optimizer.cc:1226
中,它具有RecomputationRewritingPass
功能。关闭要测试的功能后,我发现TensorFlow还有另一个执行相同事件的块。
为什么TensorFlow有两个块来执行同一事件?
谢谢。