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

     2023-03-12     304

关键词:

【中文标题】如何在非 NVIDIA 设置上加速深度学习?【英文标题】:How can I speed up deep learning on a non-NVIDIA setup? 【发布时间】:2017-08-25 20:42:03 【问题描述】:

由于我只有 AMD A10-7850 APU,并且没有资金购买 800 至 1200 美元的 NVIDIA 显卡,因此我正在努力利用现有资源来加速深度学习张量流/keras。

最初,我使用的是 Tensorflow 的预编译版本。 InceptionV3 大约需要 1000-1200 秒来计算 1 个 epoch。它一直非常缓慢。

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

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

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

【问题讨论】:

【参考方案1】:

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

1.) 上面 cmets 中提到的 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 年 4 月 24 日更新:在遇到一些问题here 后,我已经获得了要编译的代码!)不幸的是,ON MY SETUP (iGPU) 提高速度的希望没有实现。

CIFAR 10 数据集:

    Tensorflow(通过未优化的 pip ak):1700 秒/纪元,390% CPU 利用率。 Tensorflow(SSE4、AVX):1100 秒/纪元,390% CPU 利用率。 Tensorflow (opencl + iGPU): 5800sec/epoch at 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

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

2.) RocM + MIOpen

RocM 代表 Radeon 开放计算,似乎是一个大杂烩,可以/将在非 NVIDIA(主要是 Radeon 设备)上实现深度学习。它包括 3 个主要组件:

HIP:一种将 CUDA 代码转换为可供 AMD GPU 使用的代码的工具。 ROCk:用于 AMD CPU+GPU 设备的 64 位 linux 内核驱动程序。 HCC:一种 C/C++ 编译器,可将代码编译为异构系统架构环境 (HSA) 的代码。

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

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

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

我不确定 AMD 在这方面会取得多大的成功。但是,在 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 Edition 卡将是第一个),有迹象表明major deep learning frameworks will be supported through the MIOpen framework。今天发布的Forbes article 显示了 MiOpen 在过去几个月在性能方面取得的进步:它看起来很重要。 (2017-08-25 更新) MiOpen 正式发布。我们不再在这里谈论假设。现在我们只需要试试这个框架的效果如何。

3.) 霓虹灯

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

3.5.) 英特尔 Movidius

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

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

【讨论】:

您能否指出有关如何使用 CIFAR 10 数据集运行您所指的基准的说明? 好吧,我玩过 AMD 和 ROCm。 AMD 不能与最新的 Tensorflow 一起使用,只能与 2017 年的 1.0.1 版本一起使用。改为购买 NVidia 卡,现在所有 GPU 加速软件都可以使用。 我可以确认您对 Intel Movidius 的假设。您需要在其他地方进行训练,然后将训练好的模型导入 OpenVino 以在 Movidius 上进行推理。当前版本可以从 Caffe、TensorFlow、MXNet、Kaldi 和 ONNX 导入训练好的模型。如果您走这条路,则在定义模型时需要牢记 OpenVino 的局限性。它不支持所有拓扑或操作。【参考方案2】:

如果您的平台支持 opencl,您可以考虑将其与 tensorflow 一起使用。在 Linux 上this github repository 有一些实验性支持。一些初步说明位于the documentation section of of this github repository。

【讨论】:

这里还有一些关于 OpenCL 实施状态的高级信息,以防万一也有帮助。但是Benoit的分支链接是正确的去处codeplay.com/portal/…

如何安装pytorch

1什么是Pytorchpytorch是一个基于Python的科学计算包,其类似于Numpy但是能利用GPU加速,也是一个非常灵活和快速用于深度学习的研究平台。2安装Pytorch检查自己的电脑是否有NVIDIA独立显卡从硬件层面上说,NVIDIA从Geforce9XXX系列显卡,... 查看详情

如何安装pytorch

1什么是Pytorchpytorch是一个基于Python的科学计算包,其类似于Numpy但是能利用GPU加速,也是一个非常灵活和快速用于深度学习的研究平台。2安装Pytorch检查自己的电脑是否有NVIDIA独立显卡从硬件层面上说,NVIDIA从Geforce9XXX系列显卡,... 查看详情

如何用alluxio加速云上深度学习训练?

...f0c;本期内容将结合阿里、微软等实际应用案例,分享如何通过Alluxio加速云上深度学习。内容主要围绕两个部分展开:内容概要:Alluxio及其 查看详情

为啥做gpu计算,深度学习用amd显卡的很少,基本都nvidia

...,最近才大力打造AMDRadeonInstinct系列加速卡。 参考技术BNVIDIA显卡优化做工功耗稳定性都要比AMD好,价格上NVIDIA比AMD高些。本回答被提问者采纳 查看详情

在 Jetson nano 和 jetson xavier 上运行 Nvidia-docker 以实现 tensorflow 等深度学习框架

