我正在循环训练相同的tf.Estimator模型(5025056可训练参数):
# simplified code
for model in [model, model]:
tf.reset_default_graph()
estimator = tf.estimator.Estimator(model_fn=model.get_model_fn())
evaluation_hook = tf.contrib.estimator.InMemoryEvaluatorHook(
estimator=estimator,
input_fn=lambda: model.eval_input_fn()
)
estimator.train(
input_fn=lambda: model.train_input_fn(),
hooks=[evaluation_hook]
)
这里准备了数据集:
def train_input_fn():
dataset = tf.data.TFRecordDataset("some_filename")
dataset = dataset.shuffle(3000)
dataset = dataset.repeat()
dataset = dataset.batch(384)
dataset = dataset.prefetch(1)
return dataset
我的数据集包含9000个样本的图像,并存储在TFRecord(163M)中。
GPU为GeForce GTX 1080 Ti
,CPU为i5-6600 CPU @ 3.30GHz
。
在第一个模型的训练过程中,一切看起来都很好-htop
显示每个内核的工作方式大致相同(主要是在0
-50%
利用率之间跳转)和gpu统计信息(如下所示)使用vidia-smi --query-gpu=timestamp,pstate,temperature.gpu,utilization.gpu,utilization.memory,memory.total,memory.free,memory.used --format=csv -l 1
)表明卡正在100%
上工作-温度85°C
左右,100%
的gpu和内存利用率,也使用了大部分内存(10GB )。
直到(4000
的步骤5000
为止,张量流打印global_step/sec
的值范围为1.0
到1.1
。 15GB
的可用16GB
的RAM已使用,没有交换。
在该步骤之后,时间global_step/sec
越来越短。对于步骤5000
,它是0.617275
。
第二个模型以相似的值开始,但是在步骤2000左右,它只是0.0938672
并递减(在训练结束时下降到0.0368357
)。在此过程中,nvidia-smi
显示utilization.gpu
和utilization.memory
越来越0%
(尽管memory.used
始终显示相同的金额,即{ {1}}),并且CPU正在单个内核的10GB
上工作。 RAM与开始训练时处于同一级别,并且没有交换发生。
看起来像在CPU而不是GPU上经过一些历时的tensorflow训练之后?可能是什么原因造成的? TF版本为100%
。