From 2902f28107581e4d4525186128d16438bbe2ac3f Mon Sep 17 00:00:00 2001 From: StarLee Date: Thu, 2 Jun 2016 21:16:33 +0800 Subject: [PATCH] almost done --- dev_cycle.jpg | Bin 0 -> 17111 bytes fork.jpg | Bin 0 -> 1186 bytes star.jpg | Bin 0 -> 1098 bytes systemml_arch.jpg | Bin 0 -> 9455 bytes watch.jpg | Bin 0 -> 1301 bytes 分析报告.tex | 182 +++++++++++++++++++++++++++++----------------- 6 files changed, 117 insertions(+), 65 deletions(-) create mode 100644 dev_cycle.jpg create mode 100644 fork.jpg create mode 100644 star.jpg create mode 100644 systemml_arch.jpg create mode 100644 watch.jpg diff --git a/dev_cycle.jpg b/dev_cycle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0927cd9021b1b25e780915160ab869bc21e0711c GIT binary patch literal 17111 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 literal 0 HcmV?d00001 diff --git a/star.jpg b/star.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dda94676f821f84b83541d478a2393c6231e7f20 GIT binary patch literal 1098 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 H`~RB&U@$bC literal 0 HcmV?d00001 diff --git a/分析报告.tex b/分析报告.tex index 884911e..05119af 100644 --- a/分析报告.tex +++ b/分析报告.tex @@ -22,14 +22,49 @@ \begin{document} \maketitle -\section{基本介绍} + + +\section{总览} +各大公司开放这些系统源代码一方面原因就是为了吸引更多程序员,从而加快这款软件的发展,同时也可以帮助其招募该领域内的专家人才。所以首先分析这些系统在github上的关注度如何(截止到2016年6月2日)。另外因为MLlib是包含在Spark中开源的,所以在这里统计的是Spark项目的数据。 +\begin{table}[!hbp] +\centering +\begin{tabular}{|c|c|c|c|} +\hline +\hline +系统 & Watch & Star & Fork \\ +\hline +TensorFlow & 2,487 & 25,300 & 9,779 \\ +\hline +Torch & 546 & 4,696 & 1,299 \\ +\hline +MLLib & 1,344 & 8,762 & 8,147 \\ +\hline +DMTK & 255 & 1,588 & 381 \\ +\hline +SystemML & 66 & 289 & 109 \\ +\hline +\end{tabular} +\caption{各个系统在github上的关注度} +\end{table} + +从上表可以看出关注度最高的是Tensforflow,其次是MLlib,无论是Star数还是fork数都是遥遥领先于其他几个系统。如此高的关注度说明了这两个系统得到了开发人员的广泛认可和支持。在我看来这就形成了一个如下图所示的“开源软件开发良性循环”:一个项目质量高,那么用户和开发者就越喜欢,从而就会积极地去贡献自己的力量,也就会促使该项目的质量进一步提高,如此循环不断。当然TensorFlow本身质量高之外,和Google在业内的影响力也分不开。我最看好的是MLlib,因为现在它是Spark原生集成的库,对运行在Sark上有先天的优势,借着Sark的势头应该会得到更加迅猛的发展和应用。 + +\begin{figure}[h!] +\centering +\includegraphics[height=6cm]{dev_cycle.jpg} +\caption{开源软件开发良性循环} +\label{dev_cycle} +\end{figure} + +\section{各系统比较分析} + + + \subsection{TensorFlow} +2015年11月9日,Google发布人工智能系统TensorFlow并宣布开源。TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,对比 DistBelief,TensorFlow 的编程模型更加灵活,性能也更好,支持在大规模的异构硬件平台上训练和使用很多的模型。TensorFlow的命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从图象的一端流动到另一端计算过程。TensorFlow已被用于语音识别或图像识别等多项机器深度学习领域,它可在小到一部智能手机、大到数千台数据中心服务器的各种设备上运行。其将复杂的数据结构传输至人工智能神经网中进行分析和处理,为扩展神经网络训练搞更大的部署环境,TensorFlow 允许 client 简单地表达不同类型的并行通过复制和并行执行一个核心模型数据流图,依赖不同计算设备合作更新一个共享的参数或者其他的状态。 对计算描述的微妙变动可以使用较低的代价来达到和尝试很多不同的并行的方法。 -2015年11月9日,Google发布人工智能系统TensorFlow并宣布开源。TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其将复杂的数据结构传输至人工智能神经网中进行分析和处理。TensorFlow的命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从图象的一端流动到另一端计算过程。TensorFlow已被用于语音识别或图像识别等多项机器深度学习领域,它可在小到一部智能手机、大到数千台数据中心服务器的各种设备上运行。 - - -TensorFlow 的计算由一个有向图描述,这个图中由一个节点集合组成。该图表达了数据流计算,作出了一些类型的节点保持和更新持久状态和让分支及循环控制结构类似于 Naiad 的行为方式的扩展。客户一般都会使用 TensorFlow 支持的前端语言(C++或者Python)构建一个计算图,下图就是一个结构计算图的实例。在一幅 TensorFlow 图中,每个节点(node)有一个或者多个输入和零个或者多个输出,表示一种操作(operation)的实例化,一个操作有一个名字,它表示一个抽象的计算(比如说,“矩阵相乘”或者“相加”)。 +TensorFlow 的计算被表示为含状态的数据流图,聚焦在让这个系统足够灵活能够快速地实验研究中产生的新模型,并同时充分地提升产品级训练的性能和部署机器学习模型健壮性。计算图中由一个节点集合组成。该图表达了数据流计算,作出了一些类型的节点保持和更新持久状态和让分支及循环控制结构类似于 Naiad 的行为方式的扩展。客户一般都会使用 TensorFlow 支持的前端语言(C++或者Python)构建一个计算图,下图就是一个结构计算图的实例。在一幅 TensorFlow 图中,每个节点(node)有一个或者多个输入和零个或者多个输出,表示一种操作(operation)的实例化,一个操作有一个名字,它表示一个抽象的计算(比如说,“矩阵相乘”或者“相加”)。 \begin{figure}[h!] \centering @@ -40,14 +75,50 @@ TensorFlow 的计算由一个有向图描述,这个图中由一个节点集合 TensorFlow 系统的主要部分就是客户端,它使用了会话接口来和 master 及一个或者多个的 worker processes 进行通信,每个 worker process 负责对一个或者多个计算设备(CPU 核或者 GPU card)的任意访问和在这些设备上进行图节点的计算按照 master 的要求执行。我们有本地和分布式实现的 TensorFlow 接口。本地实现通常是客户端、master 和 worker 都是在同一台机器上在一个单一的操作系统进程(可能包括多个设备,比如说装了多个 GPU card的设备)上运行。分布式实现采用了本地实现的很多的代码,但是扩展了对客户端、master 和 worker 可以在不同的机器的不同的进程上运行的场景支持。 +设备是 TensorFlow 的计算核心。每个 worker 负责一个或者多个设备,每个设备有一个设备类型和一个名字。设备名字由识别设备类型的部分,在 worker 中的设备索引,以及在分布式设定中,worker 的 job和任务(或者 localhost 当设备是和进程在同一机器时)的标志构成。TensorFlow支持单设备、多设备和分布式三种执行模式。 + +总的来说,TensorFlow的优势有: +\begin{itemize} +\item 多GPU支持 +\item 利用分布式资源训练,v0.8版本已经支持分布式计算 +\item 可以使用TensorBoard实现图形可视化,并且利用与其交互产生的日志记录文件可以实时监测学习率、损失值准确性的数据 +\item 模型训练的过程中可以随时停下来对其做评估,然后从检查点载入,继续训练 +\item 高质量的元框架:Keras,TensorFlow Slim,Skflow和PrettyTensor等 +不过TensorFlow的递归神经网络(RNNS)仍然有些不足,并且利用异质资源增加复杂性,此外TensorFlow 贪婪占用 GPU。 +\end{itemize} + + + \subsection{Torch} -Torch是Facebook开源的一个广泛支持机器学习算法的科学计算框架。易于使用且高效,主要得益于一个简单的和快速的脚本语言LuaJIT,和底层的C/CUDA实现。Torch目标是让用户通过极其简单的过程、最大的灵活性和最快的速度建立自己的科学算法。Torch在机器学习领域有一个大型的生态社区驱动的库包,包括计算机视觉、信号处理、并行处理、图像、视频、音频和网络等。Torch 的核心是目前流行的神经网络,它使用简单同时具有最大的灵活性的优化库,实现复杂神经网络的拓扑结构。用户可以用高效的方式通过CPU和GPU建立和优化神经网络。Torch 广泛使用在学校的实验室以及谷歌/deepmind、推特、NVIDIA、AMD、英特尔和许多其他公司。 +Torch是Facebook开源的一个广泛支持机器学习算法的科学计算框架。易于使用且高效,主要得益于一个简单的和快速的脚本语言LuaJIT,和底层的C/CUDA实现。Torch目标是让用户通过极其简单的过程、最大的灵活性和最快的速度建立自己的科学算法。Torch在机器学习领域有一个大型的生态社区驱动的库包,包括计算机视觉、信号处理、并行处理、图像、视频、音频和网络等。在Torch7的文章中声称有8个内置包,分别有: + +\begin{itemize} +\item torch:Torch7最主要的包,提供Tensor,简单序列化和其他的一些基础功能。 +\item lb\&plot:这两个包提供标准的类Matlab函数,能够创建、转换以及绘制Tensor。 +\item qt:完全绑定Qt和Lua。支持快速的创建带有良好GUI的交互实例。 +\item nn:此包提供一组标准的神经网络模块以及能够定义任意方向图的容器模块。 +\item image:图像处理模块,提供所有的标准图像处理功能:加载、保存、缩放以及旋转等。 +\item optim:此包提供最陡下降和共轭梯度等的实现。 +\item unsup:此包包含一些非监督学习算法:K-means,稀疏编码和自动编码等。 +\item third-party:基于上面的包,还有许多可用的第三方包,比如提供Matlab matrix和 Torch tensor之间双向接口的mattorch;对Linux和MacOSX平台图像驱动的打包器camera等。 +\end{itemize} + +Torch 的核心是目前流行的神经网络,它使用简单同时具有最大的灵活性的优化库,实现复杂神经网络的拓扑结构。用户可以用高效的方式通过CPU和GPU建立和优化神经网络。Torch 广泛使用在学校的实验室以及谷歌/deepmind、推特、NVIDIA、AMD、英特尔和许多其他公司。其优点包括: +\begin{itemize} +\item 快速高效的GPU支持 +\item 可嵌入,可移植到iOS,Android和FPGA的后台 +\item 一个强大的n维数组 +\item 利用LuaJIT的良好的C接口 +\item 很多实现索引、切片、移调线性代数、数值优化的例程 +\end{itemize} + + + + + \subsection{MLLib} -MLlib 是Spark对常用的机器学习算法的实现库,同时包括相关的测试和数据生成器。Spark 的设计初衷就是为了支持一些迭代的 Job, 这正好符合很多机器学习算法的特点。 Spark 之所以在机器学习方面具有得天独厚的优势,有以下两点原因: -(1)机器学习算法一般都有很多个步骤迭代计算的过程,机器学习的计算需要在多次迭代后获得足够小的误差或者足够收敛才会停止,迭代时如果使用 Hadoop 的 MapReduce 计算框架,每次计算都要读 / 写磁盘以及任务的启动等工作,这回导致非常大的 I/O 和 CPU 消耗。而 Spark 基于内存的计算模型天生就擅长迭代计算,多个步骤计算直接在内存中完成,只有在必要时才会操作磁盘和网络,所以说 Spark 正是机器学习的理想的平台。 -(2)从通信的角度讲,如果使用 Hadoop 的 MapReduce 计算框架, JobTracker 和 TaskTracker 之间由于是通过 heartbeat 的方式来进行的通信和传递数据,会导致非常慢的执行速度,而 Spark 具有出色而高效的 Akka 和 Netty 通信系统,通信效率极高。 -MLlib 目前支持四种常见的机器学习问题:二元分类,回归,聚类以及协同过滤,同时也包括一个底层的梯度下降优化基础算法。MLlib 在 Spark 整个生态系统中的位置如下图所示。 +MLlib 是Spark对常用的机器学习算法的实现库,2012年作为MLbase项目的一部分开始研发。从一开始它就和Spark一起发布,第一次发布是在0.8版本。MLlib初始版本是由伯克利大学的11贡献者开发的,并且仅提供了有限的一些标准机器学习算法。从这之后,MLlib得到了快速的发展,不到两年的时间,在Spark1.4的时候MLlib已经有超过50个组织的140个共享着在开发了。同时包括相关的测试和数据生成器。Spark 的设计初衷就是为了支持一些迭代的 Job, 这正好符合很多机器学习算法的特点。 MLlib 目前支持四种常见的机器学习问题:二元分类,回归,聚类以及协同过滤,同时也包括一个底层的梯度下降优化基础算法。MLlib 在 Spark 整个生态系统中的位置如下图所示。 \begin{figure}[h!] \centering \includegraphics[height=6cm]{MLlib.jpg} @@ -55,23 +126,7 @@ MLlib 目前支持四种常见的机器学习问题:二元分类,回归, \label{MLlib} \end{figure} -如下图所示, MLlib 是 MLBase 一部分,其中 MLBase 分为四部分: MLlib 、 MLI 、 ML Optimizer 和 MLRuntime 。 -\begin{figure}[h!] -\centering -\includegraphics{MLBase.jpg} -\caption{MLBase} -\label{MLBase} -\end{figure} - - -\begin{itemize} -\item ML Optimizer 会选择它认为最适合的已经在内部实现好了的机器学习算法和相关参数,来处理用户输入的数据,并返回模型或别的帮助分析的结果 -\item MLI 是一个进行特征抽取和高级 ML 编程抽象的算法实现的 API 或平台 -\item MLlib 是 Spark 实现一些常见的机器学习算法和实用程序,包括分类、回归、聚类、协同过滤、降维以及底层优化,该算法可以进行可扩充 -\item MLRuntime 基于 Spark 计算框架,将 Spark 的分布式计算应用到机器学习领域 -\end{itemize} - -从架构图可以看出 MLlib 主要包含三个部分:底层基础 :包括 Spark 的运行库、矩阵库和向量库;算法库 :包含广义线性模型、推荐系统、聚类、决策树和评估的算法;实用程序 :包括测试数据的生成、外部数据的读入等功能。 +MLlib 是 MLBase 一部分,其中 MLBase 分为四部分: MLlib 、 MLI 、 ML Optimizer 和 MLRuntime 。 ML Optimizer 会选择它认为最适合的已经在内部实现好了的机器学习算法和相关参数,来处理用户输入的数据,并返回模型或别的帮助分析的结果;MLI 是一个进行特征抽取和高级 ML 编程抽象的算法实现的 API 或平台;MLlib实现一些常见的机器学习算法和实用程序,包括分类、回归、聚类、协同过滤、降维以及底层优化,该算法可以进行可扩充;MLRuntime 基于 Spark 计算框架,将 Spark 的分布式计算应用到机器学习领域。从架构图可以看出 MLlib 主要包含三个部分:底层基础 :包括 Spark 的运行库、矩阵库和向量库;算法库 :包含广义线性模型、推荐系统、聚类、决策树和评估的算法;实用程序 :包括测试数据的生成、外部数据的读入等功能。 \begin{figure}[h!] \centering @@ -81,6 +136,22 @@ MLlib 目前支持四种常见的机器学习问题:二元分类,回归, \end{figure} 其中的底层基础部分主要包括向量接口和矩阵接口,这两种接口都会使用 Scala 语言基于 Netlib 和 BLAS/LAPACK 开发的线性代数库 Breeze 。MLlib 支持本地的密集向量和稀疏向量,并且支持标量向量。MLlib 同时支持本地矩阵和分布式矩阵,支持的分布式矩阵分为 RowMatrix 、 IndexedRowMatrix 、 CoordinateMatrix 等。 +MLlib基于Spark实现,而Spark 之所以在机器学习方面具有得天独厚的优势,有以下两点原因: +\begin{itemize} +\item 机器学习算法一般都有很多个步骤迭代计算的过程,机器学习的计算需要在多次迭代后获得足够小的误差或者足够收敛才会停止,迭代时如果使用 Hadoop 的 MapReduce 计算框架,每次计算都要读 / 写磁盘以及任务的启动等工作,这回导致非常大的 I/O 和 CPU 消耗。而 Spark 基于内存的计算模型天生就擅长迭代计算,多个步骤计算直接在内存中完成,只有在必要时才会操作磁盘和网络,所以说 Spark 正是机器学习的理想的平台。 +\item 从通信的角度讲,如果使用 Hadoop 的 MapReduce 计算框架, JobTracker 和 TaskTracker 之间由于是通过 heartbeat 的方式来进行的通信和传递数据,会导致非常慢的执行速度,而 Spark 具有出色而高效的 Akka 和 Netty 通信系统,通信效率极高。 +\end{itemize} + +MLlib在扩展性、速度和持续优化方面表现的很出色,它的主要特征有: +\begin{itemize} +\item 支持的方法和库:MLlib提供常用的机器学习算法的快速分布式实现。包括线性模型、朴素朴素贝叶斯和决策树等分类和回归问题;K-means聚类和主成分分析等降维算法等。该库还提供一些基础的用于优化、统计分析和特征提取的功能。 + +\item 算法优化:MLlib为支持有效的分布式学习和预测提供了许多的优化。例如用于推荐的ALS算法有效的利用blocking来减少JVM垃圾回收的消耗以提升高级线性代数运算。决策树也从PLANET项目中借鉴了很多思想,比如用基于数据的特征离散化来减少通信消耗。 + +\item 流水线API:实际的机器学习算法的流水线经常包含数据预处理、特征抽取、模型调试和验证阶段,而大多数的机器学习库没有为各种各样的功能提供原声支持。尤其是在处理大规模数据的时候,数据流之间的消耗是很明显的。MLlib提供了解决这些问题的包spark.ml,这个包通过一组统一的高级API简化了开发过程和多阶段学习流水线的协调。 + +\item 集成Spark:MLlib从Spark生态圈里的许多组件中受益。从底层来说,Spark核心提供了通用的执行引擎,支持80多种对数据转换的操作。高级的API比如Spark SQL提供了数据整合功能,简化了数据清理等预处理阶段。此外Spark Streaming还允许用户处理实时数据流从而开发在线学习算法。 +\end{itemize} \subsection{DMTK} @@ -91,57 +162,38 @@ DMTK由一个服务于分布式机器学习的框架和一组分布式机器学 \item 分布式词向量:词向量技术近来被普遍地应用于计算词汇的语义表示,它可以用作很多自然语言处理任务的词特征。微软为两种计算词向量的算法提供了高效的分步式实现:一种是标准的word2vec算法,另一种是可以对多义词计算多个词向量的新算法。 \end{itemize} -DMTK通过分布式计算部署的方式满足了大规模机器学习的要求。由于云计算和高性能处理器的普及,让机器学习从单机环境扩展到多机环境甚至是集群系统。分布式机器学习就是通过在更为廉价的集群系统上部署机器学习的算法,把原来单机的计算能力扩展到成千上万台服务器上。 -DMTK开源版提供了简单高效的分布式机器学习框架,如下图所示,它由参数服务器和客户端软件开发包(SDK)两部分构成。开发者只需要简单几行代码,就可以非常容易地把自己开发的机器学习算法从单机环境扩展到多机或集群环境。这大幅降低了机器学习的门槛,无论是高校研究者或是商用机器学习开发商,都能基于微软DMTK开源版轻松扩展机器学习算法的计算环境和计算资源,从而实现基于大数据的大规模机器学习。其次,DMTK还提供了丰富的机器学习算法,以满足更为深度、更为快速的机器学习。目前开源版的DMTK包含了其中两款独具特色的机器学习算法:LightLDA主题模型和分布式词向量模型.据了解,DMTK已经被应用到了微软的必应搜索引擎、广告、小冰等多款在线产品当中,实现了更强交互性的机器学习。 +DMTK通过分布式计算部署的方式满足了大规模机器学习的要求。由于云计算和高性能处理器的普及,让机器学习从单机环境扩展到多机环境甚至是集群系统。分布式机器学习就是通过在更为廉价的集群系统上部署机器学习的算法,把原来单机的计算能力扩展到成千上万台服务器上。DMTK开源版提供了简单高效的分布式机器学习框架,如下图所示,它由参数服务器和客户端软件开发包(SDK)两部分构成。 \begin{figure}[h!] \centering \includegraphics[width=16cm]{DMTK1.png} \caption{DMTK框架} \label{DMTK1} \end{figure} +开发者只需要简单几行代码,就可以非常容易地把自己开发的机器学习算法从单机环境扩展到多机或集群环境。这大幅降低了机器学习的门槛,无论是高校研究者或是商用机器学习开发商,都能基于微软DMTK开源版轻松扩展机器学习算法的计算环境和计算资源,从而实现基于大数据的大规模机器学习。其次,DMTK还提供了丰富的机器学习算法,以满足更为深度、更为快速的机器学习。目前开源版的DMTK包含了其中两款独具特色的机器学习算法:LightLDA主题模型和分布式词向量模型.据了解,DMTK已经被应用到了微软的必应搜索引擎、广告、小冰等多款在线产品当中,实现了更强交互性的机器学习。 + + \subsection{SystemML} - -\newpage -\section{比较分析} -\subsection{TensorFlow} -优点: +System ML最初由IBM的Almaden实验室在10年前开发,它可以简化开发人员定制机器学习软件的难度。例如,该软件可以帮助银行编写风险建模软件,从而在发现欺诈活动时预先发出警示。现在SystemML已经是Apache的孵化项目。它用 Java 语言编写,可支持描述性分析、分类、聚类、回归、矩阵分解及生存分析等算法。在部署方面, SystemML 运行环境支持 Windows、Linux 及 MacOS,可支持单机和分布式部署。单机部署显然有利于本地开发的工作,而分布式部署则可以真正发挥机器学习的威力,支持的框架包括 Hadoop 和 Spark。下图是SystemML的整体架构图。 +\begin{figure}[h!] +\centering +\includegraphics[width=8cm]{systemml_arch.jpg} +\caption{SystemML架构} +\label{SystemML} +\end{figure} +它的组件包括: \begin{itemize} -\item 多GPU支持 -\item 利用分布式资源训练,v0.8版本已经支持分布式计算 -\item 可以使用TensorBoard实现图形可视化,并且利用与其交互产生的日志记录文件可以实时监测学习率、损失值准确性的数据 -\item 模型训练的过程中可以随时停下来对其做评估,然后从检查点载入,继续训练 -\item 高质量的元框架:Keras,TensorFlow Slim,Skflow和PrettyTensor等 +\item 语言(DML):SysemML中的算法都是用“声明式机器学习语言”(Declarative Machine learning Language)写的。 +\item 高级算子组件(HOP):高级算子组件(High-Level Operator Component)分析语句块中的任何操作,然后选择合适的高级执行计划。 +\item 低级算子组件(LOP):低级算子组件(High-Level Operator Component)把HOP生成的高级执行计划转换成是用于MapReduce的低级的物理计划。 +\item 运行时:运行时组件(Runtime)把LOP生成的低级执行计划在hadoop执行。 \end{itemize} -缺点: +SystemML 支持多个执行模式,包括单个,Hadoop 批量和 Spark 批量。其优势主要基于两方面: \begin{itemize} -\item 相比 Theano,Tensorflow 的递归神经网络(RNNS)仍然有些不足 -\item 缺少数据输入的权威案例 -\item 文档可能不一致 -\item 利用异质资源增加复杂性 -\item TensorFlow 贪婪占用 GPU +\item SystemML语言,声明式机器学习(DML)。SystemML 包含线性代数原语,统计功能和 ML 指定结构,可以更容易也更原生的表达 ML 算法。算法通过 R 类型或者 Python 类型的语法进行表达。DML 通过提供灵活的定制分析表达和独立于底层输入格式和物理数据表示的数据显著提升数据科学的生产力。 +\item SystemML提供自动优化功能,通过数据和集群特性保证高效和可伸缩.SystemML 可以在 MapReduce 或者 Spark 环境运行。 \end{itemize} -\subsection{Torch} -优点: -\begin{itemize} -\item 快速高效的GPU支持 -\item 可嵌入,可移植到iOS,Android和FPGA的后台 -\item 一个强大的n维数组 -\item 利用LuaJIT的良好的C接口 -\item 很多实现索引、切片、移调线性代数、数值优化的例程 -\item 快速高效的GPU支持 -\end{itemize} - -缺点: -\begin{itemize} -\item to be done -\end{itemize} - - -\subsection{MLLib} -\subsection{DMTK} -\subsection{SystemML} \end{document} \ No newline at end of file