blob: 95b3e8612f95e29ee29aea2b525e3c7634d10fd0 [file] [log] [blame]
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Introduction &mdash; incubator-singa 0.3.0 documentation</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="top" title="incubator-singa 0.3.0 documentation" href="../index.html"/>
<script src="../_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="../index.html" class="icon icon-home"> incubator-singa
<img src="../_static/singa.png" class="logo" />
</a>
<div class="version">
0.3.0
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../downloads.html">Download SINGA</a></li>
<li class="toctree-l1"><a class="reference internal" href="index.html">Documentation</a></li>
</ul>
<p class="caption"><span class="caption-text">Development</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../develop/schedule.html">Development Schedule</a></li>
<li class="toctree-l1"><a class="reference internal" href="../develop/how-contribute.html">How to Contribute to SINGA</a></li>
<li class="toctree-l1"><a class="reference internal" href="../develop/contribute-code.html">How to Contribute Code</a></li>
<li class="toctree-l1"><a class="reference internal" href="../develop/contribute-docs.html">How to Contribute Documentation</a></li>
</ul>
<p class="caption"><span class="caption-text">Community</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../community/source-repository.html">Source Repository</a></li>
<li class="toctree-l1"><a class="reference internal" href="../community/mail-lists.html">Project Mailing Lists</a></li>
<li class="toctree-l1"><a class="reference internal" href="../community/issue-tracking.html">Issue Tracking</a></li>
<li class="toctree-l1"><a class="reference internal" href="../community/team-list.html">The SINGA Team</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">incubator-singa</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html">Docs</a> &raquo;</li>
<li>Introduction</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="introduction">
<span id="introduction"></span><h1>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h1>
<hr class="docutils" />
<p>SINGA is a general distributed deep learning platform for training big deep
learning models over large datasets. It is designed with an intuitive
programming model based on the layer abstraction. A variety
of popular deep learning models are supported, namely feed-forward models including
convolutional neural networks (CNN), energy models like restricted Boltzmann
machine (RBM), and recurrent neural networks (RNN). Many built-in layers are
provided for users. SINGA architecture is
sufficiently flexible to run synchronous, asynchronous and hybrid training
frameworks. SINGA
also supports different neural net partitioning schemes to parallelize the
training of large models, namely partitioning on batch dimension, feature
dimension or hybrid partitioning.</p>
<div class="section" id="goals">
<span id="goals"></span><h2>Goals<a class="headerlink" href="#goals" title="Permalink to this headline"></a></h2>
<p>As a distributed system, the first goal of SINGA is to have good scalability. In other
words, SINGA is expected to reduce the total training time to achieve certain
accuracy with more computing resources (i.e., machines).</p>
<p>The second goal is to make SINGA easy to use.
It is non-trivial for programmers to develop and train models with deep and
complex model structures. Distributed training further increases the burden of
programmers, e.g., data and model partitioning, and network communication. Hence it is essential to
provide an easy to use programming model so that users can implement their deep
learning models/algorithms without much awareness of the underlying distributed
platform.</p>
</div>
<div class="section" id="principles">
<span id="principles"></span><h2>Principles<a class="headerlink" href="#principles" title="Permalink to this headline"></a></h2>
<p>Scalability is a challenging research problem for distributed deep learning
training. SINGA provides a general architecture to exploit the scalability of
different training frameworks. Synchronous training frameworks improve the
efficiency of one training iteration, and
asynchronous training frameworks improve the convergence rate. Given a fixed budget
(e.g., cluster size), users can run a hybrid framework that maximizes the
scalability by trading off between efficiency and convergence rate.</p>
<p>SINGA comes with a programming model designed based on the layer abstraction, which
is intuitive for deep learning models. A variety of
popular deep learning models can be expressed and trained using this programming model.</p>
</div>
<div class="section" id="system-overview">
<span id="system-overview"></span><h2>System overview<a class="headerlink" href="#system-overview" title="Permalink to this headline"></a></h2>
<p><img src="../_static/images/sgd.png" align="center" width="400px"/>
<span><strong>Figure 1 - SGD flow.</strong></span></p>
<p>Training a deep learning model is to find the optimal parameters involved in
the transformation functions that generate good features for specific tasks.
The goodness of a set of parameters is measured by a loss function, e.g.,
<a class="reference external" href="https://en.wikipedia.org/wiki/Cross_entropy">Cross-Entropy Loss</a>. Since the
loss functions are usually non-linear and non-convex, it is difficult to get a
closed form solution. Typically, people use the stochastic gradient descent
(SGD) algorithm, which randomly
initializes the parameters and then iteratively updates them to reduce the loss
as shown in Figure 1.</p>
<p><img src="../_static/images/overview.png" align="center" width="400px"/>
<span><strong>Figure 2 - SINGA overview.</strong></span></p>
<p>SGD is used in SINGA to train
parameters of deep learning models. The training workload is distributed over
worker and server units as shown in Figure 2. In each
iteration, every worker calls <em>TrainOneBatch</em> function to compute
parameter gradients. <em>TrainOneBatch</em> takes a <em>NeuralNet</em> object
representing the neural net, and visits layers of the <em>NeuralNet</em> in
certain order. The resultant gradients are sent to the local stub that
aggregates the requests and forwards them to corresponding servers for
updating. Servers reply to workers with the updated parameters for the next
iteration.</p>
</div>
<div class="section" id="job-submission">
<span id="job-submission"></span><h2>Job submission<a class="headerlink" href="#job-submission" title="Permalink to this headline"></a></h2>
<p>To submit a job in SINGA (i.e., training a deep learning model),
users pass the job configuration to SINGA driver in the
<a class="reference external" href="programming-guide.html">main function</a>. The job configuration
specifies the four major components in Figure 2,</p>
<ul class="simple">
<li>a <a class="reference external" href="neural-net.html">NeuralNet</a> describing the neural net structure with the detailed layer setting and their connections;</li>
<li>a <a class="reference external" href="train-one-batch.html">TrainOneBatch</a> algorithm which is tailored for different model categories;</li>
<li>an <a class="reference external" href="updater.html">Updater</a> defining the protocol for updating parameters at the server side;</li>
<li>a <a class="reference external" href="distributed-training.html">Cluster Topology</a> specifying the distributed architecture of workers and servers.</li>
</ul>
<p>This process is like the job submission in Hadoop, where users configure their
jobs in the main function to set the mapper, reducer, etc.
In Hadoop, users can configure their jobs with their own (or built-in) mapper and reducer; in SINGA, users
can configure their jobs with their own (or built-in) layer, updater, etc.</p>
</div>
</div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2016 The Apache Software Foundation. All rights reserved. Apache Singa, Apache, the Apache feather logo, and the Apache Singa project logos are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners..
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../',
VERSION:'0.3.0',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
<div class="rst-versions shift-up" data-toggle="rst-versions" role="note" aria-label="versions">
<img src="../_static/apache.jpg">
<span class="rst-current-version" data-toggle="rst-current-version">
<span class="fa fa-book"> incubator-singa </span>
v: 0.3.0
<span class="fa fa-caret-down"></span>
</span>
<div class="rst-other-versions">
<dl>
<dt>Languages</dt>
<dd><a href="../../en/index.html">English</a></dd>
<dd><a href="../../zh/index.html">中文</a></dd>
<dd><a href="../../jp/index.html">日本語</a></dd>
<dd><a href="../../kr/index.html">한국어</a></dd>
</dl>
</div>
</div>
<a href="https://github.com/apache/incubator-singa">
<img style="position: absolute; top: 0; right: 0; border: 0; z-index: 10000;"
src="https://s3.amazonaws.com/github/ribbons/forkme_right_orange_ff7600.png"
alt="Fork me on GitHub">
</a>
</body>
</html>