gpt4 book ai didi

tensorflow - 如何在非 NVIDIA 设置上加速深度学习?

转载 作者:行者123 更新时间:2023-12-02 22:27:20 25 4
gpt4 key购买 nike

由于我只有一个 AMD A10-7850 APU,而且没有足够的资金购买 800-1200 美元的 NVIDIA 显卡,因此我正在努力利用我拥有的资源来加速通过 tensorflow/keras 进行深度学习.

最初,我使用了 Tensorflow 的预编译版本。 InceptionV3 大约需要 1000-1200 秒来计算 1 个 epoch。它一直缓慢得令人痛苦。

为了加快计算速度,我首先使用优化器(使用 AVX 和 SSE4 指令)自编译了 Tensorflow。这导致计算时间减少了大约 40%。上面执行的相同计算现在只需要大约 600 秒来计算。这几乎是可以忍受的 - 有点像你可以看着油漆变干。

我正在寻找进一步减少计算时间的方法。我只有一个集成的 AMD 显卡,它是 APU 的一部分。 (How) (C/c)an 我利用这个资源来加速计算?

更一般地说,假设还有其他人具有类似的货币限制和英特尔设置。没有独立 NVIDIA 卡的人怎么能利用他们的集成图形芯片或其他非 NVIDIA 设置来实现比仅 CPU 更快的性能?那可能吗?为什么/为什么不?需要做什么来实现这个目标?或者这在不久的将来(2-6 个月)有可能实现吗?如何?

最佳答案

在研究这个话题几个月后,我可以看到 3.5 条可能的前进路径:

1.) 上面评论中提到的 Tensorflow + OpenCl:

这个领域似乎正在发生一些变化。在 Codeplay 上,Lukasz Iwanski 刚刚发布了一个关于如何让 tensorflow 与 opencl 一起运行的综合答案(我只会提供如上所述的链接,因为那里的信息可能会改变):https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl

使用集成显卡的潜力是诱人的。将这种组合与 APU 结合使用也值得探索。但我不确定这将如何工作,因为 OpenCl 支持仍处于开发初期,并且硬件支持非常有限。此外,OpenCl 与手工制作的优化代码库不同。 (更新 2017-04-24:我在遇到一些问题后得到了要编译的代码 here!)不幸的是,希望提高速度 在我的设置 (iGPU) 上 没有实现。

