From 65a1cdf8e5c44e22dd5bd438e8257d45bfbe7cc8 Mon Sep 17 00:00:00 2001 From: tqchen Date: Thu, 4 Dec 2014 09:07:36 -0800 Subject: [PATCH] remove doc from main repo --- doc/.gitignore | 8 ---- doc/fig/allreduce.pdf | Bin 44692 -> 0 bytes doc/rabit.bib | 69 ------------------------------- doc/rabit.tex | 94 ------------------------------------------ 4 files changed, 171 deletions(-) delete mode 100644 doc/.gitignore delete mode 100644 doc/fig/allreduce.pdf delete mode 100644 doc/rabit.bib delete mode 100644 doc/rabit.tex diff --git a/doc/.gitignore b/doc/.gitignore deleted file mode 100644 index 8c9da0f78..000000000 --- a/doc/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -rabit.pdf -*.bbl -*.blg -*.fls -*.aux -*.gz -*.log -Output diff --git a/doc/fig/allreduce.pdf b/doc/fig/allreduce.pdf deleted file mode 100644 index 17d846d2a6cb47ec4b1d6eb569d92ce0dc1d7817..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44692 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%0A)~k9CzBr|y5s5ke;g_$`$+H?%c^f?M7v`>1- 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 RB0`wJAk+c^8gNbO{{Y*J){X!G diff --git a/doc/rabit.bib b/doc/rabit.bib deleted file mode 100644 index b95d108b9..000000000 --- a/doc/rabit.bib +++ /dev/null @@ -1,69 +0,0 @@ -@inproceedings {paramServer, -author = {Mu Li and David G. Andersen and Jun Woo Park and Alexander J. Smola and Amr Ahmed and Vanja Josifovski and James Long and Eugene J. Shekita and Bor-Yiing Su}, -title = {Scaling Distributed Machine Learning with the Parameter Server}, -booktitle = {11th USENIX Symposium on Operating Systems Design and Implementation (OSDI 14)}, -year = {2014}, -month = Oct, -isbn = { 978-1-931971-16-4}, -address = {Broomfield, CO}, -pages = {583--598}, -url = {https://www.usenix.org/conference/osdi14/technical-sessions/presentation/li_mu}, -publisher = {USENIX Association}, -} - -@article{DuchiAW12, - author = {Duchi, John C. and Agarwal, Alekh and Wainwright, Martin J.}, - biburl = {http://www.bibsonomy.org/bibtex/241ff9a4754f77538c4d5076acebbf772/dblp}, - ee = {http://dx.doi.org/10.1109/TAC.2011.2161027}, - journal = {IEEE Trans. Automat. Contr.}, - keywords = {dblp}, - number = 3, - pages = {592-606}, - title = {Dual Averaging for Distributed Optimization: Convergence Analysis and Network Scaling.}, - url = {http://dblp.uni-trier.de/db/journals/tac/tac57.html#DuchiAW12}, - volume = 57, - year = 2012 -} - -@INPROCEEDINGS{Zinkevich, - author = {Martin A. Zinkevich and Alex Smola and Markus Weimer and Lihong Li}, - title = {Parallelized stochastic gradient descent}, - booktitle = {Advances in Neural Information Processing Systems 23}, - year = {2010}, - pages = {2595--2603} -} - -@article{Dekel, - author = {Dekel, Ofer and Gilad-Bachrach, Ran and Shamir, Ohad and Xiao, Lin}, - biburl = {http://www.bibsonomy.org/bibtex/20603ddb3c1f66680cb38f01683f544c3/dblp}, - ee = {http://arxiv.org/abs/1012.1367}, - journal = {CoRR}, - keywords = {dblp}, - title = {Optimal Distributed Online Prediction using Mini-Batches}, - url = {http://dblp.uni-trier.de/db/journals/corr/corr1012.html#abs-1012-1367}, - volume = {abs/1012.1367}, - year = 2010 -} - -@inproceedings{Low, -title = {GraphLab: A New Parallel Framework for Machine Learning}, -author = {Yucheng Low and Joseph Gonzalez and Aapo Kyrola and Danny Bickson and Carlos Guestrin and Joseph M. Hellerstein}, -booktitle = {Conference on Uncertainty in Artificial Intelligence (UAI)}, -month = {July}, -year = {2010}, -address = {Catalina Island, California}, -wwwfilebase = {uai2010-low-gonzalez-kyrola-bickson-guestrin-hellerstein}, -wwwtopic = {Parallel Learning}, -} - -@article{Agarwal, - author = {Agarwal, Alekh and Chapelle, Olivier and Dudík, Miroslav and Langford, John}, - biburl = {http://www.bibsonomy.org/bibtex/2e0e1d583d5b30e917e67124acbe3acd4/dblp}, - ee = {http://arxiv.org/abs/1110.4198}, - journal = {CoRR}, - keywords = {dblp}, - title = {A Reliable Effective Terascale Linear Learning System}, - url = {http://dblp.uni-trier.de/db/journals/corr/corr1110.html#abs-1110-4198}, - volume = {abs/1110.4198}, - year = 2011 -} diff --git a/doc/rabit.tex b/doc/rabit.tex deleted file mode 100644 index e2c96d53f..000000000 --- a/doc/rabit.tex +++ /dev/null @@ -1,94 +0,0 @@ -\documentclass[10pt,twocolumn]{article} - -\usepackage{times} -\usepackage{fullpage} -\usepackage{color} -\usepackage{natbib} -\usepackage{graphicx} - -\newcommand{\todo}[1]{\noindent{\textcolor{red}{\{{\bf TODO:} #1\}}}} - -\begin{document} - -\title{\bf RABIT: A Robust AllReduce and Broadcast Interface} -\author{Tianqi Chen\hspace{0.5in}Ignacio Cano\hspace{0.5in}Tianyi Zhou \\\\ -Department of Computer Science \& Engineering \\ -University of Washington\\ -} -\date{} -\maketitle -\thispagestyle{empty} - -\begin{abstract} - -AllReduce is an abstraction commonly used for solving machine learning problems. It is an operation where every node starts with a local value and ends up with an aggregate global result. -MPI package provides an AllReduce implementation. Though it has been widely adopted, it is somewhat limited; it lacks fault tolerance and cannot run easily on existent systems, such as Spark, Hadoop, etc. - -In this work, we propose RABIT, an AllReduce library suitable for distributed machine learning algorithms that overcomes the aforementioned drawbacks; it is fault-tolerant and can easily run on top of existent systems. - -\end{abstract} - -\section{Introduction} -Distributed machine learning is an active research area that has seen an incredible grow in recent years. Several approaches have been proposed, e.g. parameter server abstraction, graph approaches, among others \cite{paramServer,DuchiAW12,Zinkevich,Dekel,Low}. The closest example to our work is proposed by Agarwal et al. \cite{Agarwal}, in which they have a tree-shape communication infrastructure that efficiently accumulates and broadcasts values to every node involved in a computation. -\todo{add more} - -\section{AllReduce} - -In AllReduce settings, nodes are organized in a tree structure. Each node holds a portion of the data and computes some values on it. Those values are passed up the tree and aggregated, until a global aggregate value is calculated in the root node (reduce). The global value is then passed down to all other nodes (broadcast). - -Figure \ref{allreduce} shows an example of an AllReduce sum operation. The leaf nodes passed data to their parents (interior nodes). Such interior nodes compute an intermediate aggregate and pass the value to the root, which in turn computes the final aggregate and then passes back the result to every node in the cluster. -\todo{add more} - -\begin{figure}[tb] -\centering -\includegraphics[width=0.7\columnwidth]{fig/allreduce.pdf} -\caption{AllReduce example} -\label{allreduce} -\end{figure} - - -\section{RABIT} - - -\subsection{Design Goals} - -The design of RABIT was motivated by the following needs: - -\begin{enumerate} - \item \emph{Distributed}: machine learning algorithms are inherently iterative and computation intensive. Given the vast amount of data they can work on, it may be intractable to perform all the processing on a single machine. Instead, we want to divide the computation into different nodes, each one would be in charge of computing statistics on some portion of the data, and then have a combination step, where all those independent local solutions will be aggregated into a single result. - \item \emph{Scalability}: we want our solution to handle a growing amount of work in a capable manner, i.e. we should be able to accommodate to data and computation growth by adding more nodes. - \item \emph{Fault Tolerance}: we assume an environment where failures happen, either machines can go down or communication failures occur. Given the computation intensive nature of machine learning problems, we want to be able to continue operating properly in the event of a failure, instead of starting the process all over again. - \item \emph{Programmability}: we want to provide a clean interface that can be easily used by programmers. With few lines of code, they should be able to have a fault-tolerant AllReduce implementation. - \item \emph{Re-usability}: we want to build a library based on a few low-level primitives, e.g. AllReduce and Broadcast operations. Higher level abstractions, e.g. Recover operation, should reuse those basic building blocks. - \item \emph{Communication Efficiency}: closely related to the \emph{Scalability} goal. We want to send as few control messages as possible. We also want to reuse existent connections in order to avoid starting overheads. - \item \emph{Footprint}: we want to have a low memory footprint while running as well as provide a lightweight footprint library. -\end{enumerate} - -\subsection{Proposed Solution} - -\todo{what we did} - - -\subsubsection{Interface} - -\todo{API, how to use it} - -\section{Evaluation} - -\todo{add benchmarks and our results} - - -\section{Conclusion \& Future Work} - -With the exponential increase of data on the web, it becomes critical to build systems that can process information efficiently in order to extract value out of it. Several abstractions have been proposed to address those requirements. In this project, we focus on the AllReduce abstraction. We propose an efficient and fault tolerant version that can be used together with existent big data analytics systems, such as Spark, Hadoop, etc. -We compare our solution to MPI's AllReduce implementation, and show that the performance difference between the two is negligible considering our version is fault tolerant. -\todo{improve this} - -\subsection*{Acknowledgments} -Thanks to Arvind Krishnamurthy and the CSE550 teaching staff for their guidance and support during the quarter. - -\bibliography{rabit} -\bibliographystyle{abbrv} - -\end{document} -