systemml is next

This commit is contained in:
StarLee 2016-06-01 23:34:47 +08:00
parent 431da10ce8
commit 495d04d9a3
6 changed files with 114 additions and 4 deletions

BIN
DMTK1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

BIN
MLBase.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

BIN
MLlib.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
MLlib_arch.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
tensor_arch.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -2,7 +2,7 @@
%页边距
\usepackage{geometry}
\geometry{left=1.5cm,right=1.5cm,top=2.5cm,bottom=2.5cm}
\geometry{left=2.0cm,right=2.0cm,top=2.5cm,bottom=2.5cm}
%页眉
\usepackage{fancyhdr}
@ -14,9 +14,11 @@
%文档信息/同时也用于生成报告封面
\author{李志星\\ 15060025}
\title{ \Huge五种系统的比较分析报告\newline \\\LARGE TensorFlow\&Torch\&MLLib\&DMTK\&SystemML}
\title{\Huge五种系统的比较分析报告\\\LARGE TensorFlow\&Torch\&MLLib\&DMTK\&SystemML}
\usepackage{graphicx}
\DeclareGraphicsExtensions{.eps,.ps,.jpg,.bmp,.gif,.png}
\begin{document}
\maketitle
@ -24,14 +26,122 @@
\subsection{TensorFlow}
TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统其命名来源于本身的运行原理。Tensor张量意味着N维数组Flow意味着基于数据流图的计算TensorFlow为张量从图象的一端流动到另一端计算过程。TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。
TensorFlow可被用于语音识别或图像识别等多项机器深度学习领域对2011年开发的深度学习基础架构DistBelief进行了各方面的改进它可在小到一部智能手机、大到数千台数据中心服务器的各种设备上运行。TensorFlow将完全开源任何人都可以用。
2015年11月9日Google发布人工智能系统TensorFlow并宣布开源。TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统其将复杂的数据结构传输至人工智能神经网中进行分析和处理。TensorFlow的命名来源于本身的运行原理。Tensor张量意味着N维数组Flow意味着基于数据流图的计算TensorFlow为张量从图象的一端流动到另一端计算过程。TensorFlow已被用于语音识别或图像识别等多项机器深度学习领域它可在小到一部智能手机、大到数千台数据中心服务器的各种设备上运行。
TensorFlow 的计算由一个有向图描述,这个图中由一个节点集合组成。该图表达了数据流计算,作出了一些类型的节点保持和更新持久状态和让分支及循环控制结构类似于 Naiad 的行为方式的扩展。客户一般都会使用 TensorFlow 支持的前端语言C++或者Python构建一个计算图下图就是一个结构计算图的实例。在一幅 TensorFlow 图中每个节点node有一个或者多个输入和零个或者多个输出表示一种操作operation的实例化一个操作有一个名字它表示一个抽象的计算比如说“矩阵相乘”或者“相加”
\begin{figure}[h!]
\centering
\includegraphics[height=8cm]{tensor_arch.png}
\caption{Tensorflow结构计算图实例}
\label{tensor_arch}
\end{figure}
TensorFlow 系统的主要部分就是客户端,它使用了会话接口来和 master 及一个或者多个的 worker processes 进行通信,每个 worker process 负责对一个或者多个计算设备CPU 核或者 GPU card的任意访问和在这些设备上进行图节点的计算按照 master 的要求执行。我们有本地和分布式实现的 TensorFlow 接口。本地实现通常是客户端、master 和 worker 都是在同一台机器上在一个单一的操作系统进程(可能包括多个设备,比如说装了多个 GPU card的设备上运行。分布式实现采用了本地实现的很多的代码但是扩展了对客户端、master 和 worker 可以在不同的机器的不同的进程上运行的场景支持。
\subsection{Torch}
Torch是Facebook开源的一个广泛支持机器学习算法的科学计算框架。易于使用且高效主要得益于一个简单的和快速的脚本语言LuaJIT和底层的C/CUDA实现。Torch目标是让用户通过极其简单的过程、最大的灵活性和最快的速度建立自己的科学算法。Torch在机器学习领域有一个大型的生态社区驱动的库包包括计算机视觉、信号处理、并行处理、图像、视频、音频和网络等。Torch 的核心是目前流行的神经网络它使用简单同时具有最大的灵活性的优化库实现复杂神经网络的拓扑结构。用户可以用高效的方式通过CPU和GPU建立和优化神经网络。Torch 广泛使用在学校的实验室以及谷歌/deepmind、推特、NVIDIA、AMD、英特尔和许多其他公司。
\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 整个生态系统中的位置如下图所示。
\begin{figure}[h!]
\centering
\includegraphics[height=6cm]{MLlib.jpg}
\caption{MLlib在Spark生态图中的位置}
\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 的运行库、矩阵库和向量库;算法库 :包含广义线性模型、推荐系统、聚类、决策树和评估的算法;实用程序 :包括测试数据的生成、外部数据的读入等功能。
\begin{figure}[h!]
\centering
\includegraphics{MLlib_arch.jpg}
\caption{MLlib架构图}
\label{MLlib_arch}
\end{figure}
其中的底层基础部分主要包括向量接口和矩阵接口,这两种接口都会使用 Scala 语言基于 Netlib 和 BLAS/LAPACK 开发的线性代数库 Breeze 。MLlib 支持本地的密集向量和稀疏向量并且支持标量向量。MLlib 同时支持本地矩阵和分布式矩阵,支持的分布式矩阵分为 RowMatrix 、 IndexedRowMatrix 、 CoordinateMatrix 等。
\subsection{DMTK}
DMTK由一个服务于分布式机器学习的框架和一组分布式机器学习算法构成是一个将机器学习算法应用在大数据上的强大工具包。当前包括以下组件
\begin{itemize}
\item DMTK分布式机器学习框架它由参数服务器和客户端软件开发包(SDK)两部分构成。参数服务器在原有基础上从性能和功能上都得到了进一步提升 ——支持存储混合数据结构模型、接受并聚合工作节点服务器的数据模型更新、控制模型同步逻辑等。客户端软件开发包(SDK)支持维护节点模型缓存(与全局 模型服务器同步)、节点模型训练和模型通讯的流水线控制、以及片状调度大模型训练等。
\item LightLDALightLDA是一种全新的用于训练主题模型计算复杂度与主题数目无关的高效算法。在其分布式实现中我们做了大量的系统 优化使得 LightLDA能够在一个普通计算机集群上处理超大规模的数据和模型。例如在一个由8台计算机组成的集群上可以在具有2千亿训练样本(token) 的数据集上训练具有1百万词汇表和1百万个话题(topic)的LDA模型(约1万亿个参数),这种规模的实验以往要在数千台计算机的集群上才能运行。
\item 分布式词向量词向量技术近来被普遍地应用于计算词汇的语义表示它可以用作很多自然语言处理任务的词特征。微软为两种计算词向量的算法提供了高效的分步式实现一种是标准的word2vec算法另一种是可以对多义词计算多个词向量的新算法。
\end{itemize}
DMTK通过分布式计算部署的方式满足了大规模机器学习的要求。由于云计算和高性能处理器的普及让机器学习从单机环境扩展到多机环境甚至是集群系统。分布式机器学习就是通过在更为廉价的集群系统上部署机器学习的算法把原来单机的计算能力扩展到成千上万台服务器上。
DMTK开源版提供了简单高效的分布式机器学习框架如下图所示它由参数服务器和客户端软件开发包SDK两部分构成。开发者只需要简单几行代码就可以非常容易地把自己开发的机器学习算法从单机环境扩展到多机或集群环境。这大幅降低了机器学习的门槛无论是高校研究者或是商用机器学习开发商都能基于微软DMTK开源版轻松扩展机器学习算法的计算环境和计算资源从而实现基于大数据的大规模机器学习。其次DMTK还提供了丰富的机器学习算法以满足更为深度、更为快速的机器学习。目前开源版的DMTK包含了其中两款独具特色的机器学习算法LightLDA主题模型和分布式词向量模型.据了解DMTK已经被应用到了微软的必应搜索引擎、广告、小冰等多款在线产品当中实现了更强交互性的机器学习。
\begin{figure}[h!]
\centering
\includegraphics[width=16cm]{DMTK1.png}
\caption{DMTK框架}
\label{DMTK1}
\end{figure}
\subsection{SystemML}
\newpage
\section{比较分析}
\subsection{TensorFlow}
优点:
\begin{itemize}
\item 多GPU支持
\item 利用分布式资源训练v0.8版本已经支持分布式计算
\item 可以使用TensorBoard实现图形可视化并且利用与其交互产生的日志记录文件可以实时监测学习率、损失值准确性的数据
\item 模型训练的过程中可以随时停下来对其做评估,然后从检查点载入,继续训练
\item 高质量的元框架KerasTensorFlow SlimSkflow和PrettyTensor等
\end{itemize}
缺点:
\begin{itemize}
\item 相比 TheanoTensorflow 的递归神经网络RNNS仍然有些不足
\item 缺少数据输入的权威案例
\item 文档可能不一致
\item 利用异质资源增加复杂性
\item TensorFlow 贪婪占用 GPU
\end{itemize}
\subsection{Torch}
优点:
\begin{itemize}
\item 快速高效的GPU支持
\item 可嵌入可移植到iOSAndroid和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}