CIFAR 10 数据集:

  • Tensorflow(通过 pip ak 未优化):1700 秒/纪元,390% CPU
    利用率。
  • Tensorflow (SSE4, AVX):1100 秒/周期,390% CPU
    利用率。
  • Tensorflow (opencl + iGPU):5800 秒/纪元,150% CPU
    和 100% 的 GPU 利用率。

  • 您的里程可能会有很大差异。所以我想知道其他人在您的设置中相对而言是什么(未优化的 vs 优化的 vs opencl)?

    需要注意的是:opencl 的实现意味着所有繁重的计算都应该在 GPU 上完成。 (2017/4/29 更新)但实际情况并非如此,因为某些功能尚未实现。这导致 unnecessary copying back and forth of data between CPU and GPU ram .再次, imminent changes应该会改善情况。此外,对于那些有兴趣提供帮助和想要加快速度的人,我们可以做一些事情,这些事情将对 opencl 的 tensorflow 的性能产生可衡量的影响。

    但就目前而言:1 个 iGPU << 4 个带有 SSE+AVX 的 CPU。也许具有更大 RAM 和/或 opencl 2.0 实现的更强大的 GPU 可能会产生更大的差异。

    在这一点上,我应该补充一点,至少在 Caffe 和/或 Theano + OpenCl 上已经进行了类似的努力。所有情况下的限制步骤似乎是将 CUDA/cuDNN 功能手动移植到 openCl 范式。

    2.) RocM + MIOpen

    RocM代表 Radeon Open Compute,似乎是一个大杂烩,可以/将在非 NVIDIA(主要是 Radeon 设备)上实现深度学习。它包括3个主要组成部分:
  • HIP:一种将 CUDA 代码转换为 AMD GPU 可以使用的代码的工具。
  • ROCk:用于 AMD CPU+GPU 设备的 64 位 linux 内核驱动程序。
  • HCC:一种 C/C++ 编译器,可将代码编译为异构系统架构环境 (HSA) 的代码。

  • 显然,RocM 旨在发挥 AMD 同时拥有 CPU 和 GPU 技术的优势。他们加速深度学习的方法利用了这两个组件。作为 APU 所有者,我对这种可能性特别感兴趣。但请注意:Kaveri APU 的支持有限(仅支持集成显卡)。 future 的 APU 尚未发布。看起来,这里还有很多工作要做,以使这个项目达到成熟状态。鉴于 AMD 已宣布他们的 Radeon Instinct 显卡将在今年(2017 年)发布,很多工作有望在一年内使这种方法可行。

    对我来说,这里的问题是 RocM 正在提供用于构建深度学习库的工具。它们本身并不代表深度学习库。作为一名不专注于工具开发的数据科学家,我只想要一些有用的东西。并且不一定对构建我想要的内容感兴趣然后进行学习。一天中没有足够的时间在我所在的公司做好这两件事。

    NVIDIA 当然有 CUDA 和 cuDNN,它们是为 NVIDIA GPU 优化的手工汇编代码库。所有主要的深度学习框架都建立在这些专有库之上。 AMD 目前根本没有这样的东西。

    我不确定 AMD 将如何成功地达到 NVIDIA 在这方面的地位。但 Carlos Perez 在 2017 年 4 月 3 日 here 上发表的一篇文章中揭示了 AMD 的意图。 .近期 lecture at Stanford还笼统地谈论了 Ryzen、Vega 和深度学习的结合。从本质上讲,文章指出 MIOpen 将代表这个为 AMD 设备优化的深度学习函数的手工制作库。该库将于 2017 年上半年发布。我不确定这些库将在多长时间内纳入主要的深度学习框架以及此时功能实现的范围是什么。

    但显然, AMD has already worked with the developers of Caffe to "hippify" the code basis .基本上,CUDA 代码通过 HIP 自动转换为 C 代码。自动化处理了绝大多数的代码基础,只有不到 0.5% 的代码需要更改并且需要人工关注。将其与手动翻译成 openCl 代码进行比较,人们开始感觉这种方法可能更具可持续性。我不清楚的是低级汇编语言优化从何而来。

    (更新2017-05-19)但随着AMD Vega卡的即将发布(非消费者的专业Frontier版卡将是第一个),有迹象表明 major deep learning frameworks will be supported through the MIOpen framework . Forbes article今天发布的数据显示了 MiOpen 在过去几个月的性能方面取得的进步:它看起来很重要。
    (更新 2017-08-25) MiOpen 正式发布。我们不再在这里谈论假设。现在我们只需要尝试一下这个框架的工作情况。

    3.) NEON

    Neon是 Nervana(现已被英特尔收购)的开源深度学习框架。我提到这个框架的原因是它使用起来似乎相当简单。语法与 Keras 一样简单直观。更重要的是,该框架在 some benchmarks 上实现了比 Tensorflow 快 2 倍的速度。由于对这些计算进行了一些手工制作的汇编语言优化。潜在地,将计算时间从 500 秒/纪元减少到 300 秒/纪元是无可厚非的。 300 秒 = 5 分钟。因此,一个人可以在一小时内获得 15 个 epoch。在大约 3.5 小时内完成大约 50 个 epoch!但理想情况下,我想在一小时内完成这些类型的计算。为了达到这些水平,我需要使用 GPU,而此时,只有 NVIDIA 提供了这方面的全面支持:当 GPU 可用时,Neon 也使用 CUDA 和 cuDNN(当然,它必须是 NVIDIA GPU )。如果您可以访问其他英特尔硬件,这当然是一种有效的追求方式。毕竟,Neon 的开发是为了让事情在非 NVIDIA 设置(如 Nervana 的定制 CPU,现在是英特尔 FPGA 或 Xeon Phis)上也能以最佳方式工作。

    3.5.) 英特尔 Movidius

    2017-08-25 更新:我遇到了 this article .英特尔发布了基于 USB3.0 棒的“深度学习”加速器。显然,它与 Cafe 一起工作,并允许用户执行常见的基于 Cafe 的网络微调和推理。需要强调的是:如果你想从头开始训练你自己的网络,这里的措辞非常含糊。因此,我假设,除了微调网络之外,训练本身仍然应该在具有更多并行计算的东西上完成。不过,真正令人兴奋的是:当我检查价格时,这根棍子的价格仅为 79 美元。与普通 NVIDIA 1070-80(ti) 卡的成本相比,这不算什么。如果您只是想使用已可用于某些相关任务的常见网络拓扑来解决一些视觉问题,您可以使用此棒将其微调到您自己的用途,然后编译代码并将其放入此棒中以快速进行推理。许多用例都可以用这根棒子覆盖,再次花费 79 美元,它可能是值得的。这就是英特尔,他们提议全力以赴对付英特尔。他们的模型是使用云(即 Nervana Cloud)进行训练。然后,使用该芯片进行原型(prototype)推断或能源消耗重要的推断。这是否是正确的方法留给读者来回答。

    目前看来,没有 NVIDIA 的深度学习仍然难以实现。一些有限的速度提升是困难的,但通过使用 opencl 可能是可能的。其他举措听起来很有希望,但需要时间来理清这些举措将产生的真正影响。

    关于tensorflow - 如何在非 NVIDIA 设置上加速深度学习?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43143003/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com