在CPU下最快的gpuCPU深度学习习框架是哪种

您正在使用IE低版浏览器,为了您的雷锋网账号安全和更好的产品体验,强烈建议使用更快更安全的浏览器
发私信给李尊
导语:深度学习八大开源框架
同步到新浪微博
当月热门文章
为了您的账户安全,请
您的邮箱还未验证,完成可获20积分哟!
您的账号已经绑定,现在您可以以方便用邮箱登录主流开源深度学习框架对比分析 - 推酷
主流开源深度学习框架对比分析
一、Caffe(Convolutional Architecture for Fast Feature Embedding) BVLC
We believe that Caffe is the fastest convnet implementation available. caffe的官网是http://caffe.berkeleyvision.org/。Caffe是一个清晰而高效的深度学习框架,其作者是博士毕业于UC Berkeley的贾扬清,目前在Google工作。
Caffe是纯粹的C++/CUDA架构,支持命令行、Python和MATLAB接口;可以在CPU和GPU直接无缝切换:Caffe::set_mode(Caffe::GPU); 在Caffe中图层需要使用C++定义,而网络则使用Protobuf定义。Caffe是一个深度卷积神经网络的学习框架,使用Caffe可以比较方便地进行CNN模型的训练和测试,精于CV领域。
Caffe作为快速开发和工程应用是非常适合的。caffe官方提供了大量examples,照着examples写,caffe只要求会写prototxt就行,它的训练过程、梯度下降算法等等都实现封装好了,懂了prototxt的语法了,基本就能自己构造神经网络了。caffe作为C++语言以及配合了CUDA开发的框架,训练效率也有保证,这也是caffe适合于工业应用的原因。代码易懂好理解,高效、实用。上手简单,使用方便,比较成熟和完善,实现基础算法方便快捷,开发新算法不是特别灵活,适合工业快速应用实现.
Caffe的优势:
一方面是调参,改网络很方便,开源做得很好,另一方面CNN在CV里用的很多,这也是Caffe的优势。
上手快:配置文件简单,易上手,文档齐全,模型与相应优化都是以文本形式而非代码形式给出。
Caffe给出了模型的定义、最优化设置以及预训练的权重,方便立即上手。
速度快:Google Protocol Buffer数据标准为Caffe提升了效率,能够运行最棒的模型与海量的数据。Caffe与cuDNN结合使用,测试AlexNet模型,在K40上处理每张图片只需要1.17ms.
模块化:允许对新数据格式、网络层和损失函数进行扩展,方便扩展到新的任务和设置上。
可以使用Caffe提供的各层类型来定义自己的模型。
开放性:公开的代码和参考模型用于再现。
社区好:可以通过BSD-2参与开发与讨论。
学术论文采用此模型较多。不少论文都与Caffe有关(R-CNN,DSN,最近还有人用Caffe实现LSTM)
缺点:灵活性差,不同版本接口不兼容, 可定制性较低,不能很方便得扩展到其它模型。
Caffe可能是第一个主流的工业级深度学习工具,它开始于2013年底,具有出色的卷积神经网络实现。在计算机视觉领域Caffe依然是最流行的工具包,它有很多扩展,但是由于一些遗留的架构问题,它对递归网络和语言建模的支持很差。
二、MXNet百度 DMLC(分布式机器学习社区) 简称&深盟&
内存优化做得好
MXNet结合命令式和声明式编程的优点,既可以对系统做大量的优化,又可以方便调试。资源和计算的调度、内存分配资源管理、数据的表示、计算优化等都很值得学习的,原生支持分布式训练的。
对于一个优秀的深度学习系统,或者更广来说优秀的科学计算系统,最重要的是编程接口的设计。他们都采用将一个领域特定语言(domain specific language)嵌入到一个主语言中。例如numpy将矩阵运算嵌入到python中。这类嵌入一般分为两种,其中一种嵌入的较浅,其中每个语句都按原来的意思执行,且通常采用命令式编程(imperative programming),其中numpy和Torch就是属于这种。而另一种则用一种深的嵌入方式,提供一整套针对具体应用的迷你语言。这一种通常使用声明式语言(declarative programing),既用户只需要声明要做什么,而具体执行则由系统完成。这类系统包括Caffe,theano和TensorFlow。
这两种方式各有利弊,总结如下
命令式编程:
如何执行 a=b+1: 需要b已经被赋值。立即执行加法,将结果保存在a中。
优点: 语义上容易理解,灵活,可以精确控制行为。通常可以无缝地和主语言交互,方便地利用主语言的各类算法,工具包,debug和性能调试器。
缺点: 实现统一的辅助函数和提供整体优化都很困难。
声明式编程:
如何执行 a=b+1: 返回对应的计算图(computation graph),我们可以之后对b进行赋值,然后再执行加法运算
优点: 在真正开始计算的时候已经拿到了整个计算图,所以我们可以做一系列优化来提升性能。实现辅助函数也容易,例如对任何计算图都提供forward和backward函数,对计算图进行可视化,将图保存到硬盘和从硬盘读取。
缺点: 很多主语言的特性都用不上。某些在主语言中实现简单,但在这里却经常麻烦,例如if-else语句 。debug也不容易,例如监视一个复杂的计算图中的某个节点的中间结果并不简单。
目前现有的系统大部分都采用上两种编程模式的一种。与它们不同的是,MXNet尝试将两种模式无缝的结合起来。在命令式编程上MXNet提供张量运算,而声明式编程中MXNet支持符号表达式。用户可以自由的混合它们来快速实现自己的想法。例如我们可以用声明式编程来描述神经网络,并利用系统提供的自动求导来训练模型。另一方便,模型的迭代训练和更新模型法则中可能涉及大量的控制逻辑,因此我们可以用命令式编程来实现。同时我们用它来进行方便地调式和与主语言交互数据。
下表我们比较MXNet和其他流行的深度学习系统
框架Caffe&Torch &Theano&TensorFlow&MXNet
主语言C++&Lua&Python&C++&C++
从语言Python, Matlab&x&x&Python&Python, R, Julia, Scala, Javascript, Matlab, Go
硬件CPU, GPU,&CPU, GPU, FPGA&CPU, GPU,&CPU, GPU, mobile&CPU, GPU,mobile
分布式x&x&x&v&v
命令式x&v&v&x&v
声明式v&x&x&v&v
Symbol: 声明式的符号表达式
MXNet使用多值输出的符号表达式来声明计算图。符号是由操作子构建而来。一个操作子可以是一个简单的矩阵运算“+”,也可以是一个复杂的神经网络里面的层,例如卷积层。一个操作子可以有多个输入变量和多个输出变量,还可以有内部状态变量。一个变量既可以是自由的,我们可以之后对其赋值;也可以是某个操作子的输出。在执行一个符号表达式前,我们需要对所有的自由变量进行赋值。
NDArray:命令式的张量计算
MXNet提供命令式的张量计算来桥接主语言的和符号表达式。另一方面,NDArray可以无缝和符号表达式进行对接。
KVStore:多设备间的数据交互
MXNet提供一个分布式的key-value存储来进行数据交换。它主要有两个函数,push: 将key-value对从一个设备push进存储,pull:将某个key上的值从存储中pull出来此外,KVStore还接受自定义的更新函数来控制收到的值如何写入到存储中。最后KVStore提供数种包含最终一致性模型和顺序一致性模型在内的数据一致性模型。
读入数据模块
数据读取在整体系统性能上占重要地位。MXNet提供工具能将任意大小的样本压缩打包成单个或者数个文件来加速顺序和随机读取。
MXNet实现了常用的优化算法来训练模型。用户只需要提供数据数据迭代器和神经网络的Symbol便可。此外,用户可以提供额外的KVStore来进行分布式的训练。
过去,现状,和未来
大半年数个优秀的C++机器学习系统的开发人员成立了DMLC,本意是更方便共享各自项目的代码,并给用户提供一致的体验。当时我们有两个深度学习的项目,一个是CXXNet,其通过配置来定义和训练神经网络。另一个是Minerva,提供类似numpy一样的张量计算接口。前者在图片分类等使用卷积网络上很方便,而后者更灵活。那时候我们想能不能做一个两者功能都具备的系统,于是这样就有了MXNet。其名字来自Minerva的M和CXXNet的XNet。其中Symbol的想法来自CXXNet,而NDArray的想法来自Minerva。我们也常把MXNet叫“mix net”。
MXNet的目的是做一个有意思的系统,能够让大家用着方便的系统,一个轻量的和可以快速测试系统和算法想法的系统。未来主要关注下面四个方向:
支持更多的硬件,目前在积极考虑支持AMD GPU,高通GPU,Intel Phi,FPGA,和更多智能设备。相信MXNet的轻量和内存节省可以在这些上大有作为。
更加完善的操作子。目前不论是Symbol还是NDArray支持的操作还是有限,我们希望能够尽快的扩充他们。
更多编程语言。除了C++,目前MXNet对Python,R和Julia的支持比较完善。但我们希望还能有很多的语言,例如javascript。
更多的应用。我们之前花了很多精力在图片分类上,下面我们会考虑很多的应用。
三、TorchFacebook&Google DeepMind&Twitter&FAIR
核心的计算单元使用C或者cuda做了很好的优化。在此基础之上,使用lua构建了常见的模型。另外,torch7构建的是一个生态系统,安装新的模型实现模块只需要luarocks install package. 比如:luarocks install rnn。之后就可以欢乐地使用rnn模型了。torch7的缺点可能就是1. wrapper是lua语言,需要一点时间来学习。2. 优化新的计算单元可能会比较麻烦,backend修改起来会比较麻烦.
核心特征的总结:
1. 一个强大的n维数组
2. 很多实现索引,切片,移调transposing的例程
3.惊人的通过LuaJIT的C接口
4.线性代数例程
5.神经网络,并基于能量的模型
6.数值优化例程
7.快速高效的GPU支持
8.可嵌入,可移植到iOS,Android和FPGA的后台
1. 构建模型简单,一层层搭积木即可。
2. 高度模块化,一层就是一个模块,写新模块也方便,套用接口就行,用tensor运算不必写cuda也能用GPU。
3. 底层的tensor由C和cuda实现,速度不会比caffe差,甚至某些运算可能更快。
4. 使用GPU方便,把tensor数据送到GPU只要简单的 &tensor:cuda()&。
5. lua入门快,堪比python。
6. 很重要的一点,nngraph,理论上可以用nn里的模块实现任何DAG构造的网络,当然也包括RNN、LSTM之类的。
1. 对于不少人来说,lua要新学。
2. 除了deep learning方面,其他好用的机器学习library较少。
3. 数据文件格式比较麻烦,一般原始数据没有torch专用的t7格式文件,需要通过mat等格式中转转换。
四、Theanothe LISA group at the University of Montreal(蒙特利尔)
Theano是一个Python库,用来定义、优化和计算数学表达式,用于高效的解决多维数组的计算问题。
集成NumPy-使用numpy.ndarray
使用GPU加速计算-比CPU快140倍(只针对32位float类型)
有效的符号微分-计算一元或多元函数的导数
速度和稳定性优化-比如能计算很小的x的函数log(1+x)的值
动态地生成C代码-更快地计算
广泛地单元测试和自我验证-检测和诊断多种错误
1.scan 中糟糕参数的传递限制,immutable 机制导致 function compile 时候的时间过长。
2.theano 定义 function 时缺乏灵活的多态机制。
3.困难的调试方法
五、TensorFlowGoogle
TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从图象的一端流动到另一端计算过程。TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。
TensorFlow 表达了高层次的机器学习计算,大幅简化了第一代系统,并且具备更好的灵活性和可延展性。TensorFlow一大亮点是支持异构设备分布式计算,它能够在各个平台上自动运行模型,从电话、单个CPU / GPU到成百上千GPU卡组成的分布式系统。从目前的文档看,TensorFlow支持CNN、RNN和LSTM算法,拥有C++/Python编程接口,这都是目前在Image,Speech和NLP最流行的深度神经网络模型。
TensorFlow的数据结构tensor,它相当于N维的array或者list,与MXNet类似,都是采用了以python调用的形式展现出来。某个定义好的tensor的数据类型是不变的,但是维数可以动态改变。用tensor rank和TensorShape来表示它的维数(例如rank为2可以看成矩阵,rank为1可以看成向量)。tensor是个比较中规中矩的类型。唯一特别的地方在于在TensorFlow构成的网络中,tensor是唯一能够传递的类型,而类似于array、list这种不能当成输入。
TensorFlow的网络实现方式选择的是符号计算方式,它的程序分为计算构造阶段和执行阶段,构造阶段是构造出computation graph,computation graph就是包含一系列符号操作Operation和Tensor数据对象的流程图,跟mxnet的symbol类似,它定义好了如何进行计算(加减乘除等)、数据通过不同计算的顺序(也就是flow,数据在符号操作之间流动的感觉)。但是暂时并不读取输入来计算获得输出,而是由后面的执行阶段启动session的run来执行已经定义好的graph。这样的方式跟mxnet很相似,应该都是借鉴了theano的想法。其中TensorFlow还引入了Variable类型,它不像mxnet的Variable属于symbol(tf的operation类似mxnet的symbol),而是一个单独的类型,主要作用是存储网络权重参数,从而能够在运行过程中动态改变。tf将每一个操作抽象成了一个符号Operation,它能够读取0个或者多个Tensor对象作为输入(输出),操作内容包括基本的数学运算、支持reduce、segment(对tensor中部分进行运算。
TensorFlow的优点:
1、TensorFlow则是功能很齐全,能够搭建的网络更丰富而不是像caffe仅仅局限在CNN。
2、 TensorFlow的深度学习部分能够在一个模型中堆积了许多不同的模型和转换,你能够在一个模型中方便地处理文本 图片和规则分类以及连续变量,同时实现多目标和多损失工作;
3、TensorFlow的管道部分能够将数据处理和机器学习放在一个框架中,TensorFlow指引了方向。
TensorFlow是一个理想的RNN(递归神经网络) API和实现,TensorFlow使用了向量运算的符号图方法,使得新网络的指定变得相当容易,但TensorFlow并不支持双向RNN和3D卷积,同时公共版本的图定义也不支持循环和条件控制,这使得RNN的实现并不理想,因为必须要使用Python循环且无法进行图编译优化。
六、CNTK微软深度学习工具包&
是一个统一的深度学习工具包,它将神经网络描述成在有向图上的一系列计算步骤。在这个有向图中,叶子结点表示输入层或网络参数,其它的结点表示成在输入层上的矩阵操作。在CNTK上可以很容易的实现及结合当今流行的模型,例如前馈神经网络DNNs, 卷积神经网络(CNNs), 循环神经网络 (RNNs/LSTMs)。在实现随机梯度下降学习时能够自动计算梯度,而且还能通过多个GPUs或服务器实现并行计算。CNTK是微软在Cortana 数字助理和Skype 翻译应用中使用的语音识别的系统框架。
CNTK最大的优点是可以并行多个GPU或服务器。微软首席科学家黄学东说“谷歌公开的TensorFlow并没有这个功能”。
CNTK的另外一个优点是支持Microsoft Windows。但是这个开源工具是用C++写的。微软计划将尽快公开对应的Python和C#版本。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致深度 | 主流深度学习框架对比:看你最适合哪一款?
我的图书馆
深度 | 主流深度学习框架对比:看你最适合哪一款?
选自deeplearning4j.org机器之心编译作者:A?ron van den Oord、Heiga Zen、Sander Dieleman参与:吴攀、李亚洲近日,Deeplearning4j 在自己的官方网站发表了一篇对比 Deeplearning4j 与 Torch、Theano、Caffe、TensorFlow 的博客文章,同时 Deeplearning4j 在文章中也对自己的框架进行了较为详细的介绍(多有溢美之词)。机器之心对全文进行了编译,文中观点仅代表原作者立场。目录Theano & EcosystemTorchTensorflowCaffeCNTKDSSTNESpeedDL4J: Why the JVM?DL4S: Deep Learning in ScalaMachine-Learning FrameworksFurther ReadingTheano 与生态系统深度学习领域内的很多学术研究人员依赖于 Theano,这个用 Python 编写的框架可谓是深度学习框架的老祖宗。Theano 像 Numpy 一样,是一个处理多维数组的库。与其他库一起使用,Theano 很适合于数据探索和进行研究。在 Theano 之上,已经有很多的开源的深度库建立起来,包括 Keras、Lasagne 和 Blocks。这些库的建立是为了在 Theano 偶尔的非直觉界面上更简单地使用 API。(截止到 2016 年 3 月,另一个与 Theano 相关的库 Pylearn2 可能即将死亡。)相反,Deeplearning4j 能在 JVM 语言(比如,Java 和 Scala)下将深度学习带入生产环境中,创造出解决方案。Deeplearning4j 意在以一种可拓展的方式在并行 GPU 或 CPU 上将尽可能多的环节自动化,并能在需要的时候与 Hadoop 和 Spark 进行整合。优缺点(+)Python+Numpy(+)计算图是很好的抽象(+)RNN 完美适配计算图(-)原始 Theano 在某种程度上有些低水平(+)高层次 wrappers(Keras,Lasange)减轻了这种痛苦(-)错误信息没有帮助(-)大型模型有较长的编译时间(-)比 Torch 更「臃肿」(-)对预训练模型支持不佳(-)在 AWS 上有很多 bugTorchTorch 是一个用 Lua 编写的支持机器学习算法的计算框架。其中的一些版本被 Facebook、Twitter 这样的大型科技公司使用,为内部团队专门化其深度学习平台。Lua 是一种在上世纪 90 年代早期在巴西开发出来的多范式的脚本语言。Torch 7 虽然强大,却并未被基于 Python 的学术社区和通用语言为 Java 的企业软件工程师普遍使用。Deeplearning4j 使用 Java 编写,这反映了我们对产业和易用性的关注。我们相信可用性的限制给深度学习的广泛使用带来了阻碍。我们认为 Hadoop 和 Spark 这样的开源分布式应该自动具备可扩展性。我们相信一个商业化支撑下的开源框架是保证工具有效并建立一个社区的合适解决方案。优缺点(+)很多容易结合的模块碎片(+)易于编写自己的层类型和在 GPU 上运行(+)Lua(大部分库代码是 Lua 语言,易于读取)(+)大量的预训练模型(-)Lua(小众)(-)你总是需要编写自己的训练代码(更不能即插即用)(-)对循环神经网络不太好(-)没有商业化支持(-)糟糕的文档支持TensorFlow谷歌创造 TensorFlow 取代 Theano,其实这两个库相当类似。Theano 的一些创造者,比如 Ian Goodfellow 在去 OpenAI 之前就是在谷歌打造 TensorFlow。目前,TensorFlow 还不支持所谓的「inline」矩阵运算,但会强迫你按序 copy 一个矩阵,并在其上进行运算。copy 大型矩阵非常耗费成本,相比于其他先进的深度学习工具 TensorFlow 要花费 4 倍的时间。谷歌说他们正在解决这个问题。像大部分深度学习框架一样,TensorFlow 在 C/C++ 引擎之上使用 Python API 编写,从而加速其运行。对 Java 和 Scala 社区而言,它并非一个合适的解决方案。TensorFlow 不只是面向深度学习,也有支持强化学习和其它算法的工具。谷歌开放 TensorFlow 的目标看起来是想吸引更多的人,共享他们研究人员的代码,标准化软件工程师进行深度学习的方式,并吸引他人对谷歌云服务的兴趣——TensorFlow 针对谷歌云服务进行了优化。TensorFlow 并非商业支持下的,而且看起来谷歌也不可能成为支持开源企业软件的企业。它只为研究者提供新工具。如同 Theano,TensorFlow 生成一个计算图(比如一系列矩阵运算,像 z=Simoid(x), 其中 x 和 z 都是矩阵)并进行自动微分。自动微分很重要,因为每次实验一个新的神经网络的时候,你肯定不想手动编写一个反向传播新变体的代码。在谷歌的生态系统中,计算图后来被 Google Brain 使用进行一些繁重工作,但谷歌还未开源其中一些工具。TensorFlow 只是谷歌内部的深度学习解决方案的一半。从企业的角度来看,一些公司需要考虑的是他们是否想依赖谷歌的这些工具。Caveat:在 TensorFlow 中的所有运算并不都像在 Numpy 中一样。(+)计算图抽象,如同 Theano(+)比 Theano 更快的编译速度(+)进行可视化的 TensorBoard(+)数据和模型并行(-)比其它框架慢(-)比 Torch 更「臃肿」;更神奇;(-)预训练模型不多(-)计算图是纯 Python 的,因此更慢(-)无商业化支持(-)需要退出到 Python 才能加载每个新的训练 batch(-)不能进行太大的调整(-)在大型软件项目上,动态键入易出错CaffeCaffe 是一个知名的、被普遍使用的机器视觉库,其将 Matlab 的快速卷积网接口迁移到了 C 和 C++ 中。Caffe 不面向其他深度学习应用,比如文本、声音或时序数据。如同其他框架一样,Caffe 选择 Python 作为 API。Deeplearning4j 和 Caffe 都能用卷积网络进行图像分类,都展现出了顶尖水平。相比于 Caffe,Deeplearning4j 还提供了任意数量芯片的并行 GPU 支持,以及许多可使得深度学习在多个并行 GPU 集群上运行得更平滑的看起来琐碎的特征。Caffe 主要被用于作为一个托管在其 Model Zoo 网站上的预训练模型的源。Deeplearning4j 正在开发一个能将 Caffe 模型导入到 Spark 的解析器。优缺点:(+)在前馈网络和图像处理上较好(+)在微调已有网络上较好(+)不写任何代码就可训练模型(+)Python 接口相当有用(-)需要为新的 GPU 层编写 C++/CUDA(-)不擅长循环网络(-)面对大型网络有点吃力(GoogLeNet,ResNet)(-)不可扩展(-)无商业化支持CNTKCNTK 是微软的开源深度学习框架,是「Computational Network Toolkit(计算网络工具包)」的缩写。这个库包括前馈 DNN、卷积网络和循环网络。CNTK 提供一个 C++ 代码上的 Python API。虽然 CNTK 有一个许可证,但它还未有更多的传统许可,比如 ASF2.0,BSD,或 MIT。DSSTNE亚马逊的 Deep Scalable Sparse Tensor Network Engine(DSSTNE)是一个为机器学习、深度学习构建模型的库。它是最近才开源的一个深度学习库,在 TensorFlow 和 CNTK 之后才开源。大部分使用 C++ 编写,DSSTNE 似乎很快,尽管它如今没有其它库那样吸引大量关注。(+) 处理稀疏的编码(-) 亚马逊可能不会共享要得到其样本的最好结果所必需的所有信息SpeedDeeplearning4j 使用 ND4J 执行的线性代数计算展现出了在大型矩阵相乘上的至少比 Numpy 快两倍的速度。这也是为什么我们的 Deeplearning4j 被 NASA 喷气推进实验室里的团队采用的原因之一。此外,Deeplearning4j 在多种芯片上的运行已经被优化,包括 x86、CUDA C 的 GPU。尽管 Torch7 和 DL4J 都可并行,但 DL4J 的并行是自动化的。也就是说,我们对工作节点和连接进行了自动化,在 Spark、Hadoop 或者与 Akka 和 AWS 上建立大规模并行的时候,能让用户对库进行分流。Deeplearning4j 最适合于解决特定问题,而且速度很快。为什么要用 JVM(Java 虚拟机)?我们常被问到我们为什么要为 JVM 实现一个开源深度学习项目,毕竟现在深度学习社区的相当大一部分的重点都是 Python。Python 有很好的句法元素(syntactic elements)让你可以不用创建明确的类就能进行矩阵相加,而 Java 却需要这么做。另外,Python 还有丰富的科学计算环境,带有 Theano 和 Numpy 这样的原生扩展。但 JVM 及其主要语言(Java 和 Scala)也有一些优势。首先,大部分主要的企业和大型政府机构严重依赖于 Java 或基于 JVM 的系统。他们已经进行了巨大的投资,他们可以通过基于 JVM 的人工智能利用这些投资。Java 仍然是企业中使用最广泛的语言。Java 是 Hadoop、ElasticSearch、Hive、Lucene 和 Pig 的语言,而这些工具正好对机器学习问题很有用。另一种 JVM 语言 Scala 也是 Spark 和 Kafka 的编程语言。也就是说,许多正在解决真实世界问题的程序员可以从深度学习中受益,但它们却被一些语言上的障碍隔开了。我们想要使深度学习对许多新的受众更有用,让他们可以直接将其拿来使用。在全世界 1000 万开发者中,他们使用得最多的语言就是 Java。第二,Java 和 Scala 实际上比 Python 更快。任何使用 Python 本身写成的东西——不管其是否依赖 Cython——都会更慢。当然啦,大多数计算成本较高的运算都是使用 C 或 C++ 编写的。(当我们谈论运算时,我们也考虑字符串等涉及到更高层面的机器学习过程的任务。)大多数最初使用 Python 编写的深度学习项目如果要被投入生产,就不得不被重写。Deeplearning4j 可以依靠 JavaCPP 来调用预编译的原生 C++,这能极大地加快训练速度。许多 Python 程序员选择使用 Scala 做深度学习,因为当在一个共享代码基础上与其他人合作时,他们更喜欢静态类型和函数式编程。第三,虽然 Java 缺乏稳健的科学计算库,但把它们编写出来不就好了,这个我们可以通过 ND4J 完成。ND4J 运行在分布式 GPU 或 CPU 上,可以通过 Java 或 Scala API 接入。最后,Java 是一种安全的、网络的语言,本身就能在 Linux 服务器、Windows 和 OS X 桌面、安卓手机和使用嵌入式 Java 的物联网的低内存传感器上跨平台工作。尽管 Torch 和 Pylearn2 可以通过 C++ 优化,但其优化和维护却比较困难;而 Java 是一种「一次编程,到处使用」的语言,适合那些需要在许多平台上使用深度学习的公司。生态系统Java 的普及只能通过其生态系统加强。Hadoop 是用 Java 实现的;Spark 在 Hadoop 的 Yarn 运行时间内运行;Akka 这样的库使得为 Deeplearning4j 构建分布式系统是可行的。总的来说,Java 拥有经过了高度检验的基础设施,拥有大量各种各样的应用,而且使用 Java 编写的深度学习网络也能与数据保持紧密,这可以让程序员的工作更简单。Deeplearning4j 可作为一种 YARN 应用而运行和供应。Java 也可以从 Scala、Clojure、Python 和 Ruby 等流行的语言中被原生地使用。通过选择 Java,我们能尽可能最少地排除主要的编程社区。尽管 Java 并不如 C/C++ 快,但其比其它语言快得多。而且我们已经构建一种可以通过加入更多节点来进行加速的分布式系统——不管是用 CPU 或是 GPU 都可以。也就是说,如果你想要更快,就加入更多卡吧!最后,我们正在使用 Java 为 DL4J 开发 Numpy 的基本应用(包括 ND-Array)。我们相信 Java 的许多缺点可以被很快地克服,而它的许多优点也还将继续持续一段时间。SCALA在开发 Deeplearning4j 和 ND4J 的过程中,我们对 Scala 给予了特别的关注,因为我们相信 Scala 有望变成数据科学的主导语言。使用 Scala API 为 JVM 编写数值计算、向量化和深度学习库能推动该社区向这一目标迈进。要真正理解 DL4J 和其它框架之间的差异,你必须真正试一试。机器学习框架上面列出的机器学习框架更多是专用框架,而非通用机器学习框架,当然,通用机器学习框架也有很多,下面列出几个主要的:sci-kit learn:Python 的默认开源机器学习框架Apache Mahout:Apache 上的旗舰机器学习框架。Mahout 可用来进行分类、聚类和推荐。SystemML:IBM 的机器学习框架,可用来执行描述性统计、分类、聚类、回归、矩阵分解和生存分析(Survival Analysis),而且也包含支持向量机。Microsoft DMTK:微软的分布式机器学习工具包。分布式词嵌入和 LDA。?本文由机器之心编译,转载请联系本公众号获得授权。?------------------------------------------------加入机器之心(全职记者/实习生):投稿或寻求报道:广告&商务合作:
发表评论:
馆藏&38605
TA的最新馆藏

我要回帖

更多关于 CPU移动框架 的文章

 

随机推荐