【发布时间】:2017-03-17 09:02:11
【问题描述】:
我的训练过程对 train&eval 数据集使用 tfrecord 格式。
我测试了 reader 的 benchmark,只有 8000 条记录/秒。和 io 速度(见 iotop 命令)只有 400KB-500KB/s。
我这里用的是cpp版本的protobuf
如果可能,请提供一个可重现的最小示例(我们通常没有时间阅读您的数百行代码)
def read_and_decode(filename_queue):
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)
return serialized_example
serialized_example = read_and_decode(filename_queue)
batch_serialized_example = tf.train.shuffle_batch(
[serialized_example],
batch_size=batch_size,
num_threads=thread_number,
capacity=capacity,
min_after_dequeue=min_after_dequeue)
features = tf.parse_example(
batch_serialized_example,
features={
"label": tf.FixedLenFeature([], tf.float32),
"ids": tf.VarLenFeature(tf.int64),
"values": tf.VarLenFeature(tf.float32),
})
您还尝试过哪些其他尝试性解决方案?
我尝试在 tf.train.shuffle_batch 中设置 num_threads 但不起作用。
似乎设置为2线程时,它以8000records / s的速度工作,当增加线程数时,它变得更慢。 (我删除了所有消耗 cpu 的操作。只需读取数据。)
我的服务器是 24 核 CPU。
【问题讨论】:
-
你是受CPU限制还是受磁盘限制?进行时间线可视化有助于了解瓶颈在哪里
-
很高兴再次见到你。 1)不,我不限制cpu的使用。 2)我的 tfrecords 文件存储在本地磁盘驱动器中。这是表现的原因吗? 3) 我现在就做时间线。感谢您的建议。我稍后会更新。
-
这是我的基准测试脚本和时间线结果(timeline.json 原始文件包括)gist.github.com/ericyue/7705407a88e643f7ab380c6658f641e8
-
似乎 QueueDequeueMany 成本最高。我想知道为什么增加线程数对性能没有帮助。 @YaroslavBulatov
标签: python tensorflow