Tensorflow Benchmarks输入管道并行化图像处理?

时间:2018-02-01 10:26:54

标签: python tensorflow parallel-processing tfrecord

我正在运行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循环中的图像处理操作是序列化的。

我想知道我错了或文件错了? 如果我错了,图像处理操作如何并行执行? 非常感谢!

0 个答案:

没有答案