我正在运行TF benchmarks并阅读了文档High-Performance Models,我有一个问题:
在文件中,它说
并行化I / O读取
data_flow_ops.RecordInput用于并行化从磁盘读取。给定表示TFRecords的输入文件列表,RecordInput使用后台线程连续读取记录。记录被放入其自己的大型内部池中,当它加载了至少一半的容量时,它会产生输出张量。
这个操作系统有自己的内部线程,由I / O时间占主导地位,消耗最少的CPU,这使得它可以与模型的其余部分并行运行。
并行化图像处理
从RecordInput读取图像后,它们作为张量传递到图像处理管道。为了使图像处理管道更容易解释,假设输入管道的目标是8个GPU,批量大小为256(每个GPU 32个)。
并行地单独读取和处理256条记录。这开始于图中256个独立的RecordInput读操作。每个读操作之后是一组用于图像预处理的相同操作,这些操作被认为是独立的并且并行执行。图像预处理操作包括图像解码,失真和调整大小等操作。
但我读了preprocessing.py
的代码 record_input = data_flow_ops.RecordInput(
file_pattern=dataset.tf_record_pattern(subset),
seed=301,
parallelism=64,
buffer_size=10000,
batch_size=self.batch_size,
shift_ratio=shift_ratio,
name='record_input')
records = record_input.get_yield_op()
records = tf.split(records, self.batch_size, 0)
records = [tf.reshape(record, []) for record in records]
for idx in xrange(self.batch_size):
value = records[idx]
(label, image) = self.parse_and_preprocess(value, idx)
split_index = idx % self.num_splits
labels[split_index].append(label)
images[split_index].append(image)
由于data_flow_ops.RecordInput
op,它似乎并行读取磁盘,
但是for循环中的图像处理操作是序列化的。
我想知道我错了或文件错了? 如果我错了,图像处理操作如何并行执行? 非常感谢!