【问题标题】:Sample code for model-parallel and pipelined training in TensorFlowTensorFlow 中模型并行和流水线训练的示例代码
【发布时间】:2018-08-07 17:53:27
【问题描述】:

跨多个 GPU 的简单模型分区会导致工作负载在向前和向后传递期间从 GPU 转移到 GPU。任何时候,一个 GPU 都很忙。这是天真的版本。

with tf.device('/gpu:0'):
    model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
    model.add(Conv2D(64, (3, 3), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))

with tf.device('/gpu:1'):
    model.add(Conv2D(128, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Conv2D(64, (3, 3), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))

with tf.device('/gpu:2'):
    model.add(Dropout(0.25))
    model.add(Flatten())
    model.add(Dense(1500, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(num_classes, activation='softmax'))

我们需要示例代码(模板),通过发送批次波和协调每个 GPU 上的工作(前向、梯度计算、参数更新)来对工作进行流水线化并保持所有 GPU 忙碌。

通过使用data_flow_ops.StagingArea 提供了一个提示here,但一个具体的例子会有所帮助。

我知道数据分区(或数据并行)是可行的方法,但存在模型需要跨 CPU+GPU 分区的用例。

感谢任何指针或示例(伪)代码。

【问题讨论】:

    标签: tensorflow machine-learning pytorch mxnet caffe2


    【解决方案1】:

    模型并行是一种在模型参数不适合单个 GPU 内存时使用的技术。当您的模型非常复杂(许多层)或某些层很大时,就会发生这种情况。通常模型并行性是您应该仅作为最后手段使用的东西,因为它通常很慢。

    您的模型看起来很简单,所以我不确定您是否真的需要模型并行性(这只是一个示例吗?)。如果您想一次只使用单个 GPU 并且可以将所有模型放入单个 GPU 中,我不建议您进行模型并行。

    如果您确定需要模型并行性,请参阅 this example 以使用 Apache MXNet 来实现。

    【讨论】:

    • 感谢您的链接。为了回答您的问题,上面的代码是天真的方式的一个示例。但是想象一下,如果您有 10K x 10K 的大图像要分类(例如)。
    • 单个图像是否适合 GPU 内存(每张图像 10000 * 10000 * 3 / 1024 / 1024 ~= 284 mb)?如果是的话,那么小批量(甚至可能是 1)的数据并行性就是答案。如果不是,那么,我不确定您是否可以运行训练(是否使用模型并行),因为您仍然需要将至少 1 个数据样本放入 GPU 内存中。
    • 我同意我们的批量分析,但是层的输出激活会去哪里?关于 mxnet 的问题。在您提供的示例中,处理是否流水线化?据我了解,嵌入处理在 cpu 上,而完全连接的网络在 gpu(s) 上(可能不止一个)。处理是流水线的吗? CPU 和 GPU 同时忙?
    • 我自己没有运行过,所以我不确定答案。但我的猜测是,因为在前向传递中模型的一部分依赖于另一部分,而对于反向传递,依赖关系正好相反,他们必须按顺序计算数据。这意味着它们不会同时“忙碌”(当然,实际计算可能仍然需要一些 CPU 周期,即使是 GPU 负责繁重的工作)。
    猜你喜欢
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 2020-01-03
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多