】在Jetsonnano和jetsonxavier上运行Nvidia-docker以实现tensorflow等深度学习框架【英文标题】:RunNvidia-dockeronJetsonnanoandjetsonxavierfordeeplearningframeworkliketensorflow【发布时间】:2020-09-2803:55:27【问题描述】:我目前正在尝试在JetsonXavier和jetson... 查看详情

7.数据分析--在matlab中通过nvidiageforcegpu加速深度学习计算

...神经网络和循环神经网络)的接口)据说matlab现在只支持NVIDIA系列的显卡,matlab2018aNeuralNetworkToolbox关于深度神经网络在GPU上的加速计算有以下要求:UsingaGPUrequiresaCU 查看详情

如何在 Google 深度学习 VM 上安装 GPU 驱动程序?

】如何在Google深度学习VM上安装GPU驱动程序?【英文标题】:HowtoinstallGPUdriveronGoogleDeepLearningVM?【发布时间】:2021-09-0519:51:09【问题描述】:我刚刚用这张图片创建了一个谷歌深度学习虚拟机:c1-deeplearning-tf-1-15-cu110-v20210619-debian-... 查看详情

深度学习系列50:苹果m1芯片加速pytorch(代码片段)

...加速GPU训练。MPS后端扩展了PyTorch框架,提供了在Mac上设置和运行操作的脚本和功能。MPS通过针对每个MetalGPU系列的独特特性进行微调的内核来优化计算性能。新设备将机器学习计算图和原语映射到MPS提供的MPSGraph框架和优化... 查看详情

用人话讲解深度学习中cuda,cudatookit,cudnn和pytorch的关系

...了如下笔记,如有错误欢迎指正。CUDACUDA是显卡厂商NVIDIA推出的运算平台。CUDA™是一种由NVIDIA推出的通用并行计算架构,是一种并行计算平台和编程模型,该架构使GPU能够解决复杂的计算问题。CUDA英文全称是ComputeUnif... 查看详情

综述|fpga加速深度学习

...正是深度学习的崛起。大数据时代需要迫切解决的问题是如何将极为复杂繁多的数据进行有效的分析使用,进而充分挖掘利用数据的价值并造福人类。深度学习作为一种实现机器学习的技术,正是解决这一问题的重要法... 查看详情

如何用alluxio加速云上深度学习训练?

...f0c;本期内容将结合阿里、微软等实际应用案例,分享如何通过Alluxio加速云上深度学习。内容主要围绕两个部分展开:内容概要:Alluxio及其POSIXAPI简介>>Alluxio是一个java开源项目,是云上的关于数据分析以及深... 查看详情

wavesummit+2022大会回顾,nvidia极致性能助力飞桨落地千行百业

...态总经理马艳军发布了飞桨开源框架2.4版本,并携手NVIDIA等12家生态伙伴发布了飞桨生态发行版,为开发者提供更好的软硬一体化体验。作为飞桨的深度合作伙伴,NVIDIA也出席了这场盛大的线上峰会。NVIDIA亚太区资深... 查看详情

学习笔记~(代码片段)

...xff1a;在Vim编辑器下输入/进行查找字符串在CMD下输入:nvidia-smi查看显卡情况CUDA:其是由NVIDIA发明的并行计算平台以及编程模型,它可以显著的提高GPU的计算性能。cuDNN:NVIDIA的cuDNN是针对深度神经网络计算的一个GPU... 查看详情

学习笔记~(代码片段)

...xff1a;在Vim编辑器下输入/进行查找字符串在CMD下输入:nvidia-smi查看显卡情况CUDA:其是由NVIDIA发明的并行计算平台以及编程模型,它可以显著的提高GPU的计算性能。cuDNN:NVIDIA的cuDNN是针对深度神经网络计算的一个GPU... 查看详情

opensuse多个gpu设置深度学习caffepytorch等

原来只有一张卡Titianx,最近又添加一个1080TI,插好以后nvidia-smi显示只有一张卡。看了下dev下nvidia1普通用户没有权限,切换到root下正常。但是在root下还是不太好,那只能把video的权限放开了~~~usermod-a-Gvideo@user(@user是用户名... 查看详情

测量 NVIDIA 张量核心加速

...响(用于测试目的的Tensorflow/Python中的卷积神经网络)。如何测量张量核心加速?是否可以禁用张量核心并在有/没有它们的情况下运行相同的代码?我尝试过 查看详情

新的ubuntu服务器上如何安装深度学习环境的docker(代码片段)

 背景:硬件:联想的双3090显卡总共48GB显存4TB刀片式服务器。软件:只安装了nvidia的驱动,能用nvidia-smi查看显卡信息,但是nvcc-V看不到东西。镜像包是 nvidia_cu11_tf15.tar,里面包含:tensorflow       ... 查看详情

cuda和cudnn安装过程

CUDA与CUDNN的关系: CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。cuDNN是用于深度神经网络的GPU加速库。CUDA看作是一个工作台,上面配有很多工具,如锤子、螺丝刀等。cuDNN是... 查看详情