为什么tf.keras model.fit()初始化需要这么长时间?如何进行优化?

时间:2019-04-20 04:59:48

标签: python-3.x tensorflow tf.keras

使用tensorflow.keras(带有GPU支持的2.0-alpha0)在新编译的模型和先前保存并重新加载的模型上,使用tf.keras.model.fit()的初始化时间都非常长。

我相信这是在tf.data.Datasets()已被加载和预处理之后,所以我不明白花费了这么长时间并且TF / Keras没有输出:

2019-04-19 23:29:18.109067: tensorflow/core/common_runtime/gpu/gpu_device.cc:1149] Created TensorFlow device
Resizing images and creating data sets with num_parallel_calls=8
Loading existing model to continue training.
Starting model.fit()
Epoch 1/100
2019-04-19 23:32:22.934394: tensorflow/core/kernels/data/shuffle_dataset_op.cc:150] Shuffle buffer filled.
2019-04-19 23:38:52.374924: tensorflow/core/common_runtime/bfc_allocator.cc:230] Allocator (GPU_0_bfc) ran out of memory trying to allocate 2.62GiB. The caller indicates that this is not a failure, but may mean that there could be performance gains if more memory were available.

3分钟加载模型并填充洗牌缓冲区,6分钟加载……什么?以及如何优化这项神秘的工作? (5ghz 8700K,32 GB RAM,NVME SSD,1080ti 11G DDR5-任务管理器显示100%单线程CPU使用率,适度的磁盘访问,在此期间将RAM使用率缓慢扩展到最大〜28GB,GPU使用率为零)。

是否有任何方法可以更有效地序列化或存储模型,从而可以在不花费10分钟的时间的情况下定期启动和停止模型?

在这段时间里,TF / Keras是否以某种方式延迟加载数据集并对其进行预处理?

1 个答案:

答案 0 :(得分:0)

为 tf.data.Datasets() 使用多个 worker 似乎存在问题。从日志消息中,它显示您正在使用 8 个并行进程,这可以解释为什么您显示如此高的 CPU/RAM 使用率。所以这不是模型的问题。

据我所知,第一次使用 Datasets 应该相当慢,但在数据被缓存后它会变得更快。

如果 model.fit() 调用的启动速度仍然很慢,您可以将进程数调整为 4 或 2。这可能会影响您的训练时间,因为您的 SSD 可能会因必须加载数据而变慢。