【问题标题】:Is it possible to run each layer in a cnn parallely in either caffe or tensorflow?是否可以在 caffe 或 tensorflow 中并行运行 cnn 中的每一层?
【发布时间】:2024-05-18 16:30:01
【问题描述】:

我想并行运行经过训练的 CNN 的每一层,以减少前向传播期间的计算时间(基本上我想为涉及相机的实时应用程序运行 CNN,而不会过多地影响 FPS)。我将为每一层保留一个输入队列和一个输出队列。每个层都可以处理来自输入层的 blob 并将其转储到输出层(这在逻辑上可以并行完成)。每层的输出队列将作为下一层的输入队列。然后我将从最后一层的输出队列(它将是一个二进制标签)中收集所有输出并处理它们。所以我的问题是,是否可以在 Caffe 或 Tensorflow 中并行运行 CNN 的每一层来实现这一点。

【问题讨论】:

    标签: optimization tensorflow parallel-processing caffe conv-neural-network


    【解决方案1】:

    使用 Tensorflow,您可以指定“设备放置”,因此对于图中的每个操作或操作组,您可以说明在哪个 GPU 上运行它,例如,如果您有多个 GPU。有关如何在 GPU 上进行操作的示例代码,请参阅 this tutorial

    【讨论】:

      【解决方案2】:

      不了解 TF。
      关于 caffe - 这听起来是个坏主意。在层之间放置队列和同步机制只会减慢您的速度(特别是如果您在 GPU 上运行并通过 CPU 结构进行同步)。 Caffe 的设计目的是按顺序执行前向传递并快速完成。为什么您期望并行性可以帮助您更快地运行它?

      【讨论】:

      • 假设我有 10 张图像用于使用 CNN 进行分类。现在在 Caffe 中使用前向传播,我的每个图像(第一个除外)都必须等待队列中的图像才能通过整个 cnn 管道,这是浪费时间。一旦第一个图像通过第一层,第二个图像应该进入它,依此类推。
      • 我知道最快的方法是并行启动每个管道,但这会消耗太多资源(基本上是 CNN 层中权重的倍数)
      • @AyushPandey 如果你有足够的资源用于K 帧,你最好将它们作为一批大小K 运行。