【问题标题】:What are the possible reasons that a deep learning model runs slower on GPU than running on CPU?深度学习模型在 GPU 上运行比在 CPU 上运行慢的可能原因是什么?
【发布时间】:2017-04-06 22:43:10
【问题描述】:

我的 GPU 是 Titan X 应该比 CPU 是 Intel(R) Xeon(R) CPU E5-2643 v3 @ 3.40GHz 更快。但是我的两个模型在 GPU 上运行得有点慢。一种模型在 GPU 上运行得更快。这两个模型中,一个是用tensorflow实现的,一个是用theano实现的。这两个模型的共同特点是它们都属于分层 Bi-LSTM 模型,这意味着底部 Bi-LSTM 的最后输出作为输入馈送到另一个模型。所以这两个模型都不是太简单。 所以我想问一下,它们在 GPU 上运行比在 CPU 上运行慢的可能原因是什么?

【问题讨论】:

  • nvidia-smi 报告的 gpu 使用率是多少?也许代码没有充分利用gpu?

标签: tensorflow gpu theano


【解决方案1】:

我可以为 theano 方面提供一些信息:

Theano 在 scan 方面遇到了多个问题,这是它用于 RNN 循环的主力。

以下是其中的一些:

  1. 由于 theano 在编译时不知道形状信息,因此生成的编译例程可能不是最佳的(例如使用 gemv 表示向量-向量点)。

  2. (截至 2016 年 11 月)scan 的当前版本是在 cython 中实现的,与纯 C++ 版本相比有一些开销。如果 RNN 在单个步骤中没有太多的计算密度,这可能很重要。

  3. 流水线不好。使用scan 实现映射操作通常比直接使用底层操作要慢。显然优化器为时过早,仍然无法识别此类问题。

解决方案:

  1. 尝试升级到开发版。他们一直在加班进行各种改进。

  2. 如果您能负担得起编译时间,请尝试展开 RNN(使用普通循环而不是 scan 构建图形)。

  3. 我创建了一个 PR 来解决 gemv 问题,仅适用于旧 GPU 后端。试一试(如果尚未合并)。 现在它是 dev master 分支的一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 2019-08-18
    • 2019-12-11
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多