精华内容
下载资源
问答
  • amd深度学习框架搭建

    2021-03-24 21:11:41
    一、实验一:深度学习框架搭建 二、实验目标 1、深度学习环境搭建; 2、图像识别开发环境搭建; 三、实验内容 1、实验方法及步骤: 方法:由于电脑是AMD显卡故下载tensorflow-cpu版本,python,Anaconda,pycharm,...

    一、实验一:深度学习框架搭建
    二、实验目标
    1、深度学习环境搭建;
    2、图像识别开发环境搭建;
    三、实验内容
    1、实验方法及步骤:
    方法:由于电脑是AMD显卡故下载tensorflow-cpu版本,python,Anaconda,pycharm,顺便搭建了pytorch环境和图像识别的opencv-python的运行环境。
    步骤:先下载Anaconda,anaconda中自带python3.6.5,我自己创建了2个环境,分别为python3.6.2+tensorflow;以及python3.6.2+pytorch,之后下载了pycharm;最后引入了opencv-python和opencv-contrib –python模块,成功复现出文件中的图片。
    2、实验过程记录:
    (1)在Anaconda官网下载
    比较难的地方在于下载之后环境变量的配置,需要进入电脑的控制面板,系统中的高级系统设置,点击右下方环境变量进行配置。之后就成功安装,下图是安装好的Anaconda。
    在这里插入图片描述

    (2)创建环境变量
    用下面指令conda acitvate env_name
    然后激活环境变量 用指令activate name
    下面是我创建的环境变量列表
    在这里插入图片描述
    (3)下载pycharm,并将环境变量引入,下图为引入的环境变量

    在这里插入图片描述

    (4)在创建名为python3.6中,添加tensorflow模块,由于版本的问题此过程耗费大量时间,一个坑接一个坑,好在最终的结果成功的安装并验证成功。下图为安装好的tensorflow及其版本。完成实验一深度学习环境的搭建。
    在这里插入图片描述
    在创建名为pytorch的环境中,添加pytorch和opencv-python模块,进行实验二,图像识别开发环境搭建。在这里插入图片描述

    3、实验数据处理(数据、曲线、图表):
    (1)下图为实验一深度学习环境的搭建验证:
    在这里插入图片描述
    (2)下图为在pytorch环境下,实验二图像识别的验证结果:
    在这里插入图片描述
    四、实验结果分析(实验误差、现象、分析)
    实验使用tensorflow和pytorch分别完成搭建出深度学习环境、图像识别开发环境搭建。并用实际程序加以验证。

    展开全文
  • 农企的深度学习加速库MIOpen 1.0更新了,它现在已经能支持对CNN的加速。 ROCm全称Radeon Open Compute platform,是AMD在去年12月推出的开源GPU运算平台,MIOpen则是AMD为此开发的软件库,其作用是将程序设计语言和...
    本文来自AI新媒体量子位(QbitAI)

    农企的深度学习加速库MIOpen 1.0更新了,它现在已经能支持对CNN的加速。

    ROCm全称Radeon Open Compute platform,是AMD在去年12月推出的开源GPU运算平台,MIOpen则是AMD为此开发的软件库,其作用是将程序设计语言和ROCm平台连接,以充分利用GCN架构。

    此次更新包括:

    • 同时为正向和反向传播优化的深度卷积解算器
    • 优化的卷积算法,包括Winograd和快速傅立叶转换
    • 为深度学习准备的、优化的GEMM
    • 池化、Softmax、激活、梯度算法的批量归一化,以及LR Normalization
    • 4D张量NCHW格式
    • 支持OpenCL和HIP的框架API
    • 对MIOpen驱动的支持,以测试任何正向/反向网络
    • 支持Ubuntu 16.04和Fedora 24的二进制封装

    ROCm支持如下深度学习平台:

    640?wx_fmt=png&wxfrom=5&wx_lazy=1

    是的,没有Theano。

    源代码:
    https://github.com/ROCmSoftwarePlatform/MIOpen

    文档:

    MIOpen:
    https://rocmsoftwareplatform.github.io/MIOpen/doc/html/apireference.html

    MIOpenGemm:
    https://rocmsoftwareplatform.github.io/MIOpenGEMM/doc/html/index.html

    【完】

    本文作者:吴唯
    原文发布时间:2017-07-03
    展开全文
  • 当一家公司开始使用突破性技术或商业模式时,其结果可能是令人难以想象的,甚至让竞争对手完全丧失追赶的可能。...本文将探讨AMD深度学习开源策略,并解释AMD ROCm计划在加速深度学习发展方面的优势。回答AMD的竞争对

    当一家公司开始使用突破性技术或商业模式时,其结果可能是令人难以想象的,甚至让竞争对手完全丧失追赶的可能。

     

    能够达到这种结果的原因是:尽管公司的早期发展看起来是线性的,但其最终将显现为以指数形式增长。当一家公司到达这一点时,竞争对手再想赶上就变得非常困难,几乎不可能了。

     

    本文将探讨AMD的深度学习开源策略,并解释AMD ROCm计划在加速深度学习发展方面的优势。回答AMD的竞争对手,是否需要关注AMD正在进行的突破性改变的问题。

     

    AMD深度学习开源堆栈

     

    在介绍AMD深度学习堆栈的细节之前,让我们来看看开发工具背后的理念。AMD作为CPU和GPU的供应商,享有独一无二的地位,多年来一直在推广异构系统架构(HSA)的概念。与其他供应商的大多数开发工具不同,AMD的工具旨在支持其基于x86的CPU和GPU。AMD在HSA基金会(成立于2012年)共享HSA设计和成果,该基金会是一个非营利组织,其成员包括ARM,Qualcomm和Samsung等其他CPU供应商。

     

    HSA基金会用一个图表,说明了HSA堆栈:


    640?wx_fmt=png&wxfrom=5&wx_lazy=1

    来源:HSA 基金会

     

    如图所示所见,中间件(即HSA Runtime Infrastructure)在驻留在单个系统中的不同类型的计算设备之间提供了一个抽象层。人们可以将其视为允许在CPU和GPU上运行相同程序的虚拟机。

     

    2015年11月,AMD宣布ROCm计划将支持高性能计算(HPC)工作负载,并为Nvidia的CUDA平台提供替代方案。该计划发布了一个开源的64位Linux驱动程序(称为ROCk内核驱动程序)和扩展(即非标准)HSA运行环境(称为ROCr Runtime)。ROCm还继承了之前HSA的创新,如AQL数据包、用户模式队列和环境切换。

     

    ROCm还发布了一个名为异构计算编译器(HCC)的C / C ++编译器,旨在支持HPC应用程序。HCC基于开源的LLVM编译器基础设施项目(https://en.wikipedia.org/wiki/LLVM)。


    还有许多使用LLVM的开源语言,包括Ada,C#,Delphi,Fortran,Haskell,Javabytecode,Julia,Lua,Objective-C,Python,R,Ruby,Rust和Swift。这个丰富的生态系统开启了ROCm平台上替代语言的可能性。一个令人瞩目的开发就是名为NUMBA的Python应用。

     

    添加到编译器的是一个称为HC的API,它提供对同步,数据迁移和内存分配的附加控制。HCC支持其他并行编程API,为了避免混淆,不会在这篇文章中介绍。

     

    HCC编译器基于HSA基础上工作。这样可以将CPU和GPU代码写入相同的源文件,并支持统一的CPU-GPU内存分配等功能。

     

    为了进一步缩小差距,ROCm 项目创建了一个名为HIP的CUDA移植工具(让我们忽略缩写代表的意思)。HIP提供了扫描CUDA源代码并将其转换为相应的HIP源代码的工具。HIP源代码看起来类似于CUDA代码,但编译的HIP代码可以支持基于CUDA和AMD的GPU设备。

     

    0?wx_fmt=png

    来源: AMD

     

    AMD采用Caffe架构,拥有5.5万行优化的CUDA代码,并应用了HIP工具。55,000行代码中的99.6%由HIP自动翻译,其余部分代码由一个开发人员花了一个星期完成。一旦移植成功,HIP代码和原始的CUDA版本表现一直。

     

    HIP并不是100%兼容CUDA,但它确实为开发人员提供了支持替代GPU平台的迁移路径。对于已经拥有大量CUDA代码库的开发人员来说,这是非常有帮助的。

     

    今年年初,AMD宣布决定,将通过“闪电编译器计划(Lightning Compiler Initiative)”来“更接近金属”。该HCC编译器现在支持直接生成Radeon GPU指令集(称为GSN ISA)而不再是HSAIL。

     

    我们将在后面看到,直接针对本地GPU的指令对于获得更高的性能至关重要。ROCm下的所有库都支持GSN ISA。

     

    0?wx_fmt=png

    来源:AMD

     

    该图描绘了ROCm组件之间的关系。HCC编译器生成CPU和GPU代码,使用不同的LLVM后端从单个C/ C ++源生成x86和GCN ISA代码。GSN ISA汇编器也可以用作GCN目标源。

     

    CPU和GPU代码与HCC运行时链接以形成应用程序(与HSA图进行比较)。应用程序与驻留在Linux中的用户空间中的ROCr驱动程序进行通信。ROCr驱动程序使用低延迟机制(基于数据包的AQL)来与ROCk内核驱动程序协调。

     

    这提出了高性能计算所需要的两个关键点:

     

    1. 在设备的汇编语言级别执行工作的能力。

    2. 高度优化库的可用性。

     

    2015年,Peter Warden在《为什么GEMM是深度学习的核心?》(https://petewarden.com/2015/04/20/why-gemm-is-at-the-heart-of-deep-learning/)中谈到了关于优化矩阵库的重要性。BLAS(基本线性代数子程序)是人工优化库,可追溯到Fortran代码。Warden写道:

     

    “科学程序员们,在Fortran世界花了几十年时间优化代码,来执行大规模矩阵到矩阵乘法,并且从常规的存储器访问模式中的获益,要大于存储成本的浪费。”

     

    尽管我们在编译器技术方面取得了进展,但是对于内存访问的每个详细细节的关注却很难复制。在2017年,Warden在《为什么深度学习需要汇编黑客呢?》(https://petewarden.com/2017/01/03/why-deep-learning-needs-assembler-hackers/)中写道:

     

    “我花了大量的时间来努力摆脱开发中硬件的性能。”

     

    尽管是最近才出现的技术,但是深度学习的软件是一个复杂的堆栈。公认的最流行的深度学习框架(TensorFlow,Torch,Caffe等)都是开源的。然而,这些框架是建立在高度优化的内核上,但这些内核通常是不公开的。开发人员需要尽全力挤出他们硬件中每一点可用的性能。

     

    例如,Nervana系统的Scott Gray不得不逆转Nvidia的指令集来创建汇编器(https://github.com/NervanaSystems/maxas/wiki/Introduction):

     

    “我基本上得出结论,不可能充分利用Nvidia提供的工具来达到我所购买硬件的最优性能。不幸的是,Nvidia也不买自己工具的帐,他们手工组装自己的库例程,而不是像我们其他人一样使用Nvidia的ptxas。”

     

    Gray使用汇编语言来编写他们自己的内核,从而创建最佳的专有替代方案的算法。现在想象如果汇编语言是可用的并记录在文档中,他可以少做多少工作。这也是AMD将要推出的。

     

    ROCm计划提供手工库和汇编语言工具,这将使开发人员能够发挥AMD硬件中的每一微小性能。

     

    这都是从头开始应用HIP接口实现的。AMD甚至提供了支持rocBLAS基准测试的工具(即Tensile,https://github.com/RadeonOpenCompute/Tensile/wiki)。AMD还提供了一个名为rocFFT的FFT库,它也是用HIP接口编写的。

     

    深度学习算法将继续快速发展。


    一开始,框架利用了可用的矩阵乘法库。这些精细调整的算法已经开发了几十年。随着研究的不断深入,还将有新的算法提出。

     

    因此,需要超越通用矩阵乘法的算法。卷积网络的出现导致了更多的创新算法。今天,许多这类算法通过汇编语言手工实现。这些底层调整可以显著提高性能。对于某些操作(如批量归一化),与传统非优化解决方案相比,新算法性能提高了14倍。

     

    AMD发布了一个名为MiOpen(https://rocmsoftwareplatform.github.io/MIOpen/doc/html/)的库,其中包括手工实现的深度学习优化。


    该库包含了针对Radeon GPU特定的操作优化,也将可能包含上述描述的许多优化。MiOpencoin的发布恰逢Caffe版本释放。这将允许使用这些框架的应用程序代码在Radeon GPU硬件上更有竞争力。

     

    Arxiv上几乎每天都会有新的算法论文发表,而许多最先进的方法还未进入专有的深度学习库。

     

    任何供应商都难以跟上这样激动人心的步伐。在目前的情况下,鉴于开发工具缺乏透明度,开发人员不得不选择等待,尽管他们很希望能自己进行编码和优化。幸运的是,开源ROCm项目解决了这个问题。


    部署

     

    在本文中,我们讨论了ROCm软件栈的前景。到了ROCm大展身手的时候,我们需要讨论软件运行的硬件种类,部署深度学习在很多不同的场景下都是富有意义的。与通常的观点不同,并不是所有的东西都要部署在云端。无人车或通用翻译设备就需要在没有连接的情况下运行。

     

    深度学习也有两种主要的操作模式 ——“训练”和“推理”。在训练模式下,您总希望拥有许多地球上最强最快的GPU。在推理模式下,您仍然希望能更快,但重点却转向经济功耗,我们不想看到通过支付昂贵的电力来开展业务。

     

    总而言之,您需要在不同的情境下运行各种硬件。这就体现了AMD的优势。AMD最近宣布了一些令人非常印象深刻的硬件,专门面向深度学习的工作负载。


    0?wx_fmt=png


    该产品称为Radeon Instinct,它由几个GPU芯片组成:MI6,MI8和MI25。编号数字大致对应于芯片的操作次数。MI6可以每秒执行大约6万亿次浮点运算(也称为teraflops)。

     

    在嵌入式设备层面也有新的曙光。AMD已经支持Microsoft Xbox和Sony PlayStation的定制CPU-GPU芯片。AMD APU(即具有集成GPU的CPU)也可为具有较小外观的设备提供解决方案。


    AMD战略的优点在于,开发者既可以将HSA的架构用于最小的服务器上,也可以部署到最快的服务器上。这种广泛的硬件产品允许深度学习的开发人员在部署他们的解决方案方面拥有丰富的灵活性。深度学习正以爆炸的速度发展,人们永远不能预测部署解决方案的最佳方式。

     

    结论

     

    像互联网和智能移动设备一样,深度学习是一种突破性的技术。开源软件已经成为支持这些技术的主要平台。

     

    AMD将这些强大的原理与开源的ROCm计划相结合,这本身就具有加速深度学习发展的潜力。ROCm提供了一整套满足高性能计算需求的组件,例如提供更接近硬件的工具,包括手动编程库和对汇编语言工具的支持。

     

    未来的深度学习软件将需要更多优化,涵盖多种计算核心。在我看来,AMD在异构系统架构中大量投资的战略眼光让他们的平台有了显著的优势。

     

    AMD开源战略具有独特的地位,将打破未来深度学习的发展。

     

    推荐阅读

    北京龙泉寺:清华北大学子排队出家

    香港科技大学三天速成TensorFlow教程 

    用声音检测技术降低美国“赌城”枪击案伤亡

    谷歌新品发布会:赋能AI 三大原则 软硬结合

    深度学习软件安装指南

    谷歌教你零编程基础玩转机器学习

    中科院谭铁牛爱徒研发碟中谍中的步态识别技术

    专访深度学习之父Geoffrey Hinton

    NIH发布全球最大胸部X光数据集

    CMU用「PixelNN」完美还原马赛克照片(paper)


    长期招聘志愿者

    加入「AI从业者社群」请备注个人信息

    添加小鸡微信  liulailiuwang


    640?wx_fmt=png

    展开全文
  • 基于OpenCL的深度学习工具:AMD MLP及其使用详解 ... 发表于2015-08-05 16:33|5921次阅读| 来源CSDN|2条评论| 作者AMD中国异构计算部 ...摘要:本文介绍AMD深度学习团队开发的MLP学习工具软件的使用,为深度学习研究...

    基于OpenCL的深度学习工具:AMD MLP及其使用详解

    http://www.csdn.net/article/2015-08-05/2825390

    发表于2015-08-05 16:33| 5921次阅读| 来源CSDN| 2 条评论| 作者AMD中国异构计算部
    摘要:本文介绍AMD深度学习团队开发的MLP学习工具软件的使用,为深度学习研究人员和开发商提供一个高性能、高易用性的深度学习的软硬件平台方案。AMD-MLP基于OpenCL,支持不同类型的GPU平台,并能通过多GPU扩展学习速度。

    【编者按】深度学习是近年来迅速发展和突破的机器学习领域,具有非常广泛的应用前景。将服务器GPU应用到深度学习过程中,可以更好地推动深度学习技术研究和应用的发展。本文介绍AMD深度学习团队开发的MLP学习工具软件的使用,为深度学习研究人员和开发商提供一个高性能、高易用性的深度学习的软硬件平台方案。AMD-MLP基于OpenCL,支持不同类型的GPU平台,并能通过多GPU扩展学习速度。

    深度学习神经网络简介

    深度学习是人工智能的学科—机器学习的一个研究领域,是多种学习方法的集合。深度学习的各种学习方法都采用类似于人脑中的生物神经网络的结构建立模型,即较大层次和规模的人工神经网络(DNN),模拟人脑神经系统的信息处理和交换过程,实现对数据的分析和处理。

    深度学习是近年来机器学习研究中获得最多关注的领域。业界一般认为,深度学习的快速发展和应用是以多伦多大学的Geoffrey Hinton教授发表在科学杂志上的一篇文章[1]开始的。自Hinton的文章以后,深度学习在语音识别、图像分类、自然语言处理等领域取得了不断的突破。尤其值得一提的是,由于采用深度学习技术,在ImageNet 图像分类2012年度的挑战赛中,top5 分类的最佳识别率达到了85%[2];并在最近,即2014年度的挑战赛中,top5分类的最佳识别率超过了93%[3],可见深度学习对图像识别领域的推动非常明显,足以让业界人心激动。

    各种深度学习的模型结构读者可从Google上搜索得到。典型的DNN结构都会包括一个输入层,一个输出层和若干隐含层,不通类型的DNN会有不同类型的隐含层类型、功能、连接方式及具体学习策略和算法。典型的DNN有用于采用监督式学习方法,常用于图像分类的卷积神经网络[4](CNN)和采用非监督式学习方法,用于对深度网络模型参数进行预训练的深度信念网络(DBN)[4]

    MLP全称Multi-layer Perceptron(即多层感知机),是一种前向触发的人工神经网络结构。MLP特点是相邻两层的节点之间全连接,同一层的节点之间无连接,跨层之间无连接。MLP属于监督式学习技术,用误差向后传播的思想来学习神经网络模型的参数。MLP对标签数据进行学习的结果就是一个表示分类器或预测器的神经网络,可用于解决分类或回归问题。传统的MLP概念并不特指深度的神经网络,但由于实现技术的进步,目前我们所研究和采用的MLP网络都是网络层数比较多,节点规模比较大的网络结构,同时MLP采用的误差后向传播的思想以及其网络层中的非线性转换过程和监督式的深度学习模型完全一致,所以我们认为MLP是深度学习的一种方式。

    MLP已经被用于语言识别,图像识别,机器翻译等领域,也可用于一些结构化、离散型数值的数据的特征识别,如网络包的类型识别[5]

     

    深度学习需要GPU加速

     

    典型的深度神经网络由于层数多,结构复杂,节点数多,训练数据集大等特点,训练过程所需的时间特别长,通常以数日,数周,甚至数月来计算。计算型独立显卡(GPU)由于其计算单元数量大,并行处理能力强,可部署密度大等特点,几乎成为提高深度学习过程速度的一致选择。

    作为高性能计算专业显卡提供商,AMD 长期致力于在高性能计算和大数据分析领域为用户和开发商伙伴提供软硬平台。AMD中国深度学习团队专门开发了AMD-MLP软件,帮助用户在AMD专业硬件平台上完成各种深度学习任务。本文所述开发是在AMD S9150 高性能显卡上开发的,S9150具有2816 个流处理器(44 个计算单元)、5.07 TFLOPS单精度负浮点计算能力、2.53 TFLOPS双精度浮点计算能力、 16G GDDR5 内存、320 GB/S 内存带宽,可以胜任大型DNN学习任务的运行。其16G内存完全足够存放目前为此参加ImageNet图像分类竞赛的有公开的大规模CNN模型的网络参数,避免了DNN学习过程中将网络模型参数分散到多个GPU所带来的算法复杂性。 

    AMD-MLP 深度学习技术

    AMD-MLP是AMD中国异构计算部门开发的私有软件,其开发人员都是GPU计算和应用方面的专家,在使用异构计算技术提高软件性能方面有丰富的理解和实现经验,他们本着简单、实效、方便用户、注重性能的产品实现原则,为AMD-MLP带来了如下特点:

    1)  完全的C++实现

    全部的代码用C++类进行组织。用C++类的公共接口作为API,开发者用户无论是利用AMD-MLP进行数据学习,建立数据分类器;还是使用已产生的数据分类器开发识别型应用,编程都非常简单。

    2)  基于开放标准实现

    AMD- MLP 用OpenCL作为使用GPU进行通用计算的编程工具,来实现深度学习过程中的重要计算操作。由于OpenCL是开放标准的异构编程工具,其被AMD、Intel及Nvidia等多个厂家所实现,因此AMD-MLP 能在不同厂家的设备上运行,软件的移植性很好。clBlas是基于OpenCL实现的矩阵运算操作库,AMD-MLP中执行矩阵运算的地方直接用clBlas的接口实现,简化了编程。由于clBlas是实现开放标准的开源软件,其同样保证了AMD-MLP的可移植性。

    3)  模块化,易于扩展,用户只需要开发自己的数据接口C++类就可使用MLP学习自己的数据

    用戶在用AMD-MLP开发自己的分类器、识别器或预测器时,通常都会有和自己的应用领域相关的数据,甚至是自己的企业特定的数据源,由于这些数据的文件格式不一样,AMD-MLP不可能为所有用户都开发好数据使用接口,但AMD-MLP采用了高度模块化的设计,AMD-MLP通过实现一个DNNDataProvider对象提供了一个相对统一的数据访问接口和数据在内存中的格式,基于这个统一的接口,用户只需要做少量的开发工作(开发一个DNNDataProvider派生类) 识别其数据在文件中的格式并将其加载到内存即可,用户不需要关心数据在学习过程中如何被组织,传输和使用。AMD-MLP已经为手写数字识别数据源MNIST实现了一个数据接口,可作为用户实现自己数据源接口的参考。AMD-MLP的模块性还表现在其用分开的类实现了深度学习过程参数的配置的、神经网落状态SnapShot的功能,理解和使用都非常方便。

    4)  支持多种计算设备

    大规模的深度网络学习过程通常需要功能强大的独立显卡设备,但小型的神经网络及小型数据集的学习完全可以在集成显卡或CPU设备上进行,如作者本人就经常在AMD的A10 APU上进行MNIST数据集的学习。另外,使用学习好的分类器或预测器进行数据分类或函数数值预测时如果其对单个请求返回结果的实时性要求不高,分类或预测的神经网络计算过程完全可以用集成GPU或CPU设备来计算。为了满足这多种情况的需要,AMD-MLP 支持dGPU、iGPU、CPU三种设备,用户在使用时可灵活根据需要进行选择。

    5)  支持灵活的网络结构和学习参数配置

    用户使用AMD-MLP 进行神经网络学习的配置过程非常简单,只需要将网络结构和学习过程的控制参数写在一个文本文件中,每次学习时按需要进行修改即可。

    6)  算法的灵活度

    AMD-MLP对神经网络算法的支持比较灵活,允许用户按自己的需要进行选择,如在神经网络隐含层的激活(Activation)函数上,AMD MLP目前已经支持ReLu、TanH、Sigmoid和Softsign四种,允许用户通过配置文件进行选择,以满足不同数据学习的需要。另外AMD-MLP也允许用户通过配置文件对学习率参数进行动调整,并控制学习率调整的时机和速度。

     

    7)  通过Checkpointing 支持对大规模数据的不间断学习

    大规模的数据集的学习通常需要花很长的时间(几天,几周甚至几月),在这个过程中,如果计算机系统发生任何意外,学习过程就会从头开始。AMD-MLP 实现了一个高效率的异步CheckPointing机制,来周期性(如每30分钟)地对学习的中间结果进行Snapshot,保证当学习过程因计算机系统的故障而中断时,系统恢复后学习过程能从最近的Snapshot状态继续进行避免了大量的时间浪费。

     

    8)  用多GPU来提高对大规模数据的训练速度

    神经网络结构和数据集的规模越大,解决的数据问题越复杂,所需的学习时间就越长。过长的学习时间周期,不仅影响创建一个分类或预测结果的时间,还不利于神经网络学习过程中经常需要的参数调优工作。因此几乎大多数高效的神经网络学习软件除充分利用业界最先进的GPU设备外,还采用了各种方法来加速神经网络的学习过程。AMD-MLP实现了用多个GPU通过数据划分进行并行深度神经网络学习的训练过程,极大提高了利用神经网络技术能进行学习的数据的类型和规模。AMD中国异构计算部将在另外一篇文章中专门介绍AMD-MLP多GPU学习的实现方法。

    使用AMD-MLP进行深度学习过程举例

    下面的内容以利用MNIST数据集学习手写数字识别器为类,介绍怎样用AMD-MLP进行编程,执行数据集学习和测试的过程:

    1)  分类问题理解

    MLP能解决的典型问题包括分类和回归。分类包括二值分类和多类分类。手写数字的识别就是一个多类分类问题。具体而言,其输入是一个手写数字的图像,输出是代表0~9共10个数字的类别值。MLP的训练过程是监督式学习,其训练的策略是在输入数据集确定的条件下,用某种方法不断调整神经网络参数,使其标记在输出端出现的概率最大。为了和神经网络结构及训练策略要求的计算过程一致,在实际使用MLP时,MNIST的28x28的输入图像要转变成784-元的浮点向量;代表图像类型的标签也要转换成10-元的浮点数组,如 4要换成(0,0,0,1,0,0,0,0,0)。MLP训练的最后结果是输出一个参数确定的神经网络结构,这个神经网络结构能将任何一个28x28大小的图像,转换为10-元的浮点数组,在实际应用这个学习好的神经网络时,对任何一个28x28的输入图像,其对应的数字类别就是输出的10-元浮点数组中数值最大的元素的索引(即概率最大的类别)。

    2)  MNIST 手写识别数据集

    MNIST手写识别数据集是网上可公开获取的用于手写体数字识别的数据集,其常常被用来测试深度学习软件。该数据集包括60000个样本规模的训练集,10000个样本规模的测试集,每个样本的都是标准的28x28大小的手写灰度数字图像,数据集和样本的格式有详细的描述,具体参考http://yann.lecun.com/exdb/mnist/ 。由于MNIST数据集简单易用,对于深度学习软件的开发者而言,用MNIST来初步检验测试自己软件解决分类问题的功能是一个不错的选择。MNIST网站上还公开了用各种不同类型机器学习方法进行手写识别在MNIST测试集上所达到的性能结果,其中的数据是很好的参考。

    3)  代码步骤讲解

    使用AMD-MLP的API进行神经网络学习的代码非常简单,下面两个截图中代码完整的展示了用AMD-MLP 进行MNIST数据集的学习和并测试学习后的识别率的过程。

    对MNIST数据集进行学习的代码步骤如下:

     

    1. 创建 DNNMNistDataProvider类型的对象,启动该对象提供的MNIST数据访问服务功能。在这里该数据服务对象需要服务的数据是 MNIST的训练集。
    2. 创建MLPConfigProvider类型的对象,以读取MLP神经网络学习所需要的参数和网络结构信息.
    3. 创建MLPTrainerOCL类型的对象,该对象提供和MLP学习相关的全部操作。MLPTrainerOCL对象和MLPConfigProvider及DNNMNistDataProvider类型对象是关联的,因为其在执行MLP训练过程前需要从前者确定网络结构及训练过程的参数,在执行MLP训练过程中需要从后者不断读取MNIST训练数据
    4. 执行MLP训练过程,统计训练过程执行的时间,最后保存训练的结果。

     

    用户的数据集及神经网络规模比较大时,如果需要使用多个GPU进行学习,只需要将代码中的MLPTrainerOCL替换成MLPTrainerMGpuMaster类即可,其中的一个构造参数指定GPU的数量。

    使用MNIST测试集对训练的结果进行评估的代码步骤如下:

     

    1. 创建 DNNMNistDataProvider类型的对象,启动该对象提供的MNIST数据访问服务功能。在这里该数据服务对象需要服务的数据是 MNIST的测试集
    2. 创建MLPConfigProvider类型的对象,以读取以前训练好,保存起来的神经网络参数
    3. 创建MLPTesterOCL类型的对象,该对象提供和MLP训练后测试相关的全部操作。MLPTestOCL对象和MLPConfigProvideerr及DNNMNistDataProvider类型对象是关联的,因为其在执行MLP测试过程前需要从前者获取已经训练好的网络参数,在执行MLP测试过程中需要从后者不断读取MNIST测试数据
    4. 执行MLP测试过程,输出测试过程所达到的预测成功率,作为对训练过程评价的依据。

     


    4)  神经网络结构和参数配置

    AMD-MLP 的训练过程的配置非常简单,当然这和MLP网络结构本身相对简单有关。配置文件是一个按行定义的文本文件,其中既包括对神经网络结构的定义,也包括对训练过程的控制参数的指定。说明如下:

     

    • Network Type 指定MLP神经网络要解决的问题的类型。这个参数通常影响神经网络输出层的计算方法。Network Type 的值可有 Multiple Classification, Binary Classification, Regression三种。
    • Layers 指定MLP神经网络总的层数,注意这个层数包括了输入层。
    • Input Layer, Hidden Layer, Output Layer 分别定义神经网络输入,隐含和输出层的参数。Input Layer要指的只有该层的节点数;Hidden Layer 可以有多个,每个隐含层需要指定节点数,  所用的激活方法以及该层的初始学习率;Output Layer的参数和Hidden Layer  类似,我们将其用不同的关键字标识,是因为其激活方法的设定有不同的意义。在我们的MNIST学习例子中,只有一个隐含层,其节点数为800;输入层的节点数为784,代表输入数据大小为28x28的图像;输出层的大小为10,代表分类问题的类别总数为10。
    • Cost Function 指定输出层误差的反向传递方式。对于多值分类问题,其应该指定为CE,对二值分类或回归问题,其应该指定为SSE。
    • Momentum 和Weight Decay 都是MLP学习的梯度下降法中,用来控制Weights和Biases参数更新的参数。
    • Epochs 指定本次训练要执行的轮数,即全部数据要学习多少遍。
    • Dynamic Tuning 指是否要对学习率参数进行动态调整。当该参数值为 true时,Start Epoch和Interval Epoch参数分别代表进行调整的起点和间隔。

     

     AMD-MLP学习出的手写数字识别器演示

    1)  演示程序

    AMD设计了一个利用MLP做手写数字识别的演示程序,包含GPU及CPU版本的识别演示程序( 源码下载点击这里),是在Fedora 19下用Gtk3开发的,需要在有Gtk3的Linux下运行,其中CPU版本的程序在AMD或Intel的CPU上都可运行。这个压缩包中的二进制文件mlp_nnet.dat就是以前神经网络学习的输出,其中包含了神经网络的全部参数信息,它就代表了一个手写数字分类器。

    2)  演示截图

     


    总结

    AMD-MLP 是由AMD异构计算部门深度学习团队开发的深度学习软件,经过专业设计,它使用非常方便。AMD-MLP在AMD的GPU平台上开发,但能帮助用户在不同类型的GPU平台上完成深度学习任务,并能通过多GPU扩展学习速度。AMD-MLP是目前不多的,基于OpenCL实现的深度学习软件。同时AMD异构计算团队正在在其他流行的深度学习框架如Torch7、Caffe等上进行工作,后续会推出自己的方案。

     

    参考文献

    [1] Hinton, G. E. andSalakhutdinov, R. R. (2006) Reducing the dimensionality of data with neuralnetworks.  http://www.cs.toronto.edu/~hinton/science.pdf

    [2] LSVRC 2012 result. http://www.image-net.org/challenges/LSVRC/2012/results.html

    [3] LSVRC 2014 result. http://image-net.org/challenges/LSVRC/2014/results

    [4] Deep Learning. https://en.wikipedia.org/wiki/Deep_learning

    [5] Chintan Trivedi and Mo-Yuen Chow etc. Classification of Internet Traffic using Artificial Neural Networks. http://repository.lib.ncsu.edu/dr/bitstream/1840.4/1053/1/TR_2002_05.pdf

    作者简介:AMD中国异构计算部是AMD中国区负责构建异构计算系统应用技术和优化方案的部门,与学术和业界广泛合作,研究方向主要面向高性能计算,大数据挖掘,视频图像应用,在系统和算法层面提供可实施级支持。 (编辑:周建丁)


     

    • 如果您对深度学习框架有更多的见解和心得希望分享,请给小编发送邮件:zhoujd@csdn.net。
    • 如果您想了解更多的深度学习相关产品,请关注 CSDN人工智能产品库
    • 更多人工智能技术分享与交流,请加入CSDN 人工智能技术交流QQ群,群号:465538150。

     

     

    转载于:https://www.cnblogs.com/leoking01/p/7210015.html

    展开全文
  • AMD 显卡/GPU 深度学习折腾指南

    万次阅读 多人点赞 2020-04-01 11:10:04
    文章首发于 个人博客 文章目录IntroductionZheTeng ConditionsGPU 列表CPU 列表关于 ROCmInstall on Ubuntu系统准备安装 ROCmDeep ...鉴于 NVIDIA 的价格和自己的预算, 因此上了 AMD 的船,自此主机组装完成。 A...
  • 想要用amdCPU和n卡的笔记本跑深度学习毕设(深度学习,卷积神经网络),但是担心amd cpu 的兼容问题,想请教这种搭配稳不稳。
  • AMD设计了一个利用MLP做手写数字识别的演示程序,包含GPU及CPU版本的识别演示程序,是在Fedora 19下用Gtk3开发的,需要在有Gtk3的Linux下运行,其中CPU版本的程序在AMD或Intel的CPU上都可运行。这个压缩包中的二进制...
  • AMD显卡安装Caffe|深度学习|Ubuntu

    千次阅读 2019-11-11 12:37:15
    去年双十一前, 苦苦对比买了台组装机,最终因为贪图便宜300块钱选择了AMD的处理器和显卡。后来才发现CUDA是英伟达公司开发的,AMD显卡的架构不一样所以不能使用。而我心心念念的Caffe官网上只有关于CUDA的安装使用...
  • 综合了AMD在个人电脑上花费一个半小时的展示,显然7纳米Vega终于瞄准了高性能深度学习和机器学习应用。AMD EPYC的成功可能为Vega在云AI训练和推理的应用铺平了道路。 AMD声称,与合作伙伴合作开发的7纳米流程节点将...
  • 本文作者详细描述了自己组装深度学习服务器的过程,从 CPU、GPU、主板、电源、机箱等的选取到部件的安装,再到服务器的设置,可谓面面俱到。作者指出,组装者首先要弄清自己的需求,然后根据预算做出合理的选择。注...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 291
精华内容 116
关键字:

amd深度学习