You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@singa.apache.org by wa...@apache.org on 2020/04/28 05:33:20 UTC

[singa-site] branch master updated: add the logo of secureage

This is an automated email from the ASF dual-hosted git repository.

wangwei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/singa-site.git


The following commit(s) were added to refs/heads/master by this push:
     new 39c2e20  add the logo of secureage
39c2e20 is described below

commit 39c2e20424d2457b396eef8432665e0bb0eade4d
Author: wang wei <wa...@gmail.com>
AuthorDate: Tue Apr 28 13:32:53 2020 +0800

    add the logo of secureage
---
 content/docs/3.0.0.rc1/autograd.html               | 303 +++++++++
 content/docs/3.0.0.rc1/autograd/index.html         | 303 +++++++++
 content/docs/3.0.0.rc1/benchmark-train.html        |  49 ++
 content/docs/3.0.0.rc1/benchmark-train/index.html  |  49 ++
 content/docs/3.0.0.rc1/build.html                  | 444 +++++++++++++
 content/docs/3.0.0.rc1/build/index.html            | 444 +++++++++++++
 content/docs/3.0.0.rc1/contribute-code.html        | 177 +++++
 content/docs/3.0.0.rc1/contribute-code/index.html  | 177 +++++
 content/docs/3.0.0.rc1/contribute-docs.html        | 167 +++++
 content/docs/3.0.0.rc1/contribute-docs/index.html  | 167 +++++
 content/docs/3.0.0.rc1/device.html                 | 109 ++++
 content/docs/3.0.0.rc1/device/index.html           | 109 ++++
 content/docs/3.0.0.rc1/dist-train.html             | 425 ++++++++++++
 content/docs/3.0.0.rc1/dist-train/index.html       | 425 ++++++++++++
 content/docs/3.0.0.rc1/download-singa.html         | 261 ++++++++
 content/docs/3.0.0.rc1/download-singa/index.html   | 261 ++++++++
 content/docs/3.0.0.rc1/examples.html               | 153 +++++
 content/docs/3.0.0.rc1/examples/index.html         | 153 +++++
 content/docs/3.0.0.rc1/git-workflow.html           | 190 ++++++
 content/docs/3.0.0.rc1/git-workflow/index.html     | 190 ++++++
 content/docs/3.0.0.rc1/graph.html                  | 651 +++++++++++++++++++
 content/docs/3.0.0.rc1/graph/index.html            | 651 +++++++++++++++++++
 content/docs/3.0.0.rc1/history-singa.html          | 119 ++++
 content/docs/3.0.0.rc1/history-singa/index.html    | 119 ++++
 content/docs/3.0.0.rc1/how-to-release.html         | 210 ++++++
 content/docs/3.0.0.rc1/how-to-release/index.html   | 210 ++++++
 content/docs/3.0.0.rc1/initializer.html            |  35 +
 content/docs/3.0.0.rc1/initializer/index.html      |  35 +
 content/docs/3.0.0.rc1/install-win.html            | 367 +++++++++++
 content/docs/3.0.0.rc1/install-win/index.html      | 367 +++++++++++
 content/docs/3.0.0.rc1/installation.html           | 199 ++++++
 content/docs/3.0.0.rc1/installation/index.html     | 199 ++++++
 content/docs/3.0.0.rc1/issue-tracking.html         |  92 +++
 content/docs/3.0.0.rc1/issue-tracking/index.html   |  92 +++
 content/docs/3.0.0.rc1/layer.html                  |  35 +
 content/docs/3.0.0.rc1/layer/index.html            |  35 +
 content/docs/3.0.0.rc1/loss.html                   |  35 +
 content/docs/3.0.0.rc1/loss/index.html             |  35 +
 content/docs/3.0.0.rc1/mail-lists.html             | 101 +++
 content/docs/3.0.0.rc1/mail-lists/index.html       | 101 +++
 content/docs/3.0.0.rc1/metric.html                 |  35 +
 content/docs/3.0.0.rc1/metric/index.html           |  35 +
 content/docs/3.0.0.rc1/model-zoo-char-rnn.html     |  53 ++
 .../docs/3.0.0.rc1/model-zoo-char-rnn/index.html   |  53 ++
 content/docs/3.0.0.rc1/model-zoo-cnn-cifar10.html  |  79 +++
 .../3.0.0.rc1/model-zoo-cnn-cifar10/index.html     |  79 +++
 .../docs/3.0.0.rc1/model-zoo-imagenet-alexnet.html |  80 +++
 .../model-zoo-imagenet-alexnet/index.html          |  80 +++
 .../3.0.0.rc1/model-zoo-imagenet-densenet.html     |  66 ++
 .../model-zoo-imagenet-densenet/index.html         |  66 ++
 .../3.0.0.rc1/model-zoo-imagenet-googlenet.html    |  78 +++
 .../model-zoo-imagenet-googlenet/index.html        |  78 +++
 .../3.0.0.rc1/model-zoo-imagenet-inception.html    |  60 ++
 .../model-zoo-imagenet-inception/index.html        |  60 ++
 .../docs/3.0.0.rc1/model-zoo-imagenet-resnet.html  |  71 ++
 .../3.0.0.rc1/model-zoo-imagenet-resnet/index.html |  71 ++
 content/docs/3.0.0.rc1/model-zoo-imagenet-vgg.html |  69 ++
 .../3.0.0.rc1/model-zoo-imagenet-vgg/index.html    |  69 ++
 content/docs/3.0.0.rc1/model-zoo-rbm-mnist.html    |  46 ++
 .../docs/3.0.0.rc1/model-zoo-rbm-mnist/index.html  |  46 ++
 content/docs/3.0.0.rc1/onnx.html                   | 720 +++++++++++++++++++++
 content/docs/3.0.0.rc1/onnx/index.html             | 720 +++++++++++++++++++++
 content/docs/3.0.0.rc1/optimizer.html              |  35 +
 content/docs/3.0.0.rc1/optimizer/index.html        |  35 +
 .../3.0.0.rc1/releases/RELEASE_NOTES_0.1.0.html    | 201 ++++++
 .../releases/RELEASE_NOTES_0.1.0/index.html        | 201 ++++++
 .../3.0.0.rc1/releases/RELEASE_NOTES_0.2.0.html    | 136 ++++
 .../releases/RELEASE_NOTES_0.2.0/index.html        | 136 ++++
 .../3.0.0.rc1/releases/RELEASE_NOTES_0.3.0.html    |  70 ++
 .../releases/RELEASE_NOTES_0.3.0/index.html        |  70 ++
 .../3.0.0.rc1/releases/RELEASE_NOTES_1.0.0.html    | 132 ++++
 .../releases/RELEASE_NOTES_1.0.0/index.html        | 132 ++++
 .../3.0.0.rc1/releases/RELEASE_NOTES_1.1.0.html    |  84 +++
 .../releases/RELEASE_NOTES_1.1.0/index.html        |  84 +++
 .../3.0.0.rc1/releases/RELEASE_NOTES_1.2.0.html    |  90 +++
 .../releases/RELEASE_NOTES_1.2.0/index.html        |  90 +++
 .../3.0.0.rc1/releases/RELEASE_NOTES_2.0.0.html    |  86 +++
 .../releases/RELEASE_NOTES_2.0.0/index.html        |  86 +++
 .../releases/RELEASE_NOTES_3.0.0.rc1.html          | 123 ++++
 .../releases/RELEASE_NOTES_3.0.0.rc1/index.html    | 123 ++++
 content/docs/3.0.0.rc1/security.html               |  91 +++
 content/docs/3.0.0.rc1/security/index.html         |  91 +++
 content/docs/3.0.0.rc1/software-stack.html         | 200 ++++++
 content/docs/3.0.0.rc1/software-stack/index.html   | 200 ++++++
 content/docs/3.0.0.rc1/source-repository.html      | 103 +++
 .../docs/3.0.0.rc1/source-repository/index.html    | 103 +++
 content/docs/3.0.0.rc1/team-list.html              | 148 +++++
 content/docs/3.0.0.rc1/team-list/index.html        | 148 +++++
 content/docs/3.0.0.rc1/tensor.html                 | 270 ++++++++
 content/docs/3.0.0.rc1/tensor/index.html           | 270 ++++++++
 content/en/index.html                              |   2 +-
 content/en/users.html                              |   2 +-
 content/en/users/index.html                        |   2 +-
 content/img/users/SecureAge_Logo.png               | Bin 0 -> 20827 bytes
 content/index.html                                 |   2 +-
 content/users.html                                 |   2 +-
 content/users/index.html                           |   2 +-
 97 files changed, 14502 insertions(+), 6 deletions(-)

diff --git a/content/docs/3.0.0.rc1/autograd.html b/content/docs/3.0.0.rc1/autograd.html
new file mode 100644
index 0000000..621e466
--- /dev/null
+++ b/content/docs/3.0.0.rc1/autograd.html
@@ -0,0 +1,303 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Autograd · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright owners [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/autograd.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Autograd</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license  [...]
+<p>There are two typical ways to implement autograd, via symbolic differentiation
+like <a href="http://deeplearning.net/software/theano/index.html">Theano</a> or reverse
+differentiation like
+<a href="https://pytorch.org/docs/stable/notes/autograd.html">Pytorch</a>. SINGA follows
+Pytorch way, which records the computation graph and apply the backward
+propagation automatically after forward propagation. The autograd algorithm is
+explained in details
+<a href="https://pytorch.org/docs/stable/notes/autograd.html">here</a>. We explain the
+relevant modules in Singa and give an example to illustrate the usage.</p>
+<h2><a class="anchor" aria-hidden="true" id="relevant-modules"></a><a href="#relevant-modules" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<p>There are three classes involved in autograd, namely <code>singa.tensor.Tensor</code>,
+<code>singa.autograd.Operation</code>, and <code>singa.autograd.Layer</code>. In the rest of this
+article, we use tensor, operation and layer to refer to an instance of the
+respective class.</p>
+<h3><a class="anchor" aria-hidden="true" id="tensor"></a><a href="#tensor" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<p>Three attributes of Tensor are used by autograd,</p>
+<ul>
+<li><code>.creator</code> is an <code>Operation</code> instance. It records the operation that generates
+the Tensor instance.</li>
+<li><code>.requires_grad</code> is a boolean variable. It is used to indicate that the
+autograd algorithm needs to compute the gradient of the tensor (i.e., the
+owner). For example, during backpropagation, the gradients of the tensors for
+the weight matrix of a linear layer and the feature maps of a convolution
+layer (not the bottom layer) should be computed.</li>
+<li><code>.stores_grad</code> is a boolean variable. It is used to indicate that the gradient
+of the owner tensor should be stored and output by the backward function. For
+example, the gradient of the feature maps is computed during backpropagation,
+but is not included in the output of the backward function.</li>
+</ul>
+<p>Programmers can change <code>requires_grad</code> and <code>stores_grad</code> of a Tensor instance.
+For example, if later is set to True, the corresponding gradient is included in
+the output of the backward function. It should be noted that if <code>stores_grad</code> is
+True, then <code>requires_grad</code> must be true, not vice versa.</p>
+<h3><a class="anchor" aria-hidden="true" id="operation"></a><a href="#operation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>It takes one or more <code>Tensor</code> instances as input, and then outputs one or more
+<code>Tensor</code> instances. For example, ReLU can be implemented as a specific Operation
+subclass. When an <code>Operation</code> instance is called (after instantiation), the
+following two steps are executed:</p>
+<ol>
+<li>record the source operations, i.e., the <code>creator</code>s of the input tensors.</li>
+<li>do calculation by calling member function <code>.forward()</code></li>
+</ol>
+<p>There are two member functions for forwarding and backwarding, i.e.,
+<code>.forward()</code> and <code>.backward()</code>. They take <code>Tensor.data</code> as inputs (the type is
+<code>CTensor</code>), and output <code>Ctensor</code>s. To add a specific operation, subclass
+<code>operation</code> should implement their own <code>.forward()</code> and <code>.backward()</code>. The
+<code>backward()</code> function is called by the <code>backward()</code> function of autograd
+automatically during backward propogation to compute the gradients of inputs
+(according to the <code>require_grad</code> field).</p>
+<h3><a class="anchor" aria-hidden="true" id="layer"></a><a href="#layer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
+<p>For those operations that require parameters, we package them into a new class,
+<code>Layer</code>. For example, convolution operation is wrapped into a convolution layer.
+<code>Layer</code> manages (stores) the parameters and calls the corresponding <code>Operation</code>s
+to implement the transformation.</p>
+<h2><a class="anchor" aria-hidden="true" id="examples"></a><a href="#examples" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>Multiple examples are provided in the
+<a href="https://github.com/apache/singa/tree/master/examples/autograd">example folder</a>.
+We explain two representative examples here.</p>
+<h3><a class="anchor" aria-hidden="true" id="operation-only"></a><a href="#operation-only" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>The following codes implement a MLP model using only Operation instances (no
+Layer instances).</p>
+<h4><a class="anchor" aria-hidden="true" id="import-packages"></a><a href="#import-packages" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> singa.tensor <span class="hljs-keyword">import</span> Tensor
+<span class="hljs-keyword">from</span> singa <span class="hljs-keyword">import</span> autograd
+<span class="hljs-keyword">from</span> singa <span class="hljs-keyword">import</span> opt
+</code></pre>
+<h4><a class="anchor" aria-hidden="true" id="create-weight-matrix-and-bias-vector"></a><a href="#create-weight-matrix-and-bias-vector" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 [...]
+<p>The parameter tensors are created with both <code>requires_grad</code> and <code>stores_grad</code>
+set to <code>True</code>.</p>
+<pre><code class="hljs css language-python">w0 = Tensor(shape=(<span class="hljs-number">2</span>, <span class="hljs-number">3</span>), requires_grad=<span class="hljs-literal">True</span>, stores_grad=<span class="hljs-literal">True</span>)
+w0.gaussian(<span class="hljs-number">0.0</span>, <span class="hljs-number">0.1</span>)
+b0 = Tensor(shape=(<span class="hljs-number">1</span>, <span class="hljs-number">3</span>), requires_grad=<span class="hljs-literal">True</span>, stores_grad=<span class="hljs-literal">True</span>)
+b0.set_value(<span class="hljs-number">0.0</span>)
+
+w1 = Tensor(shape=(<span class="hljs-number">3</span>, <span class="hljs-number">2</span>), requires_grad=<span class="hljs-literal">True</span>, stores_grad=<span class="hljs-literal">True</span>)
+w1.gaussian(<span class="hljs-number">0.0</span>, <span class="hljs-number">0.1</span>)
+b1 = Tensor(shape=(<span class="hljs-number">1</span>, <span class="hljs-number">2</span>), requires_grad=<span class="hljs-literal">True</span>, stores_grad=<span class="hljs-literal">True</span>)
+b1.set_value(<span class="hljs-number">0.0</span>)
+</code></pre>
+<h4><a class="anchor" aria-hidden="true" id="training"></a><a href="#training" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<pre><code class="hljs css language-python">inputs = Tensor(data=data)  <span class="hljs-comment"># data matrix</span>
+target = Tensor(data=label) <span class="hljs-comment"># label vector</span>
+autograd.training = <span class="hljs-literal">True</span>    <span class="hljs-comment"># for training</span>
+sgd = opt.SGD(<span class="hljs-number">0.05</span>)   <span class="hljs-comment"># optimizer</span>
+
+<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">10</span>):
+    x = autograd.matmul(inputs, w0) <span class="hljs-comment"># matrix multiplication</span>
+    x = autograd.add_bias(x, b0)    <span class="hljs-comment"># add the bias vector</span>
+    x = autograd.relu(x)            <span class="hljs-comment"># ReLU activation operation</span>
+
+    x = autograd.matmul(x, w1)
+    x = autograd.add_bias(x, b1)
+
+    loss = autograd.softmax_cross_entropy(x, target)
+
+    <span class="hljs-keyword">for</span> p, g <span class="hljs-keyword">in</span> autograd.backward(loss):
+        sgd.update(p, g)
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="operation--layer"></a><a href="#operation--layer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<p>The following
+<a href="https://github.com/apache/singa/blob/master/examples/autograd/mnist_cnn.py">example</a>
+implements a CNN model using layers provided by the autograd module.</p>
+<h4><a class="anchor" aria-hidden="true" id="create-the-layers"></a><a href="#create-the-layers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<pre><code class="hljs css language-python">conv1 = autograd.Conv2d(<span class="hljs-number">1</span>, <span class="hljs-number">32</span>, <span class="hljs-number">3</span>, padding=<span class="hljs-number">1</span>, bias=<span class="hljs-literal">False</span>)
+bn1 = autograd.BatchNorm2d(<span class="hljs-number">32</span>)
+pooling1 = autograd.MaxPool2d(<span class="hljs-number">3</span>, <span class="hljs-number">1</span>, padding=<span class="hljs-number">1</span>)
+conv21 = autograd.Conv2d(<span class="hljs-number">32</span>, <span class="hljs-number">16</span>, <span class="hljs-number">3</span>, padding=<span class="hljs-number">1</span>)
+conv22 = autograd.Conv2d(<span class="hljs-number">32</span>, <span class="hljs-number">16</span>, <span class="hljs-number">3</span>, padding=<span class="hljs-number">1</span>)
+bn2 = autograd.BatchNorm2d(<span class="hljs-number">32</span>)
+linear = autograd.Linear(<span class="hljs-number">32</span> * <span class="hljs-number">28</span> * <span class="hljs-number">28</span>, <span class="hljs-number">10</span>)
+pooling2 = autograd.AvgPool2d(<span class="hljs-number">3</span>, <span class="hljs-number">1</span>, padding=<span class="hljs-number">1</span>)
+</code></pre>
+<h4><a class="anchor" aria-hidden="true" id="define-the-forward-function"></a><a href="#define-the-forward-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>The operations in the forward pass will be recorded automatically for backward
+propagation.</p>
+<pre><code class="hljs css language-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">forward</span><span class="hljs-params">(x, t)</span>:</span>
+    <span class="hljs-comment"># x is the input data (a batch of images)</span>
+    <span class="hljs-comment"># t the the label vector (a batch of integers)</span>
+    y = conv1(x)           <span class="hljs-comment"># Conv layer</span>
+    y = autograd.relu(y)   <span class="hljs-comment"># ReLU operation</span>
+    y = bn1(y)             <span class="hljs-comment"># BN layer</span>
+    y = pooling1(y)        <span class="hljs-comment"># Pooling Layer</span>
+
+    <span class="hljs-comment"># two parallel convolution layers</span>
+    y1 = conv21(y)
+    y2 = conv22(y)
+    y = autograd.cat((y1, y2), <span class="hljs-number">1</span>)  <span class="hljs-comment"># cat operation</span>
+    y = autograd.relu(y)           <span class="hljs-comment"># ReLU operation</span>
+    y = bn2(y)
+    y = pooling2(y)
+
+    y = autograd.flatten(y)        <span class="hljs-comment"># flatten operation</span>
+    y = linear(y)                  <span class="hljs-comment"># Linear layer</span>
+    loss = autograd.softmax_cross_entropy(y, t)  <span class="hljs-comment"># operation</span>
+    <span class="hljs-keyword">return</span> loss, y
+</code></pre>
+<h4><a class="anchor" aria-hidden="true" id="training-1"></a><a href="#training-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<pre><code class="hljs css language-python">autograd.training = <span class="hljs-literal">True</span>
+<span class="hljs-keyword">for</span> epoch <span class="hljs-keyword">in</span> range(epochs):
+    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(batch_number):
+        inputs = tensor.Tensor(device=dev, data=x_train[
+                               i * batch_sz:(<span class="hljs-number">1</span> + i) * batch_sz], stores_grad=<span class="hljs-literal">False</span>)
+        targets = tensor.Tensor(device=dev, data=y_train[
+                                i * batch_sz:(<span class="hljs-number">1</span> + i) * batch_sz], requires_grad=<span class="hljs-literal">False</span>, stores_grad=<span class="hljs-literal">False</span>)
+
+        loss, y = forward(inputs, targets) <span class="hljs-comment"># forward the net</span>
+
+        <span class="hljs-keyword">for</span> p, gp <span class="hljs-keyword">in</span> autograd.backward(loss):  <span class="hljs-comment"># auto backward</span>
+            sgd.update(p, gp)
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="using-the-module-api"></a><a href="#using-the-module-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<p>The following
+<a href="https://github.com/apache/singa/blob/master/examples/autograd/cnn_module.py">example</a>
+implements a CNN model using the Module provided by the module.</p>
+<h4><a class="anchor" aria-hidden="true" id="define-the-subclass-of-module"></a><a href="#define-the-subclass-of-module" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
+<p>Define the model class, it should be the subclass of the Module. In this way,
+all operations used during traing phase will form a calculation graph and will
+be analyzed. The operations in the graph will be scheduled and executed
+efficiently. Layers can also be included in the module class.</p>
+<pre><code class="hljs css language-python"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MLP</span><span class="hljs-params">(module.Module)</span>:</span>  <span class="hljs-comment"># the model is a subclass of Module</span>
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(self, optimizer)</span>:</span>
+        super(MLP, self).__init__()
+
+        <span class="hljs-comment"># init the operators, layers and other objects</span>
+        self.w0 = Tensor(shape=(<span class="hljs-number">2</span>, <span class="hljs-number">3</span>), requires_grad=<span class="hljs-literal">True</span>, stores_grad=<span class="hljs-literal">True</span>)
+        self.w0.gaussian(<span class="hljs-number">0.0</span>, <span class="hljs-number">0.1</span>)
+        self.b0 = Tensor(shape=(<span class="hljs-number">3</span>,), requires_grad=<span class="hljs-literal">True</span>, stores_grad=<span class="hljs-literal">True</span>)
+        self.b0.set_value(<span class="hljs-number">0.0</span>)
+
+        self.w1 = Tensor(shape=(<span class="hljs-number">3</span>, <span class="hljs-number">2</span>), requires_grad=<span class="hljs-literal">True</span>, stores_grad=<span class="hljs-literal">True</span>)
+        self.w1.gaussian(<span class="hljs-number">0.0</span>, <span class="hljs-number">0.1</span>)
+        self.b1 = Tensor(shape=(<span class="hljs-number">2</span>,), requires_grad=<span class="hljs-literal">True</span>, stores_grad=<span class="hljs-literal">True</span>)
+        self.b1.set_value(<span class="hljs-number">0.0</span>)
+
+        <span class="hljs-comment"># init the optimizer</span>
+        self.optimizer = optimizer
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">forward</span><span class="hljs-params">(self, inputs)</span>:</span>  <span class="hljs-comment"># define the forward function</span>
+        x = autograd.matmul(inputs, self.w0)
+        x = autograd.add_bias(x, self.b0)
+        x = autograd.relu(x)
+        x = autograd.matmul(x, self.w1)
+        x = autograd.add_bias(x, self.b1)
+        <span class="hljs-keyword">return</span> x
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">loss</span><span class="hljs-params">(self, out, target)</span>:</span> <span class="hljs-comment"># define the loss function</span>
+        <span class="hljs-comment"># can use the loss operations provided by SINGA or self-defined function</span>
+        <span class="hljs-keyword">return</span> autograd.softmax_cross_entropy(out, target)
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">optim</span><span class="hljs-params">(self, loss)</span>:</span>       <span class="hljs-comment"># define the optim function</span>
+        <span class="hljs-comment"># can use the optimizer provided by SINGA or self-defined function</span>
+        <span class="hljs-keyword">return</span> self.optimizer.backward_and_update(loss)
+</code></pre>
+<h4><a class="anchor" aria-hidden="true" id="training-2"></a><a href="#training-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<pre><code class="hljs css language-python"><span class="hljs-comment"># create a model instance</span>
+model = MLP(sgd)
+<span class="hljs-comment"># declare what device to train on</span>
+model.on_device(dev)
+<span class="hljs-comment"># declare execution mode and order</span>
+model.graph(graph, sequential)
+
+<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(niters):
+    out = model(inputs)
+    loss = model.loss(out, target)
+    model.optim(loss)
+
+    <span class="hljs-keyword">if</span> i % (niters / <span class="hljs-number">10</span>) == <span class="hljs-number">0</span> <span class="hljs-keyword">and</span> rank_in_global == <span class="hljs-number">0</span>:
+        print(<span class="hljs-string">"training loss = "</span>, tensor.to_numpy(loss)[<span class="hljs-number">0</span>], flush=<span class="hljs-literal">True</span>)
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="python-api"></a><a href="#python-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>Refer
+<a href="https://singa.readthedocs.io/en/latest/docs/autograd.html#module-singa.autograd">here</a>
+for more details of Python API.</p>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/9/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/tensor"><span class="arrow-prev">← </span><span>Tensor</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/graph"><span>Computational Graph</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#relevant-modules">Relevant Modules</a><ul class= [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/autograd/index.html b/content/docs/3.0.0.rc1/autograd/index.html
new file mode 100644
index 0000000..621e466
--- /dev/null
+++ b/content/docs/3.0.0.rc1/autograd/index.html
@@ -0,0 +1,303 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Autograd · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright owners [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/autograd.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Autograd</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license  [...]
+<p>There are two typical ways to implement autograd, via symbolic differentiation
+like <a href="http://deeplearning.net/software/theano/index.html">Theano</a> or reverse
+differentiation like
+<a href="https://pytorch.org/docs/stable/notes/autograd.html">Pytorch</a>. SINGA follows
+Pytorch way, which records the computation graph and apply the backward
+propagation automatically after forward propagation. The autograd algorithm is
+explained in details
+<a href="https://pytorch.org/docs/stable/notes/autograd.html">here</a>. We explain the
+relevant modules in Singa and give an example to illustrate the usage.</p>
+<h2><a class="anchor" aria-hidden="true" id="relevant-modules"></a><a href="#relevant-modules" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<p>There are three classes involved in autograd, namely <code>singa.tensor.Tensor</code>,
+<code>singa.autograd.Operation</code>, and <code>singa.autograd.Layer</code>. In the rest of this
+article, we use tensor, operation and layer to refer to an instance of the
+respective class.</p>
+<h3><a class="anchor" aria-hidden="true" id="tensor"></a><a href="#tensor" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<p>Three attributes of Tensor are used by autograd,</p>
+<ul>
+<li><code>.creator</code> is an <code>Operation</code> instance. It records the operation that generates
+the Tensor instance.</li>
+<li><code>.requires_grad</code> is a boolean variable. It is used to indicate that the
+autograd algorithm needs to compute the gradient of the tensor (i.e., the
+owner). For example, during backpropagation, the gradients of the tensors for
+the weight matrix of a linear layer and the feature maps of a convolution
+layer (not the bottom layer) should be computed.</li>
+<li><code>.stores_grad</code> is a boolean variable. It is used to indicate that the gradient
+of the owner tensor should be stored and output by the backward function. For
+example, the gradient of the feature maps is computed during backpropagation,
+but is not included in the output of the backward function.</li>
+</ul>
+<p>Programmers can change <code>requires_grad</code> and <code>stores_grad</code> of a Tensor instance.
+For example, if later is set to True, the corresponding gradient is included in
+the output of the backward function. It should be noted that if <code>stores_grad</code> is
+True, then <code>requires_grad</code> must be true, not vice versa.</p>
+<h3><a class="anchor" aria-hidden="true" id="operation"></a><a href="#operation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.6 [...]
+<p>It takes one or more <code>Tensor</code> instances as input, and then outputs one or more
+<code>Tensor</code> instances. For example, ReLU can be implemented as a specific Operation
+subclass. When an <code>Operation</code> instance is called (after instantiation), the
+following two steps are executed:</p>
+<ol>
+<li>record the source operations, i.e., the <code>creator</code>s of the input tensors.</li>
+<li>do calculation by calling member function <code>.forward()</code></li>
+</ol>
+<p>There are two member functions for forwarding and backwarding, i.e.,
+<code>.forward()</code> and <code>.backward()</code>. They take <code>Tensor.data</code> as inputs (the type is
+<code>CTensor</code>), and output <code>Ctensor</code>s. To add a specific operation, subclass
+<code>operation</code> should implement their own <code>.forward()</code> and <code>.backward()</code>. The
+<code>backward()</code> function is called by the <code>backward()</code> function of autograd
+automatically during backward propogation to compute the gradients of inputs
+(according to the <code>require_grad</code> field).</p>
+<h3><a class="anchor" aria-hidden="true" id="layer"></a><a href="#layer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
+<p>For those operations that require parameters, we package them into a new class,
+<code>Layer</code>. For example, convolution operation is wrapped into a convolution layer.
+<code>Layer</code> manages (stores) the parameters and calls the corresponding <code>Operation</code>s
+to implement the transformation.</p>
+<h2><a class="anchor" aria-hidden="true" id="examples"></a><a href="#examples" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>Multiple examples are provided in the
+<a href="https://github.com/apache/singa/tree/master/examples/autograd">example folder</a>.
+We explain two representative examples here.</p>
+<h3><a class="anchor" aria-hidden="true" id="operation-only"></a><a href="#operation-only" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>The following codes implement a MLP model using only Operation instances (no
+Layer instances).</p>
+<h4><a class="anchor" aria-hidden="true" id="import-packages"></a><a href="#import-packages" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> singa.tensor <span class="hljs-keyword">import</span> Tensor
+<span class="hljs-keyword">from</span> singa <span class="hljs-keyword">import</span> autograd
+<span class="hljs-keyword">from</span> singa <span class="hljs-keyword">import</span> opt
+</code></pre>
+<h4><a class="anchor" aria-hidden="true" id="create-weight-matrix-and-bias-vector"></a><a href="#create-weight-matrix-and-bias-vector" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 [...]
+<p>The parameter tensors are created with both <code>requires_grad</code> and <code>stores_grad</code>
+set to <code>True</code>.</p>
+<pre><code class="hljs css language-python">w0 = Tensor(shape=(<span class="hljs-number">2</span>, <span class="hljs-number">3</span>), requires_grad=<span class="hljs-literal">True</span>, stores_grad=<span class="hljs-literal">True</span>)
+w0.gaussian(<span class="hljs-number">0.0</span>, <span class="hljs-number">0.1</span>)
+b0 = Tensor(shape=(<span class="hljs-number">1</span>, <span class="hljs-number">3</span>), requires_grad=<span class="hljs-literal">True</span>, stores_grad=<span class="hljs-literal">True</span>)
+b0.set_value(<span class="hljs-number">0.0</span>)
+
+w1 = Tensor(shape=(<span class="hljs-number">3</span>, <span class="hljs-number">2</span>), requires_grad=<span class="hljs-literal">True</span>, stores_grad=<span class="hljs-literal">True</span>)
+w1.gaussian(<span class="hljs-number">0.0</span>, <span class="hljs-number">0.1</span>)
+b1 = Tensor(shape=(<span class="hljs-number">1</span>, <span class="hljs-number">2</span>), requires_grad=<span class="hljs-literal">True</span>, stores_grad=<span class="hljs-literal">True</span>)
+b1.set_value(<span class="hljs-number">0.0</span>)
+</code></pre>
+<h4><a class="anchor" aria-hidden="true" id="training"></a><a href="#training" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<pre><code class="hljs css language-python">inputs = Tensor(data=data)  <span class="hljs-comment"># data matrix</span>
+target = Tensor(data=label) <span class="hljs-comment"># label vector</span>
+autograd.training = <span class="hljs-literal">True</span>    <span class="hljs-comment"># for training</span>
+sgd = opt.SGD(<span class="hljs-number">0.05</span>)   <span class="hljs-comment"># optimizer</span>
+
+<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">10</span>):
+    x = autograd.matmul(inputs, w0) <span class="hljs-comment"># matrix multiplication</span>
+    x = autograd.add_bias(x, b0)    <span class="hljs-comment"># add the bias vector</span>
+    x = autograd.relu(x)            <span class="hljs-comment"># ReLU activation operation</span>
+
+    x = autograd.matmul(x, w1)
+    x = autograd.add_bias(x, b1)
+
+    loss = autograd.softmax_cross_entropy(x, target)
+
+    <span class="hljs-keyword">for</span> p, g <span class="hljs-keyword">in</span> autograd.backward(loss):
+        sgd.update(p, g)
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="operation--layer"></a><a href="#operation--layer" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<p>The following
+<a href="https://github.com/apache/singa/blob/master/examples/autograd/mnist_cnn.py">example</a>
+implements a CNN model using layers provided by the autograd module.</p>
+<h4><a class="anchor" aria-hidden="true" id="create-the-layers"></a><a href="#create-the-layers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<pre><code class="hljs css language-python">conv1 = autograd.Conv2d(<span class="hljs-number">1</span>, <span class="hljs-number">32</span>, <span class="hljs-number">3</span>, padding=<span class="hljs-number">1</span>, bias=<span class="hljs-literal">False</span>)
+bn1 = autograd.BatchNorm2d(<span class="hljs-number">32</span>)
+pooling1 = autograd.MaxPool2d(<span class="hljs-number">3</span>, <span class="hljs-number">1</span>, padding=<span class="hljs-number">1</span>)
+conv21 = autograd.Conv2d(<span class="hljs-number">32</span>, <span class="hljs-number">16</span>, <span class="hljs-number">3</span>, padding=<span class="hljs-number">1</span>)
+conv22 = autograd.Conv2d(<span class="hljs-number">32</span>, <span class="hljs-number">16</span>, <span class="hljs-number">3</span>, padding=<span class="hljs-number">1</span>)
+bn2 = autograd.BatchNorm2d(<span class="hljs-number">32</span>)
+linear = autograd.Linear(<span class="hljs-number">32</span> * <span class="hljs-number">28</span> * <span class="hljs-number">28</span>, <span class="hljs-number">10</span>)
+pooling2 = autograd.AvgPool2d(<span class="hljs-number">3</span>, <span class="hljs-number">1</span>, padding=<span class="hljs-number">1</span>)
+</code></pre>
+<h4><a class="anchor" aria-hidden="true" id="define-the-forward-function"></a><a href="#define-the-forward-function" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>The operations in the forward pass will be recorded automatically for backward
+propagation.</p>
+<pre><code class="hljs css language-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">forward</span><span class="hljs-params">(x, t)</span>:</span>
+    <span class="hljs-comment"># x is the input data (a batch of images)</span>
+    <span class="hljs-comment"># t the the label vector (a batch of integers)</span>
+    y = conv1(x)           <span class="hljs-comment"># Conv layer</span>
+    y = autograd.relu(y)   <span class="hljs-comment"># ReLU operation</span>
+    y = bn1(y)             <span class="hljs-comment"># BN layer</span>
+    y = pooling1(y)        <span class="hljs-comment"># Pooling Layer</span>
+
+    <span class="hljs-comment"># two parallel convolution layers</span>
+    y1 = conv21(y)
+    y2 = conv22(y)
+    y = autograd.cat((y1, y2), <span class="hljs-number">1</span>)  <span class="hljs-comment"># cat operation</span>
+    y = autograd.relu(y)           <span class="hljs-comment"># ReLU operation</span>
+    y = bn2(y)
+    y = pooling2(y)
+
+    y = autograd.flatten(y)        <span class="hljs-comment"># flatten operation</span>
+    y = linear(y)                  <span class="hljs-comment"># Linear layer</span>
+    loss = autograd.softmax_cross_entropy(y, t)  <span class="hljs-comment"># operation</span>
+    <span class="hljs-keyword">return</span> loss, y
+</code></pre>
+<h4><a class="anchor" aria-hidden="true" id="training-1"></a><a href="#training-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<pre><code class="hljs css language-python">autograd.training = <span class="hljs-literal">True</span>
+<span class="hljs-keyword">for</span> epoch <span class="hljs-keyword">in</span> range(epochs):
+    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(batch_number):
+        inputs = tensor.Tensor(device=dev, data=x_train[
+                               i * batch_sz:(<span class="hljs-number">1</span> + i) * batch_sz], stores_grad=<span class="hljs-literal">False</span>)
+        targets = tensor.Tensor(device=dev, data=y_train[
+                                i * batch_sz:(<span class="hljs-number">1</span> + i) * batch_sz], requires_grad=<span class="hljs-literal">False</span>, stores_grad=<span class="hljs-literal">False</span>)
+
+        loss, y = forward(inputs, targets) <span class="hljs-comment"># forward the net</span>
+
+        <span class="hljs-keyword">for</span> p, gp <span class="hljs-keyword">in</span> autograd.backward(loss):  <span class="hljs-comment"># auto backward</span>
+            sgd.update(p, gp)
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="using-the-module-api"></a><a href="#using-the-module-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<p>The following
+<a href="https://github.com/apache/singa/blob/master/examples/autograd/cnn_module.py">example</a>
+implements a CNN model using the Module provided by the module.</p>
+<h4><a class="anchor" aria-hidden="true" id="define-the-subclass-of-module"></a><a href="#define-the-subclass-of-module" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
+<p>Define the model class, it should be the subclass of the Module. In this way,
+all operations used during traing phase will form a calculation graph and will
+be analyzed. The operations in the graph will be scheduled and executed
+efficiently. Layers can also be included in the module class.</p>
+<pre><code class="hljs css language-python"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MLP</span><span class="hljs-params">(module.Module)</span>:</span>  <span class="hljs-comment"># the model is a subclass of Module</span>
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(self, optimizer)</span>:</span>
+        super(MLP, self).__init__()
+
+        <span class="hljs-comment"># init the operators, layers and other objects</span>
+        self.w0 = Tensor(shape=(<span class="hljs-number">2</span>, <span class="hljs-number">3</span>), requires_grad=<span class="hljs-literal">True</span>, stores_grad=<span class="hljs-literal">True</span>)
+        self.w0.gaussian(<span class="hljs-number">0.0</span>, <span class="hljs-number">0.1</span>)
+        self.b0 = Tensor(shape=(<span class="hljs-number">3</span>,), requires_grad=<span class="hljs-literal">True</span>, stores_grad=<span class="hljs-literal">True</span>)
+        self.b0.set_value(<span class="hljs-number">0.0</span>)
+
+        self.w1 = Tensor(shape=(<span class="hljs-number">3</span>, <span class="hljs-number">2</span>), requires_grad=<span class="hljs-literal">True</span>, stores_grad=<span class="hljs-literal">True</span>)
+        self.w1.gaussian(<span class="hljs-number">0.0</span>, <span class="hljs-number">0.1</span>)
+        self.b1 = Tensor(shape=(<span class="hljs-number">2</span>,), requires_grad=<span class="hljs-literal">True</span>, stores_grad=<span class="hljs-literal">True</span>)
+        self.b1.set_value(<span class="hljs-number">0.0</span>)
+
+        <span class="hljs-comment"># init the optimizer</span>
+        self.optimizer = optimizer
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">forward</span><span class="hljs-params">(self, inputs)</span>:</span>  <span class="hljs-comment"># define the forward function</span>
+        x = autograd.matmul(inputs, self.w0)
+        x = autograd.add_bias(x, self.b0)
+        x = autograd.relu(x)
+        x = autograd.matmul(x, self.w1)
+        x = autograd.add_bias(x, self.b1)
+        <span class="hljs-keyword">return</span> x
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">loss</span><span class="hljs-params">(self, out, target)</span>:</span> <span class="hljs-comment"># define the loss function</span>
+        <span class="hljs-comment"># can use the loss operations provided by SINGA or self-defined function</span>
+        <span class="hljs-keyword">return</span> autograd.softmax_cross_entropy(out, target)
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">optim</span><span class="hljs-params">(self, loss)</span>:</span>       <span class="hljs-comment"># define the optim function</span>
+        <span class="hljs-comment"># can use the optimizer provided by SINGA or self-defined function</span>
+        <span class="hljs-keyword">return</span> self.optimizer.backward_and_update(loss)
+</code></pre>
+<h4><a class="anchor" aria-hidden="true" id="training-2"></a><a href="#training-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<pre><code class="hljs css language-python"><span class="hljs-comment"># create a model instance</span>
+model = MLP(sgd)
+<span class="hljs-comment"># declare what device to train on</span>
+model.on_device(dev)
+<span class="hljs-comment"># declare execution mode and order</span>
+model.graph(graph, sequential)
+
+<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(niters):
+    out = model(inputs)
+    loss = model.loss(out, target)
+    model.optim(loss)
+
+    <span class="hljs-keyword">if</span> i % (niters / <span class="hljs-number">10</span>) == <span class="hljs-number">0</span> <span class="hljs-keyword">and</span> rank_in_global == <span class="hljs-number">0</span>:
+        print(<span class="hljs-string">"training loss = "</span>, tensor.to_numpy(loss)[<span class="hljs-number">0</span>], flush=<span class="hljs-literal">True</span>)
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="python-api"></a><a href="#python-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>Refer
+<a href="https://singa.readthedocs.io/en/latest/docs/autograd.html#module-singa.autograd">here</a>
+for more details of Python API.</p>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/9/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/tensor"><span class="arrow-prev">← </span><span>Tensor</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/graph"><span>Computational Graph</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#relevant-modules">Relevant Modules</a><ul class= [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/benchmark-train.html b/content/docs/3.0.0.rc1/benchmark-train.html
new file mode 100644
index 0000000..0ce78ee
--- /dev/null
+++ b/content/docs/3.0.0.rc1/benchmark-train.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Benchmark for Distributed Training · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information  [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>Workload: we use a deep convolutional neural network,
+<a href="https://github.com/apache/singa/blob/master/examples/autograd/resnet.py">ResNet-50</a>
+as the application. ResNet-50 is has 50 convolution layers for image
+classification. It requires 3.8 GFLOPs to pass a single image (of size 224x224)
+through the network. The input image size is 224x224.</p>
+<p>Hardware: we use p2.8xlarge instances from AWS, each of which has 8 Nvidia Tesla
+K80 GPUs, 96 GB GPU memory in total, 32 vCPU, 488 GB main memory, 10 Gbps
+network bandwidth.</p>
+<p>Metric: we measure the time per iteration for different number of workers to
+evaluate the scalability of SINGA. The batch size is fixed to be 32 per GPU.
+Synchronous training scheme is applied. As a result, the effective batch size is
+$32N$, where N is the number of GPUs. We compare with a popular open source
+system which uses the parameter server topology. The first GPU is selected as
+the server.</p>
+<p><img src="/docs/assets/benchmark.png" alt="Benchmark Experiments"> <br/> <strong>Scalability test. Bars
+are for the throughput; lines are for the communication cost.</strong></p>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/singa-logo-square.png" alt="Apache SINGA" width="66" height="58"/></a><div><h5>Docs</h5><a href="/docs/installation">Getting Started</a><a href="/docs/device">Guides</a><a href="/en/https://apache-singa.readth [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/benchmark-train/index.html b/content/docs/3.0.0.rc1/benchmark-train/index.html
new file mode 100644
index 0000000..0ce78ee
--- /dev/null
+++ b/content/docs/3.0.0.rc1/benchmark-train/index.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Benchmark for Distributed Training · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information  [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>Workload: we use a deep convolutional neural network,
+<a href="https://github.com/apache/singa/blob/master/examples/autograd/resnet.py">ResNet-50</a>
+as the application. ResNet-50 is has 50 convolution layers for image
+classification. It requires 3.8 GFLOPs to pass a single image (of size 224x224)
+through the network. The input image size is 224x224.</p>
+<p>Hardware: we use p2.8xlarge instances from AWS, each of which has 8 Nvidia Tesla
+K80 GPUs, 96 GB GPU memory in total, 32 vCPU, 488 GB main memory, 10 Gbps
+network bandwidth.</p>
+<p>Metric: we measure the time per iteration for different number of workers to
+evaluate the scalability of SINGA. The batch size is fixed to be 32 per GPU.
+Synchronous training scheme is applied. As a result, the effective batch size is
+$32N$, where N is the number of GPUs. We compare with a popular open source
+system which uses the parameter server topology. The first GPU is selected as
+the server.</p>
+<p><img src="/docs/assets/benchmark.png" alt="Benchmark Experiments"> <br/> <strong>Scalability test. Bars
+are for the throughput; lines are for the communication cost.</strong></p>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/singa-logo-square.png" alt="Apache SINGA" width="66" height="58"/></a><div><h5>Docs</h5><a href="/docs/installation">Getting Started</a><a href="/docs/device">Guides</a><a href="/en/https://apache-singa.readth [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/build.html b/content/docs/3.0.0.rc1/build.html
new file mode 100644
index 0000000..0515932
--- /dev/null
+++ b/content/docs/3.0.0.rc1/build.html
@@ -0,0 +1,444 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Build SINGA from Source · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding c [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/build.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Build SINGA from Source</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contribu [...]
+<p>The source files could be downloaded either as a
+<a href="https://dist.apache.org/repos/dist/dev/singa/">tar.gz file</a>, or as a git repo</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> git <span class="hljs-built_in">clone</span> https://github.com/apache/singa.git</span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">cd</span> singa/</span>
+</code></pre>
+<p>If you want to contribute code to SINGA, refer to
+<a href="/docs/3.0.0.rc1/contribute-code">contribute-code page</a> for the steps and requirements.</p>
+<h2><a class="anchor" aria-hidden="true" id="use-conda-to-build-singa"></a><a href="#use-conda-to-build-singa" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<p>Conda-build is a building tool that installs the dependent libraries from
+anaconda cloud and executes the building scripts.</p>
+<p>To install conda-build (after installing conda)</p>
+<pre><code class="hljs css language-shell">conda install conda-build
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="build-cpu-version"></a><a href="#build-cpu-version" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>To build the CPU version of SINGA</p>
+<pre><code class="hljs css language-shell">conda build tool/conda/singa/
+</code></pre>
+<p>The above commands have been tested on Ubuntu (14.04, 16.04 and 18.04) and macOS
+10.11. Refer to the <a href="https://travis-ci.org/apache/singa">Travis-CI page</a> for
+more information.</p>
+<h3><a class="anchor" aria-hidden="true" id="build-gpu-version"></a><a href="#build-gpu-version" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>To build the GPU version of SINGA, the building machine must have Nvida GPU, and
+the CUDA driver (&gt;= 384.81), CUDA toolkit (&gt;=9) and cuDNN (&gt;=7) must have be
+installed. The following two Docker images provide the building environment:</p>
+<ol>
+<li>apache/singa:conda-cuda9.0</li>
+<li>apache/singa:conda-cuda10.0</li>
+</ol>
+<p>Once the building environment is ready, you need to export the CUDA version
+first, and then run conda command to build SINGA</p>
+<pre><code class="hljs css language-shell">export CUDA=x.y (e.g. 9.0)
+conda build tool/conda/singa/
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="post-processing"></a><a href="#post-processing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<p>The location of the generated package file (<code>.tar.gz</code>) is shown on the screen.
+The generated package can be installed directly,</p>
+<pre><code class="hljs css language-shell">conda install -c conda-forge --use-local &lt;path to the package file&gt;
+</code></pre>
+<p>or uploaded to anaconda cloud for others to download and install. You need to
+register an account on anaconda for
+<a href="https://docs.anaconda.com/anaconda-cloud/user-guide/getting-started/">uploading the package</a>.</p>
+<pre><code class="hljs css language-shell">conda install anaconda-client
+anaconda login
+anaconda upload -l main &lt;path to the package file&gt;
+</code></pre>
+<p>After uploading the package to the cloud, you can see it on
+<a href="https://anaconda.org/">Anaconda Cloud</a> website or via the following command</p>
+<pre><code class="hljs css language-shell">conda search -c &lt;anaconda username&gt; singa
+</code></pre>
+<p>Each specific SINGA package is identified by the version and build string. To
+install a specific SINGA package, you need to provide all the information, e.g.,</p>
+<pre><code class="hljs css language-shell">conda install -c &lt;anaconda username&gt; -c conda-forge singa=2.1.0.dev=cpu_py36
+</code></pre>
+<p>To make the installation command simple, you can create the following additional
+packages which depend on the latest CPU and GPU SINGA packages.</p>
+<pre><code class="hljs css language-console"><span class="hljs-meta">#</span><span class="bash"> <span class="hljs-keyword">for</span> singa-cpu</span>
+conda build tool/conda/cpu/  --python=3.6
+conda build tool/conda/cpu/  --python=3.7
+<span class="hljs-meta">#</span><span class="bash"> <span class="hljs-keyword">for</span> singa-gpu</span>
+conda build tool/conda/gpu/  --python=3.6
+conda build tool/conda/gpu/  --python=3.7
+</code></pre>
+<p>Therefore, when you run</p>
+<pre><code class="hljs css language-shell">conda install -c &lt;anaconda username&gt; -c conda-forge singa-xpu
+</code></pre>
+<p>(<code>xpu</code> is either 'cpu' or 'gpu'), the corresponding real SINGA package is
+installed as the dependent library.</p>
+<h2><a class="anchor" aria-hidden="true" id="use-native-tools-to-build-singa-on-ubuntu"></a><a href="#use-native-tools-to-build-singa-on-ubuntu" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1  [...]
+<p>Refer to SINGA
+<a href="https://github.com/apache/singa/blob/master/tool/docker/devel/ubuntu/cuda9/Dockerfile#L30">Dockerfiles</a>
+for the instructions of installing the dependent libraries on Ubuntu 16.04. You
+can also create a Docker container using the <a href="">devel images</a> and build SINGA
+inside the container. To build SINGA with GPU, DNNL, Python and unit tests, run
+the following instructions</p>
+<pre><code class="hljs css language-shell">mkdir build    # at the root of singa folder
+cd build
+cmake -DENABLE_TEST=ON -DUSE_CUDA=ON -DUSE_DNNL=ON -DUSE_PYTHON3=ON ..
+make
+cd python
+pip install .
+</code></pre>
+<p>The details of the CMake options are explained in the last section of this page.
+The last command install the Python package. You can also run
+<code>pip install -e .</code>, which creates symlinks instead of copying the Python files
+into the site-package folder.</p>
+<p>If SINGA is compiled with ENABLE_TEST=ON, you can run the unit tests by</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> ./bin/test_singa</span>
+</code></pre>
+<p>You can see all the testing cases with testing results. If SINGA passes all
+tests, then you have successfully installed SINGA.</p>
+<h2><a class="anchor" aria-hidden="true" id="use-native-tools-to-build-singa-on-centos7"></a><a href="#use-native-tools-to-build-singa-on-centos7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c [...]
+<p>Building from source will be different for Centos7 as package names
+differ.Follow the instructions given below.</p>
+<h3><a class="anchor" aria-hidden="true" id="installing-dependencies"></a><a href="#installing-dependencies" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>Basic packages/libraries</p>
+<pre><code class="hljs css language-shell">sudo yum install freetype-devel libXft-devel ncurses-devel openblas-devel blas-devel lapack devel atlas-devel kernel-headers unzip wget pkgconfig zip zlib-devel libcurl-devel cmake curl unzip dh-autoreconf git python-devel glog-devel protobuf-devel
+</code></pre>
+<p>For build-essential</p>
+<pre><code class="hljs css language-shell">sudo yum group install "Development Tools"
+</code></pre>
+<p>For installing swig</p>
+<pre><code class="hljs css language-shell">sudo yum install pcre-devel
+wget http://prdownloads.sourceforge.net/swig/swig-3.0.10.tar.gz
+tar xvzf swig-3.0.10.tar.gz
+cd swig-3.0.10.tar.gz
+./configure --prefix=${RUN}
+make
+make install
+</code></pre>
+<p>For installing gfortran</p>
+<pre><code class="hljs css language-shell">sudo yum install centos-release-scl-rh
+sudo yum --enablerepo=centos-sclo-rh-testing install devtoolset-7-gcc-gfortran
+</code></pre>
+<p>For installing pip and other packages</p>
+<pre><code class="hljs css language-shell">sudo yum install epel-release
+sudo yum install python-pip
+pip install matplotlib numpy pandas scikit-learn pydot
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="installation"></a><a href="#installation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>Follow steps 1-5 of <em>Use native tools to build SINGA on Ubuntu</em></p>
+<h3><a class="anchor" aria-hidden="true" id="testing"></a><a href="#testing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>You can run the unit tests by,</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> ./bin/test_singa</span>
+</code></pre>
+<p>You can see all the testing cases with testing results. If SINGA passes all
+tests, then you have successfully installed SINGA.</p>
+<h2><a class="anchor" aria-hidden="true" id="compile-singa-on-windows"></a><a href="#compile-singa-on-windows" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<p>Instructions for building on Windows with Python support can be found
+<a href="/docs/3.0.0.rc1/install-win">install-win page</a>.</p>
+<h2><a class="anchor" aria-hidden="true" id="more-details-about-the-compilation-options"></a><a href="#more-details-about-the-compilation-options" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c [...]
+<h3><a class="anchor" aria-hidden="true" id="use_modules-deprecated"></a><a href="#use_modules-deprecated" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<p>If protobuf and openblas are not installed, you can compile SINGA together with
+them</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> In SINGA ROOT folder</span>
+<span class="hljs-meta">$</span><span class="bash"> mkdir build</span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">cd</span> build</span>
+<span class="hljs-meta">$</span><span class="bash"> cmake -DUSE_MODULES=ON ..</span>
+<span class="hljs-meta">$</span><span class="bash"> make</span>
+</code></pre>
+<p>cmake would download OpenBlas and Protobuf (2.6.1) and compile them together
+with SINGA.</p>
+<p>You can use <code>ccmake ..</code> to configure the compilation options. If some dependent
+libraries are not in the system default paths, you need to export the following
+environment variables</p>
+<pre><code class="hljs css language-shell">export CMAKE_INCLUDE_PATH=&lt;path to the header file folder&gt;
+export CMAKE_LIBRARY_PATH=&lt;path to the lib file folder&gt;
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="use_python"></a><a href="#use_python" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>Option for compiling the Python wrapper for SINGA,</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> cmake -DUSE_PYTHON=ON ..</span>
+<span class="hljs-meta">$</span><span class="bash"> make</span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">cd</span> python</span>
+<span class="hljs-meta">$</span><span class="bash"> pip install .</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="use_cuda"></a><a href="#use_cuda" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>Users are encouraged to install the CUDA and
+<a href="https://developer.nvidia.com/cudnn">cuDNN</a> for running SINGA on GPUs to get
+better performance.</p>
+<p>SINGA has been tested over CUDA 9/10, and cuDNN 7. If cuDNN is installed into
+non-system folder, e.g. /home/bob/local/cudnn/, the following commands should be
+executed for cmake and the runtime to find it</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">export</span> CMAKE_INCLUDE_PATH=/home/bob/<span class="hljs-built_in">local</span>/cudnn/include:<span class="hljs-variable">$CMAKE_INCLUDE_PATH</span></span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">export</span> CMAKE_LIBRARY_PATH=/home/bob/<span class="hljs-built_in">local</span>/cudnn/lib64:<span class="hljs-variable">$CMAKE_LIBRARY_PATH</span></span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">export</span> LD_LIBRARY_PATH=/home/bob/<span class="hljs-built_in">local</span>/cudnn/lib64:<span class="hljs-variable">$LD_LIBRARY_PATH</span></span>
+</code></pre>
+<p>The cmake options for CUDA and cuDNN should be switched on</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">#</span><span class="bash"> Dependent libs are install already</span>
+<span class="hljs-meta">$</span><span class="bash"> cmake -DUSE_CUDA=ON ..</span>
+<span class="hljs-meta">$</span><span class="bash"> make</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="use_dnnl"></a><a href="#use_dnnl" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>User can enable DNNL to enhance the performance of CPU computation.</p>
+<p>Installation guide of DNNL could be found
+<a href="https://github.com/intel/mkl-dnn#installation">here</a>.</p>
+<p>SINGA has been tested over DNNL v1.1.</p>
+<p>To build SINGA with DNNL support:</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">#</span><span class="bash"> Dependent libs are installed already</span>
+<span class="hljs-meta">$</span><span class="bash"> cmake -DUSE_DNNL=ON ..</span>
+<span class="hljs-meta">$</span><span class="bash"> make</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="use_opencl"></a><a href="#use_opencl" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>SINGA uses opencl-headers and viennacl (version 1.7.1 or newer) for OpenCL
+support, which can be installed using via</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">#</span><span class="bash"> On Ubuntu 16.04</span>
+<span class="hljs-meta">$</span><span class="bash"> sudo apt-get install opencl-headers, libviennacl-dev</span>
+<span class="hljs-meta">#</span><span class="bash"> On Fedora</span>
+<span class="hljs-meta">$</span><span class="bash"> sudo yum install opencl-headers, viennacl</span>
+</code></pre>
+<p>Additionally, you will need the OpenCL Installable Client Driver (ICD) for the
+platforms that you want to run OpenCL on.</p>
+<ul>
+<li>For AMD and nVidia GPUs, the driver package should also install the correct
+OpenCL ICD.</li>
+<li>For Intel CPUs and/or GPUs, get the driver from the
+<a href="https://software.intel.com/en-us/articles/opencl-drivers">Intel website.</a>
+Note that the drivers provided on that website only supports recent CPUs and
+Iris GPUs.</li>
+<li>For older Intel CPUs, you can use the <code>beignet-opencl-icd</code> package.</li>
+</ul>
+<p>Note that running OpenCL on CPUs is not currently recommended because it is
+slow. Memory transfer is on the order of whole seconds (1000's of ms on CPUs as
+compared to 1's of ms on GPUs).</p>
+<p>More information on setting up a working OpenCL environment may be found
+<a href="https://wiki.tiker.net/OpenCLHowTo">here</a>.</p>
+<p>If the package version of ViennaCL is not at least 1.7.1, you will need to build
+it from source:</p>
+<p>Clone <a href="https://github.com/viennacl/viennacl-dev">the repository from here</a>,
+checkout the <code>release-1.7.1</code> tag and build it. Remember to add its directory to
+<code>PATH</code> and the built libraries to <code>LD_LIBRARY_PATH</code>.</p>
+<p>To build SINGA with OpenCL support (tested on SINGA 1.1):</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> cmake -DUSE_OPENCL=ON ..</span>
+<span class="hljs-meta">$</span><span class="bash"> make</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="package"></a><a href="#package" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>This setting is used to build the Debian package. Set PACKAGE=ON and build the
+package with make command like this:</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> cmake -DPACKAGE=ON</span>
+<span class="hljs-meta">$</span><span class="bash"> make package</span>
+</code></pre>
+<h2><a class="anchor" aria-hidden="true" id="faq"></a><a href="#faq" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
+<ul>
+<li><p>Q: Error from 'import singa'</p>
+<p>A: Please check the detailed error from
+<code>python -c &quot;from singa import _singa_wrap&quot;</code>. Sometimes it is caused by the
+dependent libraries, e.g. there are multiple versions of protobuf, missing of
+cudnn, numpy version mismatch. Following steps show the solutions for
+different cases</p>
+<ol>
+<li><p>Check the cudnn and cuda. If cudnn is missing or not match with the wheel
+version, you can download the correct version of cudnn into ~/local/cudnn/
+and</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">echo</span> <span class="hljs-string">"export LD_LIBRARY_PATH=/home/&lt;yourname&gt;/local/cudnn/lib64:<span class="hljs-variable">$LD_LIBRARY_PATH</span>"</span> &gt;&gt; ~/.bashrc</span>
+</code></pre></li>
+<li><p>If it is the problem related to protobuf. You can install protobuf (3.6.1)
+from source into a local folder, say ~/local/; Decompress the tar file, and
+then</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> ./configure --prefix=/home/&lt;yourname&gt;<span class="hljs-built_in">local</span></span>
+<span class="hljs-meta">$</span><span class="bash"> make &amp;&amp; make install</span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">echo</span> <span class="hljs-string">"export LD_LIBRARY_PATH=/home/&lt;yourname&gt;/local/lib:<span class="hljs-variable">$LD_LIBRARY_PATH</span>"</span> &gt;&gt; ~/.bashrc</span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">source</span> ~/.bashrc</span>
+</code></pre></li>
+<li><p>If it cannot find other libs including python, then create virtual env
+using <code>pip</code> or <code>conda</code>;</p></li>
+<li><p>If it is not caused by the above reasons, go to the folder of
+<code>_singa_wrap.so</code>,</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> python</span>
+<span class="hljs-meta">&gt;</span><span class="bash">&gt; import importlib</span>
+<span class="hljs-meta">&gt;</span><span class="bash">&gt; importlib.import_module(<span class="hljs-string">'_singa_wrap'</span>)</span>
+</code></pre>
+<p>Check the error message. For example, if the numpy version mismatches, the
+error message would be,</p>
+<pre><code class="hljs css language-shell">RuntimeError: module compiled against API version 0xb but this version of numpy is 0xa
+</code></pre>
+<p>Then you need to upgrade the numpy.</p></li>
+</ol></li>
+</ul>
+<ul>
+<li><p>Q: Error from running <code>cmake ..</code>, which cannot find the dependent libraries.</p>
+<p>A: If you haven't installed the libraries, install them. If you installed the
+libraries in a folder that is outside of the system folder, e.g. /usr/local,
+you need to export the following variables</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">export</span> CMAKE_INCLUDE_PATH=&lt;path to your header file folder&gt;</span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">export</span> CMAKE_LIBRARY_PATH=&lt;path to your lib file folder&gt;</span>
+</code></pre></li>
+</ul>
+<ul>
+<li><p>Q: Error from <code>make</code>, e.g. the linking phase</p>
+<p>A: If your libraries are in other folders than system default paths, you need
+to export the following varaibles</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">export</span> LIBRARY_PATH=&lt;path to your lib file folder&gt;</span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">export</span> LD_LIBRARY_PATH=&lt;path to your lib file folder&gt;</span>
+</code></pre></li>
+</ul>
+<ul>
+<li><p>Q: Error from header files, e.g. 'cblas.h no such file or directory exists'</p>
+<p>A: You need to include the folder of the cblas.h into CPLUS_INCLUDE_PATH,
+e.g.,</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">export</span> CPLUS_INCLUDE_PATH=/opt/OpenBLAS/include:<span class="hljs-variable">$CPLUS_INCLUDE_PATH</span></span>
+</code></pre></li>
+<li><p>Q:While compiling SINGA, I get error <code>SSE2 instruction set not enabled</code></p>
+<p>A:You can try following command:</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> make CFLAGS=<span class="hljs-string">'-msse2'</span> CXXFLAGS=<span class="hljs-string">'-msse2'</span></span>
+</code></pre></li>
+<li><p>Q:I get <code>ImportError: cannot import name enum_type_wrapper</code> from
+google.protobuf.internal when I try to import .py files.</p>
+<p>A: You need to install the python binding of protobuf, which could be
+installed via</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> sudo apt-get install protobuf</span>
+</code></pre>
+<p>or from source</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">cd</span> /PROTOBUF/SOURCE/FOLDER</span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">cd</span> python</span>
+<span class="hljs-meta">$</span><span class="bash"> python setup.py build</span>
+<span class="hljs-meta">$</span><span class="bash"> python setup.py install</span>
+</code></pre></li>
+<li><p>Q: When I build OpenBLAS from source, I am told that I need a Fortran
+compiler.</p>
+<p>A: You can compile OpenBLAS by</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> make ONLY_CBLAS=1</span>
+</code></pre>
+<p>or install it using</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> sudo apt-get install libopenblas-dev</span>
+</code></pre></li>
+<li><p>Q: When I build protocol buffer, it reports that <code>GLIBC++_3.4.20</code> not found in
+<code>/usr/lib64/libstdc++.so.6</code>?</p>
+<p>A: This means the linker found libstdc++.so.6 but that library belongs to an
+older version of GCC than was used to compile and link the program. The
+program depends on code defined in the newer libstdc++ that belongs to the
+newer version of GCC, so the linker must be told how to find the newer
+libstdc++ shared library. The simplest way to fix this is to find the correct
+libstdc++ and export it to LD_LIBRARY_PATH. For example, if GLIBC++_3.4.20 is
+listed in the output of the following command,</p>
+<pre><code class="hljs">  $ strings /usr/local/lib64/libstdc++.so.6|grep GLIBC++
+</code></pre>
+<p>then you just set your environment variable as</p>
+<pre><code class="hljs">  $ export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
+</code></pre></li>
+<li><p>Q: When I build glog, it reports that &quot;src/logging_unittest.cc:83:20: error:
+‘gflags’ is not a namespace-name&quot;</p>
+<p>A: It maybe that you have installed gflags with a different namespace such as
+&quot;google&quot;. so glog can't find 'gflags' namespace. Because it is not necessary
+to have gflags to build glog. So you can change the configure.ac file to
+ignore gflags.</p>
+<pre><code class="hljs">  1. cd to glog src directory
+  2. change line 125 of configure.ac  to &quot;AC_CHECK_LIB(gflags, main, ac_cv_have_libgflags=0, ac_cv_have_libgflags=0)&quot;
+  3. autoreconf
+</code></pre>
+<p>After this, you can build glog again.</p></li>
+<li><p>Q: When using virtual environment, every time I run pip install, it would
+reinstall numpy. However, the numpy would not be used when I <code>import numpy</code></p>
+<p>A: It could be caused by the <code>PYTHONPATH</code> which should be set to empty when
+you are using virtual environment to avoid the conflicts with the path of the
+virtual environment.</p></li>
+<li><p>Q: When compiling PySINGA from source, there is a compilation error due to the
+missing of &lt;numpy/objectarray.h&gt;</p>
+<p>A: Please install numpy and export the path of numpy header files as</p>
+<pre><code class="hljs">  $ export CPLUS_INCLUDE_PATH=`python -c &quot;import numpy; print numpy.get_include()&quot;`:$CPLUS_INCLUDE_PATH
+</code></pre></li>
+<li><p>Q: When I run SINGA in Mac OS X, I got the error &quot;Fatal Python error:
+PyThreadState_Get: no current thread Abort trap: 6&quot;</p>
+<p>A: This error happens typically when you have multiple version of Python on
+your system and you installed SINGA via pip (this problem is resolved for
+installation via conda), e.g, the one comes with the OS and the one installed
+by Homebrew. The Python linked by PySINGA must be the same as the Python
+interpreter. You can check your interpreter by <code>which python</code> and check the
+Python linked by PySINGA via <code>otool -L &lt;path to _singa_wrap.so&gt;</code>. To fix this
+error, compile SINGA with the correct version of Python. In particular, if you
+build PySINGA from source, you need to specify the paths when invoking
+<a href="http://stackoverflow.com/questions/15291500/i-have-2-versions-of-python-installed-but-cmake-is-using-older-version-how-do">cmake</a></p>
+<pre><code class="hljs">  $ cmake -DPYTHON_LIBRARY=`python-config --prefix`/lib/libpython2.7.dylib -DPYTHON_INCLUDE_DIR=`python-config --prefix`/include/python2.7/ ..
+</code></pre>
+<p>If installed PySINGA from binary packages, e.g. debian or wheel, then you need
+to change the python interpreter, e.g., reset the $PATH to put the correct
+path of Python at the front position.</p></li>
+</ul>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/download-singa"><span class="arrow-prev">← </span><span>Download SINGA</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/contribute-code"><span>How to Contribute Code</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#use-conda-to-build- [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/build/index.html b/content/docs/3.0.0.rc1/build/index.html
new file mode 100644
index 0000000..0515932
--- /dev/null
+++ b/content/docs/3.0.0.rc1/build/index.html
@@ -0,0 +1,444 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Build SINGA from Source · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding c [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/build.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Build SINGA from Source</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contribu [...]
+<p>The source files could be downloaded either as a
+<a href="https://dist.apache.org/repos/dist/dev/singa/">tar.gz file</a>, or as a git repo</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> git <span class="hljs-built_in">clone</span> https://github.com/apache/singa.git</span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">cd</span> singa/</span>
+</code></pre>
+<p>If you want to contribute code to SINGA, refer to
+<a href="/docs/3.0.0.rc1/contribute-code">contribute-code page</a> for the steps and requirements.</p>
+<h2><a class="anchor" aria-hidden="true" id="use-conda-to-build-singa"></a><a href="#use-conda-to-build-singa" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<p>Conda-build is a building tool that installs the dependent libraries from
+anaconda cloud and executes the building scripts.</p>
+<p>To install conda-build (after installing conda)</p>
+<pre><code class="hljs css language-shell">conda install conda-build
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="build-cpu-version"></a><a href="#build-cpu-version" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>To build the CPU version of SINGA</p>
+<pre><code class="hljs css language-shell">conda build tool/conda/singa/
+</code></pre>
+<p>The above commands have been tested on Ubuntu (14.04, 16.04 and 18.04) and macOS
+10.11. Refer to the <a href="https://travis-ci.org/apache/singa">Travis-CI page</a> for
+more information.</p>
+<h3><a class="anchor" aria-hidden="true" id="build-gpu-version"></a><a href="#build-gpu-version" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>To build the GPU version of SINGA, the building machine must have Nvida GPU, and
+the CUDA driver (&gt;= 384.81), CUDA toolkit (&gt;=9) and cuDNN (&gt;=7) must have be
+installed. The following two Docker images provide the building environment:</p>
+<ol>
+<li>apache/singa:conda-cuda9.0</li>
+<li>apache/singa:conda-cuda10.0</li>
+</ol>
+<p>Once the building environment is ready, you need to export the CUDA version
+first, and then run conda command to build SINGA</p>
+<pre><code class="hljs css language-shell">export CUDA=x.y (e.g. 9.0)
+conda build tool/conda/singa/
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="post-processing"></a><a href="#post-processing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<p>The location of the generated package file (<code>.tar.gz</code>) is shown on the screen.
+The generated package can be installed directly,</p>
+<pre><code class="hljs css language-shell">conda install -c conda-forge --use-local &lt;path to the package file&gt;
+</code></pre>
+<p>or uploaded to anaconda cloud for others to download and install. You need to
+register an account on anaconda for
+<a href="https://docs.anaconda.com/anaconda-cloud/user-guide/getting-started/">uploading the package</a>.</p>
+<pre><code class="hljs css language-shell">conda install anaconda-client
+anaconda login
+anaconda upload -l main &lt;path to the package file&gt;
+</code></pre>
+<p>After uploading the package to the cloud, you can see it on
+<a href="https://anaconda.org/">Anaconda Cloud</a> website or via the following command</p>
+<pre><code class="hljs css language-shell">conda search -c &lt;anaconda username&gt; singa
+</code></pre>
+<p>Each specific SINGA package is identified by the version and build string. To
+install a specific SINGA package, you need to provide all the information, e.g.,</p>
+<pre><code class="hljs css language-shell">conda install -c &lt;anaconda username&gt; -c conda-forge singa=2.1.0.dev=cpu_py36
+</code></pre>
+<p>To make the installation command simple, you can create the following additional
+packages which depend on the latest CPU and GPU SINGA packages.</p>
+<pre><code class="hljs css language-console"><span class="hljs-meta">#</span><span class="bash"> <span class="hljs-keyword">for</span> singa-cpu</span>
+conda build tool/conda/cpu/  --python=3.6
+conda build tool/conda/cpu/  --python=3.7
+<span class="hljs-meta">#</span><span class="bash"> <span class="hljs-keyword">for</span> singa-gpu</span>
+conda build tool/conda/gpu/  --python=3.6
+conda build tool/conda/gpu/  --python=3.7
+</code></pre>
+<p>Therefore, when you run</p>
+<pre><code class="hljs css language-shell">conda install -c &lt;anaconda username&gt; -c conda-forge singa-xpu
+</code></pre>
+<p>(<code>xpu</code> is either 'cpu' or 'gpu'), the corresponding real SINGA package is
+installed as the dependent library.</p>
+<h2><a class="anchor" aria-hidden="true" id="use-native-tools-to-build-singa-on-ubuntu"></a><a href="#use-native-tools-to-build-singa-on-ubuntu" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1  [...]
+<p>Refer to SINGA
+<a href="https://github.com/apache/singa/blob/master/tool/docker/devel/ubuntu/cuda9/Dockerfile#L30">Dockerfiles</a>
+for the instructions of installing the dependent libraries on Ubuntu 16.04. You
+can also create a Docker container using the <a href="">devel images</a> and build SINGA
+inside the container. To build SINGA with GPU, DNNL, Python and unit tests, run
+the following instructions</p>
+<pre><code class="hljs css language-shell">mkdir build    # at the root of singa folder
+cd build
+cmake -DENABLE_TEST=ON -DUSE_CUDA=ON -DUSE_DNNL=ON -DUSE_PYTHON3=ON ..
+make
+cd python
+pip install .
+</code></pre>
+<p>The details of the CMake options are explained in the last section of this page.
+The last command install the Python package. You can also run
+<code>pip install -e .</code>, which creates symlinks instead of copying the Python files
+into the site-package folder.</p>
+<p>If SINGA is compiled with ENABLE_TEST=ON, you can run the unit tests by</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> ./bin/test_singa</span>
+</code></pre>
+<p>You can see all the testing cases with testing results. If SINGA passes all
+tests, then you have successfully installed SINGA.</p>
+<h2><a class="anchor" aria-hidden="true" id="use-native-tools-to-build-singa-on-centos7"></a><a href="#use-native-tools-to-build-singa-on-centos7" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c [...]
+<p>Building from source will be different for Centos7 as package names
+differ.Follow the instructions given below.</p>
+<h3><a class="anchor" aria-hidden="true" id="installing-dependencies"></a><a href="#installing-dependencies" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<p>Basic packages/libraries</p>
+<pre><code class="hljs css language-shell">sudo yum install freetype-devel libXft-devel ncurses-devel openblas-devel blas-devel lapack devel atlas-devel kernel-headers unzip wget pkgconfig zip zlib-devel libcurl-devel cmake curl unzip dh-autoreconf git python-devel glog-devel protobuf-devel
+</code></pre>
+<p>For build-essential</p>
+<pre><code class="hljs css language-shell">sudo yum group install "Development Tools"
+</code></pre>
+<p>For installing swig</p>
+<pre><code class="hljs css language-shell">sudo yum install pcre-devel
+wget http://prdownloads.sourceforge.net/swig/swig-3.0.10.tar.gz
+tar xvzf swig-3.0.10.tar.gz
+cd swig-3.0.10.tar.gz
+./configure --prefix=${RUN}
+make
+make install
+</code></pre>
+<p>For installing gfortran</p>
+<pre><code class="hljs css language-shell">sudo yum install centos-release-scl-rh
+sudo yum --enablerepo=centos-sclo-rh-testing install devtoolset-7-gcc-gfortran
+</code></pre>
+<p>For installing pip and other packages</p>
+<pre><code class="hljs css language-shell">sudo yum install epel-release
+sudo yum install python-pip
+pip install matplotlib numpy pandas scikit-learn pydot
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="installation"></a><a href="#installation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>Follow steps 1-5 of <em>Use native tools to build SINGA on Ubuntu</em></p>
+<h3><a class="anchor" aria-hidden="true" id="testing"></a><a href="#testing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>You can run the unit tests by,</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> ./bin/test_singa</span>
+</code></pre>
+<p>You can see all the testing cases with testing results. If SINGA passes all
+tests, then you have successfully installed SINGA.</p>
+<h2><a class="anchor" aria-hidden="true" id="compile-singa-on-windows"></a><a href="#compile-singa-on-windows" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<p>Instructions for building on Windows with Python support can be found
+<a href="/docs/3.0.0.rc1/install-win">install-win page</a>.</p>
+<h2><a class="anchor" aria-hidden="true" id="more-details-about-the-compilation-options"></a><a href="#more-details-about-the-compilation-options" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c [...]
+<h3><a class="anchor" aria-hidden="true" id="use_modules-deprecated"></a><a href="#use_modules-deprecated" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<p>If protobuf and openblas are not installed, you can compile SINGA together with
+them</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> In SINGA ROOT folder</span>
+<span class="hljs-meta">$</span><span class="bash"> mkdir build</span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">cd</span> build</span>
+<span class="hljs-meta">$</span><span class="bash"> cmake -DUSE_MODULES=ON ..</span>
+<span class="hljs-meta">$</span><span class="bash"> make</span>
+</code></pre>
+<p>cmake would download OpenBlas and Protobuf (2.6.1) and compile them together
+with SINGA.</p>
+<p>You can use <code>ccmake ..</code> to configure the compilation options. If some dependent
+libraries are not in the system default paths, you need to export the following
+environment variables</p>
+<pre><code class="hljs css language-shell">export CMAKE_INCLUDE_PATH=&lt;path to the header file folder&gt;
+export CMAKE_LIBRARY_PATH=&lt;path to the lib file folder&gt;
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="use_python"></a><a href="#use_python" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>Option for compiling the Python wrapper for SINGA,</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> cmake -DUSE_PYTHON=ON ..</span>
+<span class="hljs-meta">$</span><span class="bash"> make</span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">cd</span> python</span>
+<span class="hljs-meta">$</span><span class="bash"> pip install .</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="use_cuda"></a><a href="#use_cuda" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>Users are encouraged to install the CUDA and
+<a href="https://developer.nvidia.com/cudnn">cuDNN</a> for running SINGA on GPUs to get
+better performance.</p>
+<p>SINGA has been tested over CUDA 9/10, and cuDNN 7. If cuDNN is installed into
+non-system folder, e.g. /home/bob/local/cudnn/, the following commands should be
+executed for cmake and the runtime to find it</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">export</span> CMAKE_INCLUDE_PATH=/home/bob/<span class="hljs-built_in">local</span>/cudnn/include:<span class="hljs-variable">$CMAKE_INCLUDE_PATH</span></span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">export</span> CMAKE_LIBRARY_PATH=/home/bob/<span class="hljs-built_in">local</span>/cudnn/lib64:<span class="hljs-variable">$CMAKE_LIBRARY_PATH</span></span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">export</span> LD_LIBRARY_PATH=/home/bob/<span class="hljs-built_in">local</span>/cudnn/lib64:<span class="hljs-variable">$LD_LIBRARY_PATH</span></span>
+</code></pre>
+<p>The cmake options for CUDA and cuDNN should be switched on</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">#</span><span class="bash"> Dependent libs are install already</span>
+<span class="hljs-meta">$</span><span class="bash"> cmake -DUSE_CUDA=ON ..</span>
+<span class="hljs-meta">$</span><span class="bash"> make</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="use_dnnl"></a><a href="#use_dnnl" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>User can enable DNNL to enhance the performance of CPU computation.</p>
+<p>Installation guide of DNNL could be found
+<a href="https://github.com/intel/mkl-dnn#installation">here</a>.</p>
+<p>SINGA has been tested over DNNL v1.1.</p>
+<p>To build SINGA with DNNL support:</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">#</span><span class="bash"> Dependent libs are installed already</span>
+<span class="hljs-meta">$</span><span class="bash"> cmake -DUSE_DNNL=ON ..</span>
+<span class="hljs-meta">$</span><span class="bash"> make</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="use_opencl"></a><a href="#use_opencl" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>SINGA uses opencl-headers and viennacl (version 1.7.1 or newer) for OpenCL
+support, which can be installed using via</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">#</span><span class="bash"> On Ubuntu 16.04</span>
+<span class="hljs-meta">$</span><span class="bash"> sudo apt-get install opencl-headers, libviennacl-dev</span>
+<span class="hljs-meta">#</span><span class="bash"> On Fedora</span>
+<span class="hljs-meta">$</span><span class="bash"> sudo yum install opencl-headers, viennacl</span>
+</code></pre>
+<p>Additionally, you will need the OpenCL Installable Client Driver (ICD) for the
+platforms that you want to run OpenCL on.</p>
+<ul>
+<li>For AMD and nVidia GPUs, the driver package should also install the correct
+OpenCL ICD.</li>
+<li>For Intel CPUs and/or GPUs, get the driver from the
+<a href="https://software.intel.com/en-us/articles/opencl-drivers">Intel website.</a>
+Note that the drivers provided on that website only supports recent CPUs and
+Iris GPUs.</li>
+<li>For older Intel CPUs, you can use the <code>beignet-opencl-icd</code> package.</li>
+</ul>
+<p>Note that running OpenCL on CPUs is not currently recommended because it is
+slow. Memory transfer is on the order of whole seconds (1000's of ms on CPUs as
+compared to 1's of ms on GPUs).</p>
+<p>More information on setting up a working OpenCL environment may be found
+<a href="https://wiki.tiker.net/OpenCLHowTo">here</a>.</p>
+<p>If the package version of ViennaCL is not at least 1.7.1, you will need to build
+it from source:</p>
+<p>Clone <a href="https://github.com/viennacl/viennacl-dev">the repository from here</a>,
+checkout the <code>release-1.7.1</code> tag and build it. Remember to add its directory to
+<code>PATH</code> and the built libraries to <code>LD_LIBRARY_PATH</code>.</p>
+<p>To build SINGA with OpenCL support (tested on SINGA 1.1):</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> cmake -DUSE_OPENCL=ON ..</span>
+<span class="hljs-meta">$</span><span class="bash"> make</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="package"></a><a href="#package" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>This setting is used to build the Debian package. Set PACKAGE=ON and build the
+package with make command like this:</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> cmake -DPACKAGE=ON</span>
+<span class="hljs-meta">$</span><span class="bash"> make package</span>
+</code></pre>
+<h2><a class="anchor" aria-hidden="true" id="faq"></a><a href="#faq" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
+<ul>
+<li><p>Q: Error from 'import singa'</p>
+<p>A: Please check the detailed error from
+<code>python -c &quot;from singa import _singa_wrap&quot;</code>. Sometimes it is caused by the
+dependent libraries, e.g. there are multiple versions of protobuf, missing of
+cudnn, numpy version mismatch. Following steps show the solutions for
+different cases</p>
+<ol>
+<li><p>Check the cudnn and cuda. If cudnn is missing or not match with the wheel
+version, you can download the correct version of cudnn into ~/local/cudnn/
+and</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">echo</span> <span class="hljs-string">"export LD_LIBRARY_PATH=/home/&lt;yourname&gt;/local/cudnn/lib64:<span class="hljs-variable">$LD_LIBRARY_PATH</span>"</span> &gt;&gt; ~/.bashrc</span>
+</code></pre></li>
+<li><p>If it is the problem related to protobuf. You can install protobuf (3.6.1)
+from source into a local folder, say ~/local/; Decompress the tar file, and
+then</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> ./configure --prefix=/home/&lt;yourname&gt;<span class="hljs-built_in">local</span></span>
+<span class="hljs-meta">$</span><span class="bash"> make &amp;&amp; make install</span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">echo</span> <span class="hljs-string">"export LD_LIBRARY_PATH=/home/&lt;yourname&gt;/local/lib:<span class="hljs-variable">$LD_LIBRARY_PATH</span>"</span> &gt;&gt; ~/.bashrc</span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">source</span> ~/.bashrc</span>
+</code></pre></li>
+<li><p>If it cannot find other libs including python, then create virtual env
+using <code>pip</code> or <code>conda</code>;</p></li>
+<li><p>If it is not caused by the above reasons, go to the folder of
+<code>_singa_wrap.so</code>,</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> python</span>
+<span class="hljs-meta">&gt;</span><span class="bash">&gt; import importlib</span>
+<span class="hljs-meta">&gt;</span><span class="bash">&gt; importlib.import_module(<span class="hljs-string">'_singa_wrap'</span>)</span>
+</code></pre>
+<p>Check the error message. For example, if the numpy version mismatches, the
+error message would be,</p>
+<pre><code class="hljs css language-shell">RuntimeError: module compiled against API version 0xb but this version of numpy is 0xa
+</code></pre>
+<p>Then you need to upgrade the numpy.</p></li>
+</ol></li>
+</ul>
+<ul>
+<li><p>Q: Error from running <code>cmake ..</code>, which cannot find the dependent libraries.</p>
+<p>A: If you haven't installed the libraries, install them. If you installed the
+libraries in a folder that is outside of the system folder, e.g. /usr/local,
+you need to export the following variables</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">export</span> CMAKE_INCLUDE_PATH=&lt;path to your header file folder&gt;</span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">export</span> CMAKE_LIBRARY_PATH=&lt;path to your lib file folder&gt;</span>
+</code></pre></li>
+</ul>
+<ul>
+<li><p>Q: Error from <code>make</code>, e.g. the linking phase</p>
+<p>A: If your libraries are in other folders than system default paths, you need
+to export the following varaibles</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">export</span> LIBRARY_PATH=&lt;path to your lib file folder&gt;</span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">export</span> LD_LIBRARY_PATH=&lt;path to your lib file folder&gt;</span>
+</code></pre></li>
+</ul>
+<ul>
+<li><p>Q: Error from header files, e.g. 'cblas.h no such file or directory exists'</p>
+<p>A: You need to include the folder of the cblas.h into CPLUS_INCLUDE_PATH,
+e.g.,</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">export</span> CPLUS_INCLUDE_PATH=/opt/OpenBLAS/include:<span class="hljs-variable">$CPLUS_INCLUDE_PATH</span></span>
+</code></pre></li>
+<li><p>Q:While compiling SINGA, I get error <code>SSE2 instruction set not enabled</code></p>
+<p>A:You can try following command:</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> make CFLAGS=<span class="hljs-string">'-msse2'</span> CXXFLAGS=<span class="hljs-string">'-msse2'</span></span>
+</code></pre></li>
+<li><p>Q:I get <code>ImportError: cannot import name enum_type_wrapper</code> from
+google.protobuf.internal when I try to import .py files.</p>
+<p>A: You need to install the python binding of protobuf, which could be
+installed via</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> sudo apt-get install protobuf</span>
+</code></pre>
+<p>or from source</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">cd</span> /PROTOBUF/SOURCE/FOLDER</span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">cd</span> python</span>
+<span class="hljs-meta">$</span><span class="bash"> python setup.py build</span>
+<span class="hljs-meta">$</span><span class="bash"> python setup.py install</span>
+</code></pre></li>
+<li><p>Q: When I build OpenBLAS from source, I am told that I need a Fortran
+compiler.</p>
+<p>A: You can compile OpenBLAS by</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> make ONLY_CBLAS=1</span>
+</code></pre>
+<p>or install it using</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> sudo apt-get install libopenblas-dev</span>
+</code></pre></li>
+<li><p>Q: When I build protocol buffer, it reports that <code>GLIBC++_3.4.20</code> not found in
+<code>/usr/lib64/libstdc++.so.6</code>?</p>
+<p>A: This means the linker found libstdc++.so.6 but that library belongs to an
+older version of GCC than was used to compile and link the program. The
+program depends on code defined in the newer libstdc++ that belongs to the
+newer version of GCC, so the linker must be told how to find the newer
+libstdc++ shared library. The simplest way to fix this is to find the correct
+libstdc++ and export it to LD_LIBRARY_PATH. For example, if GLIBC++_3.4.20 is
+listed in the output of the following command,</p>
+<pre><code class="hljs">  $ strings /usr/local/lib64/libstdc++.so.6|grep GLIBC++
+</code></pre>
+<p>then you just set your environment variable as</p>
+<pre><code class="hljs">  $ export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
+</code></pre></li>
+<li><p>Q: When I build glog, it reports that &quot;src/logging_unittest.cc:83:20: error:
+‘gflags’ is not a namespace-name&quot;</p>
+<p>A: It maybe that you have installed gflags with a different namespace such as
+&quot;google&quot;. so glog can't find 'gflags' namespace. Because it is not necessary
+to have gflags to build glog. So you can change the configure.ac file to
+ignore gflags.</p>
+<pre><code class="hljs">  1. cd to glog src directory
+  2. change line 125 of configure.ac  to &quot;AC_CHECK_LIB(gflags, main, ac_cv_have_libgflags=0, ac_cv_have_libgflags=0)&quot;
+  3. autoreconf
+</code></pre>
+<p>After this, you can build glog again.</p></li>
+<li><p>Q: When using virtual environment, every time I run pip install, it would
+reinstall numpy. However, the numpy would not be used when I <code>import numpy</code></p>
+<p>A: It could be caused by the <code>PYTHONPATH</code> which should be set to empty when
+you are using virtual environment to avoid the conflicts with the path of the
+virtual environment.</p></li>
+<li><p>Q: When compiling PySINGA from source, there is a compilation error due to the
+missing of &lt;numpy/objectarray.h&gt;</p>
+<p>A: Please install numpy and export the path of numpy header files as</p>
+<pre><code class="hljs">  $ export CPLUS_INCLUDE_PATH=`python -c &quot;import numpy; print numpy.get_include()&quot;`:$CPLUS_INCLUDE_PATH
+</code></pre></li>
+<li><p>Q: When I run SINGA in Mac OS X, I got the error &quot;Fatal Python error:
+PyThreadState_Get: no current thread Abort trap: 6&quot;</p>
+<p>A: This error happens typically when you have multiple version of Python on
+your system and you installed SINGA via pip (this problem is resolved for
+installation via conda), e.g, the one comes with the OS and the one installed
+by Homebrew. The Python linked by PySINGA must be the same as the Python
+interpreter. You can check your interpreter by <code>which python</code> and check the
+Python linked by PySINGA via <code>otool -L &lt;path to _singa_wrap.so&gt;</code>. To fix this
+error, compile SINGA with the correct version of Python. In particular, if you
+build PySINGA from source, you need to specify the paths when invoking
+<a href="http://stackoverflow.com/questions/15291500/i-have-2-versions-of-python-installed-but-cmake-is-using-older-version-how-do">cmake</a></p>
+<pre><code class="hljs">  $ cmake -DPYTHON_LIBRARY=`python-config --prefix`/lib/libpython2.7.dylib -DPYTHON_INCLUDE_DIR=`python-config --prefix`/include/python2.7/ ..
+</code></pre>
+<p>If installed PySINGA from binary packages, e.g. debian or wheel, then you need
+to change the python interpreter, e.g., reset the $PATH to put the correct
+path of Python at the front position.</p></li>
+</ul>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/download-singa"><span class="arrow-prev">← </span><span>Download SINGA</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/contribute-code"><span>How to Contribute Code</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#use-conda-to-build- [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/contribute-code.html b/content/docs/3.0.0.rc1/contribute-code.html
new file mode 100644
index 0000000..75a05c9
--- /dev/null
+++ b/content/docs/3.0.0.rc1/contribute-code.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>How to Contribute Code · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding cop [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/contribute-code.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">How to Contribute Code</h1></header><article><div><span><!-- Licensed to the Apache Software Foundation (ASF) under one or more  [...]
+<h2><a class="anchor" aria-hidden="true" id="coding-style"></a><a href="#coding-style" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>The SINGA codebase follows the Google Style for both
+<a href="http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml">CPP</a> and
+<a href="http://google.github.io/styleguide/pyguide.html">Python</a> code.</p>
+<p>A simple way to enforce the Google coding styles is to use the linting and
+formating tools in the Visual Studio Code editor:</p>
+<ul>
+<li><a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools">C/C++ extension</a></li>
+<li><a href="https://marketplace.visualstudio.com/items?itemName=ms-python.python">Python extension</a></li>
+<li><a href="https://marketplace.visualstudio.com/items?itemName=mine.cpplint">cpplint extension</a></li>
+<li><a href="https://marketplace.visualstudio.com/items?itemName=xaver.clang-format">Clang-Format</a></li>
+</ul>
+<p>Once the extensions are installed, edit the <code>settings.json</code> file.</p>
+<pre><code class="hljs css language-json">{
+  <span class="hljs-attr">"[cpp]"</span>: {
+    <span class="hljs-attr">"editor.defaultFormatter"</span>: <span class="hljs-string">"xaver.clang-format"</span>
+  },
+  <span class="hljs-attr">"cpplint.cpplintPath"</span>: <span class="hljs-string">"path/to/cpplint"</span>,
+
+  <span class="hljs-attr">"editor.formatOnSave"</span>: <span class="hljs-literal">true</span>,
+  <span class="hljs-attr">"python.formatting.provider"</span>: <span class="hljs-string">"yapf"</span>,
+  <span class="hljs-attr">"python.linting.enabled"</span>: <span class="hljs-literal">true</span>,
+  <span class="hljs-attr">"python.linting.lintOnSave"</span>: <span class="hljs-literal">true</span>,
+  <span class="hljs-attr">"clang-format.language.cpp.style"</span>: <span class="hljs-string">"google"</span>,
+  <span class="hljs-attr">"python.formatting.yapfArgs"</span>: [<span class="hljs-string">"--style"</span>, <span class="hljs-string">"{based_on_style: google}"</span>]
+}
+</code></pre>
+<p>Depending on your platform, the user settings file is located here:</p>
+<ol>
+<li>Windows %APPDATA%\Code\User\settings.json</li>
+<li>macOS &quot;$HOME/Library/Application Support/Code/User/settings.json&quot;</li>
+<li>Linux &quot;$HOME/.config/Code/User/settings.json&quot;</li>
+</ol>
+<p>Configurations are specified in corresponding config files. And these tools
+would look up for configuration files in the root of the project automatically,
+e.g. <code>.pylintrc</code>.</p>
+<h4><a class="anchor" aria-hidden="true" id="tool-installation"></a><a href="#tool-installation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>It is ideal when all the contributors uses the same version of code formatting
+tool (clang-format 9.0.0 and yapf 0.29.0), so that all code formatting in
+different PRs would be identical to get rid of github pull request conflicts.</p>
+<p>First, install LLVM 9.0 which provides clang-format version 9.0.0. The download
+page of LLVM is:</p>
+<ul>
+<li><a href="http://releases.llvm.org/download.html#9.0.0">LLVM</a></li>
+</ul>
+<p>Second, install cpplint, pylint and yapf</p>
+<ul>
+<li><p>OSX:</p>
+<pre><code class="hljs"><span class="hljs-meta">$</span><span class="bash"> sudo pip install cpplint</span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">which</span> cpplint</span>
+/path/to/cpplint
+<span class="hljs-meta">
+$</span><span class="bash"> pip install yapf==0.29.0</span>
+<span class="hljs-meta">$</span><span class="bash"> pip install pylint</span>
+</code></pre></li>
+<li><p>Windows: Install Anaconda for package management.</p>
+<pre><code class="hljs">$ pip <span class="hljs-keyword">install</span> cpplint
+$ <span class="hljs-keyword">where</span> cpplint
+C:/<span class="hljs-keyword">path</span>/<span class="hljs-keyword">to</span>/cpplint.exe
+
+$ pip <span class="hljs-keyword">install</span> yapf==<span class="hljs-number">0.29</span><span class="hljs-number">.0</span>
+$ pip <span class="hljs-keyword">install</span> pylint
+</code></pre></li>
+</ul>
+<h4><a class="anchor" aria-hidden="true" id="usage"></a><a href="#usage" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
+<ul>
+<li>After the configuration, linting should be automatically applied when editing
+source code file. Errors and warnings are listed in Visual Studio Code
+<code>PROBLEMS</code> panel.</li>
+<li>Code Formatting could be done by bringing up Command Palette(<code>Shift+Ctrl+P</code> in
+Windows or <code>Shift+Command+P</code> in OSX) and type <code>Format Document</code>.</li>
+</ul>
+<h4><a class="anchor" aria-hidden="true" id="submission"></a><a href="#submission" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>You need to fix the format errors before submitting the pull requests.</p>
+<h2><a class="anchor" aria-hidden="true" id="developing-environment"></a><a href="#developing-environment" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<p>Visual Studio Code is recommended as the editor. Extensions like Python, C/C++,
+Code Spell Checker, autoDocstring, vim, Remote Development could be installed. A
+reference configuration (i.e., <code>settings.json</code>) of these extensions is
+<a href="https://gist.github.com/nudles/3d23cfb6ffb30ca7636c45fe60278c55">here</a>.</p>
+<p>If you update the CPP code, you need to recompile SINGA
+<a href="/docs/3.0.0.rc1/build">from source</a>. It is recommended to use the native building tools in
+the <code>*-devel</code> Docker images or <code>conda build</code>.</p>
+<p>If you only update the Python code, you can install SINGAS once, and then copy
+the updated Python files to replace those in the Python installation folder,</p>
+<pre><code class="hljs css language-shell">cp python/singa/xx.py  &lt;path to conda&gt;/lib/python3.7/site-packages/singa/
+</code></pre>
+<h2><a class="anchor" aria-hidden="true" id="workflow"></a><a href="#workflow" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>Please refer to the <a href="./git-workflow">git workflow page</a>.</p>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/build"><span class="arrow-prev">← </span><span>Build SINGA from Source</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/contribute-docs"><span>How to Contribute to Documentation</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#coding- [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/contribute-code/index.html b/content/docs/3.0.0.rc1/contribute-code/index.html
new file mode 100644
index 0000000..75a05c9
--- /dev/null
+++ b/content/docs/3.0.0.rc1/contribute-code/index.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>How to Contribute Code · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding cop [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/contribute-code.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">How to Contribute Code</h1></header><article><div><span><!-- Licensed to the Apache Software Foundation (ASF) under one or more  [...]
+<h2><a class="anchor" aria-hidden="true" id="coding-style"></a><a href="#coding-style" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>The SINGA codebase follows the Google Style for both
+<a href="http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml">CPP</a> and
+<a href="http://google.github.io/styleguide/pyguide.html">Python</a> code.</p>
+<p>A simple way to enforce the Google coding styles is to use the linting and
+formating tools in the Visual Studio Code editor:</p>
+<ul>
+<li><a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools">C/C++ extension</a></li>
+<li><a href="https://marketplace.visualstudio.com/items?itemName=ms-python.python">Python extension</a></li>
+<li><a href="https://marketplace.visualstudio.com/items?itemName=mine.cpplint">cpplint extension</a></li>
+<li><a href="https://marketplace.visualstudio.com/items?itemName=xaver.clang-format">Clang-Format</a></li>
+</ul>
+<p>Once the extensions are installed, edit the <code>settings.json</code> file.</p>
+<pre><code class="hljs css language-json">{
+  <span class="hljs-attr">"[cpp]"</span>: {
+    <span class="hljs-attr">"editor.defaultFormatter"</span>: <span class="hljs-string">"xaver.clang-format"</span>
+  },
+  <span class="hljs-attr">"cpplint.cpplintPath"</span>: <span class="hljs-string">"path/to/cpplint"</span>,
+
+  <span class="hljs-attr">"editor.formatOnSave"</span>: <span class="hljs-literal">true</span>,
+  <span class="hljs-attr">"python.formatting.provider"</span>: <span class="hljs-string">"yapf"</span>,
+  <span class="hljs-attr">"python.linting.enabled"</span>: <span class="hljs-literal">true</span>,
+  <span class="hljs-attr">"python.linting.lintOnSave"</span>: <span class="hljs-literal">true</span>,
+  <span class="hljs-attr">"clang-format.language.cpp.style"</span>: <span class="hljs-string">"google"</span>,
+  <span class="hljs-attr">"python.formatting.yapfArgs"</span>: [<span class="hljs-string">"--style"</span>, <span class="hljs-string">"{based_on_style: google}"</span>]
+}
+</code></pre>
+<p>Depending on your platform, the user settings file is located here:</p>
+<ol>
+<li>Windows %APPDATA%\Code\User\settings.json</li>
+<li>macOS &quot;$HOME/Library/Application Support/Code/User/settings.json&quot;</li>
+<li>Linux &quot;$HOME/.config/Code/User/settings.json&quot;</li>
+</ol>
+<p>Configurations are specified in corresponding config files. And these tools
+would look up for configuration files in the root of the project automatically,
+e.g. <code>.pylintrc</code>.</p>
+<h4><a class="anchor" aria-hidden="true" id="tool-installation"></a><a href="#tool-installation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>It is ideal when all the contributors uses the same version of code formatting
+tool (clang-format 9.0.0 and yapf 0.29.0), so that all code formatting in
+different PRs would be identical to get rid of github pull request conflicts.</p>
+<p>First, install LLVM 9.0 which provides clang-format version 9.0.0. The download
+page of LLVM is:</p>
+<ul>
+<li><a href="http://releases.llvm.org/download.html#9.0.0">LLVM</a></li>
+</ul>
+<p>Second, install cpplint, pylint and yapf</p>
+<ul>
+<li><p>OSX:</p>
+<pre><code class="hljs"><span class="hljs-meta">$</span><span class="bash"> sudo pip install cpplint</span>
+<span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">which</span> cpplint</span>
+/path/to/cpplint
+<span class="hljs-meta">
+$</span><span class="bash"> pip install yapf==0.29.0</span>
+<span class="hljs-meta">$</span><span class="bash"> pip install pylint</span>
+</code></pre></li>
+<li><p>Windows: Install Anaconda for package management.</p>
+<pre><code class="hljs">$ pip <span class="hljs-keyword">install</span> cpplint
+$ <span class="hljs-keyword">where</span> cpplint
+C:/<span class="hljs-keyword">path</span>/<span class="hljs-keyword">to</span>/cpplint.exe
+
+$ pip <span class="hljs-keyword">install</span> yapf==<span class="hljs-number">0.29</span><span class="hljs-number">.0</span>
+$ pip <span class="hljs-keyword">install</span> pylint
+</code></pre></li>
+</ul>
+<h4><a class="anchor" aria-hidden="true" id="usage"></a><a href="#usage" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
+<ul>
+<li>After the configuration, linting should be automatically applied when editing
+source code file. Errors and warnings are listed in Visual Studio Code
+<code>PROBLEMS</code> panel.</li>
+<li>Code Formatting could be done by bringing up Command Palette(<code>Shift+Ctrl+P</code> in
+Windows or <code>Shift+Command+P</code> in OSX) and type <code>Format Document</code>.</li>
+</ul>
+<h4><a class="anchor" aria-hidden="true" id="submission"></a><a href="#submission" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>You need to fix the format errors before submitting the pull requests.</p>
+<h2><a class="anchor" aria-hidden="true" id="developing-environment"></a><a href="#developing-environment" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<p>Visual Studio Code is recommended as the editor. Extensions like Python, C/C++,
+Code Spell Checker, autoDocstring, vim, Remote Development could be installed. A
+reference configuration (i.e., <code>settings.json</code>) of these extensions is
+<a href="https://gist.github.com/nudles/3d23cfb6ffb30ca7636c45fe60278c55">here</a>.</p>
+<p>If you update the CPP code, you need to recompile SINGA
+<a href="/docs/3.0.0.rc1/build">from source</a>. It is recommended to use the native building tools in
+the <code>*-devel</code> Docker images or <code>conda build</code>.</p>
+<p>If you only update the Python code, you can install SINGAS once, and then copy
+the updated Python files to replace those in the Python installation folder,</p>
+<pre><code class="hljs css language-shell">cp python/singa/xx.py  &lt;path to conda&gt;/lib/python3.7/site-packages/singa/
+</code></pre>
+<h2><a class="anchor" aria-hidden="true" id="workflow"></a><a href="#workflow" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>Please refer to the <a href="./git-workflow">git workflow page</a>.</p>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/build"><span class="arrow-prev">← </span><span>Build SINGA from Source</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/contribute-docs"><span>How to Contribute to Documentation</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#coding- [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/contribute-docs.html b/content/docs/3.0.0.rc1/contribute-docs.html
new file mode 100644
index 0000000..6002e49
--- /dev/null
+++ b/content/docs/3.0.0.rc1/contribute-docs.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>How to Contribute to Documentation · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information r [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/contribute-docs.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">How to Contribute to Documentation</h1></header><article><div><span><!-- Licensed to the Apache Software Foundation (ASF) under  [...]
+<p>There are two types of documentation, namely markdown files and API usage
+reference. This guideline introduces some tools and instruction in preparing the
+source markdown files and API comments.</p>
+<p>The markdown files will be built into HTML pages via
+<a href="https://docusaurus.io/">Docusaurus</a>; The API comments (from the source code)
+will be used to generate API reference pages using Sphinx (for Python) and
+Doxygen (for CPP).</p>
+<h2><a class="anchor" aria-hidden="true" id="markdown-files"></a><a href="#markdown-files" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>Try to follow the
+<a href="https://developers.google.com/style">Google Documentation style</a>. For example,</p>
+<ol>
+<li>Remove 'please' from an instruction. 'Please click...' VS 'Click ...'.</li>
+<li>Follow the
+<a href="https://owl.purdue.edu/owl/general_writing/mechanics/help_with_capitals.html">standard captitalization rules</a>.</li>
+<li>Use 'you' instead of 'we' in the instructions.</li>
+<li>Use present tense and avoid 'will'</li>
+<li>Prefer active voice than passive voice.</li>
+</ol>
+<p>In addition, to make the documentation consistent,</p>
+<ol>
+<li>Keep the line short, e.g., length&lt;=80</li>
+<li>Use the relative path assuming that we are in the root folder of the repo,
+e.g., <code>doc-site/docs</code> refers to <code>singa-doc/docs-site/docs</code></li>
+<li>Higlight the command, path, class function and variable using backticks,
+e.g., <code>Tensor</code>, <code>singa-doc/docs-site/docs</code>.</li>
+<li>To hightlight other terms/concepts, use <em>graph</em> or <strong>graph</strong></li>
+</ol>
+<p>The <a href="https://prettier.io/">prettier tool</a> used by this project will auto-format
+the code according to the
+<a href="https://github.com/apache/singa-doc/blob/master/docs-site/.prettierrc">configuration</a>
+when we do <code>git commit</code>. For example, it will wrap the text in the markdown file
+to at most 80 characters (except the lines for comments).</p>
+<p>When introducing a concept (e.g., the <code>Tensor</code> class), provide the overview (the
+purpose and relation to other concepts), APIs and examples. Google colab can be
+used to demonstrate the usage.</p>
+<p>Refer to <a href="https://github.com/apache/singa-doc/tree/master/docs-site">this page</a>
+for the details on how to edit the markdown files and build the website.</p>
+<h2><a class="anchor" aria-hidden="true" id="api-references"></a><a href="#api-references" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h3><a class="anchor" aria-hidden="true" id="cpp-api"></a><a href="#cpp-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>Follow the
+<a href="https://google.github.io/styleguide/cppguide.html#Comments">Google CPP Comments Style</a>.</p>
+<p>To generate docs, run &quot;doxygen&quot; from the doc folder (Doxygen &gt;= 1.8 recommended)</p>
+<h3><a class="anchor" aria-hidden="true" id="python-api"></a><a href="#python-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>Follow the
+<a href="http://google.github.io/styleguide/pyguide.html#38-comments-and-docstrings">Google Python DocString Style</a>.</p>
+<h2><a class="anchor" aria-hidden="true" id="visual-studio-code-vscode"></a><a href="#visual-studio-code-vscode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
+<p>If you use vscode as the editor, the following plugins are useful.</p>
+<h3><a class="anchor" aria-hidden="true" id="docstring-snippet"></a><a href="#docstring-snippet" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p><a href="https://marketplace.visualstudio.com/items?itemName=njpwerner.autodocstring">autoDocstring</a>
+generates the docstring of functions, classes, etc. Choose the DocString Format
+to <code>google</code>.</p>
+<h3><a class="anchor" aria-hidden="true" id="spell-check"></a><a href="#spell-check" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
+<p><a href="https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker">Code Spell Checker</a>
+can be configured to check the comments of the code, or .md and .rst files.</p>
+<p>To do spell check only for comments of Python code, add the following snippet
+via <code>File - Preferences - User Snippets - python.json</code></p>
+<pre><code class="hljs">&quot;cspell check&quot; : {
+&quot;prefix&quot;: &quot;cspell&quot;,
+&quot;body&quot;: [
+    &quot;# Directives for doing spell check only for python and c/cpp comments&quot;,
+    &quot;# cSpell:includeRegExp #.* &quot;,
+    &quot;# cSpell:includeRegExp (\&quot;\&quot;\&quot;|''')[^\1]*\1&quot;,
+    &quot;# cSpell: CStyleComment&quot;,
+],
+&quot;description&quot;: &quot;# spell check only for python comments&quot;
+}
+</code></pre>
+<p>To do spell check only for comments of Cpp code, add the following snippet via
+<code>File - Preferences - User Snippets - cpp.json</code></p>
+<pre><code class="hljs">&quot;cspell check&quot; : {
+&quot;prefix&quot;: &quot;cspell&quot;,
+&quot;body&quot;: [
+    &quot;// Directive for doing spell check only for cpp comments&quot;,
+    &quot;// cSpell:includeRegExp CStyleComment&quot;,
+],
+&quot;description&quot;: &quot;# spell check only for cpp comments&quot;
+}
+</code></pre>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/contribute-code"><span class="arrow-prev">← </span><span>How to Contribute Code</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/how-to-release"><span>How to Prepare a Release</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#markdown- [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/contribute-docs/index.html b/content/docs/3.0.0.rc1/contribute-docs/index.html
new file mode 100644
index 0000000..6002e49
--- /dev/null
+++ b/content/docs/3.0.0.rc1/contribute-docs/index.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>How to Contribute to Documentation · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information r [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/contribute-docs.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">How to Contribute to Documentation</h1></header><article><div><span><!-- Licensed to the Apache Software Foundation (ASF) under  [...]
+<p>There are two types of documentation, namely markdown files and API usage
+reference. This guideline introduces some tools and instruction in preparing the
+source markdown files and API comments.</p>
+<p>The markdown files will be built into HTML pages via
+<a href="https://docusaurus.io/">Docusaurus</a>; The API comments (from the source code)
+will be used to generate API reference pages using Sphinx (for Python) and
+Doxygen (for CPP).</p>
+<h2><a class="anchor" aria-hidden="true" id="markdown-files"></a><a href="#markdown-files" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>Try to follow the
+<a href="https://developers.google.com/style">Google Documentation style</a>. For example,</p>
+<ol>
+<li>Remove 'please' from an instruction. 'Please click...' VS 'Click ...'.</li>
+<li>Follow the
+<a href="https://owl.purdue.edu/owl/general_writing/mechanics/help_with_capitals.html">standard captitalization rules</a>.</li>
+<li>Use 'you' instead of 'we' in the instructions.</li>
+<li>Use present tense and avoid 'will'</li>
+<li>Prefer active voice than passive voice.</li>
+</ol>
+<p>In addition, to make the documentation consistent,</p>
+<ol>
+<li>Keep the line short, e.g., length&lt;=80</li>
+<li>Use the relative path assuming that we are in the root folder of the repo,
+e.g., <code>doc-site/docs</code> refers to <code>singa-doc/docs-site/docs</code></li>
+<li>Higlight the command, path, class function and variable using backticks,
+e.g., <code>Tensor</code>, <code>singa-doc/docs-site/docs</code>.</li>
+<li>To hightlight other terms/concepts, use <em>graph</em> or <strong>graph</strong></li>
+</ol>
+<p>The <a href="https://prettier.io/">prettier tool</a> used by this project will auto-format
+the code according to the
+<a href="https://github.com/apache/singa-doc/blob/master/docs-site/.prettierrc">configuration</a>
+when we do <code>git commit</code>. For example, it will wrap the text in the markdown file
+to at most 80 characters (except the lines for comments).</p>
+<p>When introducing a concept (e.g., the <code>Tensor</code> class), provide the overview (the
+purpose and relation to other concepts), APIs and examples. Google colab can be
+used to demonstrate the usage.</p>
+<p>Refer to <a href="https://github.com/apache/singa-doc/tree/master/docs-site">this page</a>
+for the details on how to edit the markdown files and build the website.</p>
+<h2><a class="anchor" aria-hidden="true" id="api-references"></a><a href="#api-references" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h3><a class="anchor" aria-hidden="true" id="cpp-api"></a><a href="#cpp-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>Follow the
+<a href="https://google.github.io/styleguide/cppguide.html#Comments">Google CPP Comments Style</a>.</p>
+<p>To generate docs, run &quot;doxygen&quot; from the doc folder (Doxygen &gt;= 1.8 recommended)</p>
+<h3><a class="anchor" aria-hidden="true" id="python-api"></a><a href="#python-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>Follow the
+<a href="http://google.github.io/styleguide/pyguide.html#38-comments-and-docstrings">Google Python DocString Style</a>.</p>
+<h2><a class="anchor" aria-hidden="true" id="visual-studio-code-vscode"></a><a href="#visual-studio-code-vscode" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
+<p>If you use vscode as the editor, the following plugins are useful.</p>
+<h3><a class="anchor" aria-hidden="true" id="docstring-snippet"></a><a href="#docstring-snippet" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p><a href="https://marketplace.visualstudio.com/items?itemName=njpwerner.autodocstring">autoDocstring</a>
+generates the docstring of functions, classes, etc. Choose the DocString Format
+to <code>google</code>.</p>
+<h3><a class="anchor" aria-hidden="true" id="spell-check"></a><a href="#spell-check" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
+<p><a href="https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker">Code Spell Checker</a>
+can be configured to check the comments of the code, or .md and .rst files.</p>
+<p>To do spell check only for comments of Python code, add the following snippet
+via <code>File - Preferences - User Snippets - python.json</code></p>
+<pre><code class="hljs">&quot;cspell check&quot; : {
+&quot;prefix&quot;: &quot;cspell&quot;,
+&quot;body&quot;: [
+    &quot;# Directives for doing spell check only for python and c/cpp comments&quot;,
+    &quot;# cSpell:includeRegExp #.* &quot;,
+    &quot;# cSpell:includeRegExp (\&quot;\&quot;\&quot;|''')[^\1]*\1&quot;,
+    &quot;# cSpell: CStyleComment&quot;,
+],
+&quot;description&quot;: &quot;# spell check only for python comments&quot;
+}
+</code></pre>
+<p>To do spell check only for comments of Cpp code, add the following snippet via
+<code>File - Preferences - User Snippets - cpp.json</code></p>
+<pre><code class="hljs">&quot;cspell check&quot; : {
+&quot;prefix&quot;: &quot;cspell&quot;,
+&quot;body&quot;: [
+    &quot;// Directive for doing spell check only for cpp comments&quot;,
+    &quot;// cSpell:includeRegExp CStyleComment&quot;,
+],
+&quot;description&quot;: &quot;# spell check only for cpp comments&quot;
+}
+</code></pre>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/contribute-code"><span class="arrow-prev">← </span><span>How to Contribute Code</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/how-to-release"><span>How to Prepare a Release</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#markdown- [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/device.html b/content/docs/3.0.0.rc1/device.html
new file mode 100644
index 0000000..9250cc5
--- /dev/null
+++ b/content/docs/3.0.0.rc1/device.html
@@ -0,0 +1,109 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Device · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright ownershi [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/device.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Device</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agre [...]
+<p>The Device abstract represents a hardware device with memory and computing
+units. All <a href="./tensor">Tensor operations</a> are scheduled by the resident device
+for execution. Tensor memory is also managed by the device's memory manager.
+Therefore, optimization of memory and execution are implemented in the Device
+class.</p>
+<h2><a class="anchor" aria-hidden="true" id="specific-devices"></a><a href="#specific-devices" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<p>Currently, SINGA has three Device implmentations,</p>
+<ol>
+<li>CudaGPU for an Nvidia GPU card which runs Cuda code</li>
+<li>CppCPU for a CPU which runs Cpp code</li>
+<li>OpenclGPU for a GPU card which runs OpenCL code</li>
+</ol>
+<h2><a class="anchor" aria-hidden="true" id="example-usage"></a><a href="#example-usage" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The following code provides examples of creating devices:</p>
+<pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> singa <span class="hljs-keyword">import</span> device
+cuda = device.create_cuda_gpu_on(<span class="hljs-number">0</span>)  <span class="hljs-comment"># use GPU card of ID 0</span>
+host = device.get_default_device()  <span class="hljs-comment"># get the default host device (a CppCPU)</span>
+ary1 = device.create_cuda_gpus(<span class="hljs-number">2</span>)  <span class="hljs-comment"># create 2 devices, starting from ID 0</span>
+ary2 = device.create_cuda_gpus([<span class="hljs-number">0</span>,<span class="hljs-number">2</span>])  <span class="hljs-comment"># create 2 devices on ID 0 and 2</span>
+</code></pre>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/9/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/examples"><span class="arrow-prev">← </span><span>Examples</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/tensor"><span>Tensor</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#specific-devices">Specific devices</a></li><li><a href=" [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/device/index.html b/content/docs/3.0.0.rc1/device/index.html
new file mode 100644
index 0000000..9250cc5
--- /dev/null
+++ b/content/docs/3.0.0.rc1/device/index.html
@@ -0,0 +1,109 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Device · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright ownershi [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/device.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Device</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agre [...]
+<p>The Device abstract represents a hardware device with memory and computing
+units. All <a href="./tensor">Tensor operations</a> are scheduled by the resident device
+for execution. Tensor memory is also managed by the device's memory manager.
+Therefore, optimization of memory and execution are implemented in the Device
+class.</p>
+<h2><a class="anchor" aria-hidden="true" id="specific-devices"></a><a href="#specific-devices" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<p>Currently, SINGA has three Device implmentations,</p>
+<ol>
+<li>CudaGPU for an Nvidia GPU card which runs Cuda code</li>
+<li>CppCPU for a CPU which runs Cpp code</li>
+<li>OpenclGPU for a GPU card which runs OpenCL code</li>
+</ol>
+<h2><a class="anchor" aria-hidden="true" id="example-usage"></a><a href="#example-usage" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The following code provides examples of creating devices:</p>
+<pre><code class="hljs css language-python"><span class="hljs-keyword">from</span> singa <span class="hljs-keyword">import</span> device
+cuda = device.create_cuda_gpu_on(<span class="hljs-number">0</span>)  <span class="hljs-comment"># use GPU card of ID 0</span>
+host = device.get_default_device()  <span class="hljs-comment"># get the default host device (a CppCPU)</span>
+ary1 = device.create_cuda_gpus(<span class="hljs-number">2</span>)  <span class="hljs-comment"># create 2 devices, starting from ID 0</span>
+ary2 = device.create_cuda_gpus([<span class="hljs-number">0</span>,<span class="hljs-number">2</span>])  <span class="hljs-comment"># create 2 devices on ID 0 and 2</span>
+</code></pre>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/9/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/examples"><span class="arrow-prev">← </span><span>Examples</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/tensor"><span>Tensor</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#specific-devices">Specific devices</a></li><li><a href=" [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/dist-train.html b/content/docs/3.0.0.rc1/dist-train.html
new file mode 100644
index 0000000..dcf468c
--- /dev/null
+++ b/content/docs/3.0.0.rc1/dist-train.html
@@ -0,0 +1,425 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Distributed Training · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copy [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/dist-train.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Distributed Training</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contri [...]
+<p>SINGA supports data parallel training across multiple GPUs (on a single node or
+across different nodes). The following figure illustrates the data parallel
+training:</p>
+<p><img src="/docs/assets/MPI.png" alt="MPI.png"></p>
+<p>In distributed training, each process (called a worker) runs a training script
+over a single GPU. Each process has an individual communication rank. The
+training data is partitioned among the workers and the model is replicated on
+every worker. In each iteration, the workers read a mini-batch of data (e.g.,
+256 images) from its partition and run the BackPropagation algorithm to compute
+the gradients of the weights, which are averaged via all-reduce (provided by
+<a href="https://developer.nvidia.com/nccl">NCCL</a>) for weight update following
+stochastic gradient descent algorithms (SGD).</p>
+<p>The all-reduce operation by NCCL can be used to reduce and synchronize the
+gradients from different GPUs. Let's consider the training with 4 GPUs as shown
+below. Once the gradients from the 4 GPUs are calculated, all-reduce will return
+the sum of the gradients over the GPUs and make it available on every GPU. Then
+the averaged gradients can be easily calculated.</p>
+<p><img src="/docs/assets/AllReduce.png" alt="AllReduce.png"></p>
+<h2><a class="anchor" aria-hidden="true" id="usage"></a><a href="#usage" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
+<p>SINGA implements a module called <code>DistOpt</code> (a subclass of <code>Opt</code>) for distributed
+training. It wraps a normal SGD optimizer and calls <code>Communicator</code> for gradients
+synchronization. The following example illustrates the usage of <code>DistOpt</code> for
+training a CNN model over the MNIST dataset. The source code is available
+<a href="https://github.com/apache/singa/blob/master/examples/cnn/">here</a>, and there is
+a <a href="">Colab notebook</a> for it.</p>
+<h3><a class="anchor" aria-hidden="true" id="example-code"></a><a href="#example-code" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<ol>
+<li>Define the neural network model:</li>
+</ol>
+<pre><code class="hljs css language-python"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">CNN</span>:</span>
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(self)</span>:</span>
+        self.conv1 = autograd.Conv2d(<span class="hljs-number">1</span>, <span class="hljs-number">20</span>, <span class="hljs-number">5</span>, padding=<span class="hljs-number">0</span>)
+        self.conv2 = autograd.Conv2d(<span class="hljs-number">20</span>, <span class="hljs-number">50</span>, <span class="hljs-number">5</span>, padding=<span class="hljs-number">0</span>)
+        self.linear1 = autograd.Linear(<span class="hljs-number">4</span> * <span class="hljs-number">4</span> * <span class="hljs-number">50</span>, <span class="hljs-number">500</span>)
+        self.linear2 = autograd.Linear(<span class="hljs-number">500</span>, <span class="hljs-number">10</span>)
+        self.pooling1 = autograd.MaxPool2d(<span class="hljs-number">2</span>, <span class="hljs-number">2</span>, padding=<span class="hljs-number">0</span>)
+        self.pooling2 = autograd.MaxPool2d(<span class="hljs-number">2</span>, <span class="hljs-number">2</span>, padding=<span class="hljs-number">0</span>)
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">forward</span><span class="hljs-params">(self, x)</span>:</span>
+        y = self.conv1(x)
+        y = autograd.relu(y)
+        y = self.pooling1(y)
+        y = self.conv2(y)
+        y = autograd.relu(y)
+        y = self.pooling2(y)
+        y = autograd.flatten(y)
+        y = self.linear1(y)
+        y = autograd.relu(y)
+        y = self.linear2(y)
+        <span class="hljs-keyword">return</span> y
+
+<span class="hljs-comment"># create model</span>
+model = CNN()
+</code></pre>
+<ol start="2">
+<li>Create the <code>DistOpt</code> instance:</li>
+</ol>
+<pre><code class="hljs css language-python">sgd = opt.SGD(lr=<span class="hljs-number">0.005</span>, momentum=<span class="hljs-number">0.9</span>, weight_decay=<span class="hljs-number">1e-5</span>)
+sgd = opt.DistOpt(sgd)
+dev = device.create_cuda_gpu_on(sgd.local_rank)
+</code></pre>
+<p>Here are some explanations concerning some variables in the code:</p>
+<p>(i) <code>dev</code></p>
+<p>dev represents the <code>Device</code> instance, where to load data and run the CNN model.</p>
+<p>(ii)<code>local_rank</code></p>
+<p>Local rank represents the GPU number the current process is using in the same
+node. For example, if you are using a node with 2 GPUs, <code>local_rank=0</code> means
+that this process is using the first GPU, while <code>local_rank=1</code> means using the
+second GPU. Using MPI or multiprocess, you are able to run the same training
+script which is only different in the value of <code>local_rank</code>.</p>
+<p>(iii)<code>global_rank</code></p>
+<p>Rank in global represents the global rank considered all the processes in all
+the nodes you are using. Let's consider the case you have 3 nodes and each of
+the node has two GPUs, <code>global_rank=0</code> means the process using the 1st GPU at
+the 1st node, <code>global_rank=2</code> means the process using the 1st GPU of the 2nd
+node, and <code>global_rank=4</code> means the process using the 1st GPU of the 3rd node.</p>
+<ol start="3">
+<li>Load and partition the training/validation data:</li>
+</ol>
+<pre><code class="hljs css language-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">data_partition</span><span class="hljs-params">(dataset_x, dataset_y, global_rank, world_size)</span>:</span>
+    data_per_rank = dataset_x.shape[<span class="hljs-number">0</span>] // world_size
+    idx_start = global_rank * data_per_rank
+    idx_end = (global_rank + <span class="hljs-number">1</span>) * data_per_rank
+    <span class="hljs-keyword">return</span> dataset_x[idx_start:idx_end], dataset_y[idx_start:idx_end]
+
+train_x, train_y, test_x, test_y = load_dataset()
+train_x, train_y = data_partition(train_x, train_y,
+                                  sgd.global_rank, sgd.world_size)
+test_x, test_y = data_partition(test_x, test_y,
+                                sgd.global_rank, sgd.world_size)
+</code></pre>
+<p>A partition of the dataset is returned for this <code>dev</code>.</p>
+<ol start="4">
+<li>Initialize and synchronize the model parameters among all workers:</li>
+</ol>
+<pre><code class="hljs css language-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">synchronize</span><span class="hljs-params">(tensor, dist_opt)</span>:</span>
+    dist_opt.all_reduce(tensor.data)
+    tensor /= dist_opt.world_size
+
+<span class="hljs-comment">#Synchronize the initial parameter</span>
+tx = tensor.Tensor((batch_size, <span class="hljs-number">1</span>, IMG_SIZE, IMG_SIZE), dev, tensor.float32)
+ty = tensor.Tensor((batch_size, num_classes), dev, tensor.int32)
+...
+out = model.forward(tx)
+loss = autograd.softmax_cross_entropy(out, ty)
+<span class="hljs-keyword">for</span> p, g <span class="hljs-keyword">in</span> autograd.backward(loss):
+    synchronize(p, sgd)
+</code></pre>
+<p>Here, <code>world_size</code> represents the total number of processes in all the nodes you
+are using for distributed training.</p>
+<ol start="5">
+<li>Run BackPropagation and distributed SGD</li>
+</ol>
+<pre><code class="hljs css language-python"><span class="hljs-keyword">for</span> epoch <span class="hljs-keyword">in</span> range(max_epoch):
+    <span class="hljs-keyword">for</span> b <span class="hljs-keyword">in</span> range(num_train_batch):
+        x = train_x[idx[b * batch_size: (b + <span class="hljs-number">1</span>) * batch_size]]
+        y = train_y[idx[b * batch_size: (b + <span class="hljs-number">1</span>) * batch_size]]
+        tx.copy_from_numpy(x)
+        ty.copy_from_numpy(y)
+        out = model.forward(tx)
+        loss = autograd.softmax_cross_entropy(out, ty)
+        <span class="hljs-comment"># do backpropagation and all-reduce</span>
+        sgd.backward_and_update(loss)
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="execution-instruction"></a><a href="#execution-instruction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
+<p>There are two ways to launch the training: MPI or Python multiprocessing.</p>
+<h4><a class="anchor" aria-hidden="true" id="python-multiprocessing"></a><a href="#python-multiprocessing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<p>It works on a single node with multiple GPUs, where each GPU is one worker.</p>
+<ol>
+<li>Put all the above training codes in a function</li>
+</ol>
+<pre><code class="hljs css language-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">train_mnist_cnn</span><span class="hljs-params">(nccl_id=None, local_rank=None, world_size=None)</span>:</span>
+    ...
+</code></pre>
+<ol start="2">
+<li>Create <code>mnist_multiprocess.py</code></li>
+</ol>
+<pre><code class="hljs css language-python"><span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">'__main__'</span>:
+    <span class="hljs-comment"># Generate a NCCL ID to be used for collective communication</span>
+    nccl_id = singa.NcclIdHolder()
+
+    <span class="hljs-comment"># Define the number of GPUs to be used in the training process</span>
+    world_size = int(sys.argv[<span class="hljs-number">1</span>])
+
+    <span class="hljs-comment"># Define and launch the multi-processing</span>
+    <span class="hljs-keyword">import</span> multiprocessing
+    process = []
+    <span class="hljs-keyword">for</span> local_rank <span class="hljs-keyword">in</span> range(<span class="hljs-number">0</span>, world_size):
+        process.append(multiprocessing.Process(target=train_mnist_cnn,
+                       args=(nccl_id, local_rank, world_size)))
+
+    <span class="hljs-keyword">for</span> p <span class="hljs-keyword">in</span> process:
+        p.start()
+</code></pre>
+<p>Here are some explanations concerning the variables created above:</p>
+<p>(i) <code>nccl_id</code></p>
+<p>Note that we need to generate a NCCL ID here to be used for collective
+communication, and then pass it to all the processes. The NCCL ID is like a
+ticket, where only the processes with this ID can join the all-reduce operation.
+(Later if we use MPI, the passing of NCCL ID is not necessary, because the ID is
+broadcased by MPI in our code automatically)</p>
+<p>(ii) <code>world_size</code></p>
+<p>world_size is the number of GPUs you would like to use for training.</p>
+<p>(iii) <code>local_rank</code></p>
+<p>local_rank determine the local rank of the distributed training and which gpu is
+used in the process. In the code above, we used a for loop to run the train
+function where the argument local_rank iterates from 0 to world_size. In this
+case, different processes can use different GPUs for training.</p>
+<p>The arguments for creating the <code>DistOpt</code> instance should be updated as follows</p>
+<pre><code class="hljs css language-python">sgd = opt.DistOpt(sgd, nccl_id=nccl_id, local_rank=local_rank, world_size=world_size)
+</code></pre>
+<ol start="3">
+<li>Run <code>mnist_multiprocess.py</code></li>
+</ol>
+<pre><code class="hljs css language-sh">python mnist_multiprocess.py 2
+</code></pre>
+<p>It results in speed up compared to the single GPU training.</p>
+<pre><code class="hljs">Starting Epoch <span class="hljs-number">0</span>:
+Training loss = <span class="hljs-number">408.909790</span>, training accuracy = <span class="hljs-number">0.880475</span>
+Evaluation accuracy = <span class="hljs-number">0.956430</span>
+Starting Epoch <span class="hljs-number">1</span>:
+Training loss = <span class="hljs-number">102.396790</span>, training accuracy = <span class="hljs-number">0.967415</span>
+Evaluation accuracy = <span class="hljs-number">0.977564</span>
+Starting Epoch <span class="hljs-number">2</span>:
+Training loss = <span class="hljs-number">69.217010</span>, training accuracy = <span class="hljs-number">0.977915</span>
+Evaluation accuracy = <span class="hljs-number">0.981370</span>
+Starting Epoch <span class="hljs-number">3</span>:
+Training loss = <span class="hljs-number">54.248390</span>, training accuracy = <span class="hljs-number">0.982823</span>
+Evaluation accuracy = <span class="hljs-number">0.984075</span>
+Starting Epoch <span class="hljs-number">4</span>:
+Training loss = <span class="hljs-number">45.213406</span>, training accuracy = <span class="hljs-number">0.985560</span>
+Evaluation accuracy = <span class="hljs-number">0.985276</span>
+Starting Epoch <span class="hljs-number">5</span>:
+Training loss = <span class="hljs-number">38.868435</span>, training accuracy = <span class="hljs-number">0.987764</span>
+Evaluation accuracy = <span class="hljs-number">0.986278</span>
+Starting Epoch <span class="hljs-number">6</span>:
+Training loss = <span class="hljs-number">34.078186</span>, training accuracy = <span class="hljs-number">0.989149</span>
+Evaluation accuracy = <span class="hljs-number">0.987881</span>
+Starting Epoch <span class="hljs-number">7</span>:
+Training loss = <span class="hljs-number">30.138697</span>, training accuracy = <span class="hljs-number">0.990451</span>
+Evaluation accuracy = <span class="hljs-number">0.988181</span>
+Starting Epoch <span class="hljs-number">8</span>:
+Training loss = <span class="hljs-number">26.854443</span>, training accuracy = <span class="hljs-number">0.991520</span>
+Evaluation accuracy = <span class="hljs-number">0.988682</span>
+Starting Epoch <span class="hljs-number">9</span>:
+Training loss = <span class="hljs-number">24.039650</span>, training accuracy = <span class="hljs-number">0.992405</span>
+Evaluation accuracy = <span class="hljs-number">0.989083</span>
+</code></pre>
+<h4><a class="anchor" aria-hidden="true" id="mpi"></a><a href="#mpi" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
+<p>It works for both single node and multiple nodes as long as there are multiple
+GPUs.</p>
+<ol>
+<li>Create <code>mnist_dist.py</code></li>
+</ol>
+<pre><code class="hljs css language-python"><span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">'__main__'</span>:
+    train_mnist_cnn()
+</code></pre>
+<ol start="2">
+<li>Generate a hostfile for MPI, e.g. the hostfile below uses 2 processes (i.e.,
+2 GPUs) on a single node</li>
+</ol>
+<pre><code class="hljs css language-txt">localhost:<span class="hljs-number">2</span>
+</code></pre>
+<ol start="3">
+<li>Launch the training via <code>mpiexec</code></li>
+</ol>
+<pre><code class="hljs css language-sh">mpiexec --hostfile host_file python mnist_dist.py
+</code></pre>
+<p>It could result in speed up compared to the single GPU training.</p>
+<pre><code class="hljs">Starting Epoch <span class="hljs-number">0</span>:
+Training loss = <span class="hljs-number">383.969543</span>, training accuracy = <span class="hljs-number">0.886402</span>
+Evaluation accuracy = <span class="hljs-number">0.954327</span>
+Starting Epoch <span class="hljs-number">1</span>:
+Training loss = <span class="hljs-number">97.531479</span>, training accuracy = <span class="hljs-number">0.969451</span>
+Evaluation accuracy = <span class="hljs-number">0.977163</span>
+Starting Epoch <span class="hljs-number">2</span>:
+Training loss = <span class="hljs-number">67.166870</span>, training accuracy = <span class="hljs-number">0.978516</span>
+Evaluation accuracy = <span class="hljs-number">0.980769</span>
+Starting Epoch <span class="hljs-number">3</span>:
+Training loss = <span class="hljs-number">53.369656</span>, training accuracy = <span class="hljs-number">0.983040</span>
+Evaluation accuracy = <span class="hljs-number">0.983974</span>
+Starting Epoch <span class="hljs-number">4</span>:
+Training loss = <span class="hljs-number">45.100403</span>, training accuracy = <span class="hljs-number">0.985777</span>
+Evaluation accuracy = <span class="hljs-number">0.986078</span>
+Starting Epoch <span class="hljs-number">5</span>:
+Training loss = <span class="hljs-number">39.330826</span>, training accuracy = <span class="hljs-number">0.987447</span>
+Evaluation accuracy = <span class="hljs-number">0.987179</span>
+Starting Epoch <span class="hljs-number">6</span>:
+Training loss = <span class="hljs-number">34.655270</span>, training accuracy = <span class="hljs-number">0.988799</span>
+Evaluation accuracy = <span class="hljs-number">0.987780</span>
+Starting Epoch <span class="hljs-number">7</span>:
+Training loss = <span class="hljs-number">30.749735</span>, training accuracy = <span class="hljs-number">0.989984</span>
+Evaluation accuracy = <span class="hljs-number">0.988281</span>
+Starting Epoch <span class="hljs-number">8</span>:
+Training loss = <span class="hljs-number">27.422146</span>, training accuracy = <span class="hljs-number">0.991319</span>
+Evaluation accuracy = <span class="hljs-number">0.988582</span>
+Starting Epoch <span class="hljs-number">9</span>:
+Training loss = <span class="hljs-number">24.548153</span>, training accuracy = <span class="hljs-number">0.992171</span>
+Evaluation accuracy = <span class="hljs-number">0.988682</span>
+</code></pre>
+<h2><a class="anchor" aria-hidden="true" id="optimizations-for-distributed-training"></a><a href="#optimizations-for-distributed-training" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1. [...]
+<p>SINGA provides multiple optimization strategies for distributed training to
+reduce the communication cost. Refer to the API for <code>DistOpt</code> for the
+configuration of each strategy.</p>
+<h3><a class="anchor" aria-hidden="true" id="no-optimizations"></a><a href="#no-optimizations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-python">sgd.backward_and_update(loss)
+</code></pre>
+<p><code>loss</code> is the output tensor from the loss function, e.g., cross-entropy for
+classification tasks.</p>
+<h3><a class="anchor" aria-hidden="true" id="half-precision-gradients"></a><a href="#half-precision-gradients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<pre><code class="hljs css language-python">sgd.backward_and_update_half(loss)
+</code></pre>
+<p>It converts each gradient value to 16-bit representation (i.e., half-precision)
+before calling all-reduce.</p>
+<h3><a class="anchor" aria-hidden="true" id="partial-synchronization"></a><a href="#partial-synchronization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<pre><code class="hljs css language-python">sgd.backward_and_partial_update(loss)
+</code></pre>
+<p>In each iteration, every rank do the local sgd update. Then, only a chunk of
+parameters are averaged for synchronization, which saves the communication cost.
+The chunk size is configured when creating the <code>DistOpt</code> instance.</p>
+<h3><a class="anchor" aria-hidden="true" id="gradient-sparsification"></a><a href="#gradient-sparsification" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<pre><code class="hljs css language-python">sgd.backward_and_sparse_update(loss)
+</code></pre>
+<p>It applies sparsification schemes to select a subset of gradients for
+all-reduce. There are two scheme:</p>
+<ul>
+<li>The top-K largest elements are selected. spars is the portion (0 - 1) of total
+elements selected.</li>
+</ul>
+<pre><code class="hljs css language-python">sgd.backward_and_sparse_update(loss = loss, spars = spars, topK = <span class="hljs-literal">True</span>)
+</code></pre>
+<ul>
+<li>All gradients whose absolute value are larger than predefined threshold spars
+are selected.</li>
+</ul>
+<pre><code class="hljs css language-python">sgd.backward_and_sparse_update(loss = loss, spars = spars, topK = <span class="hljs-literal">False</span>)
+</code></pre>
+<p>The hyper-parameters are configured when creating the <code>DistOpt</code> instance.</p>
+<h2><a class="anchor" aria-hidden="true" id="implementation"></a><a href="#implementation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>This section is mainly for developers who want to know how the code in
+distribute module is implemented.</p>
+<h3><a class="anchor" aria-hidden="true" id="c-interface-for-nccl-communicator"></a><a href="#c-interface-for-nccl-communicator" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
+<p>Firstly, the communication layer is written in C language
+<a href="https://github.com/apache/singa/blob/master/src/io/communicator.cc">communicator.cc</a>.
+It applies the NCCL library for collective communication.</p>
+<p>There are two constructors for the communicator, one for MPI and another for
+multiprocess.</p>
+<p>(i) Constructor using MPI</p>
+<p>The constructor first obtains the global rank and the world size first, and
+calculate the local rank. Then, rank 0 generates a NCCL ID and broadcast it to
+every rank. After that, it calls the setup function to initialize the NCCL
+communicator, cuda streams, and buffers.</p>
+<p>(ii) Constructor using Python multiprocess</p>
+<p>The constructor first obtains the rank, the world size, and the NCCL ID from the
+input argument. After that, it calls the setup function to initialize the NCCL
+communicator, cuda streams, and buffers.</p>
+<p>After the initialization, it provides the all-reduce functionality to
+synchronize the model parameters or gradients. For instance, synch takes a input
+tensor and perform all-reduce through the NCCL routine. After we call synch, it
+is necessary to call wait function to wait for the all-reduce operation to be
+completed.</p>
+<h3><a class="anchor" aria-hidden="true" id="python-interface-for-distopt"></a><a href="#python-interface-for-distopt" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+<p>Then, the python interface provide a
+<a href="https://github.com/apache/singa/blob/master/python/singa/opt.py">DistOpt</a> class
+to wrap an
+<a href="https://github.com/apache/singa/blob/master/python/singa/opt.py">optimizer</a>
+object to perform distributed training based on MPI or multiprocessing. During
+the initialization, it creates a NCCL communicator object (from the C interface
+as mentioned in the subsection above). Then, this communicator object is used
+for every all-reduce operations in DistOpt.</p>
+<p>In MPI or multiprocess, each process has an individual rank, which gives
+information of which GPU the individual process is using. The training data is
+partitioned, so that each process can evaluate the sub-gradient based on the
+partitioned training data. Once the sub-gradient is calculated on each
+processes, the overall stochastic gradient is obtained by all-reducing the
+sub-gradients evaluated by all processes.</p>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/9/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/graph"><span class="arrow-prev">← </span><span>Computational Graph</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/download-singa"><span>Download SINGA</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#usage">Usage</a><ul class="toc-h [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/dist-train/index.html b/content/docs/3.0.0.rc1/dist-train/index.html
new file mode 100644
index 0000000..dcf468c
--- /dev/null
+++ b/content/docs/3.0.0.rc1/dist-train/index.html
@@ -0,0 +1,425 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Distributed Training · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copy [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/dist-train.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Distributed Training</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contri [...]
+<p>SINGA supports data parallel training across multiple GPUs (on a single node or
+across different nodes). The following figure illustrates the data parallel
+training:</p>
+<p><img src="/docs/assets/MPI.png" alt="MPI.png"></p>
+<p>In distributed training, each process (called a worker) runs a training script
+over a single GPU. Each process has an individual communication rank. The
+training data is partitioned among the workers and the model is replicated on
+every worker. In each iteration, the workers read a mini-batch of data (e.g.,
+256 images) from its partition and run the BackPropagation algorithm to compute
+the gradients of the weights, which are averaged via all-reduce (provided by
+<a href="https://developer.nvidia.com/nccl">NCCL</a>) for weight update following
+stochastic gradient descent algorithms (SGD).</p>
+<p>The all-reduce operation by NCCL can be used to reduce and synchronize the
+gradients from different GPUs. Let's consider the training with 4 GPUs as shown
+below. Once the gradients from the 4 GPUs are calculated, all-reduce will return
+the sum of the gradients over the GPUs and make it available on every GPU. Then
+the averaged gradients can be easily calculated.</p>
+<p><img src="/docs/assets/AllReduce.png" alt="AllReduce.png"></p>
+<h2><a class="anchor" aria-hidden="true" id="usage"></a><a href="#usage" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
+<p>SINGA implements a module called <code>DistOpt</code> (a subclass of <code>Opt</code>) for distributed
+training. It wraps a normal SGD optimizer and calls <code>Communicator</code> for gradients
+synchronization. The following example illustrates the usage of <code>DistOpt</code> for
+training a CNN model over the MNIST dataset. The source code is available
+<a href="https://github.com/apache/singa/blob/master/examples/cnn/">here</a>, and there is
+a <a href="">Colab notebook</a> for it.</p>
+<h3><a class="anchor" aria-hidden="true" id="example-code"></a><a href="#example-code" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<ol>
+<li>Define the neural network model:</li>
+</ol>
+<pre><code class="hljs css language-python"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">CNN</span>:</span>
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(self)</span>:</span>
+        self.conv1 = autograd.Conv2d(<span class="hljs-number">1</span>, <span class="hljs-number">20</span>, <span class="hljs-number">5</span>, padding=<span class="hljs-number">0</span>)
+        self.conv2 = autograd.Conv2d(<span class="hljs-number">20</span>, <span class="hljs-number">50</span>, <span class="hljs-number">5</span>, padding=<span class="hljs-number">0</span>)
+        self.linear1 = autograd.Linear(<span class="hljs-number">4</span> * <span class="hljs-number">4</span> * <span class="hljs-number">50</span>, <span class="hljs-number">500</span>)
+        self.linear2 = autograd.Linear(<span class="hljs-number">500</span>, <span class="hljs-number">10</span>)
+        self.pooling1 = autograd.MaxPool2d(<span class="hljs-number">2</span>, <span class="hljs-number">2</span>, padding=<span class="hljs-number">0</span>)
+        self.pooling2 = autograd.MaxPool2d(<span class="hljs-number">2</span>, <span class="hljs-number">2</span>, padding=<span class="hljs-number">0</span>)
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">forward</span><span class="hljs-params">(self, x)</span>:</span>
+        y = self.conv1(x)
+        y = autograd.relu(y)
+        y = self.pooling1(y)
+        y = self.conv2(y)
+        y = autograd.relu(y)
+        y = self.pooling2(y)
+        y = autograd.flatten(y)
+        y = self.linear1(y)
+        y = autograd.relu(y)
+        y = self.linear2(y)
+        <span class="hljs-keyword">return</span> y
+
+<span class="hljs-comment"># create model</span>
+model = CNN()
+</code></pre>
+<ol start="2">
+<li>Create the <code>DistOpt</code> instance:</li>
+</ol>
+<pre><code class="hljs css language-python">sgd = opt.SGD(lr=<span class="hljs-number">0.005</span>, momentum=<span class="hljs-number">0.9</span>, weight_decay=<span class="hljs-number">1e-5</span>)
+sgd = opt.DistOpt(sgd)
+dev = device.create_cuda_gpu_on(sgd.local_rank)
+</code></pre>
+<p>Here are some explanations concerning some variables in the code:</p>
+<p>(i) <code>dev</code></p>
+<p>dev represents the <code>Device</code> instance, where to load data and run the CNN model.</p>
+<p>(ii)<code>local_rank</code></p>
+<p>Local rank represents the GPU number the current process is using in the same
+node. For example, if you are using a node with 2 GPUs, <code>local_rank=0</code> means
+that this process is using the first GPU, while <code>local_rank=1</code> means using the
+second GPU. Using MPI or multiprocess, you are able to run the same training
+script which is only different in the value of <code>local_rank</code>.</p>
+<p>(iii)<code>global_rank</code></p>
+<p>Rank in global represents the global rank considered all the processes in all
+the nodes you are using. Let's consider the case you have 3 nodes and each of
+the node has two GPUs, <code>global_rank=0</code> means the process using the 1st GPU at
+the 1st node, <code>global_rank=2</code> means the process using the 1st GPU of the 2nd
+node, and <code>global_rank=4</code> means the process using the 1st GPU of the 3rd node.</p>
+<ol start="3">
+<li>Load and partition the training/validation data:</li>
+</ol>
+<pre><code class="hljs css language-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">data_partition</span><span class="hljs-params">(dataset_x, dataset_y, global_rank, world_size)</span>:</span>
+    data_per_rank = dataset_x.shape[<span class="hljs-number">0</span>] // world_size
+    idx_start = global_rank * data_per_rank
+    idx_end = (global_rank + <span class="hljs-number">1</span>) * data_per_rank
+    <span class="hljs-keyword">return</span> dataset_x[idx_start:idx_end], dataset_y[idx_start:idx_end]
+
+train_x, train_y, test_x, test_y = load_dataset()
+train_x, train_y = data_partition(train_x, train_y,
+                                  sgd.global_rank, sgd.world_size)
+test_x, test_y = data_partition(test_x, test_y,
+                                sgd.global_rank, sgd.world_size)
+</code></pre>
+<p>A partition of the dataset is returned for this <code>dev</code>.</p>
+<ol start="4">
+<li>Initialize and synchronize the model parameters among all workers:</li>
+</ol>
+<pre><code class="hljs css language-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">synchronize</span><span class="hljs-params">(tensor, dist_opt)</span>:</span>
+    dist_opt.all_reduce(tensor.data)
+    tensor /= dist_opt.world_size
+
+<span class="hljs-comment">#Synchronize the initial parameter</span>
+tx = tensor.Tensor((batch_size, <span class="hljs-number">1</span>, IMG_SIZE, IMG_SIZE), dev, tensor.float32)
+ty = tensor.Tensor((batch_size, num_classes), dev, tensor.int32)
+...
+out = model.forward(tx)
+loss = autograd.softmax_cross_entropy(out, ty)
+<span class="hljs-keyword">for</span> p, g <span class="hljs-keyword">in</span> autograd.backward(loss):
+    synchronize(p, sgd)
+</code></pre>
+<p>Here, <code>world_size</code> represents the total number of processes in all the nodes you
+are using for distributed training.</p>
+<ol start="5">
+<li>Run BackPropagation and distributed SGD</li>
+</ol>
+<pre><code class="hljs css language-python"><span class="hljs-keyword">for</span> epoch <span class="hljs-keyword">in</span> range(max_epoch):
+    <span class="hljs-keyword">for</span> b <span class="hljs-keyword">in</span> range(num_train_batch):
+        x = train_x[idx[b * batch_size: (b + <span class="hljs-number">1</span>) * batch_size]]
+        y = train_y[idx[b * batch_size: (b + <span class="hljs-number">1</span>) * batch_size]]
+        tx.copy_from_numpy(x)
+        ty.copy_from_numpy(y)
+        out = model.forward(tx)
+        loss = autograd.softmax_cross_entropy(out, ty)
+        <span class="hljs-comment"># do backpropagation and all-reduce</span>
+        sgd.backward_and_update(loss)
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="execution-instruction"></a><a href="#execution-instruction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
+<p>There are two ways to launch the training: MPI or Python multiprocessing.</p>
+<h4><a class="anchor" aria-hidden="true" id="python-multiprocessing"></a><a href="#python-multiprocessing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<p>It works on a single node with multiple GPUs, where each GPU is one worker.</p>
+<ol>
+<li>Put all the above training codes in a function</li>
+</ol>
+<pre><code class="hljs css language-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">train_mnist_cnn</span><span class="hljs-params">(nccl_id=None, local_rank=None, world_size=None)</span>:</span>
+    ...
+</code></pre>
+<ol start="2">
+<li>Create <code>mnist_multiprocess.py</code></li>
+</ol>
+<pre><code class="hljs css language-python"><span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">'__main__'</span>:
+    <span class="hljs-comment"># Generate a NCCL ID to be used for collective communication</span>
+    nccl_id = singa.NcclIdHolder()
+
+    <span class="hljs-comment"># Define the number of GPUs to be used in the training process</span>
+    world_size = int(sys.argv[<span class="hljs-number">1</span>])
+
+    <span class="hljs-comment"># Define and launch the multi-processing</span>
+    <span class="hljs-keyword">import</span> multiprocessing
+    process = []
+    <span class="hljs-keyword">for</span> local_rank <span class="hljs-keyword">in</span> range(<span class="hljs-number">0</span>, world_size):
+        process.append(multiprocessing.Process(target=train_mnist_cnn,
+                       args=(nccl_id, local_rank, world_size)))
+
+    <span class="hljs-keyword">for</span> p <span class="hljs-keyword">in</span> process:
+        p.start()
+</code></pre>
+<p>Here are some explanations concerning the variables created above:</p>
+<p>(i) <code>nccl_id</code></p>
+<p>Note that we need to generate a NCCL ID here to be used for collective
+communication, and then pass it to all the processes. The NCCL ID is like a
+ticket, where only the processes with this ID can join the all-reduce operation.
+(Later if we use MPI, the passing of NCCL ID is not necessary, because the ID is
+broadcased by MPI in our code automatically)</p>
+<p>(ii) <code>world_size</code></p>
+<p>world_size is the number of GPUs you would like to use for training.</p>
+<p>(iii) <code>local_rank</code></p>
+<p>local_rank determine the local rank of the distributed training and which gpu is
+used in the process. In the code above, we used a for loop to run the train
+function where the argument local_rank iterates from 0 to world_size. In this
+case, different processes can use different GPUs for training.</p>
+<p>The arguments for creating the <code>DistOpt</code> instance should be updated as follows</p>
+<pre><code class="hljs css language-python">sgd = opt.DistOpt(sgd, nccl_id=nccl_id, local_rank=local_rank, world_size=world_size)
+</code></pre>
+<ol start="3">
+<li>Run <code>mnist_multiprocess.py</code></li>
+</ol>
+<pre><code class="hljs css language-sh">python mnist_multiprocess.py 2
+</code></pre>
+<p>It results in speed up compared to the single GPU training.</p>
+<pre><code class="hljs">Starting Epoch <span class="hljs-number">0</span>:
+Training loss = <span class="hljs-number">408.909790</span>, training accuracy = <span class="hljs-number">0.880475</span>
+Evaluation accuracy = <span class="hljs-number">0.956430</span>
+Starting Epoch <span class="hljs-number">1</span>:
+Training loss = <span class="hljs-number">102.396790</span>, training accuracy = <span class="hljs-number">0.967415</span>
+Evaluation accuracy = <span class="hljs-number">0.977564</span>
+Starting Epoch <span class="hljs-number">2</span>:
+Training loss = <span class="hljs-number">69.217010</span>, training accuracy = <span class="hljs-number">0.977915</span>
+Evaluation accuracy = <span class="hljs-number">0.981370</span>
+Starting Epoch <span class="hljs-number">3</span>:
+Training loss = <span class="hljs-number">54.248390</span>, training accuracy = <span class="hljs-number">0.982823</span>
+Evaluation accuracy = <span class="hljs-number">0.984075</span>
+Starting Epoch <span class="hljs-number">4</span>:
+Training loss = <span class="hljs-number">45.213406</span>, training accuracy = <span class="hljs-number">0.985560</span>
+Evaluation accuracy = <span class="hljs-number">0.985276</span>
+Starting Epoch <span class="hljs-number">5</span>:
+Training loss = <span class="hljs-number">38.868435</span>, training accuracy = <span class="hljs-number">0.987764</span>
+Evaluation accuracy = <span class="hljs-number">0.986278</span>
+Starting Epoch <span class="hljs-number">6</span>:
+Training loss = <span class="hljs-number">34.078186</span>, training accuracy = <span class="hljs-number">0.989149</span>
+Evaluation accuracy = <span class="hljs-number">0.987881</span>
+Starting Epoch <span class="hljs-number">7</span>:
+Training loss = <span class="hljs-number">30.138697</span>, training accuracy = <span class="hljs-number">0.990451</span>
+Evaluation accuracy = <span class="hljs-number">0.988181</span>
+Starting Epoch <span class="hljs-number">8</span>:
+Training loss = <span class="hljs-number">26.854443</span>, training accuracy = <span class="hljs-number">0.991520</span>
+Evaluation accuracy = <span class="hljs-number">0.988682</span>
+Starting Epoch <span class="hljs-number">9</span>:
+Training loss = <span class="hljs-number">24.039650</span>, training accuracy = <span class="hljs-number">0.992405</span>
+Evaluation accuracy = <span class="hljs-number">0.989083</span>
+</code></pre>
+<h4><a class="anchor" aria-hidden="true" id="mpi"></a><a href="#mpi" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
+<p>It works for both single node and multiple nodes as long as there are multiple
+GPUs.</p>
+<ol>
+<li>Create <code>mnist_dist.py</code></li>
+</ol>
+<pre><code class="hljs css language-python"><span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">'__main__'</span>:
+    train_mnist_cnn()
+</code></pre>
+<ol start="2">
+<li>Generate a hostfile for MPI, e.g. the hostfile below uses 2 processes (i.e.,
+2 GPUs) on a single node</li>
+</ol>
+<pre><code class="hljs css language-txt">localhost:<span class="hljs-number">2</span>
+</code></pre>
+<ol start="3">
+<li>Launch the training via <code>mpiexec</code></li>
+</ol>
+<pre><code class="hljs css language-sh">mpiexec --hostfile host_file python mnist_dist.py
+</code></pre>
+<p>It could result in speed up compared to the single GPU training.</p>
+<pre><code class="hljs">Starting Epoch <span class="hljs-number">0</span>:
+Training loss = <span class="hljs-number">383.969543</span>, training accuracy = <span class="hljs-number">0.886402</span>
+Evaluation accuracy = <span class="hljs-number">0.954327</span>
+Starting Epoch <span class="hljs-number">1</span>:
+Training loss = <span class="hljs-number">97.531479</span>, training accuracy = <span class="hljs-number">0.969451</span>
+Evaluation accuracy = <span class="hljs-number">0.977163</span>
+Starting Epoch <span class="hljs-number">2</span>:
+Training loss = <span class="hljs-number">67.166870</span>, training accuracy = <span class="hljs-number">0.978516</span>
+Evaluation accuracy = <span class="hljs-number">0.980769</span>
+Starting Epoch <span class="hljs-number">3</span>:
+Training loss = <span class="hljs-number">53.369656</span>, training accuracy = <span class="hljs-number">0.983040</span>
+Evaluation accuracy = <span class="hljs-number">0.983974</span>
+Starting Epoch <span class="hljs-number">4</span>:
+Training loss = <span class="hljs-number">45.100403</span>, training accuracy = <span class="hljs-number">0.985777</span>
+Evaluation accuracy = <span class="hljs-number">0.986078</span>
+Starting Epoch <span class="hljs-number">5</span>:
+Training loss = <span class="hljs-number">39.330826</span>, training accuracy = <span class="hljs-number">0.987447</span>
+Evaluation accuracy = <span class="hljs-number">0.987179</span>
+Starting Epoch <span class="hljs-number">6</span>:
+Training loss = <span class="hljs-number">34.655270</span>, training accuracy = <span class="hljs-number">0.988799</span>
+Evaluation accuracy = <span class="hljs-number">0.987780</span>
+Starting Epoch <span class="hljs-number">7</span>:
+Training loss = <span class="hljs-number">30.749735</span>, training accuracy = <span class="hljs-number">0.989984</span>
+Evaluation accuracy = <span class="hljs-number">0.988281</span>
+Starting Epoch <span class="hljs-number">8</span>:
+Training loss = <span class="hljs-number">27.422146</span>, training accuracy = <span class="hljs-number">0.991319</span>
+Evaluation accuracy = <span class="hljs-number">0.988582</span>
+Starting Epoch <span class="hljs-number">9</span>:
+Training loss = <span class="hljs-number">24.548153</span>, training accuracy = <span class="hljs-number">0.992171</span>
+Evaluation accuracy = <span class="hljs-number">0.988682</span>
+</code></pre>
+<h2><a class="anchor" aria-hidden="true" id="optimizations-for-distributed-training"></a><a href="#optimizations-for-distributed-training" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1. [...]
+<p>SINGA provides multiple optimization strategies for distributed training to
+reduce the communication cost. Refer to the API for <code>DistOpt</code> for the
+configuration of each strategy.</p>
+<h3><a class="anchor" aria-hidden="true" id="no-optimizations"></a><a href="#no-optimizations" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<pre><code class="hljs css language-python">sgd.backward_and_update(loss)
+</code></pre>
+<p><code>loss</code> is the output tensor from the loss function, e.g., cross-entropy for
+classification tasks.</p>
+<h3><a class="anchor" aria-hidden="true" id="half-precision-gradients"></a><a href="#half-precision-gradients" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-. [...]
+<pre><code class="hljs css language-python">sgd.backward_and_update_half(loss)
+</code></pre>
+<p>It converts each gradient value to 16-bit representation (i.e., half-precision)
+before calling all-reduce.</p>
+<h3><a class="anchor" aria-hidden="true" id="partial-synchronization"></a><a href="#partial-synchronization" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<pre><code class="hljs css language-python">sgd.backward_and_partial_update(loss)
+</code></pre>
+<p>In each iteration, every rank do the local sgd update. Then, only a chunk of
+parameters are averaged for synchronization, which saves the communication cost.
+The chunk size is configured when creating the <code>DistOpt</code> instance.</p>
+<h3><a class="anchor" aria-hidden="true" id="gradient-sparsification"></a><a href="#gradient-sparsification" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<pre><code class="hljs css language-python">sgd.backward_and_sparse_update(loss)
+</code></pre>
+<p>It applies sparsification schemes to select a subset of gradients for
+all-reduce. There are two scheme:</p>
+<ul>
+<li>The top-K largest elements are selected. spars is the portion (0 - 1) of total
+elements selected.</li>
+</ul>
+<pre><code class="hljs css language-python">sgd.backward_and_sparse_update(loss = loss, spars = spars, topK = <span class="hljs-literal">True</span>)
+</code></pre>
+<ul>
+<li>All gradients whose absolute value are larger than predefined threshold spars
+are selected.</li>
+</ul>
+<pre><code class="hljs css language-python">sgd.backward_and_sparse_update(loss = loss, spars = spars, topK = <span class="hljs-literal">False</span>)
+</code></pre>
+<p>The hyper-parameters are configured when creating the <code>DistOpt</code> instance.</p>
+<h2><a class="anchor" aria-hidden="true" id="implementation"></a><a href="#implementation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>This section is mainly for developers who want to know how the code in
+distribute module is implemented.</p>
+<h3><a class="anchor" aria-hidden="true" id="c-interface-for-nccl-communicator"></a><a href="#c-interface-for-nccl-communicator" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S1 [...]
+<p>Firstly, the communication layer is written in C language
+<a href="https://github.com/apache/singa/blob/master/src/io/communicator.cc">communicator.cc</a>.
+It applies the NCCL library for collective communication.</p>
+<p>There are two constructors for the communicator, one for MPI and another for
+multiprocess.</p>
+<p>(i) Constructor using MPI</p>
+<p>The constructor first obtains the global rank and the world size first, and
+calculate the local rank. Then, rank 0 generates a NCCL ID and broadcast it to
+every rank. After that, it calls the setup function to initialize the NCCL
+communicator, cuda streams, and buffers.</p>
+<p>(ii) Constructor using Python multiprocess</p>
+<p>The constructor first obtains the rank, the world size, and the NCCL ID from the
+input argument. After that, it calls the setup function to initialize the NCCL
+communicator, cuda streams, and buffers.</p>
+<p>After the initialization, it provides the all-reduce functionality to
+synchronize the model parameters or gradients. For instance, synch takes a input
+tensor and perform all-reduce through the NCCL routine. After we call synch, it
+is necessary to call wait function to wait for the all-reduce operation to be
+completed.</p>
+<h3><a class="anchor" aria-hidden="true" id="python-interface-for-distopt"></a><a href="#python-interface-for-distopt" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+<p>Then, the python interface provide a
+<a href="https://github.com/apache/singa/blob/master/python/singa/opt.py">DistOpt</a> class
+to wrap an
+<a href="https://github.com/apache/singa/blob/master/python/singa/opt.py">optimizer</a>
+object to perform distributed training based on MPI or multiprocessing. During
+the initialization, it creates a NCCL communicator object (from the C interface
+as mentioned in the subsection above). Then, this communicator object is used
+for every all-reduce operations in DistOpt.</p>
+<p>In MPI or multiprocess, each process has an individual rank, which gives
+information of which GPU the individual process is using. The training data is
+partitioned, so that each process can evaluate the sub-gradient based on the
+partitioned training data. Once the sub-gradient is calculated on each
+processes, the overall stochastic gradient is obtained by all-reducing the
+sub-gradients evaluated by all processes.</p>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/9/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/graph"><span class="arrow-prev">← </span><span>Computational Graph</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/download-singa"><span>Download SINGA</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#usage">Usage</a><ul class="toc-h [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/download-singa.html b/content/docs/3.0.0.rc1/download-singa.html
new file mode 100644
index 0000000..ad1af10
--- /dev/null
+++ b/content/docs/3.0.0.rc1/download-singa.html
@@ -0,0 +1,261 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Download SINGA · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright  [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/download-singa.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Download SINGA</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contribu [...]
+<h2><a class="anchor" aria-hidden="true" id="verify"></a><a href="#verify" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<p>To verify the downloaded tar.gz file, download the
+<a href="https://www.apache.org/dist/incubator/singa/KEYS">KEYS</a> and ASC files and then
+execute the following commands</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">%</span><span class="bash"> gpg --import KEYS</span>
+<span class="hljs-meta">%</span><span class="bash"> gpg --verify downloaded_file.asc downloaded_file</span>
+</code></pre>
+<p>You can also check the SHA512 or MD5 values to see if the download is completed.</p>
+<h2><a class="anchor" aria-hidden="true" id="incubating-v200-20-april-2019"></a><a href="#incubating-v200-20-april-2019" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
+<ul>
+<li><a href="http://www.apache.org/dyn/closer.cgi/incubator/singa/2.0.0/apache-singa-incubating-2.0.0.tar.gz">Apache SINGA 2.0.0 (incubating)</a>
+<a href="https://www.apache.org/dist/incubator/singa/2.0.0/apache-singa-incubating-2.0.0.tar.gz.sha512">[SHA512]</a>
+<a href="https://www.apache.org/dist/incubator/singa/2.0.0/apache-singa-incubating-2.0.0.tar.gz.asc">[ASC]</a></li>
+<li><a href="releases/RELEASE_NOTES_2.0.0.html">Release Notes 2.0.0 (incubating)</a></li>
+<li>New features and major updates,
+<ul>
+<li>Enhance autograd (for Convolution networks and recurrent networks)</li>
+<li>Support ONNX</li>
+<li>Improve the CPP operations via Intel MKL DNN lib</li>
+<li>Implement tensor broadcasting</li>
+<li>Move Docker images under Apache user name</li>
+<li>Update depdent lib versions in conda-build config</li>
+</ul></li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="incubating-v120-6-june-2018"></a><a href="#incubating-v120-6-june-2018" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<ul>
+<li><a href="https://archive.apache.org/dist/incubator/singa/1.2.0/apache-singa-incubating-1.2.0.tar.gz">Apache SINGA 1.2.0 (incubating)</a>
+<a href="https://archive.apache.org/dist/incubator/singa/1.2.0/apache-singa-incubating-1.2.0.tar.gz.sha512">[SHA512]</a>
+<a href="https://archive.apache.org/dist/incubator/singa/1.2.0/apache-singa-incubating-1.2.0.tar.gz.asc">[ASC]</a></li>
+<li><a href="releases/RELEASE_NOTES_1.2.0.html">Release Notes 1.2.0 (incubating)</a></li>
+<li>New features and major updates,
+<ul>
+<li>Implement autograd (currently support MLP model)</li>
+<li>Upgrade PySinga to support Python 3</li>
+<li>Improve the Tensor class with the stride field</li>
+<li>Upgrade cuDNN from V5 to V7</li>
+<li>Add VGG, Inception V4, ResNet, and DenseNet for ImageNet classification</li>
+<li>Create alias for conda packages</li>
+<li>Complete documentation in Chinese</li>
+<li>Add instructions for running Singa on Windows</li>
+<li>Update the compilation, CI</li>
+<li>Fix some bugs</li>
+</ul></li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="incubating-v110-12-february-2017"></a><a href="#incubating-v110-12-february-2017" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<ul>
+<li><a href="https://archive.apache.org/dist/incubator/singa/1.1.0/apache-singa-incubating-1.1.0.tar.gz">Apache SINGA 1.1.0 (incubating)</a>
+<a href="https://archive.apache.org/dist/incubator/singa/1.1.0/apache-singa-incubating-1.1.0.tar.gz.md5">[MD5]</a>
+<a href="https://archive.apache.org/dist/incubator/singa/1.1.0/apache-singa-incubating-1.1.0.tar.gz.asc">[ASC]</a></li>
+<li><a href="releases/RELEASE_NOTES_1.1.0.html">Release Notes 1.1.0 (incubating)</a></li>
+<li>New features and major updates,
+<ul>
+<li>Create Docker images (CPU and GPU versions)</li>
+<li>Create Amazon AMI for SINGA (CPU version)</li>
+<li>Integrate with Jenkins for automatically generating Wheel and Debian
+packages (for installation), and updating the website.</li>
+<li>Enhance the FeedFowardNet, e.g., multiple inputs and verbose mode for
+debugging</li>
+<li>Add Concat and Slice layers</li>
+<li>Extend CrossEntropyLoss to accept instance with multiple labels</li>
+<li>Add image_tool.py with image augmentation methods</li>
+<li>Support model loading and saving via the Snapshot API</li>
+<li>Compile SINGA source on Windows</li>
+<li>Compile mandatory dependent libraries together with SINGA code</li>
+<li>Enable Java binding (basic) for SINGA</li>
+<li>Add version ID in checkpointing files</li>
+<li>Add Rafiki toolkit for providing RESTFul APIs</li>
+<li>Add examples pretrained from Caffe, including GoogleNet</li>
+</ul></li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="incubating-v100-8-september-2016"></a><a href="#incubating-v100-8-september-2016" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<ul>
+<li><a href="https://archive.apache.org/dist/incubator/singa/1.0.0/apache-singa-incubating-1.0.0.tar.gz">Apache SINGA 1.0.0 (incubating)</a>
+<a href="https://archive.apache.org/dist/incubator/singa/1.0.0/apache-singa-incubating-1.0.0.tar.gz.md5">[MD5]</a>
+<a href="https://archive.apache.org/dist/incubator/singa/1.0.0/apache-singa-incubating-1.0.0.tar.gz.asc">[ASC]</a></li>
+<li><a href="releases/RELEASE_NOTES_1.0.0.html">Release Notes 1.0.0 (incubating)</a></li>
+<li>New features and major updates,
+<ul>
+<li>Tensor abstraction for supporting more machine learning models.</li>
+<li>Device abstraction for running on different hardware devices, including CPU,
+(Nvidia/AMD) GPU and FPGA (to be tested in later versions).</li>
+<li>Replace GNU autotool with cmake for compilation.</li>
+<li>Support Mac OS</li>
+<li>Improve Python binding, including installation and programming</li>
+<li>More deep learning models, including VGG and ResNet</li>
+<li>More IO classes for reading/writing files and encoding/decoding data</li>
+<li>New network communication components directly based on Socket.</li>
+<li>Cudnn V5 with Dropout and RNN layers.</li>
+<li>Replace website building tool from maven to Sphinx</li>
+<li>Integrate Travis-CI</li>
+</ul></li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="incubating-v030-20-april-2016"></a><a href="#incubating-v030-20-april-2016" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
+<ul>
+<li><a href="https://archive.apache.org/dist/incubator/singa/0.3.0/apache-singa-incubating-0.3.0.tar.gz">Apache SINGA 0.3.0 (incubating)</a>
+<a href="https://archive.apache.org/dist/incubator/singa/0.3.0/apache-singa-incubating-0.3.0.tar.gz.md5">[MD5]</a>
+<a href="https://archive.apache.org/dist/incubator/singa/0.3.0/apache-singa-incubating-0.3.0.tar.gz.asc">[ASC]</a></li>
+<li><a href="releases/RELEASE_NOTES_0.3.0.html">Release Notes 0.3.0 (incubating)</a></li>
+<li>New features and major updates,
+<ul>
+<li>Training on GPU cluster enables training of deep learning models over a GPU
+cluster.</li>
+<li>Python wrapper improvement makes it easy to configure the job, including
+neural net and SGD algorithm.</li>
+<li>New SGD updaters are added, including Adam, AdaDelta and AdaMax.</li>
+<li>Installation has fewer dependent libraries for single node training.</li>
+<li>Heterogeneous training with CPU and GPU.</li>
+<li>Support cuDNN V4.</li>
+<li>Data prefetching.</li>
+<li>Fix some bugs.</li>
+</ul></li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="incubating-v020-14-january-2016"></a><a href="#incubating-v020-14-january-2016" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
+<ul>
+<li><a href="https://archive.apache.org/dist/incubator/singa/0.2.0/apache-singa-incubating-0.2.0.tar.gz">Apache SINGA 0.2.0 (incubating)</a>
+<a href="https://archive.apache.org/dist/incubator/singa/0.2.0/apache-singa-incubating-0.2.0.tar.gz.md5">[MD5]</a>
+<a href="https://archive.apache.org/dist/incubator/singa/0.2.0/apache-singa-incubating-0.2.0.tar.gz.asc">[ASC]</a></li>
+<li><a href="releases/RELEASE_NOTES_0.2.0.html">Release Notes 0.2.0 (incubating)</a></li>
+<li>New features and major updates,
+<ul>
+<li>Training on GPU enables training of complex models on a single node with
+multiple GPU cards.</li>
+<li>Hybrid neural net partitioning supports data and model parallelism at the
+same time.</li>
+<li>Python wrapper makes it easy to configure the job, including neural net and
+SGD algorithm.</li>
+<li>RNN model and BPTT algorithm are implemented to support applications based
+on RNN models, e.g., GRU.</li>
+<li>Cloud software integration includes Mesos, Docker and HDFS.</li>
+<li>Visualization of neural net structure and layer information, which is
+helpful for debugging.</li>
+<li>Linear algebra functions and random functions against Blobs and raw data
+pointers.</li>
+<li>New layers, including SoftmaxLayer, ArgSortLayer, DummyLayer, RNN layers and
+cuDNN layers.</li>
+<li>Update Layer class to carry multiple data/grad Blobs.</li>
+<li>Extract features and test performance for new data by loading previously
+trained model parameters.</li>
+<li>Add Store class for IO operations.</li>
+</ul></li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="incubating-v010-8-october-2015"></a><a href="#incubating-v010-8-october-2015" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 1 [...]
+<ul>
+<li><a href="https://archive.apache.org/dist/incubator/singa/apache-singa-incubating-0.1.0.tar.gz">Apache SINGA 0.1.0 (incubating)</a>
+<a href="https://archive.apache.org/dist/incubator/singa/apache-singa-incubating-0.1.0.tar.gz.md5">[MD5]</a>
+<a href="https://archive.apache.org/dist/incubator/singa/apache-singa-incubating-0.1.0.tar.gz.asc">[ASC]</a></li>
+<li><a href="https://console.aws.amazon.com/ec2/v2/home?region=ap-southeast-1#LaunchInstanceWizard:ami=ami-b41001e6">Amazon EC2 image</a></li>
+<li><a href="releases/RELEASE_NOTES_0.1.0.html">Release Notes 0.1.0 (incubating)</a></li>
+<li>Major features include,
+<ul>
+<li>Installation using GNU build utility</li>
+<li>Scripts for job management with zookeeper</li>
+<li>Programming model based on NeuralNet and Layer abstractions.</li>
+<li>System architecture based on Worker, Server and Stub.</li>
+<li>Training models from three different model categories, namely, feed-forward
+models, energy models and RNN models.</li>
+<li>Synchronous and asynchronous distributed training frameworks using CPU</li>
+<li>Checkpoint and restore</li>
+<li>Unit test using gtest</li>
+</ul></li>
+</ul>
+<blockquote>
+<p><strong>Disclaimer</strong></p>
+<p>Apache SINGA is an effort undergoing incubation at The Apache Software
+Foundation (ASF), sponsored by the name of Apache Incubator PMC. Incubation is
+required of all newly accepted projects until a further review indicates that
+the infrastructure, communications, and decision making process have
+stabilized in a manner consistent with other successful ASF projects. While
+incubation status is not necessarily a reflection of the completeness or
+stability of the code, it does indicate that the project has yet to be fully
+endorsed by the ASF.</p>
+</blockquote>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/dist-train"><span class="arrow-prev">← </span><span>Distributed Training</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/build"><span>Build SINGA from Source</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#verify">Verify</a></li><li [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/download-singa/index.html b/content/docs/3.0.0.rc1/download-singa/index.html
new file mode 100644
index 0000000..ad1af10
--- /dev/null
+++ b/content/docs/3.0.0.rc1/download-singa/index.html
@@ -0,0 +1,261 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Download SINGA · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright  [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/download-singa.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Download SINGA</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contribu [...]
+<h2><a class="anchor" aria-hidden="true" id="verify"></a><a href="#verify" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<p>To verify the downloaded tar.gz file, download the
+<a href="https://www.apache.org/dist/incubator/singa/KEYS">KEYS</a> and ASC files and then
+execute the following commands</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">%</span><span class="bash"> gpg --import KEYS</span>
+<span class="hljs-meta">%</span><span class="bash"> gpg --verify downloaded_file.asc downloaded_file</span>
+</code></pre>
+<p>You can also check the SHA512 or MD5 values to see if the download is completed.</p>
+<h2><a class="anchor" aria-hidden="true" id="incubating-v200-20-april-2019"></a><a href="#incubating-v200-20-april-2019" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
+<ul>
+<li><a href="http://www.apache.org/dyn/closer.cgi/incubator/singa/2.0.0/apache-singa-incubating-2.0.0.tar.gz">Apache SINGA 2.0.0 (incubating)</a>
+<a href="https://www.apache.org/dist/incubator/singa/2.0.0/apache-singa-incubating-2.0.0.tar.gz.sha512">[SHA512]</a>
+<a href="https://www.apache.org/dist/incubator/singa/2.0.0/apache-singa-incubating-2.0.0.tar.gz.asc">[ASC]</a></li>
+<li><a href="releases/RELEASE_NOTES_2.0.0.html">Release Notes 2.0.0 (incubating)</a></li>
+<li>New features and major updates,
+<ul>
+<li>Enhance autograd (for Convolution networks and recurrent networks)</li>
+<li>Support ONNX</li>
+<li>Improve the CPP operations via Intel MKL DNN lib</li>
+<li>Implement tensor broadcasting</li>
+<li>Move Docker images under Apache user name</li>
+<li>Update depdent lib versions in conda-build config</li>
+</ul></li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="incubating-v120-6-june-2018"></a><a href="#incubating-v120-6-june-2018" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<ul>
+<li><a href="https://archive.apache.org/dist/incubator/singa/1.2.0/apache-singa-incubating-1.2.0.tar.gz">Apache SINGA 1.2.0 (incubating)</a>
+<a href="https://archive.apache.org/dist/incubator/singa/1.2.0/apache-singa-incubating-1.2.0.tar.gz.sha512">[SHA512]</a>
+<a href="https://archive.apache.org/dist/incubator/singa/1.2.0/apache-singa-incubating-1.2.0.tar.gz.asc">[ASC]</a></li>
+<li><a href="releases/RELEASE_NOTES_1.2.0.html">Release Notes 1.2.0 (incubating)</a></li>
+<li>New features and major updates,
+<ul>
+<li>Implement autograd (currently support MLP model)</li>
+<li>Upgrade PySinga to support Python 3</li>
+<li>Improve the Tensor class with the stride field</li>
+<li>Upgrade cuDNN from V5 to V7</li>
+<li>Add VGG, Inception V4, ResNet, and DenseNet for ImageNet classification</li>
+<li>Create alias for conda packages</li>
+<li>Complete documentation in Chinese</li>
+<li>Add instructions for running Singa on Windows</li>
+<li>Update the compilation, CI</li>
+<li>Fix some bugs</li>
+</ul></li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="incubating-v110-12-february-2017"></a><a href="#incubating-v110-12-february-2017" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<ul>
+<li><a href="https://archive.apache.org/dist/incubator/singa/1.1.0/apache-singa-incubating-1.1.0.tar.gz">Apache SINGA 1.1.0 (incubating)</a>
+<a href="https://archive.apache.org/dist/incubator/singa/1.1.0/apache-singa-incubating-1.1.0.tar.gz.md5">[MD5]</a>
+<a href="https://archive.apache.org/dist/incubator/singa/1.1.0/apache-singa-incubating-1.1.0.tar.gz.asc">[ASC]</a></li>
+<li><a href="releases/RELEASE_NOTES_1.1.0.html">Release Notes 1.1.0 (incubating)</a></li>
+<li>New features and major updates,
+<ul>
+<li>Create Docker images (CPU and GPU versions)</li>
+<li>Create Amazon AMI for SINGA (CPU version)</li>
+<li>Integrate with Jenkins for automatically generating Wheel and Debian
+packages (for installation), and updating the website.</li>
+<li>Enhance the FeedFowardNet, e.g., multiple inputs and verbose mode for
+debugging</li>
+<li>Add Concat and Slice layers</li>
+<li>Extend CrossEntropyLoss to accept instance with multiple labels</li>
+<li>Add image_tool.py with image augmentation methods</li>
+<li>Support model loading and saving via the Snapshot API</li>
+<li>Compile SINGA source on Windows</li>
+<li>Compile mandatory dependent libraries together with SINGA code</li>
+<li>Enable Java binding (basic) for SINGA</li>
+<li>Add version ID in checkpointing files</li>
+<li>Add Rafiki toolkit for providing RESTFul APIs</li>
+<li>Add examples pretrained from Caffe, including GoogleNet</li>
+</ul></li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="incubating-v100-8-september-2016"></a><a href="#incubating-v100-8-september-2016" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<ul>
+<li><a href="https://archive.apache.org/dist/incubator/singa/1.0.0/apache-singa-incubating-1.0.0.tar.gz">Apache SINGA 1.0.0 (incubating)</a>
+<a href="https://archive.apache.org/dist/incubator/singa/1.0.0/apache-singa-incubating-1.0.0.tar.gz.md5">[MD5]</a>
+<a href="https://archive.apache.org/dist/incubator/singa/1.0.0/apache-singa-incubating-1.0.0.tar.gz.asc">[ASC]</a></li>
+<li><a href="releases/RELEASE_NOTES_1.0.0.html">Release Notes 1.0.0 (incubating)</a></li>
+<li>New features and major updates,
+<ul>
+<li>Tensor abstraction for supporting more machine learning models.</li>
+<li>Device abstraction for running on different hardware devices, including CPU,
+(Nvidia/AMD) GPU and FPGA (to be tested in later versions).</li>
+<li>Replace GNU autotool with cmake for compilation.</li>
+<li>Support Mac OS</li>
+<li>Improve Python binding, including installation and programming</li>
+<li>More deep learning models, including VGG and ResNet</li>
+<li>More IO classes for reading/writing files and encoding/decoding data</li>
+<li>New network communication components directly based on Socket.</li>
+<li>Cudnn V5 with Dropout and RNN layers.</li>
+<li>Replace website building tool from maven to Sphinx</li>
+<li>Integrate Travis-CI</li>
+</ul></li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="incubating-v030-20-april-2016"></a><a href="#incubating-v030-20-april-2016" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12  [...]
+<ul>
+<li><a href="https://archive.apache.org/dist/incubator/singa/0.3.0/apache-singa-incubating-0.3.0.tar.gz">Apache SINGA 0.3.0 (incubating)</a>
+<a href="https://archive.apache.org/dist/incubator/singa/0.3.0/apache-singa-incubating-0.3.0.tar.gz.md5">[MD5]</a>
+<a href="https://archive.apache.org/dist/incubator/singa/0.3.0/apache-singa-incubating-0.3.0.tar.gz.asc">[ASC]</a></li>
+<li><a href="releases/RELEASE_NOTES_0.3.0.html">Release Notes 0.3.0 (incubating)</a></li>
+<li>New features and major updates,
+<ul>
+<li>Training on GPU cluster enables training of deep learning models over a GPU
+cluster.</li>
+<li>Python wrapper improvement makes it easy to configure the job, including
+neural net and SGD algorithm.</li>
+<li>New SGD updaters are added, including Adam, AdaDelta and AdaMax.</li>
+<li>Installation has fewer dependent libraries for single node training.</li>
+<li>Heterogeneous training with CPU and GPU.</li>
+<li>Support cuDNN V4.</li>
+<li>Data prefetching.</li>
+<li>Fix some bugs.</li>
+</ul></li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="incubating-v020-14-january-2016"></a><a href="#incubating-v020-14-january-2016" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 [...]
+<ul>
+<li><a href="https://archive.apache.org/dist/incubator/singa/0.2.0/apache-singa-incubating-0.2.0.tar.gz">Apache SINGA 0.2.0 (incubating)</a>
+<a href="https://archive.apache.org/dist/incubator/singa/0.2.0/apache-singa-incubating-0.2.0.tar.gz.md5">[MD5]</a>
+<a href="https://archive.apache.org/dist/incubator/singa/0.2.0/apache-singa-incubating-0.2.0.tar.gz.asc">[ASC]</a></li>
+<li><a href="releases/RELEASE_NOTES_0.2.0.html">Release Notes 0.2.0 (incubating)</a></li>
+<li>New features and major updates,
+<ul>
+<li>Training on GPU enables training of complex models on a single node with
+multiple GPU cards.</li>
+<li>Hybrid neural net partitioning supports data and model parallelism at the
+same time.</li>
+<li>Python wrapper makes it easy to configure the job, including neural net and
+SGD algorithm.</li>
+<li>RNN model and BPTT algorithm are implemented to support applications based
+on RNN models, e.g., GRU.</li>
+<li>Cloud software integration includes Mesos, Docker and HDFS.</li>
+<li>Visualization of neural net structure and layer information, which is
+helpful for debugging.</li>
+<li>Linear algebra functions and random functions against Blobs and raw data
+pointers.</li>
+<li>New layers, including SoftmaxLayer, ArgSortLayer, DummyLayer, RNN layers and
+cuDNN layers.</li>
+<li>Update Layer class to carry multiple data/grad Blobs.</li>
+<li>Extract features and test performance for new data by loading previously
+trained model parameters.</li>
+<li>Add Store class for IO operations.</li>
+</ul></li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="incubating-v010-8-october-2015"></a><a href="#incubating-v010-8-october-2015" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 1 [...]
+<ul>
+<li><a href="https://archive.apache.org/dist/incubator/singa/apache-singa-incubating-0.1.0.tar.gz">Apache SINGA 0.1.0 (incubating)</a>
+<a href="https://archive.apache.org/dist/incubator/singa/apache-singa-incubating-0.1.0.tar.gz.md5">[MD5]</a>
+<a href="https://archive.apache.org/dist/incubator/singa/apache-singa-incubating-0.1.0.tar.gz.asc">[ASC]</a></li>
+<li><a href="https://console.aws.amazon.com/ec2/v2/home?region=ap-southeast-1#LaunchInstanceWizard:ami=ami-b41001e6">Amazon EC2 image</a></li>
+<li><a href="releases/RELEASE_NOTES_0.1.0.html">Release Notes 0.1.0 (incubating)</a></li>
+<li>Major features include,
+<ul>
+<li>Installation using GNU build utility</li>
+<li>Scripts for job management with zookeeper</li>
+<li>Programming model based on NeuralNet and Layer abstractions.</li>
+<li>System architecture based on Worker, Server and Stub.</li>
+<li>Training models from three different model categories, namely, feed-forward
+models, energy models and RNN models.</li>
+<li>Synchronous and asynchronous distributed training frameworks using CPU</li>
+<li>Checkpoint and restore</li>
+<li>Unit test using gtest</li>
+</ul></li>
+</ul>
+<blockquote>
+<p><strong>Disclaimer</strong></p>
+<p>Apache SINGA is an effort undergoing incubation at The Apache Software
+Foundation (ASF), sponsored by the name of Apache Incubator PMC. Incubation is
+required of all newly accepted projects until a further review indicates that
+the infrastructure, communications, and decision making process have
+stabilized in a manner consistent with other successful ASF projects. While
+incubation status is not necessarily a reflection of the completeness or
+stability of the code, it does indicate that the project has yet to be fully
+endorsed by the ASF.</p>
+</blockquote>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/dist-train"><span class="arrow-prev">← </span><span>Distributed Training</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/build"><span>Build SINGA from Source</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#verify">Verify</a></li><li [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/examples.html b/content/docs/3.0.0.rc1/examples.html
new file mode 100644
index 0000000..3cff268
--- /dev/null
+++ b/content/docs/3.0.0.rc1/examples.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Examples · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright owners [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/examples.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Examples</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license  [...]
+<p>This page lists some example deep learning tasks using SINGA. The source code is
+maintained inside SINGA repo on
+<a href="https://github.com/apache/singa/tree/master/examples">Github</a>. For examples
+running on CPU or single GPU using SINGA Python APIs, they are also available on
+<a href="https://colab.research.google.com/">Google Colab</a>. You can run them directly on
+Google Cloud without setting up the environment locally. The link to each
+example is given below.</p>
+<h2><a class="anchor" aria-hidden="true" id="image-classification"></a><a href="#image-classification" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<table>
+<thead>
+<tr><th>Model</th><th>Dataset</th><th>Links</th></tr>
+</thead>
+<tbody>
+<tr><td>Simple CNN</td><td>MNIST, CIFAR10, CIFAR100</td><td><a href="https://colab.research.google.com/drive/1fbGUs1AsoX6bU5F745RwQpohP4bHTktq">Colab</a></td></tr>
+<tr><td>AlexNet</td><td>ImageNet</td><td><a href="">Cpp</a></td></tr>
+<tr><td>VGG</td><td>ImageNet</td><td><a href="">Cpp</a>, <a href="">Python</a>, <a href="https://colab.research.google.com/drive/14kxgRKtbjPCKKsDJVNi3AvTev81Gp_Ds">Colab</a></td></tr>
+<tr><td>XceptionNet</td><td>MNIST, CIFAR10, CIFAR100</td><td><a href="">Python</a></td></tr>
+<tr><td>ResNet</td><td>MNIST, CIFAR10, CIFAR100, CIFAR10</td><td><a href="">Python</a>, <a href="https://colab.research.google.com/drive/1u1RYefSsVbiP4I-5wiBKHjsT9L0FxLm9">Colab</a></td></tr>
+<tr><td>MobileNet</td><td>ImageNet</td><td><a href="https://colab.research.google.com/drive/1HsixqJMIpKyEPhkbB8jy7NwNEFEAUWAf">Colab</a></td></tr>
+</tbody>
+</table>
+<h2><a class="anchor" aria-hidden="true" id="object-detection"></a><a href="#object-detection" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<table>
+<thead>
+<tr><th>Model</th><th>Dataset</th><th>Links</th></tr>
+</thead>
+<tbody>
+<tr><td>Tiny YOLOv2</td><td>Pascal VOC</td><td><a href="https://colab.research.google.com/drive/11V4I6cRjIJNUv5ZGsEGwqHuoQEie6b1T">Colab</a></td></tr>
+</tbody>
+</table>
+<h2><a class="anchor" aria-hidden="true" id="face-and-emotion-recognition"></a><a href="#face-and-emotion-recognition" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+<table>
+<thead>
+<tr><th>Model</th><th>Dataset</th><th>Links</th></tr>
+</thead>
+<tbody>
+<tr><td>ArcFace</td><td>Refined MS-Celeb-1M</td><td><a href="https://colab.research.google.com/drive/1qanaqUKGIDtifdzEzJOHjEj4kYzA9uJC">Colab</a></td></tr>
+<tr><td>Emotion FerPlus</td><td><a href="https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data">Facial Expression Recognition Challenge</a></td><td><a href="https://colab.research.google.com/drive/1XHtBQGRhe58PDi4LGYJzYueWBeWbO23r">Colab</a></td></tr>
+</tbody>
+</table>
+<h2><a class="anchor" aria-hidden="true" id="image-generation"></a><a href="#image-generation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<table>
+<thead>
+<tr><th>Model</th><th>Dataset</th><th>Links</th></tr>
+</thead>
+<tbody>
+<tr><td>GAN</td><td>MNIST</td><td><a href="https://colab.research.google.com/drive/1f86MNDW47DJqHoIqWD1tOxcyx2MWys8L">Colab</a></td></tr>
+<tr><td>LSGAN</td><td>MNIST</td><td><a href="https://colab.research.google.com/drive/1C6jNRf28vnFOI9JVM4lpkJPqxsnhxdol">Colab</a></td></tr>
+</tbody>
+</table>
+<h2><a class="anchor" aria-hidden="true" id="machine-comprehension"></a><a href="#machine-comprehension" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
+<table>
+<thead>
+<tr><th>Model</th><th>Dataset</th><th>Links</th></tr>
+</thead>
+<tbody>
+<tr><td>Bert-Squad</td><td><a href="https://rajpurkar.github.io/SQuAD-explorer/explore/1.1/dev/">SQuAD v1.1</a></td><td><a href="https://colab.research.google.com/drive/1kud-lUPjS_u-TkDAzihBTw0Vqr0FjCE-">Colab</a></td></tr>
+</tbody>
+</table>
+<h2><a class="anchor" aria-hidden="true" id="misc"></a><a href="#misc" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
+<ul>
+<li>Restricted Boltzmann Machine over the MNIST dataset, <a href="">source</a>,
+<a href="https://colab.research.google.com/drive/19996noGu9JyHHkVmp4edBGu7PJSRQKsd">Colab</a>.</li>
+</ul>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/9/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/software-stack"><span class="arrow-prev">← </span><span>Software Stack</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/device"><span>Device</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#image-classification">Image Classification</ [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/examples/index.html b/content/docs/3.0.0.rc1/examples/index.html
new file mode 100644
index 0000000..3cff268
--- /dev/null
+++ b/content/docs/3.0.0.rc1/examples/index.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Examples · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright owners [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/examples.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Examples</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license  [...]
+<p>This page lists some example deep learning tasks using SINGA. The source code is
+maintained inside SINGA repo on
+<a href="https://github.com/apache/singa/tree/master/examples">Github</a>. For examples
+running on CPU or single GPU using SINGA Python APIs, they are also available on
+<a href="https://colab.research.google.com/">Google Colab</a>. You can run them directly on
+Google Cloud without setting up the environment locally. The link to each
+example is given below.</p>
+<h2><a class="anchor" aria-hidden="true" id="image-classification"></a><a href="#image-classification" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<table>
+<thead>
+<tr><th>Model</th><th>Dataset</th><th>Links</th></tr>
+</thead>
+<tbody>
+<tr><td>Simple CNN</td><td>MNIST, CIFAR10, CIFAR100</td><td><a href="https://colab.research.google.com/drive/1fbGUs1AsoX6bU5F745RwQpohP4bHTktq">Colab</a></td></tr>
+<tr><td>AlexNet</td><td>ImageNet</td><td><a href="">Cpp</a></td></tr>
+<tr><td>VGG</td><td>ImageNet</td><td><a href="">Cpp</a>, <a href="">Python</a>, <a href="https://colab.research.google.com/drive/14kxgRKtbjPCKKsDJVNi3AvTev81Gp_Ds">Colab</a></td></tr>
+<tr><td>XceptionNet</td><td>MNIST, CIFAR10, CIFAR100</td><td><a href="">Python</a></td></tr>
+<tr><td>ResNet</td><td>MNIST, CIFAR10, CIFAR100, CIFAR10</td><td><a href="">Python</a>, <a href="https://colab.research.google.com/drive/1u1RYefSsVbiP4I-5wiBKHjsT9L0FxLm9">Colab</a></td></tr>
+<tr><td>MobileNet</td><td>ImageNet</td><td><a href="https://colab.research.google.com/drive/1HsixqJMIpKyEPhkbB8jy7NwNEFEAUWAf">Colab</a></td></tr>
+</tbody>
+</table>
+<h2><a class="anchor" aria-hidden="true" id="object-detection"></a><a href="#object-detection" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<table>
+<thead>
+<tr><th>Model</th><th>Dataset</th><th>Links</th></tr>
+</thead>
+<tbody>
+<tr><td>Tiny YOLOv2</td><td>Pascal VOC</td><td><a href="https://colab.research.google.com/drive/11V4I6cRjIJNUv5ZGsEGwqHuoQEie6b1T">Colab</a></td></tr>
+</tbody>
+</table>
+<h2><a class="anchor" aria-hidden="true" id="face-and-emotion-recognition"></a><a href="#face-and-emotion-recognition" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 [...]
+<table>
+<thead>
+<tr><th>Model</th><th>Dataset</th><th>Links</th></tr>
+</thead>
+<tbody>
+<tr><td>ArcFace</td><td>Refined MS-Celeb-1M</td><td><a href="https://colab.research.google.com/drive/1qanaqUKGIDtifdzEzJOHjEj4kYzA9uJC">Colab</a></td></tr>
+<tr><td>Emotion FerPlus</td><td><a href="https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data">Facial Expression Recognition Challenge</a></td><td><a href="https://colab.research.google.com/drive/1XHtBQGRhe58PDi4LGYJzYueWBeWbO23r">Colab</a></td></tr>
+</tbody>
+</table>
+<h2><a class="anchor" aria-hidden="true" id="image-generation"></a><a href="#image-generation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<table>
+<thead>
+<tr><th>Model</th><th>Dataset</th><th>Links</th></tr>
+</thead>
+<tbody>
+<tr><td>GAN</td><td>MNIST</td><td><a href="https://colab.research.google.com/drive/1f86MNDW47DJqHoIqWD1tOxcyx2MWys8L">Colab</a></td></tr>
+<tr><td>LSGAN</td><td>MNIST</td><td><a href="https://colab.research.google.com/drive/1C6jNRf28vnFOI9JVM4lpkJPqxsnhxdol">Colab</a></td></tr>
+</tbody>
+</table>
+<h2><a class="anchor" aria-hidden="true" id="machine-comprehension"></a><a href="#machine-comprehension" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
+<table>
+<thead>
+<tr><th>Model</th><th>Dataset</th><th>Links</th></tr>
+</thead>
+<tbody>
+<tr><td>Bert-Squad</td><td><a href="https://rajpurkar.github.io/SQuAD-explorer/explore/1.1/dev/">SQuAD v1.1</a></td><td><a href="https://colab.research.google.com/drive/1kud-lUPjS_u-TkDAzihBTw0Vqr0FjCE-">Colab</a></td></tr>
+</tbody>
+</table>
+<h2><a class="anchor" aria-hidden="true" id="misc"></a><a href="#misc" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
+<ul>
+<li>Restricted Boltzmann Machine over the MNIST dataset, <a href="">source</a>,
+<a href="https://colab.research.google.com/drive/19996noGu9JyHHkVmp4edBGu7PJSRQKsd">Colab</a>.</li>
+</ul>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/9/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/software-stack"><span class="arrow-prev">← </span><span>Software Stack</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/device"><span>Device</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#image-classification">Image Classification</ [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/git-workflow.html b/content/docs/3.0.0.rc1/git-workflow.html
new file mode 100644
index 0000000..7e7f493
--- /dev/null
+++ b/content/docs/3.0.0.rc1/git-workflow.html
@@ -0,0 +1,190 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Git Workflow · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright ow [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/git-workflow.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Git Workflow</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor  [...]
+<h2><a class="anchor" aria-hidden="true" id="for-developers"></a><a href="#for-developers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<ol>
+<li><p>Fork the <a href="https://github.com/apache/singa">SINGA Github repository</a> to your
+own Github account.</p></li>
+<li><p>Clone the <strong>repo</strong> (short for repository) from your Github</p>
+<pre><code class="hljs css language-shell">git clone https://github.com/&lt;Github account&gt;/singa.git
+git remote add upstream https://github.com/apache/singa.git
+</code></pre></li>
+<li><p>Create a new branch (e.g., <code>feature-foo</code> or <code>fixbug-foo</code>), work on it and
+commit your code.</p>
+<pre><code class="hljs css language-shell">git checkout dev
+git checkout -b feature-foo
+<span class="hljs-meta">#</span><span class="bash"> write your code</span>
+git add &lt;created/updated files&gt;
+git commit
+</code></pre>
+<p>The commit message should include:</p>
+<ul>
+<li>A descriptive Title.</li>
+<li>A detailed description. If the commit is to fix a bug, the description
+should ideally include a short reproduction of the problem. For new
+features, it may include the motivation/purpose of this new feature.</li>
+</ul>
+<p>If your branch has many small commits, you need to clean those commits via</p>
+<pre><code class="hljs css language-shell">git rebase -i &lt;commit id&gt;
+</code></pre>
+<p>You can
+<a href="https://help.github.com/en/articles/about-git-rebase">squash and reword</a> the
+commits.</p></li>
+<li><p>When you are working on the code, the <code>dev</code> of SINGA may have been updated by
+others; In this case, you need to pull the latest dev</p>
+<pre><code class="hljs css language-shell">git checkout dev
+git pull upstream dev:dev
+</code></pre></li>
+<li><p><a href="https://git-scm.com/book/en/v2/Git-Branching-Rebasing">Rebase</a> <code>feature-foo</code>
+onto the <code>dev</code> branch and push commits to your own Github account (the new
+branch). The rebase operation is to make the commit history clean. The
+following git instructors should be executed after committing the current
+work:</p>
+<pre><code class="hljs css language-shell">git checkout feature-foo
+git rebase dev
+git push origin feature-foo:feature-foo
+</code></pre>
+<p>The rebase command does the
+<a href="https://git-scm.com/book/en/v2/Git-Branching-Rebasing">following steps</a>:
+&quot;This operation works by going to the common ancestor of the two branches
+(the one you’re on and the one you’re rebasing onto), getting the diff
+introduced by each commit of the branch you’re on, saving those diffs to
+temporary files, resetting the current branch to the same commit as the
+branch you are rebasing onto, and finally applying each change in turn.&quot;
+Therefore, after executing it, you will be still on the feature branch, but
+your own commit IDs/hashes are changed since the diffs are committed during
+rebase; and your branch now has the latest code from the dev branch and your
+own branch.</p></li>
+<li><p>Open a pull request (PR) against the dev branch of apache/singa on Github
+website. If you want to inform other contributors who worked on the same
+files, you can find the file(s) on Github and click &quot;Blame&quot; to see a
+line-by-line annotation of who changed the code last. Then, you can add
+@username in the PR description to ping them immediately. Please state that
+the contribution is your original work and that you license the work to the
+project under the project's open source license. Further commits (e.g., bug
+fix) to your new branch will be added to this pull request automatically by
+Github.</p></li>
+<li><p>Wait for committers to review the PR. During this time, the dev of SINGA may
+have been updated by others, and then you need to
+<a href="https://docs.fast.ai/dev/git.html#how-to-keep-your-feature-branch-up-to-date">merge the latest dev</a>
+to resolve conflicts. Some people
+<a href="https://github.com/edx/edx-platform/wiki/How-to-Rebase-a-Pull-Request">rebase the PR onto the latest dev</a>
+instead of merging. However, if other developers fetch this PR to add new
+features and then send PR, the rebase operation would introduce <strong>duplicate
+commits</strong> (with different hash) in the future PR. See
+<a href="https://www.atlassian.com/git/tutorials/merging-vs-rebasing">The Golden Rule of Rebasing</a>
+for the details of when to avoid using rebase. Another simple solution to
+update the PR (to fix conflicts or commit errors) is to checkout a new branch
+from the latest dev branch of Apache SINGAS repo; copy and paste the
+updated/added code; commit and send a new PR.</p></li>
+</ol>
+<h2><a class="anchor" aria-hidden="true" id="for-committers"></a><a href="#for-committers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>Committers can merge the pull requests (PRs) into the dev branch of the upstream
+repo. Before merging each PR, the committer should</p>
+<ul>
+<li>check the commit message (content and format)</li>
+<li>check the changes to existing code. API changes should be recorded</li>
+<li>check the Travis testing results for code/doc format and unit tests</li>
+</ul>
+<p>There are two approaches to merge a pull request:</p>
+<ul>
+<li><p>On Github. Follow the <a href="https://gitbox.apache.org/setup/">instructions</a> to
+connect your Apache account with your Github account. After that you can
+directly merge PRs on GitHub.</p></li>
+<li><p>To merge pull request <a href="https://github.com/apache/singa/pull/xxx">https://github.com/apache/singa/pull/xxx</a> via command
+line, the following instructions should be executed,</p>
+<pre><code class="hljs css language-shell">git clone https://github.com/apache/singa.git
+git remote add asf https://gitbox.apache.org/repos/asf/singa.git
+git fetch origin pull/xxx/head:prxxx
+git checkout dev
+git merge --no-ff prxxx
+git push asf dev:dev
+</code></pre>
+<p>Do not use rebase to merge the PR; and disable fast forward.</p></li>
+</ul>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/how-to-release"><span class="arrow-prev">← </span><span>How to Prepare a Release</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#for-developers">For Developers</a></li><li><a href="#for-committers">For Committers</a></li></ul></nav></div><footer class="nav-footer" id="footer">< [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/git-workflow/index.html b/content/docs/3.0.0.rc1/git-workflow/index.html
new file mode 100644
index 0000000..7e7f493
--- /dev/null
+++ b/content/docs/3.0.0.rc1/git-workflow/index.html
@@ -0,0 +1,190 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Git Workflow · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright ow [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/git-workflow.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Git Workflow</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor  [...]
+<h2><a class="anchor" aria-hidden="true" id="for-developers"></a><a href="#for-developers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<ol>
+<li><p>Fork the <a href="https://github.com/apache/singa">SINGA Github repository</a> to your
+own Github account.</p></li>
+<li><p>Clone the <strong>repo</strong> (short for repository) from your Github</p>
+<pre><code class="hljs css language-shell">git clone https://github.com/&lt;Github account&gt;/singa.git
+git remote add upstream https://github.com/apache/singa.git
+</code></pre></li>
+<li><p>Create a new branch (e.g., <code>feature-foo</code> or <code>fixbug-foo</code>), work on it and
+commit your code.</p>
+<pre><code class="hljs css language-shell">git checkout dev
+git checkout -b feature-foo
+<span class="hljs-meta">#</span><span class="bash"> write your code</span>
+git add &lt;created/updated files&gt;
+git commit
+</code></pre>
+<p>The commit message should include:</p>
+<ul>
+<li>A descriptive Title.</li>
+<li>A detailed description. If the commit is to fix a bug, the description
+should ideally include a short reproduction of the problem. For new
+features, it may include the motivation/purpose of this new feature.</li>
+</ul>
+<p>If your branch has many small commits, you need to clean those commits via</p>
+<pre><code class="hljs css language-shell">git rebase -i &lt;commit id&gt;
+</code></pre>
+<p>You can
+<a href="https://help.github.com/en/articles/about-git-rebase">squash and reword</a> the
+commits.</p></li>
+<li><p>When you are working on the code, the <code>dev</code> of SINGA may have been updated by
+others; In this case, you need to pull the latest dev</p>
+<pre><code class="hljs css language-shell">git checkout dev
+git pull upstream dev:dev
+</code></pre></li>
+<li><p><a href="https://git-scm.com/book/en/v2/Git-Branching-Rebasing">Rebase</a> <code>feature-foo</code>
+onto the <code>dev</code> branch and push commits to your own Github account (the new
+branch). The rebase operation is to make the commit history clean. The
+following git instructors should be executed after committing the current
+work:</p>
+<pre><code class="hljs css language-shell">git checkout feature-foo
+git rebase dev
+git push origin feature-foo:feature-foo
+</code></pre>
+<p>The rebase command does the
+<a href="https://git-scm.com/book/en/v2/Git-Branching-Rebasing">following steps</a>:
+&quot;This operation works by going to the common ancestor of the two branches
+(the one you’re on and the one you’re rebasing onto), getting the diff
+introduced by each commit of the branch you’re on, saving those diffs to
+temporary files, resetting the current branch to the same commit as the
+branch you are rebasing onto, and finally applying each change in turn.&quot;
+Therefore, after executing it, you will be still on the feature branch, but
+your own commit IDs/hashes are changed since the diffs are committed during
+rebase; and your branch now has the latest code from the dev branch and your
+own branch.</p></li>
+<li><p>Open a pull request (PR) against the dev branch of apache/singa on Github
+website. If you want to inform other contributors who worked on the same
+files, you can find the file(s) on Github and click &quot;Blame&quot; to see a
+line-by-line annotation of who changed the code last. Then, you can add
+@username in the PR description to ping them immediately. Please state that
+the contribution is your original work and that you license the work to the
+project under the project's open source license. Further commits (e.g., bug
+fix) to your new branch will be added to this pull request automatically by
+Github.</p></li>
+<li><p>Wait for committers to review the PR. During this time, the dev of SINGA may
+have been updated by others, and then you need to
+<a href="https://docs.fast.ai/dev/git.html#how-to-keep-your-feature-branch-up-to-date">merge the latest dev</a>
+to resolve conflicts. Some people
+<a href="https://github.com/edx/edx-platform/wiki/How-to-Rebase-a-Pull-Request">rebase the PR onto the latest dev</a>
+instead of merging. However, if other developers fetch this PR to add new
+features and then send PR, the rebase operation would introduce <strong>duplicate
+commits</strong> (with different hash) in the future PR. See
+<a href="https://www.atlassian.com/git/tutorials/merging-vs-rebasing">The Golden Rule of Rebasing</a>
+for the details of when to avoid using rebase. Another simple solution to
+update the PR (to fix conflicts or commit errors) is to checkout a new branch
+from the latest dev branch of Apache SINGAS repo; copy and paste the
+updated/added code; commit and send a new PR.</p></li>
+</ol>
+<h2><a class="anchor" aria-hidden="true" id="for-committers"></a><a href="#for-committers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<p>Committers can merge the pull requests (PRs) into the dev branch of the upstream
+repo. Before merging each PR, the committer should</p>
+<ul>
+<li>check the commit message (content and format)</li>
+<li>check the changes to existing code. API changes should be recorded</li>
+<li>check the Travis testing results for code/doc format and unit tests</li>
+</ul>
+<p>There are two approaches to merge a pull request:</p>
+<ul>
+<li><p>On Github. Follow the <a href="https://gitbox.apache.org/setup/">instructions</a> to
+connect your Apache account with your Github account. After that you can
+directly merge PRs on GitHub.</p></li>
+<li><p>To merge pull request <a href="https://github.com/apache/singa/pull/xxx">https://github.com/apache/singa/pull/xxx</a> via command
+line, the following instructions should be executed,</p>
+<pre><code class="hljs css language-shell">git clone https://github.com/apache/singa.git
+git remote add asf https://gitbox.apache.org/repos/asf/singa.git
+git fetch origin pull/xxx/head:prxxx
+git checkout dev
+git merge --no-ff prxxx
+git push asf dev:dev
+</code></pre>
+<p>Do not use rebase to merge the PR; and disable fast forward.</p></li>
+</ul>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/how-to-release"><span class="arrow-prev">← </span><span>How to Prepare a Release</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#for-developers">For Developers</a></li><li><a href="#for-committers">For Committers</a></li></ul></nav></div><footer class="nav-footer" id="footer">< [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/graph.html b/content/docs/3.0.0.rc1/graph.html
new file mode 100644
index 0000000..9fac20a
--- /dev/null
+++ b/content/docs/3.0.0.rc1/graph.html
@@ -0,0 +1,651 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Computational Graph · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyri [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/graph.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Computational Graph</h1></header><article><div><span><!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor l [...]
+<p>SINGA can buffering operations to create a computational graph (CG). With the
+computational graph, SINGA can schedule the execution of operations as well as
+the memory allocation and release. It makes training more efficient while using
+less memory.</p>
+<h2><a class="anchor" aria-hidden="true" id="about-computational-graph"></a><a href="#about-computational-graph" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
+<h3><a class="anchor" aria-hidden="true" id="introduction"></a><a href="#introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>Computational graph is used to represent networks of the flow of computation. It
+is composed of many nodes and edges, where nodes represent various operations
+and edges represent data. In deep neural networks, nodes are tensor-based
+operations such as convolution and edges are tensors.</p>
+<p>The entire neural network is equivalent to a computational graph, all neural
+networks can correspond to a calculation graph. By representing the neural
+network as a calculation graph, some optimizations for neural networks can be
+performed on the calculation graph.</p>
+<h3><a class="anchor" aria-hidden="true" id="pipeline"></a><a href="#pipeline" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>The whole process of using the calculational graph to represent the model and
+execute the graph consists of roughly four steps. The whole process is actually
+similar to compiling. We first describe the program with code, then translate
+the program into intermediate code, then optimize the intermediate code and
+finally come up with many ways to efficiently execute the code. In neural
+networks, the intermediate code is the calculation graph. We can optimize
+through techniques like common sub-expression elimination. When the computer
+executes the compiled binary file, it can be efficiently executed by using
+multi-thread technology, and the same as the execution of the calculation graph.
+Therefore, some ideas of compilation principles can also be used in the
+optimization of calculation graphs.</p>
+<ul>
+<li><p>Write the python code for the model.</p></li>
+<li><p>Construct the computational graph based on the python code.</p></li>
+<li><p>Optimize the computational graph.</p></li>
+<li><p>Execute the computational graph efficiently.</p></li>
+</ul>
+<p>Figure 1 shows a simple example of going through the entire process.</p>
+<p><img src="assets/GraphPipeline.png" alt="The pipeline of using computational graph" style="zoom:40%;" /></p>
+<p><br/><strong>Figure 1 - The pipeline of using computational graph</strong></p>
+<h3><a class="anchor" aria-hidden="true" id="an-example-of-mlp"></a><a href="#an-example-of-mlp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>A simple MLP model can be constructed on the Python side by using some APIs of
+SINGA.</p>
+<pre><code class="hljs css language-python">x = autograd.matmul(inputs, w0)
+x = autograd.add_bias(x, b0)
+x = autograd.relu(x)
+x = autograd.matmul(x, w1)
+x = autograd.add_bias(x, b1)
+loss = autograd.softmax_cross_entropy(x, target)
+sgd.backward_and_update(loss)
+</code></pre>
+<p>When the model is defined, there is actually a calculation graph corresponding
+to it. This calculation graph contains the calculations that the entire SINGA
+will perform. Figure 2 shows the computational graph corresponding to the MLP
+model defined above.</p>
+<p><img src="/docs/assets/GraphOfMLP.png" alt="The computational graph of MLP"></p>
+<p><br/><strong>Figure 2 - The computational graph of MLP</strong></p>
+<h2><a class="anchor" aria-hidden="true" id="features"></a><a href="#features" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>There are four main components of a computational graph in SINGA, namely (i)
+Computational graph construction, (ii) Lazy allocation, (iii) Automatic
+recycling, (iv) Shared memory. Details are as follows:</p>
+<ul>
+<li><code>Computational graph construction</code>: Construct a computational graph based on
+the mathematical or deep learning operations, and then run the graph to
+accomplish the training task. The computational graph also includes operations
+like communicator.synch and communicator.fusedSynch for the distributed
+training.</li>
+<li><code>Lazy allocation</code>: When blocks are allocated, devices do not allocate memory
+for them immediately. Devices do memory allocation only when an operation uses
+this block for the first time.</li>
+<li><code>Automatic recycling</code>: When we are running a graph in an iteration, it
+automatically deallocates the intermediate tensors which won't be used again
+in the remaining operations.</li>
+<li><code>Shared memory</code>: When two operations will never be performed at the same time,
+the result tensors produced by them can share a piece of memory.</li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="how-to-use"></a><a href="#how-to-use" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<ul>
+<li>A CNN example.</li>
+</ul>
+<pre><code class="hljs css language-Python">
+<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">CNN</span><span class="hljs-params">(module.Module)</span>:</span>
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(self, optimizer)</span>:</span>
+        super(CNN, self).__init__()
+
+        self.conv1 = autograd.Conv2d(<span class="hljs-number">1</span>, <span class="hljs-number">20</span>, <span class="hljs-number">5</span>, padding=<span class="hljs-number">0</span>)
+        self.conv2 = autograd.Conv2d(<span class="hljs-number">20</span>, <span class="hljs-number">50</span>, <span class="hljs-number">5</span>, padding=<span class="hljs-number">0</span>)
+        self.linear1 = autograd.Linear(<span class="hljs-number">4</span> * <span class="hljs-number">4</span> * <span class="hljs-number">50</span>, <span class="hljs-number">500</span>)
+        self.linear2 = autograd.Linear(<span class="hljs-number">500</span>, <span class="hljs-number">10</span>)
+        self.pooling1 = autograd.MaxPool2d(<span class="hljs-number">2</span>, <span class="hljs-number">2</span>, padding=<span class="hljs-number">0</span>)
+        self.pooling2 = autograd.MaxPool2d(<span class="hljs-number">2</span>, <span class="hljs-number">2</span>, padding=<span class="hljs-number">0</span>)
+
+        self.optimizer = optimizer
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">forward</span><span class="hljs-params">(self, x)</span>:</span>
+        y = self.conv1(x)
+        y = autograd.relu(y)
+        y = self.pooling1(y)
+        y = self.conv2(y)
+        y = autograd.relu(y)
+        y = self.pooling2(y)
+        y = autograd.flatten(y)
+        y = self.linear1(y)
+        y = autograd.relu(y)
+        y = self.linear2(y)
+        <span class="hljs-keyword">return</span> y
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">loss</span><span class="hljs-params">(self, x, ty)</span>:</span>
+        <span class="hljs-keyword">return</span> autograd.softmax_cross_entropy(x, ty)
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">optim</span><span class="hljs-params">(self, loss)</span>:</span>
+        self.optimizer.backward_and_update(loss)
+
+<span class="hljs-comment"># initialization other objects</span>
+<span class="hljs-comment"># ......</span>
+model = CNN(sgd)
+model.train()
+model.on_device(dev)
+model.graph(graph, sequential)
+
+<span class="hljs-comment"># Train</span>
+<span class="hljs-keyword">for</span> b <span class="hljs-keyword">in</span> range(num_train_batch):
+    <span class="hljs-comment"># Generate the patch data in this iteration</span>
+    <span class="hljs-comment"># ......</span>
+
+    <span class="hljs-comment"># Copy the patch data into input tensors</span>
+    tx.copy_from_numpy(x)
+    ty.copy_from_numpy(y)
+
+    <span class="hljs-comment"># Train the model</span>
+    out = model(tx)
+    loss = model.loss(out, ty)
+    model.optim(loss)
+</code></pre>
+<p>A Google Colab notebook of this example is available
+<a href="https://colab.research.google.com/drive/1fbGUs1AsoX6bU5F745RwQpohP4bHTktq">here</a>.</p>
+<ul>
+<li>Some settings:
+<a href="https://github.com/apache/singa/blob/master/python/singa/module.py">module.py</a>
+<ul>
+<li><code>training</code>: whether to train the neural network defined in the class or for
+evaluation.</li>
+<li><code>graph_mode</code>: the model class defined by users can be trained using
+computational graph or not.</li>
+<li><code>sequential</code>: execute operations in graph serially or in the order of BFS.</li>
+</ul></li>
+<li>More examples:
+<ul>
+<li><a href="https://github.com/apache/singa/blob/master/examples/autograd/mlp_module.py">MLP</a></li>
+<li><a href="https://github.com/apache/singa/blob/master/examples/autograd/cnn_module.py">CNN</a></li>
+<li><a href="https://github.com/apache/singa/blob/master/examples/autograd/resnet_module.py">ResNet</a></li>
+</ul></li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="experiments"></a><a href="#experiments" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
+<h3><a class="anchor" aria-hidden="true" id="single-node"></a><a href="#single-node" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
+<ul>
+<li>Experiment settings
+<ul>
+<li>Model
+<ul>
+<li>Using layer: ResNet50 in
+<a href="https://github.com/apache/singa/blob/master/examples/autograd/resnet.py">resnet.py</a></li>
+<li>Using module: ResNet50 in
+<a href="https://github.com/apache/singa/blob/master/examples/autograd/resnet_module.py">resnet_module.py</a></li>
+</ul></li>
+<li>GPU: NVIDIA RTX 2080Ti</li>
+</ul></li>
+<li>Notations
+<ul>
+<li><code>s</code> :second</li>
+<li><code>it</code> : iteration</li>
+<li><code>Mem</code>:peak memory usage of single GPU</li>
+<li><code>Throughout</code>:number of images processed per second</li>
+<li><code>Time</code>:total time</li>
+<li><code>Speed</code>:iterations per second</li>
+<li><code>Reduction</code>:the memory usage reduction rate compared with that using layer</li>
+<li><code>Speedup</code>: speedup ratio compared with dev branch</li>
+</ul></li>
+<li>Result
+  <table style="text-align: center">
+      <tr>
+          <th style="text-align: center">Batchsize</th>
+          <th style="text-align: center">Cases</th>
+          <th style="text-align: center">Mem(MB)</th>
+          <th style="text-align: center">Time(s)</th>
+          <th style="text-align: center">Speed(it/s)</th>
+          <th style="text-align: center">Throughput</th>
+          <th style="text-align: center">Reduction</th>
+          <th style="text-align: center">Speedup</th>
+      </tr>
+      <tr>
+          <td rowspan="4">16</td>
+          <td nowrap>layer</td>
+          <td>4975</td>
+          <td>14.1952</td>
+          <td>14.0893</td>
+          <td>225.4285</td>
+          <td>0.00%</td>
+          <td>1.0000</td>
+      </tr>
+      <tr>
+          <td nowrap>module:disable graph</td>
+          <td>4995</td>
+          <td>14.1264</td>
+          <td>14.1579</td>
+          <td>226.5261</td>
+          <td>-0.40%</td>
+          <td>1.0049</td>
+      </tr>
+      <tr>
+          <td nowrap>module:enable graph, bfs</td>
+          <td>3283</td>
+          <td>13.7438</td>
+          <td>14.5520</td>
+          <td>232.8318</td>
+          <td>34.01%</td>
+          <td>1.0328</td>
+      </tr>
+      <tr>
+          <td nowrap>module:enable graph, serial</td>
+          <td>3265</td>
+          <td>13.7420</td>
+          <td>14.5540</td>
+          <td>232.8635</td>
+          <td>34.37%</td>
+          <td>1.0330</td>
+      </tr>
+      <tr>
+          <td rowspan="4">32</td>
+          <td nowrap>layer</td>
+          <td>10119</td>
+          <td>13.4587</td>
+          <td>7.4302</td>
+          <td>237.7649</td>
+          <td>0.00%</td>
+          <td>1.0000</td>
+      </tr>
+      <tr>
+          <td nowrap>module:enable graph</td>
+          <td>10109</td>
+          <td>13.2952</td>
+          <td>7.5315</td>
+          <td>240.6875</td>
+          <td>0.10%</td>
+          <td>1.0123</td>
+      </tr>
+      <tr>
+          <td nowrap>module:enable graph, bfs</td>
+          <td>6839</td>
+          <td>13.1059</td>
+          <td>7.6302</td>
+          <td>244.1648</td>
+          <td>32.41%</td>
+          <td>1.0269</td>
+      </tr>
+      <tr>
+          <td nowrap>module:enable graph, serial</td>
+          <td>6845</td>
+          <td>13.0489</td>
+          <td>7.6635</td>
+          <td>245.2312</td>
+          <td>32.35%</td>
+          <td>1.0314</td>
+      </tr>
+  </table>
+</li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="multi-processes"></a><a href="#multi-processes" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<ul>
+<li>Experiment settings
+<ul>
+<li>Model
+<ul>
+<li>using Layer: ResNet50 in
+<a href="https://github.com/apache/singa/blob/master/examples/autograd/resnet_dist.py">resnet_dist.py</a></li>
+<li>using Module: ResNet50 in
+<a href="https://github.com/apache/singa/blob/master/examples/autograd/resnet_module.py">resnet_module.py</a></li>
+</ul></li>
+<li>GPU: NVIDIA RTX 2080Ti * 2</li>
+<li>MPI: two MPI processes on one node</li>
+</ul></li>
+<li>Notations: the same as above</li>
+<li>Result
+  <table style="text-align: center">
+      <tr>
+          <th style="text-align: center">Batchsize</th>
+          <th style="text-align: center">Cases</th>
+          <th style="text-align: center">Mem(MB)</th>
+          <th style="text-align: center">Time(s)</th>
+          <th style="text-align: center">Speed(it/s)</th>
+          <th style="text-align: center">Throughput</th>
+          <th style="text-align: center">Reduction</th>
+          <th style="text-align: center">Speedup</th>
+      </tr>
+      <tr>
+          <td rowspan="4">16</td>
+          <td nowrap>layer</td>
+          <td>5439</td>
+          <td>17.3323</td>
+          <td>11.5391</td>
+          <td>369.2522</td>
+          <td>0.00%</td>
+          <td>1.0000</td>
+      </tr>
+      <tr>
+          <td nowrap>module:disable graph</td>
+          <td>5427</td>
+          <td>17.8232</td>
+          <td>11.2213</td>
+          <td>359.0831</td>
+          <td>0.22%</td>
+          <td>0.9725</td>
+      </tr>
+      <tr>
+          <td nowrap>module:enable graph, bfs</td>
+          <td>3389</td>
+          <td>18.2310</td>
+          <td>10.9703</td>
+          <td>351.0504</td>
+          <td>37.69%</td>
+          <td>0.9507</td>
+      </tr>
+      <tr>
+          <td nowrap>module:enable graph, serial</td>
+          <td>3437</td>
+          <td>17.0389</td>
+          <td>11.7378</td>
+          <td>375.6103</td>
+          <td>36.81%</td>
+          <td>1.0172</td>
+      </tr>
+      <tr>
+          <td rowspan="4">32</td>
+          <td nowrap>layer</td>
+          <td>10547</td>
+          <td>14.8635</td>
+          <td>6.7279</td>
+          <td>430.5858</td>
+          <td>0.00%</td>
+          <td>1.0000</td>
+      </tr>
+      <tr>
+          <td nowrap>module:disable graph</td>
+          <td>10503</td>
+          <td>14.7746</td>
+          <td>6.7684</td>
+          <td>433.1748</td>
+          <td>0.42%</td>
+          <td>1.0060</td>
+      </tr>
+      <tr>
+          <td nowrap>module:enable graph, bfs</td>
+          <td>6935</td>
+          <td>14.8553</td>
+          <td>6.7316</td>
+          <td>430.8231</td>
+          <td>34.25%</td>
+          <td>1.0006</td>
+      </tr>
+      <tr>
+          <td nowrap>module:enable graph, serial</td>
+          <td>7027</td>
+          <td>14.3271</td>
+          <td>6.9798</td>
+          <td>446.7074</td>
+          <td>33.37%</td>
+          <td>1.0374</td>
+      </tr>
+  </table>
+</li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="conclusion"></a><a href="#conclusion" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<ul>
+<li>Computational graph does not affect training time and memory usage if the
+graph is disabled.</li>
+<li>Computational graph can significantly reduce memory usage and training time.</li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="implementation"></a><a href="#implementation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h3><a class="anchor" aria-hidden="true" id="computational-graph-construction"></a><a href="#computational-graph-construction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<ul>
+<li><p><code>Buffer the operations</code>: Use the technique of delayed execution to falsely
+perform operations in the forward propagation and backward propagation once.
+Buffer all the operations and the tensors read or written by each operation.
+Take matmul for example.</p>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># user calls an api to do matmul on two tensors</span>
+x = autograd.matmul(inputs, w0)
+
+<span class="hljs-comment"># Python code inside the api</span>
+singa.Mult(inputs, w)
+</code></pre>
+<pre><code class="hljs css language-c++"><span class="hljs-comment">// the backend platform</span>
+<span class="hljs-comment">// pass the specific execution function of the operation</span>
+<span class="hljs-comment">// and the tensors it will reads and writes during the calculation to the device.</span>
+C-&gt;device()-&gt;Exec(
+    [a, A, b, B, CRef](Context *ctx) <span class="hljs-keyword">mutable</span> {
+        GEMV&lt;DType, Lang&gt;(a, A, B, b, &amp;CRef, ctx);
+    },
+    read_blocks, {C-&gt;block()});
+</code></pre></li>
+<li><p><code>Build nodes and edges</code>: Build the nodes and edges of the operations passed to
+the device and add them into the computational graph. Since we just told the
+scheduler which blocks these operations will read and write and some of the
+tensors will share the same blocks, the scheduler will split one edge into
+multiple to ensure that the constructed graph is a directed acyclic graph.</p></li>
+<li><p><code>Analyze the graph</code>: Calculate dependencies between all the operations to
+decide the order of execution. The system will only analyze the same graph
+once. If new operations are added to the graph, the calculation graph will be
+re-analyzed.</p></li>
+<li><p><code>Run graph</code>: Execute all the operations in the order we just calculated to
+update all the parameters. Tensors are well scheduled to allocate and
+deallocate to save memory. After the analyzing, the operations in the graph
+can be executed based on the result of analyzing.</p></li>
+<li><p><code>Module</code>: Provided a module class on the Python side for users to use this
+feature more conveniently.</p></li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="lazy-allocation"></a><a href="#lazy-allocation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<ul>
+<li>When a device needs to create a new block, pass the device to that block only,
+instead of allocating a piece of memory from the mempool and passing the
+pointer to that block.</li>
+<li>When a block is accessed for the first time, the device corresponding to the
+block allocates memory and then access it.</li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="automatic-recycling"></a><a href="#automatic-recycling" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<ul>
+<li>When calculating dependencies between the operations during graph
+construction, the reference count of tensors can also be calculated.</li>
+<li>When an operation is completed, the schedualer decrease the reference count of
+tensors that the operation used.</li>
+<li>If a tensor's reference count reaches zero, it means the tensor won't be
+accessed by latter operations, so we can recycle its memory.</li>
+<li>The program will track the usage of the block. If a block is used on the
+python side, it will not be recycled, which is convenient for debugging on the
+python side.</li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="shared-memory"></a><a href="#shared-memory" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<ul>
+<li>Once the kernel function of an operation is added into the default cuda stream
+and the tensors used by the operation can be freed when the calculation is
+complete, the scheduler will free these tensors' memory immediately and no
+need to wait for the calculation to complete. Because subsequent operations
+will not be performed at the same time as the current operation as the
+platform now used the default stream of CUDA to finish the calculation. So the
+following tensors can share the same memory with these tensors.</li>
+<li>Use a mempool to manage the GPU memory. Scheduler returns the memory used by
+tensors to the mempool and the latter tensors will apply for memory from
+mempool. The mempool will find the most suitable blocks returned by the
+previous tensors for the latter tensors to share as much memory as possible.</li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="how-to-add-a-new-operation"></a><a href="#how-to-add-a-new-operation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
+<p>For new operations to be included in the computational graph, they should be
+submitted to the device. Device class on the CPP side will add these operations
+in the computational graph and the scheduler will schedule them automatically.</p>
+<h4><a class="anchor" aria-hidden="true" id="requirements"></a><a href="#requirements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>When submitting operations, there are some requirements.</p>
+<ul>
+<li><p>Need to pass in the function that the operation executes and the data blocks
+that the operation reads and writes</p></li>
+<li><p>For the function of the operation: All variables used in lambda expressions
+need to be captured according to the following rules.</p>
+<ul>
+<li><p><code>capture by value</code>: If the variable is a local variable or will be
+immediately released (e.g. intermediate tensors). If not captured by value,
+these variables will be destroyed after buffering. Buffering is just a way
+to defer real calculations.</p></li>
+<li><p><code>capture by reference</code>:If the variable is recorded on the python side or a
+global variable (e.g. The parameter W and ConvHand in the Conv2d class).</p></li>
+<li><p><code>mutable</code>: The lambda expression should have mutable tag if a variable
+captured by value is modified in an expression</p></li>
+</ul></li>
+</ul>
+<h4><a class="anchor" aria-hidden="true" id="example"></a><a href="#example" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<ul>
+<li>Python side:
+<a href="https://github.com/apache/singa/blob/dev/python/singa/autograd.py#L1191">_Conv2d</a>
+records x, W, b and handle in the class.</li>
+</ul>
+<pre><code class="hljs css language-python"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">_Conv2d</span><span class="hljs-params">(Operation)</span>:</span>
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(self, handle, odd_padding=<span class="hljs-params">(<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>)</span>)</span>:</span>
+        super(_Conv2d, self).__init__()
+        self.handle = handle  <span class="hljs-comment"># record handle</span>
+        self.odd_padding = odd_padding
+        <span class="hljs-keyword">if</span> self.odd_padding != (<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>):
+            self.re_new_handle = <span class="hljs-literal">True</span>
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">forward</span><span class="hljs-params">(self, x, W, b=None)</span>:</span>
+        <span class="hljs-comment"># other code</span>
+        <span class="hljs-comment"># ......</span>
+
+        <span class="hljs-keyword">if</span> training:
+            <span class="hljs-keyword">if</span> self.handle.bias_term:
+                self.inputs = (x, W, b) <span class="hljs-comment"># record x, W, b</span>
+            <span class="hljs-keyword">else</span>:
+                self.inputs = (x, W)
+
+        <span class="hljs-comment"># other code</span>
+        <span class="hljs-comment"># ......</span>
+
+        <span class="hljs-keyword">if</span> (type(self.handle) != singa.ConvHandle):
+            <span class="hljs-keyword">return</span> singa.GpuConvForward(x, W, b, self.handle)
+        <span class="hljs-keyword">else</span>:
+            <span class="hljs-keyword">return</span> singa.CpuConvForward(x, W, b, self.handle)
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">backward</span><span class="hljs-params">(self, dy)</span>:</span>
+        <span class="hljs-keyword">if</span> (type(self.handle) != singa.ConvHandle):
+            dx = singa.GpuConvBackwardx(dy, self.inputs[<span class="hljs-number">1</span>], self.inputs[<span class="hljs-number">0</span>],
+                                        self.handle)
+            dW = singa.GpuConvBackwardW(dy, self.inputs[<span class="hljs-number">0</span>], self.inputs[<span class="hljs-number">1</span>],
+                                        self.handle)
+            db = singa.GpuConvBackwardb(
+                dy, self.inputs[<span class="hljs-number">2</span>],
+                self.handle) <span class="hljs-keyword">if</span> self.handle.bias_term <span class="hljs-keyword">else</span> <span class="hljs-literal">None</span>
+        <span class="hljs-keyword">else</span>:
+            dx = singa.CpuConvBackwardx(dy, self.inputs[<span class="hljs-number">1</span>], self.inputs[<span class="hljs-number">0</span>],
+                                        self.handle)
+            dW = singa.CpuConvBackwardW(dy, self.inputs[<span class="hljs-number">0</span>], self.inputs[<span class="hljs-number">1</span>],
+                                        self.handle)
+            db = singa.CpuConvBackwardb(
+                dy, self.inputs[<span class="hljs-number">2</span>],
+                self.handle) <span class="hljs-keyword">if</span> self.handle.bias_term <span class="hljs-keyword">else</span> <span class="hljs-literal">None</span>
+        <span class="hljs-keyword">if</span> self.odd_padding != (<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>):
+            dx = utils.handle_odd_pad_bwd(dx, self.odd_padding)
+
+        <span class="hljs-keyword">if</span> db:
+            <span class="hljs-keyword">return</span> dx, dW, db
+
+        <span class="hljs-keyword">else</span>:
+            <span class="hljs-keyword">return</span> dx, dW
+</code></pre>
+<ul>
+<li>C++ side:
+<a href="https://github.com/apache/singa/blob/dev/src/model/operation/convolution.cc">convolution.cc</a></li>
+</ul>
+<pre><code class="hljs css language-c++"><span class="hljs-function">Tensor <span class="hljs-title">GpuConvBackwardx</span><span class="hljs-params">(<span class="hljs-keyword">const</span> Tensor &amp;dy, <span class="hljs-keyword">const</span> Tensor &amp;W, <span class="hljs-keyword">const</span> Tensor &amp;x,
+                        <span class="hljs-keyword">const</span> CudnnConvHandle &amp;cch)</span> </span>{
+  CHECK_EQ(dy.device()-&gt;lang(), kCuda);
+
+  Tensor dx;
+  dx.ResetLike(x);
+
+  dy.device()-&gt;Exec(
+      <span class="hljs-comment">/*
+       * dx is a local variable so it's captured by value
+       * dy is an intermediate tensor and isn't recorded on the python side
+       * W is an intermediate tensor but it's recorded on the python side
+       * chh is a variable and it's recorded on the python side
+       */</span>
+      [dx, dy, &amp;W, &amp;cch](Context *ctx) <span class="hljs-keyword">mutable</span> {
+        Block *wblock = W.block(), *dyblock = dy.block(), *dxblock = dx.block();
+        <span class="hljs-keyword">float</span> alpha = <span class="hljs-number">1.f</span>, beta = <span class="hljs-number">0.f</span>;
+        cudnnConvolutionBackwardData(
+            ctx-&gt;cudnn_handle, &amp;alpha, cch.filter_desc, wblock-&gt;data(),
+            cch.y_desc, dyblock-&gt;data(), cch.conv_desc, cch.bp_data_alg,
+            cch.workspace.block()-&gt;mutable_data(),
+            cch.workspace_count * <span class="hljs-keyword">sizeof</span>(<span class="hljs-keyword">float</span>), &amp;beta, cch.x_desc,
+            dxblock-&gt;mutable_data());
+      },
+      {dy.block(), W.block()}, {dx.block(), cch.workspace.block()});
+      <span class="hljs-comment">/* the lambda expression reads the blocks of tensor dy and w
+       * and writes the blocks of tensor dx and chh.workspace
+       */</span>
+
+  <span class="hljs-keyword">return</span> dx;
+}
+</code></pre>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/9/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/autograd"><span class="arrow-prev">← </span><span>Autograd</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/dist-train"><span>Distributed Training</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#about-computational-graph">About Compu [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/graph/index.html b/content/docs/3.0.0.rc1/graph/index.html
new file mode 100644
index 0000000..9fac20a
--- /dev/null
+++ b/content/docs/3.0.0.rc1/graph/index.html
@@ -0,0 +1,651 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Computational Graph · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyri [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/graph.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Computational Graph</h1></header><article><div><span><!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor l [...]
+<p>SINGA can buffering operations to create a computational graph (CG). With the
+computational graph, SINGA can schedule the execution of operations as well as
+the memory allocation and release. It makes training more efficient while using
+less memory.</p>
+<h2><a class="anchor" aria-hidden="true" id="about-computational-graph"></a><a href="#about-computational-graph" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
+<h3><a class="anchor" aria-hidden="true" id="introduction"></a><a href="#introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>Computational graph is used to represent networks of the flow of computation. It
+is composed of many nodes and edges, where nodes represent various operations
+and edges represent data. In deep neural networks, nodes are tensor-based
+operations such as convolution and edges are tensors.</p>
+<p>The entire neural network is equivalent to a computational graph, all neural
+networks can correspond to a calculation graph. By representing the neural
+network as a calculation graph, some optimizations for neural networks can be
+performed on the calculation graph.</p>
+<h3><a class="anchor" aria-hidden="true" id="pipeline"></a><a href="#pipeline" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>The whole process of using the calculational graph to represent the model and
+execute the graph consists of roughly four steps. The whole process is actually
+similar to compiling. We first describe the program with code, then translate
+the program into intermediate code, then optimize the intermediate code and
+finally come up with many ways to efficiently execute the code. In neural
+networks, the intermediate code is the calculation graph. We can optimize
+through techniques like common sub-expression elimination. When the computer
+executes the compiled binary file, it can be efficiently executed by using
+multi-thread technology, and the same as the execution of the calculation graph.
+Therefore, some ideas of compilation principles can also be used in the
+optimization of calculation graphs.</p>
+<ul>
+<li><p>Write the python code for the model.</p></li>
+<li><p>Construct the computational graph based on the python code.</p></li>
+<li><p>Optimize the computational graph.</p></li>
+<li><p>Execute the computational graph efficiently.</p></li>
+</ul>
+<p>Figure 1 shows a simple example of going through the entire process.</p>
+<p><img src="assets/GraphPipeline.png" alt="The pipeline of using computational graph" style="zoom:40%;" /></p>
+<p><br/><strong>Figure 1 - The pipeline of using computational graph</strong></p>
+<h3><a class="anchor" aria-hidden="true" id="an-example-of-mlp"></a><a href="#an-example-of-mlp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>A simple MLP model can be constructed on the Python side by using some APIs of
+SINGA.</p>
+<pre><code class="hljs css language-python">x = autograd.matmul(inputs, w0)
+x = autograd.add_bias(x, b0)
+x = autograd.relu(x)
+x = autograd.matmul(x, w1)
+x = autograd.add_bias(x, b1)
+loss = autograd.softmax_cross_entropy(x, target)
+sgd.backward_and_update(loss)
+</code></pre>
+<p>When the model is defined, there is actually a calculation graph corresponding
+to it. This calculation graph contains the calculations that the entire SINGA
+will perform. Figure 2 shows the computational graph corresponding to the MLP
+model defined above.</p>
+<p><img src="/docs/assets/GraphOfMLP.png" alt="The computational graph of MLP"></p>
+<p><br/><strong>Figure 2 - The computational graph of MLP</strong></p>
+<h2><a class="anchor" aria-hidden="true" id="features"></a><a href="#features" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>There are four main components of a computational graph in SINGA, namely (i)
+Computational graph construction, (ii) Lazy allocation, (iii) Automatic
+recycling, (iv) Shared memory. Details are as follows:</p>
+<ul>
+<li><code>Computational graph construction</code>: Construct a computational graph based on
+the mathematical or deep learning operations, and then run the graph to
+accomplish the training task. The computational graph also includes operations
+like communicator.synch and communicator.fusedSynch for the distributed
+training.</li>
+<li><code>Lazy allocation</code>: When blocks are allocated, devices do not allocate memory
+for them immediately. Devices do memory allocation only when an operation uses
+this block for the first time.</li>
+<li><code>Automatic recycling</code>: When we are running a graph in an iteration, it
+automatically deallocates the intermediate tensors which won't be used again
+in the remaining operations.</li>
+<li><code>Shared memory</code>: When two operations will never be performed at the same time,
+the result tensors produced by them can share a piece of memory.</li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="how-to-use"></a><a href="#how-to-use" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<ul>
+<li>A CNN example.</li>
+</ul>
+<pre><code class="hljs css language-Python">
+<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">CNN</span><span class="hljs-params">(module.Module)</span>:</span>
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(self, optimizer)</span>:</span>
+        super(CNN, self).__init__()
+
+        self.conv1 = autograd.Conv2d(<span class="hljs-number">1</span>, <span class="hljs-number">20</span>, <span class="hljs-number">5</span>, padding=<span class="hljs-number">0</span>)
+        self.conv2 = autograd.Conv2d(<span class="hljs-number">20</span>, <span class="hljs-number">50</span>, <span class="hljs-number">5</span>, padding=<span class="hljs-number">0</span>)
+        self.linear1 = autograd.Linear(<span class="hljs-number">4</span> * <span class="hljs-number">4</span> * <span class="hljs-number">50</span>, <span class="hljs-number">500</span>)
+        self.linear2 = autograd.Linear(<span class="hljs-number">500</span>, <span class="hljs-number">10</span>)
+        self.pooling1 = autograd.MaxPool2d(<span class="hljs-number">2</span>, <span class="hljs-number">2</span>, padding=<span class="hljs-number">0</span>)
+        self.pooling2 = autograd.MaxPool2d(<span class="hljs-number">2</span>, <span class="hljs-number">2</span>, padding=<span class="hljs-number">0</span>)
+
+        self.optimizer = optimizer
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">forward</span><span class="hljs-params">(self, x)</span>:</span>
+        y = self.conv1(x)
+        y = autograd.relu(y)
+        y = self.pooling1(y)
+        y = self.conv2(y)
+        y = autograd.relu(y)
+        y = self.pooling2(y)
+        y = autograd.flatten(y)
+        y = self.linear1(y)
+        y = autograd.relu(y)
+        y = self.linear2(y)
+        <span class="hljs-keyword">return</span> y
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">loss</span><span class="hljs-params">(self, x, ty)</span>:</span>
+        <span class="hljs-keyword">return</span> autograd.softmax_cross_entropy(x, ty)
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">optim</span><span class="hljs-params">(self, loss)</span>:</span>
+        self.optimizer.backward_and_update(loss)
+
+<span class="hljs-comment"># initialization other objects</span>
+<span class="hljs-comment"># ......</span>
+model = CNN(sgd)
+model.train()
+model.on_device(dev)
+model.graph(graph, sequential)
+
+<span class="hljs-comment"># Train</span>
+<span class="hljs-keyword">for</span> b <span class="hljs-keyword">in</span> range(num_train_batch):
+    <span class="hljs-comment"># Generate the patch data in this iteration</span>
+    <span class="hljs-comment"># ......</span>
+
+    <span class="hljs-comment"># Copy the patch data into input tensors</span>
+    tx.copy_from_numpy(x)
+    ty.copy_from_numpy(y)
+
+    <span class="hljs-comment"># Train the model</span>
+    out = model(tx)
+    loss = model.loss(out, ty)
+    model.optim(loss)
+</code></pre>
+<p>A Google Colab notebook of this example is available
+<a href="https://colab.research.google.com/drive/1fbGUs1AsoX6bU5F745RwQpohP4bHTktq">here</a>.</p>
+<ul>
+<li>Some settings:
+<a href="https://github.com/apache/singa/blob/master/python/singa/module.py">module.py</a>
+<ul>
+<li><code>training</code>: whether to train the neural network defined in the class or for
+evaluation.</li>
+<li><code>graph_mode</code>: the model class defined by users can be trained using
+computational graph or not.</li>
+<li><code>sequential</code>: execute operations in graph serially or in the order of BFS.</li>
+</ul></li>
+<li>More examples:
+<ul>
+<li><a href="https://github.com/apache/singa/blob/master/examples/autograd/mlp_module.py">MLP</a></li>
+<li><a href="https://github.com/apache/singa/blob/master/examples/autograd/cnn_module.py">CNN</a></li>
+<li><a href="https://github.com/apache/singa/blob/master/examples/autograd/resnet_module.py">ResNet</a></li>
+</ul></li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="experiments"></a><a href="#experiments" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
+<h3><a class="anchor" aria-hidden="true" id="single-node"></a><a href="#single-node" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
+<ul>
+<li>Experiment settings
+<ul>
+<li>Model
+<ul>
+<li>Using layer: ResNet50 in
+<a href="https://github.com/apache/singa/blob/master/examples/autograd/resnet.py">resnet.py</a></li>
+<li>Using module: ResNet50 in
+<a href="https://github.com/apache/singa/blob/master/examples/autograd/resnet_module.py">resnet_module.py</a></li>
+</ul></li>
+<li>GPU: NVIDIA RTX 2080Ti</li>
+</ul></li>
+<li>Notations
+<ul>
+<li><code>s</code> :second</li>
+<li><code>it</code> : iteration</li>
+<li><code>Mem</code>:peak memory usage of single GPU</li>
+<li><code>Throughout</code>:number of images processed per second</li>
+<li><code>Time</code>:total time</li>
+<li><code>Speed</code>:iterations per second</li>
+<li><code>Reduction</code>:the memory usage reduction rate compared with that using layer</li>
+<li><code>Speedup</code>: speedup ratio compared with dev branch</li>
+</ul></li>
+<li>Result
+  <table style="text-align: center">
+      <tr>
+          <th style="text-align: center">Batchsize</th>
+          <th style="text-align: center">Cases</th>
+          <th style="text-align: center">Mem(MB)</th>
+          <th style="text-align: center">Time(s)</th>
+          <th style="text-align: center">Speed(it/s)</th>
+          <th style="text-align: center">Throughput</th>
+          <th style="text-align: center">Reduction</th>
+          <th style="text-align: center">Speedup</th>
+      </tr>
+      <tr>
+          <td rowspan="4">16</td>
+          <td nowrap>layer</td>
+          <td>4975</td>
+          <td>14.1952</td>
+          <td>14.0893</td>
+          <td>225.4285</td>
+          <td>0.00%</td>
+          <td>1.0000</td>
+      </tr>
+      <tr>
+          <td nowrap>module:disable graph</td>
+          <td>4995</td>
+          <td>14.1264</td>
+          <td>14.1579</td>
+          <td>226.5261</td>
+          <td>-0.40%</td>
+          <td>1.0049</td>
+      </tr>
+      <tr>
+          <td nowrap>module:enable graph, bfs</td>
+          <td>3283</td>
+          <td>13.7438</td>
+          <td>14.5520</td>
+          <td>232.8318</td>
+          <td>34.01%</td>
+          <td>1.0328</td>
+      </tr>
+      <tr>
+          <td nowrap>module:enable graph, serial</td>
+          <td>3265</td>
+          <td>13.7420</td>
+          <td>14.5540</td>
+          <td>232.8635</td>
+          <td>34.37%</td>
+          <td>1.0330</td>
+      </tr>
+      <tr>
+          <td rowspan="4">32</td>
+          <td nowrap>layer</td>
+          <td>10119</td>
+          <td>13.4587</td>
+          <td>7.4302</td>
+          <td>237.7649</td>
+          <td>0.00%</td>
+          <td>1.0000</td>
+      </tr>
+      <tr>
+          <td nowrap>module:enable graph</td>
+          <td>10109</td>
+          <td>13.2952</td>
+          <td>7.5315</td>
+          <td>240.6875</td>
+          <td>0.10%</td>
+          <td>1.0123</td>
+      </tr>
+      <tr>
+          <td nowrap>module:enable graph, bfs</td>
+          <td>6839</td>
+          <td>13.1059</td>
+          <td>7.6302</td>
+          <td>244.1648</td>
+          <td>32.41%</td>
+          <td>1.0269</td>
+      </tr>
+      <tr>
+          <td nowrap>module:enable graph, serial</td>
+          <td>6845</td>
+          <td>13.0489</td>
+          <td>7.6635</td>
+          <td>245.2312</td>
+          <td>32.35%</td>
+          <td>1.0314</td>
+      </tr>
+  </table>
+</li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="multi-processes"></a><a href="#multi-processes" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<ul>
+<li>Experiment settings
+<ul>
+<li>Model
+<ul>
+<li>using Layer: ResNet50 in
+<a href="https://github.com/apache/singa/blob/master/examples/autograd/resnet_dist.py">resnet_dist.py</a></li>
+<li>using Module: ResNet50 in
+<a href="https://github.com/apache/singa/blob/master/examples/autograd/resnet_module.py">resnet_module.py</a></li>
+</ul></li>
+<li>GPU: NVIDIA RTX 2080Ti * 2</li>
+<li>MPI: two MPI processes on one node</li>
+</ul></li>
+<li>Notations: the same as above</li>
+<li>Result
+  <table style="text-align: center">
+      <tr>
+          <th style="text-align: center">Batchsize</th>
+          <th style="text-align: center">Cases</th>
+          <th style="text-align: center">Mem(MB)</th>
+          <th style="text-align: center">Time(s)</th>
+          <th style="text-align: center">Speed(it/s)</th>
+          <th style="text-align: center">Throughput</th>
+          <th style="text-align: center">Reduction</th>
+          <th style="text-align: center">Speedup</th>
+      </tr>
+      <tr>
+          <td rowspan="4">16</td>
+          <td nowrap>layer</td>
+          <td>5439</td>
+          <td>17.3323</td>
+          <td>11.5391</td>
+          <td>369.2522</td>
+          <td>0.00%</td>
+          <td>1.0000</td>
+      </tr>
+      <tr>
+          <td nowrap>module:disable graph</td>
+          <td>5427</td>
+          <td>17.8232</td>
+          <td>11.2213</td>
+          <td>359.0831</td>
+          <td>0.22%</td>
+          <td>0.9725</td>
+      </tr>
+      <tr>
+          <td nowrap>module:enable graph, bfs</td>
+          <td>3389</td>
+          <td>18.2310</td>
+          <td>10.9703</td>
+          <td>351.0504</td>
+          <td>37.69%</td>
+          <td>0.9507</td>
+      </tr>
+      <tr>
+          <td nowrap>module:enable graph, serial</td>
+          <td>3437</td>
+          <td>17.0389</td>
+          <td>11.7378</td>
+          <td>375.6103</td>
+          <td>36.81%</td>
+          <td>1.0172</td>
+      </tr>
+      <tr>
+          <td rowspan="4">32</td>
+          <td nowrap>layer</td>
+          <td>10547</td>
+          <td>14.8635</td>
+          <td>6.7279</td>
+          <td>430.5858</td>
+          <td>0.00%</td>
+          <td>1.0000</td>
+      </tr>
+      <tr>
+          <td nowrap>module:disable graph</td>
+          <td>10503</td>
+          <td>14.7746</td>
+          <td>6.7684</td>
+          <td>433.1748</td>
+          <td>0.42%</td>
+          <td>1.0060</td>
+      </tr>
+      <tr>
+          <td nowrap>module:enable graph, bfs</td>
+          <td>6935</td>
+          <td>14.8553</td>
+          <td>6.7316</td>
+          <td>430.8231</td>
+          <td>34.25%</td>
+          <td>1.0006</td>
+      </tr>
+      <tr>
+          <td nowrap>module:enable graph, serial</td>
+          <td>7027</td>
+          <td>14.3271</td>
+          <td>6.9798</td>
+          <td>446.7074</td>
+          <td>33.37%</td>
+          <td>1.0374</td>
+      </tr>
+  </table>
+</li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="conclusion"></a><a href="#conclusion" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<ul>
+<li>Computational graph does not affect training time and memory usage if the
+graph is disabled.</li>
+<li>Computational graph can significantly reduce memory usage and training time.</li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="implementation"></a><a href="#implementation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<h3><a class="anchor" aria-hidden="true" id="computational-graph-construction"></a><a href="#computational-graph-construction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<ul>
+<li><p><code>Buffer the operations</code>: Use the technique of delayed execution to falsely
+perform operations in the forward propagation and backward propagation once.
+Buffer all the operations and the tensors read or written by each operation.
+Take matmul for example.</p>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># user calls an api to do matmul on two tensors</span>
+x = autograd.matmul(inputs, w0)
+
+<span class="hljs-comment"># Python code inside the api</span>
+singa.Mult(inputs, w)
+</code></pre>
+<pre><code class="hljs css language-c++"><span class="hljs-comment">// the backend platform</span>
+<span class="hljs-comment">// pass the specific execution function of the operation</span>
+<span class="hljs-comment">// and the tensors it will reads and writes during the calculation to the device.</span>
+C-&gt;device()-&gt;Exec(
+    [a, A, b, B, CRef](Context *ctx) <span class="hljs-keyword">mutable</span> {
+        GEMV&lt;DType, Lang&gt;(a, A, B, b, &amp;CRef, ctx);
+    },
+    read_blocks, {C-&gt;block()});
+</code></pre></li>
+<li><p><code>Build nodes and edges</code>: Build the nodes and edges of the operations passed to
+the device and add them into the computational graph. Since we just told the
+scheduler which blocks these operations will read and write and some of the
+tensors will share the same blocks, the scheduler will split one edge into
+multiple to ensure that the constructed graph is a directed acyclic graph.</p></li>
+<li><p><code>Analyze the graph</code>: Calculate dependencies between all the operations to
+decide the order of execution. The system will only analyze the same graph
+once. If new operations are added to the graph, the calculation graph will be
+re-analyzed.</p></li>
+<li><p><code>Run graph</code>: Execute all the operations in the order we just calculated to
+update all the parameters. Tensors are well scheduled to allocate and
+deallocate to save memory. After the analyzing, the operations in the graph
+can be executed based on the result of analyzing.</p></li>
+<li><p><code>Module</code>: Provided a module class on the Python side for users to use this
+feature more conveniently.</p></li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="lazy-allocation"></a><a href="#lazy-allocation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<ul>
+<li>When a device needs to create a new block, pass the device to that block only,
+instead of allocating a piece of memory from the mempool and passing the
+pointer to that block.</li>
+<li>When a block is accessed for the first time, the device corresponding to the
+block allocates memory and then access it.</li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="automatic-recycling"></a><a href="#automatic-recycling" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<ul>
+<li>When calculating dependencies between the operations during graph
+construction, the reference count of tensors can also be calculated.</li>
+<li>When an operation is completed, the schedualer decrease the reference count of
+tensors that the operation used.</li>
+<li>If a tensor's reference count reaches zero, it means the tensor won't be
+accessed by latter operations, so we can recycle its memory.</li>
+<li>The program will track the usage of the block. If a block is used on the
+python side, it will not be recycled, which is convenient for debugging on the
+python side.</li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="shared-memory"></a><a href="#shared-memory" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<ul>
+<li>Once the kernel function of an operation is added into the default cuda stream
+and the tensors used by the operation can be freed when the calculation is
+complete, the scheduler will free these tensors' memory immediately and no
+need to wait for the calculation to complete. Because subsequent operations
+will not be performed at the same time as the current operation as the
+platform now used the default stream of CUDA to finish the calculation. So the
+following tensors can share the same memory with these tensors.</li>
+<li>Use a mempool to manage the GPU memory. Scheduler returns the memory used by
+tensors to the mempool and the latter tensors will apply for memory from
+mempool. The mempool will find the most suitable blocks returned by the
+previous tensors for the latter tensors to share as much memory as possible.</li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="how-to-add-a-new-operation"></a><a href="#how-to-add-a-new-operation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H [...]
+<p>For new operations to be included in the computational graph, they should be
+submitted to the device. Device class on the CPP side will add these operations
+in the computational graph and the scheduler will schedule them automatically.</p>
+<h4><a class="anchor" aria-hidden="true" id="requirements"></a><a href="#requirements" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>When submitting operations, there are some requirements.</p>
+<ul>
+<li><p>Need to pass in the function that the operation executes and the data blocks
+that the operation reads and writes</p></li>
+<li><p>For the function of the operation: All variables used in lambda expressions
+need to be captured according to the following rules.</p>
+<ul>
+<li><p><code>capture by value</code>: If the variable is a local variable or will be
+immediately released (e.g. intermediate tensors). If not captured by value,
+these variables will be destroyed after buffering. Buffering is just a way
+to defer real calculations.</p></li>
+<li><p><code>capture by reference</code>:If the variable is recorded on the python side or a
+global variable (e.g. The parameter W and ConvHand in the Conv2d class).</p></li>
+<li><p><code>mutable</code>: The lambda expression should have mutable tag if a variable
+captured by value is modified in an expression</p></li>
+</ul></li>
+</ul>
+<h4><a class="anchor" aria-hidden="true" id="example"></a><a href="#example" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<ul>
+<li>Python side:
+<a href="https://github.com/apache/singa/blob/dev/python/singa/autograd.py#L1191">_Conv2d</a>
+records x, W, b and handle in the class.</li>
+</ul>
+<pre><code class="hljs css language-python"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">_Conv2d</span><span class="hljs-params">(Operation)</span>:</span>
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(self, handle, odd_padding=<span class="hljs-params">(<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>)</span>)</span>:</span>
+        super(_Conv2d, self).__init__()
+        self.handle = handle  <span class="hljs-comment"># record handle</span>
+        self.odd_padding = odd_padding
+        <span class="hljs-keyword">if</span> self.odd_padding != (<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>):
+            self.re_new_handle = <span class="hljs-literal">True</span>
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">forward</span><span class="hljs-params">(self, x, W, b=None)</span>:</span>
+        <span class="hljs-comment"># other code</span>
+        <span class="hljs-comment"># ......</span>
+
+        <span class="hljs-keyword">if</span> training:
+            <span class="hljs-keyword">if</span> self.handle.bias_term:
+                self.inputs = (x, W, b) <span class="hljs-comment"># record x, W, b</span>
+            <span class="hljs-keyword">else</span>:
+                self.inputs = (x, W)
+
+        <span class="hljs-comment"># other code</span>
+        <span class="hljs-comment"># ......</span>
+
+        <span class="hljs-keyword">if</span> (type(self.handle) != singa.ConvHandle):
+            <span class="hljs-keyword">return</span> singa.GpuConvForward(x, W, b, self.handle)
+        <span class="hljs-keyword">else</span>:
+            <span class="hljs-keyword">return</span> singa.CpuConvForward(x, W, b, self.handle)
+
+    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">backward</span><span class="hljs-params">(self, dy)</span>:</span>
+        <span class="hljs-keyword">if</span> (type(self.handle) != singa.ConvHandle):
+            dx = singa.GpuConvBackwardx(dy, self.inputs[<span class="hljs-number">1</span>], self.inputs[<span class="hljs-number">0</span>],
+                                        self.handle)
+            dW = singa.GpuConvBackwardW(dy, self.inputs[<span class="hljs-number">0</span>], self.inputs[<span class="hljs-number">1</span>],
+                                        self.handle)
+            db = singa.GpuConvBackwardb(
+                dy, self.inputs[<span class="hljs-number">2</span>],
+                self.handle) <span class="hljs-keyword">if</span> self.handle.bias_term <span class="hljs-keyword">else</span> <span class="hljs-literal">None</span>
+        <span class="hljs-keyword">else</span>:
+            dx = singa.CpuConvBackwardx(dy, self.inputs[<span class="hljs-number">1</span>], self.inputs[<span class="hljs-number">0</span>],
+                                        self.handle)
+            dW = singa.CpuConvBackwardW(dy, self.inputs[<span class="hljs-number">0</span>], self.inputs[<span class="hljs-number">1</span>],
+                                        self.handle)
+            db = singa.CpuConvBackwardb(
+                dy, self.inputs[<span class="hljs-number">2</span>],
+                self.handle) <span class="hljs-keyword">if</span> self.handle.bias_term <span class="hljs-keyword">else</span> <span class="hljs-literal">None</span>
+        <span class="hljs-keyword">if</span> self.odd_padding != (<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>):
+            dx = utils.handle_odd_pad_bwd(dx, self.odd_padding)
+
+        <span class="hljs-keyword">if</span> db:
+            <span class="hljs-keyword">return</span> dx, dW, db
+
+        <span class="hljs-keyword">else</span>:
+            <span class="hljs-keyword">return</span> dx, dW
+</code></pre>
+<ul>
+<li>C++ side:
+<a href="https://github.com/apache/singa/blob/dev/src/model/operation/convolution.cc">convolution.cc</a></li>
+</ul>
+<pre><code class="hljs css language-c++"><span class="hljs-function">Tensor <span class="hljs-title">GpuConvBackwardx</span><span class="hljs-params">(<span class="hljs-keyword">const</span> Tensor &amp;dy, <span class="hljs-keyword">const</span> Tensor &amp;W, <span class="hljs-keyword">const</span> Tensor &amp;x,
+                        <span class="hljs-keyword">const</span> CudnnConvHandle &amp;cch)</span> </span>{
+  CHECK_EQ(dy.device()-&gt;lang(), kCuda);
+
+  Tensor dx;
+  dx.ResetLike(x);
+
+  dy.device()-&gt;Exec(
+      <span class="hljs-comment">/*
+       * dx is a local variable so it's captured by value
+       * dy is an intermediate tensor and isn't recorded on the python side
+       * W is an intermediate tensor but it's recorded on the python side
+       * chh is a variable and it's recorded on the python side
+       */</span>
+      [dx, dy, &amp;W, &amp;cch](Context *ctx) <span class="hljs-keyword">mutable</span> {
+        Block *wblock = W.block(), *dyblock = dy.block(), *dxblock = dx.block();
+        <span class="hljs-keyword">float</span> alpha = <span class="hljs-number">1.f</span>, beta = <span class="hljs-number">0.f</span>;
+        cudnnConvolutionBackwardData(
+            ctx-&gt;cudnn_handle, &amp;alpha, cch.filter_desc, wblock-&gt;data(),
+            cch.y_desc, dyblock-&gt;data(), cch.conv_desc, cch.bp_data_alg,
+            cch.workspace.block()-&gt;mutable_data(),
+            cch.workspace_count * <span class="hljs-keyword">sizeof</span>(<span class="hljs-keyword">float</span>), &amp;beta, cch.x_desc,
+            dxblock-&gt;mutable_data());
+      },
+      {dy.block(), W.block()}, {dx.block(), cch.workspace.block()});
+      <span class="hljs-comment">/* the lambda expression reads the blocks of tensor dy and w
+       * and writes the blocks of tensor dx and chh.workspace
+       */</span>
+
+  <span class="hljs-keyword">return</span> dx;
+}
+</code></pre>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/9/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/autograd"><span class="arrow-prev">← </span><span>Autograd</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/dist-train"><span>Distributed Training</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#about-computational-graph">About Compu [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/history-singa.html b/content/docs/3.0.0.rc1/history-singa.html
new file mode 100644
index 0000000..a392c36
--- /dev/null
+++ b/content/docs/3.0.0.rc1/history-singa.html
@@ -0,0 +1,119 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>History of SINGA · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyrigh [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/history-singa.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">History of SINGA</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contrib [...]
+<h2><a class="anchor" aria-hidden="true" id="history"></a><a href="#history" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>SINGA was initiated by the DB System Group at National University of Singapore
+in 2014, in collaboration with the database group of Zhejiang University. Please
+cite the following two papers if you use SINGA in your research:</p>
+<ul>
+<li><p>B.C. Ooi, K.-L. Tan, S. Wang, W. Wang, Q. Cai, G. Chen, J. Gao, Z. Luo, A. K.
+H. Tung, Y. Wang, Z. Xie, M. Zhang, and K. Zheng.
+<a href="http://www.comp.nus.edu.sg/~ooibc/singaopen-mm15.pdf">SINGA: A distributed deep learning platform</a>.
+ACM Multimedia (Open Source Software Competition) 2015</p></li>
+<li><p>W. Wang, G. Chen, T. T. A. Dinh, B. C. Ooi, K.-L.Tan, J. Gao, and S. Wang.
+<a href="http://www.comp.nus.edu.sg/~ooibc/singa-mm15.pdf">SINGA: putting deep learning in the hands of multimedia users</a>.
+ACM Multimedia 2015.</p></li>
+</ul>
+<p>Rafiki is a sub module of SINGA. Please cite the following paper if you use
+Rafiki in your research:</p>
+<ul>
+<li>Wei Wang, Jinyang Gao, Meihui Zhang, Sheng Wang, Gang Chen, Teck Khim Ng, Beng
+Chin Ooi, Jie Shao, Moaz Reyad.
+<a href="http://www.vldb.org/pvldb/vol12/p128-wang.pdf">Rafiki: Machine Learning as an Analytics Service System</a>.
+<a href="http://vldb.org/2019/">VLDB 2019</a>
+(<a href="https://dblp.org/rec/bib2/journals/pvldb/WangWGZCNOS18.bib">BibTex</a>).</li>
+</ul>
+<p>Companies like <a href="http://tech.163.com/17/0602/17/CLUL016I00098GJ5.html">NetEase</a>,
+<a href="http://www.yzbigdata.com/en/index.html">yzBigData</a>,
+<a href="https://shentilium.com/">Shentilium</a>, <a href="http://www.foodlg.com/">Foodlg</a> and
+<a href="https://medilot.com/technologies">Medilot</a> are using SINGA for their
+applications.</p>
+<h2><a class="anchor" aria-hidden="true" id="license"></a><a href="#license" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>SINGA is released under
+<a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License Version 2.0</a></p>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/team-list"><span class="arrow-prev">← </span><span>The SINGA Team</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#history">History</a></li><li><a href="#license">License</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class=" [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/history-singa/index.html b/content/docs/3.0.0.rc1/history-singa/index.html
new file mode 100644
index 0000000..a392c36
--- /dev/null
+++ b/content/docs/3.0.0.rc1/history-singa/index.html
@@ -0,0 +1,119 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>History of SINGA · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyrigh [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/history-singa.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">History of SINGA</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contrib [...]
+<h2><a class="anchor" aria-hidden="true" id="history"></a><a href="#history" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>SINGA was initiated by the DB System Group at National University of Singapore
+in 2014, in collaboration with the database group of Zhejiang University. Please
+cite the following two papers if you use SINGA in your research:</p>
+<ul>
+<li><p>B.C. Ooi, K.-L. Tan, S. Wang, W. Wang, Q. Cai, G. Chen, J. Gao, Z. Luo, A. K.
+H. Tung, Y. Wang, Z. Xie, M. Zhang, and K. Zheng.
+<a href="http://www.comp.nus.edu.sg/~ooibc/singaopen-mm15.pdf">SINGA: A distributed deep learning platform</a>.
+ACM Multimedia (Open Source Software Competition) 2015</p></li>
+<li><p>W. Wang, G. Chen, T. T. A. Dinh, B. C. Ooi, K.-L.Tan, J. Gao, and S. Wang.
+<a href="http://www.comp.nus.edu.sg/~ooibc/singa-mm15.pdf">SINGA: putting deep learning in the hands of multimedia users</a>.
+ACM Multimedia 2015.</p></li>
+</ul>
+<p>Rafiki is a sub module of SINGA. Please cite the following paper if you use
+Rafiki in your research:</p>
+<ul>
+<li>Wei Wang, Jinyang Gao, Meihui Zhang, Sheng Wang, Gang Chen, Teck Khim Ng, Beng
+Chin Ooi, Jie Shao, Moaz Reyad.
+<a href="http://www.vldb.org/pvldb/vol12/p128-wang.pdf">Rafiki: Machine Learning as an Analytics Service System</a>.
+<a href="http://vldb.org/2019/">VLDB 2019</a>
+(<a href="https://dblp.org/rec/bib2/journals/pvldb/WangWGZCNOS18.bib">BibTex</a>).</li>
+</ul>
+<p>Companies like <a href="http://tech.163.com/17/0602/17/CLUL016I00098GJ5.html">NetEase</a>,
+<a href="http://www.yzbigdata.com/en/index.html">yzBigData</a>,
+<a href="https://shentilium.com/">Shentilium</a>, <a href="http://www.foodlg.com/">Foodlg</a> and
+<a href="https://medilot.com/technologies">Medilot</a> are using SINGA for their
+applications.</p>
+<h2><a class="anchor" aria-hidden="true" id="license"></a><a href="#license" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>SINGA is released under
+<a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License Version 2.0</a></p>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/team-list"><span class="arrow-prev">← </span><span>The SINGA Team</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#history">History</a></li><li><a href="#license">License</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class=" [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/how-to-release.html b/content/docs/3.0.0.rc1/how-to-release.html
new file mode 100644
index 0000000..bb1e8cc
--- /dev/null
+++ b/content/docs/3.0.0.rc1/how-to-release.html
@@ -0,0 +1,210 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>How to Prepare a Release · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding  [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/how-to-release.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">How to Prepare a Release</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or mor [...]
+<p>This is a guide for the
+<a href="http://www.apache.org/dev/release-publishing.html">release preparing process</a>
+in SINGA.</p>
+<ol>
+<li><p>Select a release manager. The release manager (RM) is the coordinator for the
+release process. It is the RM's signature (.asc) that is uploaded together
+with the release. The RM generates KEY (RSA 4096-bit) and uploads it to a
+public key server. The RM needs to get his key endorsed (signed) by other
+Apache user, to be connected to the web of trust. He should first ask the
+mentor to help signing his key.
+<a href="http://www.apache.org/dev/release-signing.html">How to generate the key</a>?</p></li>
+<li><p>Check license. <a href="https://www.apache.org/legal/src-headers.html#faq-docs">FAQ</a>;
+<a href="https://issues.apache.org/jira/projects/SINGA/issues/SINGA-447">SINGA Issue</a></p>
+<ul>
+<li>The codebase does not include third-party code which is not compatible to
+APL;</li>
+<li>The dependencies are compatible with APL. GNU-like licenses are NOT
+compatible;</li>
+<li>All source files written by us MUST include the Apache license header:
+<a href="http://www.apache.org/legal/src-headers.html">http://www.apache.org/legal/src-headers.html</a>. There's a script in there
+which helps propagating the header to all files.</li>
+<li>Update the LICENSE file. If we include any third party code in the release
+package which is not APL, must state it at the end of the NOTICE file.</li>
+</ul></li>
+<li><p>Bump the version. Check code and documentation</p>
+<ul>
+<li>The build process is error-free.</li>
+<li>Unit tests are included (as much as possible)</li>
+<li>Conda packages run without errors.</li>
+<li>The online documentation on the Apache website is up to date.</li>
+</ul></li>
+<li><p>Prepare the RELEASE_NOTES file. Include the following items, Introduction,
+Features, Bugs (link to JIRA or Github PR), Changes, Dependency list,
+Incompatibility issues. Follow this
+<a href="http://commons.apache.org/proper/commons-digester/commons-digester-3.0/RELEASE-NOTES.txt">example</a>.</p></li>
+<li><p>Prepare DISCLAIMER file. Modify from the
+<a href="http://incubator.apache.org/guides/branding.html#disclaimers">template</a></p></li>
+<li><p>Package the release candidate. The release should be packaged into :
+apache-singa-VERSION.tar.gz. The release should not include any binary files
+including git files. Upload the release to for
+<a href="https://dist.apache.org/repos/dist/dev/VERSION/">stage</a>. The tar file,
+signature, KEY and SHA256 checksum file should be included. MD5 is no longer
+used. Policy is
+<a href="http://www.apache.org/dev/release-distribution#sigs-and-sums">here</a></p>
+<ul>
+<li>apache-singa-VERSION.tar.gz</li>
+<li>KEY</li>
+<li>XX.acs</li>
+<li>.SHA256</li>
+</ul></li>
+<li><p>Call for vote by sending an email</p>
+<pre><code class="hljs">To: dev@singa.apache.org
+Subject: [VOTE] <span class="hljs-keyword">Release</span> apache-singa-X.Y.Z (<span class="hljs-keyword">release</span> candidate N)
+
+Hi <span class="hljs-keyword">all</span>,
+
+I have created a <span class="hljs-keyword">build</span> <span class="hljs-keyword">for</span> Apache SINGA X.Y.Z, <span class="hljs-keyword">release</span> candidate N.
+The artifacts <span class="hljs-keyword">to</span> be voted <span class="hljs-keyword">on</span> <span class="hljs-keyword">are</span> located here:  xxxx
+The hashes <span class="hljs-keyword">of</span> the artifacts <span class="hljs-keyword">are</span> <span class="hljs-keyword">as</span> <span class="hljs-keyword">follows</span>: xxx
+<span class="hljs-keyword">Release</span> artifacts <span class="hljs-keyword">are</span> signed <span class="hljs-keyword">with</span> the <span class="hljs-keyword">following</span> <span class="hljs-keyword">key</span>: xxx
+Please vote <span class="hljs-keyword">on</span> releasing this package. The vote <span class="hljs-keyword">is</span> <span class="hljs-keyword">open</span> <span class="hljs-keyword">for</span> <span class="hljs-keyword">at</span> <span class="hljs-keyword">least</span>
+<span class="hljs-number">72</span> <span class="hljs-keyword">hours</span> <span class="hljs-keyword">and</span> passes <span class="hljs-keyword">if</span> a majority <span class="hljs-keyword">of</span> <span class="hljs-keyword">at</span> <span class="hljs-keyword">least</span> three +<span class="hljs-number">1</span> votes <span class="hljs-keyword">are</span> cast.
+
+[ ] +<span class="hljs-number">1</span> <span class="hljs-keyword">Release</span> this <span class="hljs-keyword">package</span> <span class="hljs-keyword">as</span> Apache SINGA X.Y.Z
+[ ] <span class="hljs-number">0</span> I don<span class="hljs-string">'t feel strongly about it, but I'</span>m okay <span class="hljs-keyword">with</span> the <span class="hljs-keyword">release</span>
+[ ] <span class="hljs-number">-1</span> <span class="hljs-keyword">Do</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">release</span> this <span class="hljs-keyword">package</span> because...
+
+Here <span class="hljs-keyword">is</span> my vote:
++<span class="hljs-number">1</span>
+</code></pre></li>
+<li><p>Wait at least 48 hours for test responses. Any PMC, committer or contributor
+can test features for releasing, and feedback. Everyone should check these
+before vote +1. If the vote passes, then send the result email. Otherwise,
+repeat from the beginning.</p>
+<pre><code class="hljs"><span class="hljs-attribute">To</span>: dev@singa.apache.org
+<span class="hljs-attribute">Subject</span>: [RESULT] [VOTE] Release apache-singa-X.Y.Z (release candidate N)
+
+<span class="routeros">Thanks <span class="hljs-keyword">to</span> everyone who has voted <span class="hljs-keyword">and</span> given their comments.
+The tally is as follows.
+
+N binding +1s:
+&lt;names&gt;
+
+N non-binding +1s:
+&lt;names&gt;
+
+<span class="hljs-literal">No</span> 0s <span class="hljs-keyword">or</span> -1s.
+
+I am delighted <span class="hljs-keyword">to</span> announce that the<span class="hljs-built_in"> proposal </span><span class="hljs-keyword">to</span> release
+Apache SINGA X.Y.Z has passed.
+</span></code></pre></li>
+<li><p>Upload the package for
+<a href="http://www.apache.org/dev/release-publishing.html#distribution">distribution</a>
+to <a href="https://dist.apache.org/repos/dist/release/VERSION/">https://dist.apache.org/repos/dist/release/VERSION/</a>.</p></li>
+<li><p>Update the Download page of SINGA website. The tar.gz file MUST be
+downloaded from mirror, using closer.cgi script; other artifacts MUST be
+downloaded from main Apache site. More details
+<a href="http://www.apache.org/dev/release-download-pages.html">here</a>. Some feedback
+we got during the previous releases: &quot;Download pages must only link to
+formal releases, so must not include links to GitHub.&quot;, &quot;Links to KEYS, sigs
+and hashes must not use dist.apache.org; instead use
+<a href="https://www.apache.org/dist/singa/">https://www.apache.org/dist/singa/</a>...;&quot;, &quot;Also you only need one KEYS link,
+and there should be a description of how to use KEYS + sig or hash to verify
+the downloads.&quot;</p></li>
+<li><p>Remove the RC tag and compile the conda packages.</p></li>
+<li><p>Publish the release information.</p>
+<pre><code class="hljs"><span class="hljs-attribute">To</span>: announce<span class="hljs-variable">@apache</span>.org, dev<span class="hljs-variable">@singa</span>.apache.org
+<span class="hljs-attribute">Subject</span>: [ANNOUNCE] Apache SINGA X.Y.Z released
+
+We are pleased to announce that SINGA X.Y.Z is released.
+
+SINGA is a general distributed deep learning platform
+for training big deep learning models over large datasets.
+The release is available <span class="hljs-attribute">at</span>: <span class="hljs-attribute">http</span>:<span class="hljs-comment">//singa.apache.org/downloads.html</span>
+The main features of this release include XXX
+We look forward to hearing your feedback, suggestions,
+and contributions to the project.
+
+On behalf of the SINGA team, {SINGA Team Member Name}
+</code></pre></li>
+</ol>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/contribute-docs"><span class="arrow-prev">← </span><span>How to Contribute to Documentation</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/git-workflow"><span>Git Workflow</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer" [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/how-to-release/index.html b/content/docs/3.0.0.rc1/how-to-release/index.html
new file mode 100644
index 0000000..bb1e8cc
--- /dev/null
+++ b/content/docs/3.0.0.rc1/how-to-release/index.html
@@ -0,0 +1,210 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>How to Prepare a Release · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding  [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/how-to-release.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">How to Prepare a Release</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or mor [...]
+<p>This is a guide for the
+<a href="http://www.apache.org/dev/release-publishing.html">release preparing process</a>
+in SINGA.</p>
+<ol>
+<li><p>Select a release manager. The release manager (RM) is the coordinator for the
+release process. It is the RM's signature (.asc) that is uploaded together
+with the release. The RM generates KEY (RSA 4096-bit) and uploads it to a
+public key server. The RM needs to get his key endorsed (signed) by other
+Apache user, to be connected to the web of trust. He should first ask the
+mentor to help signing his key.
+<a href="http://www.apache.org/dev/release-signing.html">How to generate the key</a>?</p></li>
+<li><p>Check license. <a href="https://www.apache.org/legal/src-headers.html#faq-docs">FAQ</a>;
+<a href="https://issues.apache.org/jira/projects/SINGA/issues/SINGA-447">SINGA Issue</a></p>
+<ul>
+<li>The codebase does not include third-party code which is not compatible to
+APL;</li>
+<li>The dependencies are compatible with APL. GNU-like licenses are NOT
+compatible;</li>
+<li>All source files written by us MUST include the Apache license header:
+<a href="http://www.apache.org/legal/src-headers.html">http://www.apache.org/legal/src-headers.html</a>. There's a script in there
+which helps propagating the header to all files.</li>
+<li>Update the LICENSE file. If we include any third party code in the release
+package which is not APL, must state it at the end of the NOTICE file.</li>
+</ul></li>
+<li><p>Bump the version. Check code and documentation</p>
+<ul>
+<li>The build process is error-free.</li>
+<li>Unit tests are included (as much as possible)</li>
+<li>Conda packages run without errors.</li>
+<li>The online documentation on the Apache website is up to date.</li>
+</ul></li>
+<li><p>Prepare the RELEASE_NOTES file. Include the following items, Introduction,
+Features, Bugs (link to JIRA or Github PR), Changes, Dependency list,
+Incompatibility issues. Follow this
+<a href="http://commons.apache.org/proper/commons-digester/commons-digester-3.0/RELEASE-NOTES.txt">example</a>.</p></li>
+<li><p>Prepare DISCLAIMER file. Modify from the
+<a href="http://incubator.apache.org/guides/branding.html#disclaimers">template</a></p></li>
+<li><p>Package the release candidate. The release should be packaged into :
+apache-singa-VERSION.tar.gz. The release should not include any binary files
+including git files. Upload the release to for
+<a href="https://dist.apache.org/repos/dist/dev/VERSION/">stage</a>. The tar file,
+signature, KEY and SHA256 checksum file should be included. MD5 is no longer
+used. Policy is
+<a href="http://www.apache.org/dev/release-distribution#sigs-and-sums">here</a></p>
+<ul>
+<li>apache-singa-VERSION.tar.gz</li>
+<li>KEY</li>
+<li>XX.acs</li>
+<li>.SHA256</li>
+</ul></li>
+<li><p>Call for vote by sending an email</p>
+<pre><code class="hljs">To: dev@singa.apache.org
+Subject: [VOTE] <span class="hljs-keyword">Release</span> apache-singa-X.Y.Z (<span class="hljs-keyword">release</span> candidate N)
+
+Hi <span class="hljs-keyword">all</span>,
+
+I have created a <span class="hljs-keyword">build</span> <span class="hljs-keyword">for</span> Apache SINGA X.Y.Z, <span class="hljs-keyword">release</span> candidate N.
+The artifacts <span class="hljs-keyword">to</span> be voted <span class="hljs-keyword">on</span> <span class="hljs-keyword">are</span> located here:  xxxx
+The hashes <span class="hljs-keyword">of</span> the artifacts <span class="hljs-keyword">are</span> <span class="hljs-keyword">as</span> <span class="hljs-keyword">follows</span>: xxx
+<span class="hljs-keyword">Release</span> artifacts <span class="hljs-keyword">are</span> signed <span class="hljs-keyword">with</span> the <span class="hljs-keyword">following</span> <span class="hljs-keyword">key</span>: xxx
+Please vote <span class="hljs-keyword">on</span> releasing this package. The vote <span class="hljs-keyword">is</span> <span class="hljs-keyword">open</span> <span class="hljs-keyword">for</span> <span class="hljs-keyword">at</span> <span class="hljs-keyword">least</span>
+<span class="hljs-number">72</span> <span class="hljs-keyword">hours</span> <span class="hljs-keyword">and</span> passes <span class="hljs-keyword">if</span> a majority <span class="hljs-keyword">of</span> <span class="hljs-keyword">at</span> <span class="hljs-keyword">least</span> three +<span class="hljs-number">1</span> votes <span class="hljs-keyword">are</span> cast.
+
+[ ] +<span class="hljs-number">1</span> <span class="hljs-keyword">Release</span> this <span class="hljs-keyword">package</span> <span class="hljs-keyword">as</span> Apache SINGA X.Y.Z
+[ ] <span class="hljs-number">0</span> I don<span class="hljs-string">'t feel strongly about it, but I'</span>m okay <span class="hljs-keyword">with</span> the <span class="hljs-keyword">release</span>
+[ ] <span class="hljs-number">-1</span> <span class="hljs-keyword">Do</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">release</span> this <span class="hljs-keyword">package</span> because...
+
+Here <span class="hljs-keyword">is</span> my vote:
++<span class="hljs-number">1</span>
+</code></pre></li>
+<li><p>Wait at least 48 hours for test responses. Any PMC, committer or contributor
+can test features for releasing, and feedback. Everyone should check these
+before vote +1. If the vote passes, then send the result email. Otherwise,
+repeat from the beginning.</p>
+<pre><code class="hljs"><span class="hljs-attribute">To</span>: dev@singa.apache.org
+<span class="hljs-attribute">Subject</span>: [RESULT] [VOTE] Release apache-singa-X.Y.Z (release candidate N)
+
+<span class="routeros">Thanks <span class="hljs-keyword">to</span> everyone who has voted <span class="hljs-keyword">and</span> given their comments.
+The tally is as follows.
+
+N binding +1s:
+&lt;names&gt;
+
+N non-binding +1s:
+&lt;names&gt;
+
+<span class="hljs-literal">No</span> 0s <span class="hljs-keyword">or</span> -1s.
+
+I am delighted <span class="hljs-keyword">to</span> announce that the<span class="hljs-built_in"> proposal </span><span class="hljs-keyword">to</span> release
+Apache SINGA X.Y.Z has passed.
+</span></code></pre></li>
+<li><p>Upload the package for
+<a href="http://www.apache.org/dev/release-publishing.html#distribution">distribution</a>
+to <a href="https://dist.apache.org/repos/dist/release/VERSION/">https://dist.apache.org/repos/dist/release/VERSION/</a>.</p></li>
+<li><p>Update the Download page of SINGA website. The tar.gz file MUST be
+downloaded from mirror, using closer.cgi script; other artifacts MUST be
+downloaded from main Apache site. More details
+<a href="http://www.apache.org/dev/release-download-pages.html">here</a>. Some feedback
+we got during the previous releases: &quot;Download pages must only link to
+formal releases, so must not include links to GitHub.&quot;, &quot;Links to KEYS, sigs
+and hashes must not use dist.apache.org; instead use
+<a href="https://www.apache.org/dist/singa/">https://www.apache.org/dist/singa/</a>...;&quot;, &quot;Also you only need one KEYS link,
+and there should be a description of how to use KEYS + sig or hash to verify
+the downloads.&quot;</p></li>
+<li><p>Remove the RC tag and compile the conda packages.</p></li>
+<li><p>Publish the release information.</p>
+<pre><code class="hljs"><span class="hljs-attribute">To</span>: announce<span class="hljs-variable">@apache</span>.org, dev<span class="hljs-variable">@singa</span>.apache.org
+<span class="hljs-attribute">Subject</span>: [ANNOUNCE] Apache SINGA X.Y.Z released
+
+We are pleased to announce that SINGA X.Y.Z is released.
+
+SINGA is a general distributed deep learning platform
+for training big deep learning models over large datasets.
+The release is available <span class="hljs-attribute">at</span>: <span class="hljs-attribute">http</span>:<span class="hljs-comment">//singa.apache.org/downloads.html</span>
+The main features of this release include XXX
+We look forward to hearing your feedback, suggestions,
+and contributions to the project.
+
+On behalf of the SINGA team, {SINGA Team Member Name}
+</code></pre></li>
+</ol>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/contribute-docs"><span class="arrow-prev">← </span><span>How to Contribute to Documentation</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/git-workflow"><span>Git Workflow</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer" [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/initializer.html b/content/docs/3.0.0.rc1/initializer.html
new file mode 100644
index 0000000..b6b53a9
--- /dev/null
+++ b/content/docs/3.0.0.rc1/initializer.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Initializer · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright own [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<h2><a class="anchor" aria-hidden="true" id="python-api"></a><a href="#python-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h2><a class="anchor" aria-hidden="true" id="cpp-api"></a><a href="#cpp-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#python-api">Python API</a></li><li><a href="#cpp-api">CPP API</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/singa-logo-square.png" alt="Apache SINGA" width="66" height="58"/></a><div><h5>Docs</h5><a href="/docs/installation">Getting Started</a><a href="/docs/device">Gu [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/initializer/index.html b/content/docs/3.0.0.rc1/initializer/index.html
new file mode 100644
index 0000000..b6b53a9
--- /dev/null
+++ b/content/docs/3.0.0.rc1/initializer/index.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Initializer · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright own [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<h2><a class="anchor" aria-hidden="true" id="python-api"></a><a href="#python-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h2><a class="anchor" aria-hidden="true" id="cpp-api"></a><a href="#cpp-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#python-api">Python API</a></li><li><a href="#cpp-api">CPP API</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/singa-logo-square.png" alt="Apache SINGA" width="66" height="58"/></a><div><h5>Docs</h5><a href="/docs/installation">Getting Started</a><a href="/docs/device">Gu [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/install-win.html b/content/docs/3.0.0.rc1/install-win.html
new file mode 100644
index 0000000..7d71c9e
--- /dev/null
+++ b/content/docs/3.0.0.rc1/install-win.html
@@ -0,0 +1,367 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Build SINGA on Windows · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding co [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>The process of building SINGA from source on Microsoft Windows has four parts:
+install dependencies, build SINGA source, (optionally) install the python module
+and (optionally) run the unit tests.</p>
+<h2><a class="anchor" aria-hidden="true" id="install-dependencies"></a><a href="#install-dependencies" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<p>You may create a folder for building the dependencies.</p>
+<p>The dependencies are:</p>
+<ul>
+<li><p>Compiler and IDE</p>
+<ul>
+<li>Visual Studio. The community edition is free and can be used to build SINGA.
+<a href="https://www.visualstudio.com/">https://www.visualstudio.com/</a></li>
+</ul></li>
+<li><p>CMake</p>
+<ul>
+<li>Can be downloaded from <a href="http://cmake.org/">http://cmake.org/</a></li>
+<li>Make sure the path to cmake executable is in the system path, or use full
+path when calling cmake.</li>
+</ul></li>
+<li><p>SWIG</p>
+<ul>
+<li>Can be downloaded from <a href="http://swig.org/">http://swig.org/</a></li>
+<li>Make sure the path to swig executable is in the system path, or use full
+path when calling swig. Use a recent version such as 3.0.12.</li>
+</ul></li>
+<li><p>Protocol Buffers</p>
+<ul>
+<li>Download a suitable version such as 2.6.1:
+<a href="https://github.com/google/protobuf/releases/tag/v2.6.1">https://github.com/google/protobuf/releases/tag/v2.6.1</a> .</li>
+<li>Download both protobuf-2.6.1.zip and protoc-2.6.1-win32.zip .</li>
+<li>Extract both of them in dependencies folder. Add the path to protoc
+executable to the system path, or use full path when calling it.</li>
+<li>Open the Visual Studio solution which can be found in vsproject folder.</li>
+<li>Change the build settings to Release and x64.</li>
+<li>build libprotobuf project.</li>
+</ul></li>
+<li><p>Openblas</p>
+<ul>
+<li>Download a suitable source version such as 0.2.20 from
+<a href="http://www.openblas.net">http://www.openblas.net</a></li>
+<li>Extract the source in the dependencies folder.</li>
+<li>If you don't have Perl installed, download a perl environment such as
+Strawberry Perl (<a href="http://strawberryperl.com/">http://strawberryperl.com/</a>)</li>
+<li>Build the Visual Studio solution by running this command in the source
+folder:</li>
+</ul>
+<pre><code class="hljs css language-bash">cmake -G <span class="hljs-string">"Visual Studio 15 2017 Win64"</span>
+</code></pre>
+<ul>
+<li>Open the Visual Studio solution and change the build settings to Release and
+x64.</li>
+<li>Build libopenblas project</li>
+</ul></li>
+<li><p>Google glog</p>
+<ul>
+<li>Download a suitable version such as 0.3.5 from
+<a href="https://github.com/google/glog/releases">https://github.com/google/glog/releases</a></li>
+<li>Extract the source in the dependencies folder.</li>
+<li>Open the Visual Studio solution.</li>
+<li>Change the build settings to Release and x64.</li>
+<li>Build libglog project</li>
+</ul></li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="build-singa-source"></a><a href="#build-singa-source" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
+<ul>
+<li><p>Download SINGA source code</p></li>
+<li><p>Compile the protobuf files:</p>
+<ul>
+<li>Goto src/proto folder</li>
+</ul>
+<pre><code class="hljs css language-shell">mkdir python_out
+protoc.exe *.proto --python_out python_out
+</code></pre></li>
+<li><p>Generate swig interfaces for C++ and Python: Goto src/api</p>
+<pre><code class="hljs css language-shell">swig -python -c++ singa.i
+</code></pre></li>
+<li><p>generate Visual Studio solution for SINGA: Goto SINGA source code root folder</p>
+<pre><code class="hljs css language-shell">mkdir build
+cd build
+</code></pre></li>
+<li><p>Call cmake and add the paths in your system similar to the following example:</p>
+<pre><code class="hljs css language-shell">cmake -G "Visual Studio 15 2017 Win64" ^
+  -DGLOG_INCLUDE_DIR="D:/WinSinga/dependencies/glog-0.3.5/src/windows" ^
+  -DGLOG_LIBRARIES="D:/WinSinga/dependencies/glog-0.3.5/x64/Release" ^
+  -DCBLAS_INCLUDE_DIR="D:/WinSinga/dependencies/openblas-0.2.20/lapack-netlib/CBLAS/include" ^
+  -DCBLAS_LIBRARIES="D:/WinSinga/dependencies/openblas-0.2.20/lib/RELEASE" ^
+  -DProtobuf_INCLUDE_DIR="D:/WinSinga/dependencies/protobuf-2.6.1/src" ^
+  -DProtobuf_LIBRARIES="D:/WinSinga/dependencies/protobuf-2.6.1/vsprojects/x64/Release" ^
+  -DProtobuf_PROTOC_EXECUTABLE="D:/WinSinga/dependencies/protoc-2.6.1-win32/protoc.exe" ^
+  ..
+</code></pre></li>
+<li><p>Open the generated solution in Visual Studio</p></li>
+<li><p>Change the build settings to Release and x64</p></li>
+<li><p>Add the singa_wrap.cxx file from src/api to the singa_objects project</p></li>
+<li><p>In the singa_objects project, open Additional Include Directories.</p></li>
+<li><p>Add Python include path</p></li>
+<li><p>Add numpy include path</p></li>
+<li><p>Add protobuf include path</p></li>
+<li><p>In the preprocessor definitions of the singa_objects project, add USE_GLOG</p></li>
+<li><p>Build singa_objects project</p></li>
+<li><p>In singa project:</p>
+<ul>
+<li>add singa_wrap.obj to Object Libraries</li>
+<li>change target name to _singa_wrap</li>
+<li>change target extension to .pyd</li>
+<li>change configuration type to Dynamic Library (.dll)</li>
+<li>goto Additional Library Directories and add the path to python, openblas,
+protobuf and glog libraries</li>
+<li>goto Additional Dependencies and add libopenblas.lib, libglog.lib and
+libprotobuf.lib</li>
+</ul></li>
+<li><p>build singa project</p></li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="install-python-module"></a><a href="#install-python-module" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
+<ul>
+<li><p>Change <code>_singa_wrap.so</code> to <code>_singa_wrap.pyd</code> in build/python/setup.py</p></li>
+<li><p>Copy the files in <code>src/proto/python_out</code> to <code>build/python/singa/proto</code></p></li>
+<li><p>Optionally create and activate a virtual environment:</p>
+<pre><code class="hljs css language-shell">mkdir SingaEnv
+virtualenv SingaEnv
+SingaEnv\Scripts\activate
+</code></pre></li>
+<li><p>goto build/python folder and run:</p>
+<pre><code class="hljs css language-shell">python setup.py install
+</code></pre></li>
+<li><p>Make _singa_wrap.pyd, libglog.dll and libopenblas.dll available by adding
+them to the path or by copying them to singa package folder in the python
+site-packages</p></li>
+<li><p>Verify that SINGA is installed by running:</p>
+<pre><code class="hljs css language-shell">python -c "from singa import tensor"
+</code></pre></li>
+</ul>
+<p>A video tutorial for the build process can be found here:</p>
+<p><a href="https://www.youtube.com/watch?v=cteER7WeiGk"><img src="https://img.youtube.com/vi/cteER7WeiGk/0.jpg" alt="youtube video"></a></p>
+<h2><a class="anchor" aria-hidden="true" id="run-unit-tests"></a><a href="#run-unit-tests" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<ul>
+<li><p>In the test folder, generate the Visual Studio solution:</p>
+<pre><code class="hljs css language-shell">cmake -G "Visual Studio 15 2017 Win64"
+</code></pre></li>
+<li><p>Open the generated solution in Visual Studio.</p></li>
+<li><p>Change the build settings to Release and x64.</p></li>
+<li><p>Build glog project.</p></li>
+<li><p>In test_singa project:</p>
+<ul>
+<li>Add USE_GLOG to the Preprocessor Definitions.</li>
+<li>In Additional Include Directories, add path of GLOG_INCLUDE_DIR,
+CBLAS_INCLUDE_DIR and Protobuf_INCLUDE_DIR which were used in step 2 above.
+Add also build and build/include folders.</li>
+<li>Goto Additional Library Directories and add the path to openblas, protobuf
+and glog libraries. Add also build/src/singa_objects.dir/Release.</li>
+<li>Goto Additional Dependencies and add libopenblas.lib, libglog.lib and
+libprotobuf.lib. Fix the names of the two libraries: gtest.lib and
+singa_objects.lib.</li>
+</ul></li>
+<li><p>Build test_singa project.</p></li>
+<li><p>Make libglog.dll and libopenblas.dll available by adding them to the path or
+by copying them to test/release folder</p></li>
+<li><p>The unit tests can be executed</p>
+<ul>
+<li>From the command line:</li>
+</ul>
+<pre><code class="hljs css language-shell">test_singa.exe
+</code></pre>
+<ul>
+<li>From Visual Studio:
+<ul>
+<li>right click on the test_singa project and choose 'Set as StartUp Project'.</li>
+<li>from the Debug menu, choose 'Start Without Debugging'</li>
+</ul></li>
+</ul></li>
+</ul>
+<p>A video tutorial for running the unit tests can be found here:</p>
+<p><a href="https://www.youtube.com/watch?v=393gPtzMN1k"><img src="https://img.youtube.com/vi/393gPtzMN1k/0.jpg" alt="youtube video"></a></p>
+<h2><a class="anchor" aria-hidden="true" id="build-gpu-support-with-cuda"></a><a href="#build-gpu-support-with-cuda" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>In this section, we will extend the previous steps to enable GPU.</p>
+<h3><a class="anchor" aria-hidden="true" id="install-dependencies-1"></a><a href="#install-dependencies-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<p>In addition to the dependencies in section 1 above, we will need the following:</p>
+<ul>
+<li><p>CUDA</p>
+<p>Download a suitable version such as 9.1 from
+<a href="https://developer.nvidia.com/cuda-downloads">https://developer.nvidia.com/cuda-downloads</a> . Make sure to install the Visual
+Studio integration module.</p></li>
+<li><p>cuDNN</p>
+<p>Download a suitable version such as 7.1 from
+<a href="https://developer.nvidia.com/cudnn">https://developer.nvidia.com/cudnn</a></p></li>
+<li><p>cnmem:</p>
+<ul>
+<li>Download the latest version from <a href="https://github.com/NVIDIA/cnmem">https://github.com/NVIDIA/cnmem</a></li>
+<li>Build the Visual Studio solution:</li>
+</ul>
+<pre><code class="hljs css language-shell">cmake -G "Visual Studio 15 2017 Win64"
+</code></pre>
+<ul>
+<li>Open the generated solution in Visual Studio.</li>
+<li>Change the build settings to Release and x64.</li>
+<li>Build the cnmem project.</li>
+</ul></li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="build-singa-source-1"></a><a href="#build-singa-source-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<ul>
+<li>Call cmake and add the paths in your system similar to the following example:
+<pre><code class="hljs css language-shell">cmake -G "Visual Studio 15 2017 Win64" ^
+  -DGLOG_INCLUDE_DIR="D:/WinSinga/dependencies/glog-0.3.5/src/windows" ^
+  -DGLOG_LIBRARIES="D:/WinSinga/dependencies/glog-0.3.5/x64/Release" ^
+  -DCBLAS_INCLUDE_DIR="D:/WinSinga/dependencies/openblas-0.2.20/lapack-netlib/CBLAS/include" ^
+  -DCBLAS_LIBRARIES="D:/WinSinga/dependencies/openblas-0.2.20/lib/RELEASE" ^
+  -DProtobuf_INCLUDE_DIR="D:/WinSinga/dependencies/protobuf-2.6.1/src" ^
+  -DProtobuf_LIBRARIES="D:\WinSinga/dependencies/protobuf-2.6.1/vsprojects/x64/Release" ^
+  -DProtobuf_PROTOC_EXECUTABLE="D:/WinSinga/dependencies/protoc-2.6.1-win32/protoc.exe" ^
+  -DCUDNN_INCLUDE_DIR=D:\WinSinga\dependencies\cudnn-9.1-windows10-x64-v7.1\cuda\include ^
+  -DCUDNN_LIBRARIES=D:\WinSinga\dependencies\cudnn-9.1-windows10-x64-v7.1\cuda\lib\x64 ^
+  -DSWIG_DIR=D:\WinSinga\dependencies\swigwin-3.0.12 ^
+  -DSWIG_EXECUTABLE=D:\WinSinga\dependencies\swigwin-3.0.12\swig.exe ^
+  -DUSE_CUDA=YES ^
+  -DCUDNN_VERSION=7 ^
+  ..
+</code></pre></li>
+</ul>
+<ul>
+<li><p>Generate swig interfaces for C++ and Python: Goto src/api</p>
+<pre><code class="hljs css language-shell">swig -python -c++ singa.i
+</code></pre></li>
+<li><p>Open the generated solution in Visual Studio</p></li>
+<li><p>Change the build settings to Release and x64</p></li>
+</ul>
+<h4><a class="anchor" aria-hidden="true" id="building-singa_objects"></a><a href="#building-singa_objects" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<ul>
+<li>Add the singa_wrap.cxx file from src/api to the singa_objects project</li>
+<li>In the singa_objects project, open Additional Include Directories.</li>
+<li>Add Python include path</li>
+<li>Add numpy include path</li>
+<li>Add protobuf include path</li>
+<li>Add include path for CUDA, cuDNN and cnmem</li>
+<li>In the preprocessor definitions of the singa_objects project, add USE_GLOG,
+USE_CUDA and USE_CUDNN. Remove DISABLE_WARNINGS.</li>
+<li>Build singa_objects project</li>
+</ul>
+<h4><a class="anchor" aria-hidden="true" id="building-singa-kernel"></a><a href="#building-singa-kernel" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
+<ul>
+<li><p>Create a new Visual Studio project of type &quot;CUDA 9.1 Runtime&quot;. Give it a name
+such as singa-kernel.</p></li>
+<li><p>The project comes with an initial file called kernel.cu. Remove this file from
+the project.</p></li>
+<li><p>Add this file: src/core/tensor/math_kernel.cu</p></li>
+<li><p>In the project settings:</p>
+<ul>
+<li>Set Platform Toolset to &quot;Visual Studio 2015 (v140)&quot;</li>
+<li>Set Configuration Type to &quot; Static Library (.lib)&quot;</li>
+<li>In the Include Directories, add build/include.</li>
+</ul></li>
+<li><p>Build singa-kernel project</p></li>
+</ul>
+<h4><a class="anchor" aria-hidden="true" id="building-singa"></a><a href="#building-singa" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<ul>
+<li><p>In singa project:</p>
+<ul>
+<li>add singa_wrap.obj to Object Libraries</li>
+<li>change target name to _singa_wrap</li>
+<li>change target extension to .pyd</li>
+<li>change configuration type to Dynamic Library (.dll)</li>
+<li>goto Additional Library Directories and add the path to python, openblas,
+protobuf and glog libraries</li>
+<li>Add also the library path to singa-kernel, cnmem, cuda and cudnn.</li>
+<li>goto Additional Dependencies and add libopenblas.lib, libglog.lib and
+libprotobuf.lib.</li>
+<li>Add also: singa-kernel.lib, cnmem.lib, cudnn.lib, cuda.lib , cublas.lib,
+curand.lib and cudart.lib.</li>
+</ul></li>
+<li><p>build singa project</p></li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="install-python-module-1"></a><a href="#install-python-module-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<ul>
+<li><p>Change _singa_wrap.so to _singa_wrap.pyd in build/python/setup.py</p></li>
+<li><p>Copy the files in src/proto/python_out to build/python/singa/proto</p></li>
+<li><p>Optionally create and activate a virtual environment:</p>
+<pre><code class="hljs css language-shell">mkdir SingaEnv
+virtualenv SingaEnv
+SingaEnv\Scripts\activate
+</code></pre></li>
+<li><p>goto build/python folder and run:</p>
+<pre><code class="hljs css language-shell">python setup.py install
+</code></pre></li>
+<li><p>Make _singa_wrap.pyd, libglog.dll, libopenblas.dll, cnmem.dll, CUDA Runtime
+(e.g. cudart64_91.dll) and cuDNN (e.g. cudnn64_7.dll) available by adding them
+to the path or by copying them to singa package folder in the python
+site-packages</p></li>
+<li><p>Verify that SINGA is installed by running:</p>
+<pre><code class="hljs css language-shell">python -c "from singa import device; dev = device.create_cuda_gpu()"
+</code></pre></li>
+</ul>
+<p>A video tutorial for this part can be found here:</p>
+<p><a href="https://www.youtube.com/watch?v=YasKVjRtuDs"><img src="https://img.youtube.com/vi/YasKVjRtuDs/0.jpg" alt="youtube video"></a></p>
+<h3><a class="anchor" aria-hidden="true" id="run-unit-tests-1"></a><a href="#run-unit-tests-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<ul>
+<li><p>In the test folder, generate the Visual Studio solution:</p>
+<pre><code class="hljs css language-shell">cmake -G "Visual Studio 15 2017 Win64"
+</code></pre></li>
+<li><p>Open the generated solution in Visual Studio, or add the project to the singa
+solution that was created in step 5.2</p></li>
+<li><p>Change the build settings to Release and x64.</p></li>
+<li><p>Build glog project.</p></li>
+<li><p>In test_singa project:</p>
+<ul>
+<li>Add USE_GLOG; USE_CUDA; USE_CUDNN to the Preprocessor Definitions.</li>
+<li>In Additional Include Directories, add path of GLOG_INCLUDE_DIR,
+CBLAS_INCLUDE_DIR and Protobuf_INCLUDE_DIR which were used in step 5.2
+above. Add also build, build/include, CUDA and cuDNN include folders.</li>
+<li>Goto Additional Library Directories and add the path to openblas, protobuf
+and glog libraries. Add also build/src/singa_objects.dir/Release,
+singa-kernel, cnmem, CUDA and cuDNN library paths.</li>
+<li>Goto Additional Dependencies and add libopenblas.lib; libglog.lib;
+libprotobuf.lib; cnmem.lib; cudnn.lib; cuda.lib; cublas.lib; curand.lib;
+cudart.lib; singa-kernel.lib. Fix the names of the two libraries: gtest.lib
+and singa_objects.lib.</li>
+</ul></li>
+</ul>
+<ul>
+<li><p>Build test_singa project.</p></li>
+<li><p>Make libglog.dll, libopenblas.dll, cnmem.dll, cudart64_91.dll and
+cudnn64_7.dll available by adding them to the path or by copying them to
+test/release folder</p></li>
+<li><p>The unit tests can be executed</p>
+<ul>
+<li><p>From the command line:</p>
+<pre><code class="hljs css language-shell">test_singa.exe
+</code></pre></li>
+<li><p>From Visual Studio:</p>
+<ul>
+<li>right click on the test_singa project and choose 'Set as StartUp Project'.</li>
+<li>from the Debug menu, choose 'Start Without Debugging'</li>
+</ul></li>
+</ul></li>
+</ul>
+<p>A video tutorial for running the unit tests can be found here:</p>
+<p><a href="https://www.youtube.com/watch?v=YOjwtrvTPn4"><img src="https://img.youtube.com/vi/YOjwtrvTPn4/0.jpg" alt="youtube video"></a></p>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install-dependencies">Install Dependencies</a></li><li><a href="#build-singa-source">Build SINGA source</a></li><li><a href="#install-python-module">Install Python module</a></li><li><a href="#run-unit-tests">Run Unit Tests</a></li><li><a href="#build-gpu-support-with-cuda">Build GPU suppo [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/install-win/index.html b/content/docs/3.0.0.rc1/install-win/index.html
new file mode 100644
index 0000000..7d71c9e
--- /dev/null
+++ b/content/docs/3.0.0.rc1/install-win/index.html
@@ -0,0 +1,367 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Build SINGA on Windows · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding co [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>The process of building SINGA from source on Microsoft Windows has four parts:
+install dependencies, build SINGA source, (optionally) install the python module
+and (optionally) run the unit tests.</p>
+<h2><a class="anchor" aria-hidden="true" id="install-dependencies"></a><a href="#install-dependencies" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<p>You may create a folder for building the dependencies.</p>
+<p>The dependencies are:</p>
+<ul>
+<li><p>Compiler and IDE</p>
+<ul>
+<li>Visual Studio. The community edition is free and can be used to build SINGA.
+<a href="https://www.visualstudio.com/">https://www.visualstudio.com/</a></li>
+</ul></li>
+<li><p>CMake</p>
+<ul>
+<li>Can be downloaded from <a href="http://cmake.org/">http://cmake.org/</a></li>
+<li>Make sure the path to cmake executable is in the system path, or use full
+path when calling cmake.</li>
+</ul></li>
+<li><p>SWIG</p>
+<ul>
+<li>Can be downloaded from <a href="http://swig.org/">http://swig.org/</a></li>
+<li>Make sure the path to swig executable is in the system path, or use full
+path when calling swig. Use a recent version such as 3.0.12.</li>
+</ul></li>
+<li><p>Protocol Buffers</p>
+<ul>
+<li>Download a suitable version such as 2.6.1:
+<a href="https://github.com/google/protobuf/releases/tag/v2.6.1">https://github.com/google/protobuf/releases/tag/v2.6.1</a> .</li>
+<li>Download both protobuf-2.6.1.zip and protoc-2.6.1-win32.zip .</li>
+<li>Extract both of them in dependencies folder. Add the path to protoc
+executable to the system path, or use full path when calling it.</li>
+<li>Open the Visual Studio solution which can be found in vsproject folder.</li>
+<li>Change the build settings to Release and x64.</li>
+<li>build libprotobuf project.</li>
+</ul></li>
+<li><p>Openblas</p>
+<ul>
+<li>Download a suitable source version such as 0.2.20 from
+<a href="http://www.openblas.net">http://www.openblas.net</a></li>
+<li>Extract the source in the dependencies folder.</li>
+<li>If you don't have Perl installed, download a perl environment such as
+Strawberry Perl (<a href="http://strawberryperl.com/">http://strawberryperl.com/</a>)</li>
+<li>Build the Visual Studio solution by running this command in the source
+folder:</li>
+</ul>
+<pre><code class="hljs css language-bash">cmake -G <span class="hljs-string">"Visual Studio 15 2017 Win64"</span>
+</code></pre>
+<ul>
+<li>Open the Visual Studio solution and change the build settings to Release and
+x64.</li>
+<li>Build libopenblas project</li>
+</ul></li>
+<li><p>Google glog</p>
+<ul>
+<li>Download a suitable version such as 0.3.5 from
+<a href="https://github.com/google/glog/releases">https://github.com/google/glog/releases</a></li>
+<li>Extract the source in the dependencies folder.</li>
+<li>Open the Visual Studio solution.</li>
+<li>Change the build settings to Release and x64.</li>
+<li>Build libglog project</li>
+</ul></li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="build-singa-source"></a><a href="#build-singa-source" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
+<ul>
+<li><p>Download SINGA source code</p></li>
+<li><p>Compile the protobuf files:</p>
+<ul>
+<li>Goto src/proto folder</li>
+</ul>
+<pre><code class="hljs css language-shell">mkdir python_out
+protoc.exe *.proto --python_out python_out
+</code></pre></li>
+<li><p>Generate swig interfaces for C++ and Python: Goto src/api</p>
+<pre><code class="hljs css language-shell">swig -python -c++ singa.i
+</code></pre></li>
+<li><p>generate Visual Studio solution for SINGA: Goto SINGA source code root folder</p>
+<pre><code class="hljs css language-shell">mkdir build
+cd build
+</code></pre></li>
+<li><p>Call cmake and add the paths in your system similar to the following example:</p>
+<pre><code class="hljs css language-shell">cmake -G "Visual Studio 15 2017 Win64" ^
+  -DGLOG_INCLUDE_DIR="D:/WinSinga/dependencies/glog-0.3.5/src/windows" ^
+  -DGLOG_LIBRARIES="D:/WinSinga/dependencies/glog-0.3.5/x64/Release" ^
+  -DCBLAS_INCLUDE_DIR="D:/WinSinga/dependencies/openblas-0.2.20/lapack-netlib/CBLAS/include" ^
+  -DCBLAS_LIBRARIES="D:/WinSinga/dependencies/openblas-0.2.20/lib/RELEASE" ^
+  -DProtobuf_INCLUDE_DIR="D:/WinSinga/dependencies/protobuf-2.6.1/src" ^
+  -DProtobuf_LIBRARIES="D:/WinSinga/dependencies/protobuf-2.6.1/vsprojects/x64/Release" ^
+  -DProtobuf_PROTOC_EXECUTABLE="D:/WinSinga/dependencies/protoc-2.6.1-win32/protoc.exe" ^
+  ..
+</code></pre></li>
+<li><p>Open the generated solution in Visual Studio</p></li>
+<li><p>Change the build settings to Release and x64</p></li>
+<li><p>Add the singa_wrap.cxx file from src/api to the singa_objects project</p></li>
+<li><p>In the singa_objects project, open Additional Include Directories.</p></li>
+<li><p>Add Python include path</p></li>
+<li><p>Add numpy include path</p></li>
+<li><p>Add protobuf include path</p></li>
+<li><p>In the preprocessor definitions of the singa_objects project, add USE_GLOG</p></li>
+<li><p>Build singa_objects project</p></li>
+<li><p>In singa project:</p>
+<ul>
+<li>add singa_wrap.obj to Object Libraries</li>
+<li>change target name to _singa_wrap</li>
+<li>change target extension to .pyd</li>
+<li>change configuration type to Dynamic Library (.dll)</li>
+<li>goto Additional Library Directories and add the path to python, openblas,
+protobuf and glog libraries</li>
+<li>goto Additional Dependencies and add libopenblas.lib, libglog.lib and
+libprotobuf.lib</li>
+</ul></li>
+<li><p>build singa project</p></li>
+</ul>
+<h2><a class="anchor" aria-hidden="true" id="install-python-module"></a><a href="#install-python-module" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
+<ul>
+<li><p>Change <code>_singa_wrap.so</code> to <code>_singa_wrap.pyd</code> in build/python/setup.py</p></li>
+<li><p>Copy the files in <code>src/proto/python_out</code> to <code>build/python/singa/proto</code></p></li>
+<li><p>Optionally create and activate a virtual environment:</p>
+<pre><code class="hljs css language-shell">mkdir SingaEnv
+virtualenv SingaEnv
+SingaEnv\Scripts\activate
+</code></pre></li>
+<li><p>goto build/python folder and run:</p>
+<pre><code class="hljs css language-shell">python setup.py install
+</code></pre></li>
+<li><p>Make _singa_wrap.pyd, libglog.dll and libopenblas.dll available by adding
+them to the path or by copying them to singa package folder in the python
+site-packages</p></li>
+<li><p>Verify that SINGA is installed by running:</p>
+<pre><code class="hljs css language-shell">python -c "from singa import tensor"
+</code></pre></li>
+</ul>
+<p>A video tutorial for the build process can be found here:</p>
+<p><a href="https://www.youtube.com/watch?v=cteER7WeiGk"><img src="https://img.youtube.com/vi/cteER7WeiGk/0.jpg" alt="youtube video"></a></p>
+<h2><a class="anchor" aria-hidden="true" id="run-unit-tests"></a><a href="#run-unit-tests" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<ul>
+<li><p>In the test folder, generate the Visual Studio solution:</p>
+<pre><code class="hljs css language-shell">cmake -G "Visual Studio 15 2017 Win64"
+</code></pre></li>
+<li><p>Open the generated solution in Visual Studio.</p></li>
+<li><p>Change the build settings to Release and x64.</p></li>
+<li><p>Build glog project.</p></li>
+<li><p>In test_singa project:</p>
+<ul>
+<li>Add USE_GLOG to the Preprocessor Definitions.</li>
+<li>In Additional Include Directories, add path of GLOG_INCLUDE_DIR,
+CBLAS_INCLUDE_DIR and Protobuf_INCLUDE_DIR which were used in step 2 above.
+Add also build and build/include folders.</li>
+<li>Goto Additional Library Directories and add the path to openblas, protobuf
+and glog libraries. Add also build/src/singa_objects.dir/Release.</li>
+<li>Goto Additional Dependencies and add libopenblas.lib, libglog.lib and
+libprotobuf.lib. Fix the names of the two libraries: gtest.lib and
+singa_objects.lib.</li>
+</ul></li>
+<li><p>Build test_singa project.</p></li>
+<li><p>Make libglog.dll and libopenblas.dll available by adding them to the path or
+by copying them to test/release folder</p></li>
+<li><p>The unit tests can be executed</p>
+<ul>
+<li>From the command line:</li>
+</ul>
+<pre><code class="hljs css language-shell">test_singa.exe
+</code></pre>
+<ul>
+<li>From Visual Studio:
+<ul>
+<li>right click on the test_singa project and choose 'Set as StartUp Project'.</li>
+<li>from the Debug menu, choose 'Start Without Debugging'</li>
+</ul></li>
+</ul></li>
+</ul>
+<p>A video tutorial for running the unit tests can be found here:</p>
+<p><a href="https://www.youtube.com/watch?v=393gPtzMN1k"><img src="https://img.youtube.com/vi/393gPtzMN1k/0.jpg" alt="youtube video"></a></p>
+<h2><a class="anchor" aria-hidden="true" id="build-gpu-support-with-cuda"></a><a href="#build-gpu-support-with-cuda" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 1 [...]
+<p>In this section, we will extend the previous steps to enable GPU.</p>
+<h3><a class="anchor" aria-hidden="true" id="install-dependencies-1"></a><a href="#install-dependencies-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<p>In addition to the dependencies in section 1 above, we will need the following:</p>
+<ul>
+<li><p>CUDA</p>
+<p>Download a suitable version such as 9.1 from
+<a href="https://developer.nvidia.com/cuda-downloads">https://developer.nvidia.com/cuda-downloads</a> . Make sure to install the Visual
+Studio integration module.</p></li>
+<li><p>cuDNN</p>
+<p>Download a suitable version such as 7.1 from
+<a href="https://developer.nvidia.com/cudnn">https://developer.nvidia.com/cudnn</a></p></li>
+<li><p>cnmem:</p>
+<ul>
+<li>Download the latest version from <a href="https://github.com/NVIDIA/cnmem">https://github.com/NVIDIA/cnmem</a></li>
+<li>Build the Visual Studio solution:</li>
+</ul>
+<pre><code class="hljs css language-shell">cmake -G "Visual Studio 15 2017 Win64"
+</code></pre>
+<ul>
+<li>Open the generated solution in Visual Studio.</li>
+<li>Change the build settings to Release and x64.</li>
+<li>Build the cnmem project.</li>
+</ul></li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="build-singa-source-1"></a><a href="#build-singa-source-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<ul>
+<li>Call cmake and add the paths in your system similar to the following example:
+<pre><code class="hljs css language-shell">cmake -G "Visual Studio 15 2017 Win64" ^
+  -DGLOG_INCLUDE_DIR="D:/WinSinga/dependencies/glog-0.3.5/src/windows" ^
+  -DGLOG_LIBRARIES="D:/WinSinga/dependencies/glog-0.3.5/x64/Release" ^
+  -DCBLAS_INCLUDE_DIR="D:/WinSinga/dependencies/openblas-0.2.20/lapack-netlib/CBLAS/include" ^
+  -DCBLAS_LIBRARIES="D:/WinSinga/dependencies/openblas-0.2.20/lib/RELEASE" ^
+  -DProtobuf_INCLUDE_DIR="D:/WinSinga/dependencies/protobuf-2.6.1/src" ^
+  -DProtobuf_LIBRARIES="D:\WinSinga/dependencies/protobuf-2.6.1/vsprojects/x64/Release" ^
+  -DProtobuf_PROTOC_EXECUTABLE="D:/WinSinga/dependencies/protoc-2.6.1-win32/protoc.exe" ^
+  -DCUDNN_INCLUDE_DIR=D:\WinSinga\dependencies\cudnn-9.1-windows10-x64-v7.1\cuda\include ^
+  -DCUDNN_LIBRARIES=D:\WinSinga\dependencies\cudnn-9.1-windows10-x64-v7.1\cuda\lib\x64 ^
+  -DSWIG_DIR=D:\WinSinga\dependencies\swigwin-3.0.12 ^
+  -DSWIG_EXECUTABLE=D:\WinSinga\dependencies\swigwin-3.0.12\swig.exe ^
+  -DUSE_CUDA=YES ^
+  -DCUDNN_VERSION=7 ^
+  ..
+</code></pre></li>
+</ul>
+<ul>
+<li><p>Generate swig interfaces for C++ and Python: Goto src/api</p>
+<pre><code class="hljs css language-shell">swig -python -c++ singa.i
+</code></pre></li>
+<li><p>Open the generated solution in Visual Studio</p></li>
+<li><p>Change the build settings to Release and x64</p></li>
+</ul>
+<h4><a class="anchor" aria-hidden="true" id="building-singa_objects"></a><a href="#building-singa_objects" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0 [...]
+<ul>
+<li>Add the singa_wrap.cxx file from src/api to the singa_objects project</li>
+<li>In the singa_objects project, open Additional Include Directories.</li>
+<li>Add Python include path</li>
+<li>Add numpy include path</li>
+<li>Add protobuf include path</li>
+<li>Add include path for CUDA, cuDNN and cnmem</li>
+<li>In the preprocessor definitions of the singa_objects project, add USE_GLOG,
+USE_CUDA and USE_CUDNN. Remove DISABLE_WARNINGS.</li>
+<li>Build singa_objects project</li>
+</ul>
+<h4><a class="anchor" aria-hidden="true" id="building-singa-kernel"></a><a href="#building-singa-kernel" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2 [...]
+<ul>
+<li><p>Create a new Visual Studio project of type &quot;CUDA 9.1 Runtime&quot;. Give it a name
+such as singa-kernel.</p></li>
+<li><p>The project comes with an initial file called kernel.cu. Remove this file from
+the project.</p></li>
+<li><p>Add this file: src/core/tensor/math_kernel.cu</p></li>
+<li><p>In the project settings:</p>
+<ul>
+<li>Set Platform Toolset to &quot;Visual Studio 2015 (v140)&quot;</li>
+<li>Set Configuration Type to &quot; Static Library (.lib)&quot;</li>
+<li>In the Include Directories, add build/include.</li>
+</ul></li>
+<li><p>Build singa-kernel project</p></li>
+</ul>
+<h4><a class="anchor" aria-hidden="true" id="building-singa"></a><a href="#building-singa" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
+<ul>
+<li><p>In singa project:</p>
+<ul>
+<li>add singa_wrap.obj to Object Libraries</li>
+<li>change target name to _singa_wrap</li>
+<li>change target extension to .pyd</li>
+<li>change configuration type to Dynamic Library (.dll)</li>
+<li>goto Additional Library Directories and add the path to python, openblas,
+protobuf and glog libraries</li>
+<li>Add also the library path to singa-kernel, cnmem, cuda and cudnn.</li>
+<li>goto Additional Dependencies and add libopenblas.lib, libglog.lib and
+libprotobuf.lib.</li>
+<li>Add also: singa-kernel.lib, cnmem.lib, cudnn.lib, cuda.lib , cublas.lib,
+curand.lib and cudart.lib.</li>
+</ul></li>
+<li><p>build singa project</p></li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="install-python-module-1"></a><a href="#install-python-module-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 [...]
+<ul>
+<li><p>Change _singa_wrap.so to _singa_wrap.pyd in build/python/setup.py</p></li>
+<li><p>Copy the files in src/proto/python_out to build/python/singa/proto</p></li>
+<li><p>Optionally create and activate a virtual environment:</p>
+<pre><code class="hljs css language-shell">mkdir SingaEnv
+virtualenv SingaEnv
+SingaEnv\Scripts\activate
+</code></pre></li>
+<li><p>goto build/python folder and run:</p>
+<pre><code class="hljs css language-shell">python setup.py install
+</code></pre></li>
+<li><p>Make _singa_wrap.pyd, libglog.dll, libopenblas.dll, cnmem.dll, CUDA Runtime
+(e.g. cudart64_91.dll) and cuDNN (e.g. cudnn64_7.dll) available by adding them
+to the path or by copying them to singa package folder in the python
+site-packages</p></li>
+<li><p>Verify that SINGA is installed by running:</p>
+<pre><code class="hljs css language-shell">python -c "from singa import device; dev = device.create_cuda_gpu()"
+</code></pre></li>
+</ul>
+<p>A video tutorial for this part can be found here:</p>
+<p><a href="https://www.youtube.com/watch?v=YasKVjRtuDs"><img src="https://img.youtube.com/vi/YasKVjRtuDs/0.jpg" alt="youtube video"></a></p>
+<h3><a class="anchor" aria-hidden="true" id="run-unit-tests-1"></a><a href="#run-unit-tests-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<ul>
+<li><p>In the test folder, generate the Visual Studio solution:</p>
+<pre><code class="hljs css language-shell">cmake -G "Visual Studio 15 2017 Win64"
+</code></pre></li>
+<li><p>Open the generated solution in Visual Studio, or add the project to the singa
+solution that was created in step 5.2</p></li>
+<li><p>Change the build settings to Release and x64.</p></li>
+<li><p>Build glog project.</p></li>
+<li><p>In test_singa project:</p>
+<ul>
+<li>Add USE_GLOG; USE_CUDA; USE_CUDNN to the Preprocessor Definitions.</li>
+<li>In Additional Include Directories, add path of GLOG_INCLUDE_DIR,
+CBLAS_INCLUDE_DIR and Protobuf_INCLUDE_DIR which were used in step 5.2
+above. Add also build, build/include, CUDA and cuDNN include folders.</li>
+<li>Goto Additional Library Directories and add the path to openblas, protobuf
+and glog libraries. Add also build/src/singa_objects.dir/Release,
+singa-kernel, cnmem, CUDA and cuDNN library paths.</li>
+<li>Goto Additional Dependencies and add libopenblas.lib; libglog.lib;
+libprotobuf.lib; cnmem.lib; cudnn.lib; cuda.lib; cublas.lib; curand.lib;
+cudart.lib; singa-kernel.lib. Fix the names of the two libraries: gtest.lib
+and singa_objects.lib.</li>
+</ul></li>
+</ul>
+<ul>
+<li><p>Build test_singa project.</p></li>
+<li><p>Make libglog.dll, libopenblas.dll, cnmem.dll, cudart64_91.dll and
+cudnn64_7.dll available by adding them to the path or by copying them to
+test/release folder</p></li>
+<li><p>The unit tests can be executed</p>
+<ul>
+<li><p>From the command line:</p>
+<pre><code class="hljs css language-shell">test_singa.exe
+</code></pre></li>
+<li><p>From Visual Studio:</p>
+<ul>
+<li>right click on the test_singa project and choose 'Set as StartUp Project'.</li>
+<li>from the Debug menu, choose 'Start Without Debugging'</li>
+</ul></li>
+</ul></li>
+</ul>
+<p>A video tutorial for running the unit tests can be found here:</p>
+<p><a href="https://www.youtube.com/watch?v=YOjwtrvTPn4"><img src="https://img.youtube.com/vi/YOjwtrvTPn4/0.jpg" alt="youtube video"></a></p>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#install-dependencies">Install Dependencies</a></li><li><a href="#build-singa-source">Build SINGA source</a></li><li><a href="#install-python-module">Install Python module</a></li><li><a href="#run-unit-tests">Run Unit Tests</a></li><li><a href="#build-gpu-support-with-cuda">Build GPU suppo [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/installation.html b/content/docs/3.0.0.rc1/installation.html
new file mode 100644
index 0000000..3cc1ae4
--- /dev/null
+++ b/content/docs/3.0.0.rc1/installation.html
@@ -0,0 +1,199 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Installation · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright ow [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/installation.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Installation</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor  [...]
+<h2><a class="anchor" aria-hidden="true" id="from-conda"></a><a href="#from-conda" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>Conda is a package manager for Python, CPP and other packages.</p>
+<p>Currently, SINGA has conda packages for Linux and MacOSX.
+<a href="https://conda.io/miniconda.html">Miniconda3</a> is recommended to use with SINGA.
+After installing miniconda, execute the one of the following commands to install
+SINGA.</p>
+<ol>
+<li>CPU only
+<a href="https://colab.research.google.com/drive/1Ntkhi-Z6XTR8WYPXiLwujHd2dOm0772V"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"></a></li>
+</ol>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> conda install -c nusdbsystem -c conda-forge singa-cpu</span>
+</code></pre>
+<ol start="2">
+<li>GPU with CUDA and cuDNN (CUDA driver &gt;=384.81 is required)
+<a href="https://colab.research.google.com/drive/1do_TLJe18IthLOnBOsHCEe-FFPGk1sPJ"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"></a></li>
+</ol>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> conda install -c nusdbsystem -c conda-forge singa-gpu</span>
+</code></pre>
+<ol start="3">
+<li>Install a specific version of SINGA. The following command lists all the
+available SINGA packages.</li>
+</ol>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> conda search -c nusdbsystem singa</span>
+
+Loading channels: done
+<span class="hljs-meta">#</span><span class="bash"> Name                       Version           Build  Channel</span>
+singa                      2.1.0.dev        cpu_py36  nusdbsystem
+singa                      2.1.0.dev        cpu_py37  nusdbsystem
+</code></pre>
+<!--- > Please note that using the nightly built images is not recommended except for SINGA development and testing. Using stable releases is recommended. -->
+<p>The following command installs a specific version of SINGA,</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> conda install -c nusdbsystem -c conda-forge singa=X.Y.Z.dev=cpu_py37</span>
+</code></pre>
+<p>If there is no error message from</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> python -c <span class="hljs-string">"from singa import tensor"</span></span>
+</code></pre>
+<p>then SINGA is installed successfully.</p>
+<h2><a class="anchor" aria-hidden="true" id="using-docker"></a><a href="#using-docker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>Install Docker on your local host machine following the
+<a href="https://docs.docker.com/install/">instructions</a>. Add your user into the
+<a href="https://docs.docker.com/install/linux/linux-postinstall/">docker group</a> to run
+docker commands without <code>sudo</code>.</p>
+<ol>
+<li>CPU-only.</li>
+</ol>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> docker run -it apache/singa:X.Y.Z-cpu-ubuntu16.04 /bin/bash</span>
+</code></pre>
+<ol start="2">
+<li>With GPU enabled. Install
+<a href="https://github.com/NVIDIA/nvidia-docker">Nvidia-Docker</a> after install
+Docker.</li>
+</ol>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> nvidia-docker run -it apache/singa:X.Y.Z-cuda9.0-cudnn7.4.2-ubuntu16.04 /bin/bash</span>
+</code></pre>
+<ol start="3">
+<li>For the complete list of SINGA Docker images (tags), visit the
+<a href="https://hub.docker.com/r/apache/singa/">docker hub site</a>. For each docker
+image, the tag is named as</li>
+</ol>
+<pre><code class="hljs css language-shell">version-(cpu|gpu)[-devel]
+</code></pre>
+<table>
+<thead>
+<tr><th>Tag</th><th>Description</th><th>Example value</th></tr>
+</thead>
+<tbody>
+<tr><td><code>version</code></td><td>SINGA version</td><td>'2.0.0-rc0', '2.0.0', '1.2.0'</td></tr>
+<tr><td><code>cpu</code></td><td>the image cannot run on GPUs</td><td>'cpu'</td></tr>
+<tr><td><code>gpu</code></td><td>the image can run on Nvidia GPUs</td><td>'gpu', or 'cudax.x-cudnnx.x' e.g., 'cuda10.0-cudnn7.3'</td></tr>
+<tr><td><code>devel</code></td><td>indicator for development</td><td>if absent, SINGA Python package is installed for runtime only; if present, the building environment is also created, you can recompile SINGA from source at '/root/singa'</td></tr>
+<tr><td><code>OS</code></td><td>indicate OS version number</td><td>'ubuntu16.04', 'ubuntu18.04'</td></tr>
+</tbody>
+</table>
+<h2><a class="anchor" aria-hidden="true" id="from-source"></a><a href="#from-source" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
+<p>You can <a href="/docs/3.0.0.rc1/build">build and install SINGA</a> from the source code using native
+building tools or conda-build, on local host OS or in a Docker container.</p>
+<h2><a class="anchor" aria-hidden="true" id="faq"></a><a href="#faq" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
+<ul>
+<li><p>Q: Error from <code>from singa import tensor</code></p>
+<p>A: Check the detailed error from</p>
+<pre><code class="hljs css language-shell">python -c  "from singa import _singa_wrap"
+<span class="hljs-meta">#</span><span class="bash"> go to the folder of _singa_wrap.so</span>
+ldd path to _singa_wrap.so
+python
+<span class="hljs-meta">&gt;</span><span class="bash">&gt; import importlib</span>
+<span class="hljs-meta">&gt;</span><span class="bash">&gt; importlib.import_module(<span class="hljs-string">'_singa_wrap'</span>)</span>
+</code></pre>
+<p>The folder of <code>_singa_wrap.so</code> is like
+<code>~/miniconda3/lib/python3.7/site-packages/singa</code>. Normally, the error is
+caused by the mismatch or missing of dependent libraries, e.g. cuDNN or
+protobuf. The solution is to create a new virtual environment and install
+SINGA in that environment, e.g.,</p>
+<pre><code class="hljs css language-shell">conda create -n singa
+conda activate singa
+conda install -c nusdbsystem -c conda-forge singa-cpu
+</code></pre></li>
+<li><p>Q: When using virtual environment, every time I install SINGA, numpy would be
+reinstalled. However, the numpy is not used when I run <code>import numpy</code></p>
+<p>A: It could be caused by the <code>PYTHONPATH</code> environment variable which should be
+set to empty when you are using virtual environment to avoid the conflicts
+with the path of the virtual environment.</p></li>
+<li><p>Q: When I run SINGA in Mac OS X, I got the error &quot;Fatal Python error:
+PyThreadState_Get: no current thread Abort trap: 6&quot;</p>
+<p>A: This error happens typically when you have multiple versions of Python in
+your system, e.g, the one comes with the OS and the one installed by Homebrew.
+The Python linked by SINGA must be the same as the Python interpreter. You can
+check your interpreter by <code>which python</code> and check the Python linked by SINGA
+via <code>otool -L &lt;path to _singa_wrap.so&gt;</code>. This problem should be resolved if
+SINGA is installation via conda.</p></li>
+</ul>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/9/2020</em></div><div class="docs-prevnext"><a class="docs-next button" href="/docs/3.0.0.rc1/software-stack"><span>Software Stack</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#from-conda">From Conda</a></li><li><a href="#using-docker">Using Docker</a></li><li><a href="#from-source">From source</a></li><li><a href="#faq">FAQ</a></li>< [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/installation/index.html b/content/docs/3.0.0.rc1/installation/index.html
new file mode 100644
index 0000000..3cc1ae4
--- /dev/null
+++ b/content/docs/3.0.0.rc1/installation/index.html
@@ -0,0 +1,199 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Installation · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright ow [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/installation.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Installation</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor  [...]
+<h2><a class="anchor" aria-hidden="true" id="from-conda"></a><a href="#from-conda" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p>Conda is a package manager for Python, CPP and other packages.</p>
+<p>Currently, SINGA has conda packages for Linux and MacOSX.
+<a href="https://conda.io/miniconda.html">Miniconda3</a> is recommended to use with SINGA.
+After installing miniconda, execute the one of the following commands to install
+SINGA.</p>
+<ol>
+<li>CPU only
+<a href="https://colab.research.google.com/drive/1Ntkhi-Z6XTR8WYPXiLwujHd2dOm0772V"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"></a></li>
+</ol>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> conda install -c nusdbsystem -c conda-forge singa-cpu</span>
+</code></pre>
+<ol start="2">
+<li>GPU with CUDA and cuDNN (CUDA driver &gt;=384.81 is required)
+<a href="https://colab.research.google.com/drive/1do_TLJe18IthLOnBOsHCEe-FFPGk1sPJ"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"></a></li>
+</ol>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> conda install -c nusdbsystem -c conda-forge singa-gpu</span>
+</code></pre>
+<ol start="3">
+<li>Install a specific version of SINGA. The following command lists all the
+available SINGA packages.</li>
+</ol>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> conda search -c nusdbsystem singa</span>
+
+Loading channels: done
+<span class="hljs-meta">#</span><span class="bash"> Name                       Version           Build  Channel</span>
+singa                      2.1.0.dev        cpu_py36  nusdbsystem
+singa                      2.1.0.dev        cpu_py37  nusdbsystem
+</code></pre>
+<!--- > Please note that using the nightly built images is not recommended except for SINGA development and testing. Using stable releases is recommended. -->
+<p>The following command installs a specific version of SINGA,</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> conda install -c nusdbsystem -c conda-forge singa=X.Y.Z.dev=cpu_py37</span>
+</code></pre>
+<p>If there is no error message from</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> python -c <span class="hljs-string">"from singa import tensor"</span></span>
+</code></pre>
+<p>then SINGA is installed successfully.</p>
+<h2><a class="anchor" aria-hidden="true" id="using-docker"></a><a href="#using-docker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<p>Install Docker on your local host machine following the
+<a href="https://docs.docker.com/install/">instructions</a>. Add your user into the
+<a href="https://docs.docker.com/install/linux/linux-postinstall/">docker group</a> to run
+docker commands without <code>sudo</code>.</p>
+<ol>
+<li>CPU-only.</li>
+</ol>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> docker run -it apache/singa:X.Y.Z-cpu-ubuntu16.04 /bin/bash</span>
+</code></pre>
+<ol start="2">
+<li>With GPU enabled. Install
+<a href="https://github.com/NVIDIA/nvidia-docker">Nvidia-Docker</a> after install
+Docker.</li>
+</ol>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> nvidia-docker run -it apache/singa:X.Y.Z-cuda9.0-cudnn7.4.2-ubuntu16.04 /bin/bash</span>
+</code></pre>
+<ol start="3">
+<li>For the complete list of SINGA Docker images (tags), visit the
+<a href="https://hub.docker.com/r/apache/singa/">docker hub site</a>. For each docker
+image, the tag is named as</li>
+</ol>
+<pre><code class="hljs css language-shell">version-(cpu|gpu)[-devel]
+</code></pre>
+<table>
+<thead>
+<tr><th>Tag</th><th>Description</th><th>Example value</th></tr>
+</thead>
+<tbody>
+<tr><td><code>version</code></td><td>SINGA version</td><td>'2.0.0-rc0', '2.0.0', '1.2.0'</td></tr>
+<tr><td><code>cpu</code></td><td>the image cannot run on GPUs</td><td>'cpu'</td></tr>
+<tr><td><code>gpu</code></td><td>the image can run on Nvidia GPUs</td><td>'gpu', or 'cudax.x-cudnnx.x' e.g., 'cuda10.0-cudnn7.3'</td></tr>
+<tr><td><code>devel</code></td><td>indicator for development</td><td>if absent, SINGA Python package is installed for runtime only; if present, the building environment is also created, you can recompile SINGA from source at '/root/singa'</td></tr>
+<tr><td><code>OS</code></td><td>indicate OS version number</td><td>'ubuntu16.04', 'ubuntu18.04'</td></tr>
+</tbody>
+</table>
+<h2><a class="anchor" aria-hidden="true" id="from-source"></a><a href="#from-source" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42 [...]
+<p>You can <a href="/docs/3.0.0.rc1/build">build and install SINGA</a> from the source code using native
+building tools or conda-build, on local host OS or in a Docker container.</p>
+<h2><a class="anchor" aria-hidden="true" id="faq"></a><a href="#faq" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.2 [...]
+<ul>
+<li><p>Q: Error from <code>from singa import tensor</code></p>
+<p>A: Check the detailed error from</p>
+<pre><code class="hljs css language-shell">python -c  "from singa import _singa_wrap"
+<span class="hljs-meta">#</span><span class="bash"> go to the folder of _singa_wrap.so</span>
+ldd path to _singa_wrap.so
+python
+<span class="hljs-meta">&gt;</span><span class="bash">&gt; import importlib</span>
+<span class="hljs-meta">&gt;</span><span class="bash">&gt; importlib.import_module(<span class="hljs-string">'_singa_wrap'</span>)</span>
+</code></pre>
+<p>The folder of <code>_singa_wrap.so</code> is like
+<code>~/miniconda3/lib/python3.7/site-packages/singa</code>. Normally, the error is
+caused by the mismatch or missing of dependent libraries, e.g. cuDNN or
+protobuf. The solution is to create a new virtual environment and install
+SINGA in that environment, e.g.,</p>
+<pre><code class="hljs css language-shell">conda create -n singa
+conda activate singa
+conda install -c nusdbsystem -c conda-forge singa-cpu
+</code></pre></li>
+<li><p>Q: When using virtual environment, every time I install SINGA, numpy would be
+reinstalled. However, the numpy is not used when I run <code>import numpy</code></p>
+<p>A: It could be caused by the <code>PYTHONPATH</code> environment variable which should be
+set to empty when you are using virtual environment to avoid the conflicts
+with the path of the virtual environment.</p></li>
+<li><p>Q: When I run SINGA in Mac OS X, I got the error &quot;Fatal Python error:
+PyThreadState_Get: no current thread Abort trap: 6&quot;</p>
+<p>A: This error happens typically when you have multiple versions of Python in
+your system, e.g, the one comes with the OS and the one installed by Homebrew.
+The Python linked by SINGA must be the same as the Python interpreter. You can
+check your interpreter by <code>which python</code> and check the Python linked by SINGA
+via <code>otool -L &lt;path to _singa_wrap.so&gt;</code>. This problem should be resolved if
+SINGA is installation via conda.</p></li>
+</ul>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/9/2020</em></div><div class="docs-prevnext"><a class="docs-next button" href="/docs/3.0.0.rc1/software-stack"><span>Software Stack</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#from-conda">From Conda</a></li><li><a href="#using-docker">Using Docker</a></li><li><a href="#from-source">From source</a></li><li><a href="#faq">FAQ</a></li>< [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/issue-tracking.html b/content/docs/3.0.0.rc1/issue-tracking.html
new file mode 100644
index 0000000..e94d751
--- /dev/null
+++ b/content/docs/3.0.0.rc1/issue-tracking.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Issue Tracking · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright  [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/issue-tracking.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Issue Tracking</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contribu [...]
+<p>SINGA used <a href="https://issues.apache.org/jira/browse/singa">JIRA</a> to manage issues
+including bugs, new features and discussions.</p>
+<p>We are now moving to <a href="https://github.com/apache/singa/issues">Github Issues</a>.</p>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/mail-lists"><span class="arrow-prev">← </span><span>Project Mailing Lists</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/security"><span>Security</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"> [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/issue-tracking/index.html b/content/docs/3.0.0.rc1/issue-tracking/index.html
new file mode 100644
index 0000000..e94d751
--- /dev/null
+++ b/content/docs/3.0.0.rc1/issue-tracking/index.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Issue Tracking · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright  [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/issue-tracking.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Issue Tracking</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contribu [...]
+<p>SINGA used <a href="https://issues.apache.org/jira/browse/singa">JIRA</a> to manage issues
+including bugs, new features and discussions.</p>
+<p>We are now moving to <a href="https://github.com/apache/singa/issues">Github Issues</a>.</p>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/mail-lists"><span class="arrow-prev">← </span><span>Project Mailing Lists</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/security"><span>Security</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"> [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/layer.html b/content/docs/3.0.0.rc1/layer.html
new file mode 100644
index 0000000..7f361fe
--- /dev/null
+++ b/content/docs/3.0.0.rc1/layer.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Layer · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright ownership [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<h2><a class="anchor" aria-hidden="true" id="python-api"></a><a href="#python-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h2><a class="anchor" aria-hidden="true" id="cpp-api"></a><a href="#cpp-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#python-api">Python API</a></li><li><a href="#cpp-api">CPP API</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/singa-logo-square.png" alt="Apache SINGA" width="66" height="58"/></a><div><h5>Docs</h5><a href="/docs/installation">Getting Started</a><a href="/docs/device">Gu [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/layer/index.html b/content/docs/3.0.0.rc1/layer/index.html
new file mode 100644
index 0000000..7f361fe
--- /dev/null
+++ b/content/docs/3.0.0.rc1/layer/index.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Layer · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright ownership [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<h2><a class="anchor" aria-hidden="true" id="python-api"></a><a href="#python-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h2><a class="anchor" aria-hidden="true" id="cpp-api"></a><a href="#cpp-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#python-api">Python API</a></li><li><a href="#cpp-api">CPP API</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/singa-logo-square.png" alt="Apache SINGA" width="66" height="58"/></a><div><h5>Docs</h5><a href="/docs/installation">Getting Started</a><a href="/docs/device">Gu [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/loss.html b/content/docs/3.0.0.rc1/loss.html
new file mode 100644
index 0000000..a2bdef1
--- /dev/null
+++ b/content/docs/3.0.0.rc1/loss.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Loss · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright ownership. [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<h2><a class="anchor" aria-hidden="true" id="python-api"></a><a href="#python-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h2><a class="anchor" aria-hidden="true" id="cpp-api"></a><a href="#cpp-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#python-api">Python API</a></li><li><a href="#cpp-api">CPP API</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/singa-logo-square.png" alt="Apache SINGA" width="66" height="58"/></a><div><h5>Docs</h5><a href="/docs/installation">Getting Started</a><a href="/docs/device">Gu [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/loss/index.html b/content/docs/3.0.0.rc1/loss/index.html
new file mode 100644
index 0000000..a2bdef1
--- /dev/null
+++ b/content/docs/3.0.0.rc1/loss/index.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Loss · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright ownership. [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<h2><a class="anchor" aria-hidden="true" id="python-api"></a><a href="#python-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h2><a class="anchor" aria-hidden="true" id="cpp-api"></a><a href="#cpp-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#python-api">Python API</a></li><li><a href="#cpp-api">CPP API</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/singa-logo-square.png" alt="Apache SINGA" width="66" height="58"/></a><div><h5>Docs</h5><a href="/docs/installation">Getting Started</a><a href="/docs/device">Gu [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/mail-lists.html b/content/docs/3.0.0.rc1/mail-lists.html
new file mode 100644
index 0000000..b8419bc
--- /dev/null
+++ b/content/docs/3.0.0.rc1/mail-lists.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Project Mailing Lists · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding cop [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/mail-lists.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Project Mailing Lists</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contr [...]
+<p>These are the mailing lists that have been established for this project. For
+each list, there is a subscribe, unsubscribe, and an archive link.</p>
+<table>
+<thead>
+<tr><th>Name</th><th>Post</th><th>Subscribe</th><th>Unsubscribe</th><th>Archive</th></tr>
+</thead>
+<tbody>
+<tr><td>Development</td><td><a href="mailto:dev@singa.incubator.apache.org">dev@singa.incubator.apache.org</a></td><td><a href="mailto:dev-subscribe@singa.incubator.apache.org">Subscribe</a></td><td><a href="mailto:dev-unsubscribe@singa.incubator.apache.org.">Unsubscribe</a></td><td><a href="http://mail-archives.apache.org/mod_mbox/singa-dev/">mail-archives.apache.org</a></td></tr>
+<tr><td>Commits</td><td><a href="mailto:commits@singa.incubator.apache.org">commits@singa.incubator.apache.org</a></td><td><a href="mailto:commits-subscribe@singa.incubator.apache.org">Subscribe</a></td><td><a href="mailto:commits-unsubscribe@singa.incubator.apache.org">Unsubscribe</a></td><td><a href="http://mail-archives.apache.org/mod_mbox/singa-commits/">mail-archives.apache.org</a></td></tr>
+<tr><td>Security</td><td><a href="mailto:security@singa.apache.org">security@singa.apache.org</a></td><td>private</td><td>private</td><td>private</td></tr>
+</tbody>
+</table>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/source-repository"><span class="arrow-prev">← </span><span>Source Repository</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/issue-tracking"><span>Issue Tracking</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section c [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/mail-lists/index.html b/content/docs/3.0.0.rc1/mail-lists/index.html
new file mode 100644
index 0000000..b8419bc
--- /dev/null
+++ b/content/docs/3.0.0.rc1/mail-lists/index.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Project Mailing Lists · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding cop [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+            var coll = document.getElementsByClassName('collapsible');
+            var checkActiveCategory = true;
+            for (var i = 0; i < coll.length; i++) {
+              var links = coll[i].nextElementSibling.getElementsByTagName('*');
+              if (checkActiveCategory){
+                for (var j = 0; j < links.length; j++) {
+                  if (links[j].classList.contains('navListItemActive')){
+                    coll[i].nextElementSibling.classList.toggle('hide');
+                    coll[i].childNodes[1].classList.toggle('rotate');
+                    checkActiveCategory = false;
+                    break;
+                  }
+                }
+              }
+
+              coll[i].addEventListener('click', function() {
+                var arrow = this.childNodes[1];
+                arrow.classList.toggle('rotate');
+                var content = this.nextElementSibling;
+                content.classList.toggle('hide');
+              });
+            }
+
+            document.addEventListener('DOMContentLoaded', function() {
+              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
+              createToggler('#tocToggler', 'body', 'tocActive');
+
+              var headings = document.querySelector('.toc-headings');
+              headings && headings.addEventListener('click', function(event) {
+                var el = event.target;
+                while(el !== headings){
+                  if (el.tagName === 'A') {
+                    document.body.classList.remove('tocActive');
+                    break;
+                  } else{
+                    el = el.parentNode;
+                  }
+                }
+              }, false);
+
+              function createToggler(togglerSelector, targetSelector, className) {
+                var toggler = document.querySelector(togglerSelector);
+                var target = document.querySelector(targetSelector);
+
+                if (!toggler) {
+                  return;
+                }
+
+                toggler.onclick = function(event) {
+                  event.preventDefault();
+
+                  target.classList.toggle(className);
+                };
+              }
+            });
+        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/mail-lists.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Project Mailing Lists</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contr [...]
+<p>These are the mailing lists that have been established for this project. For
+each list, there is a subscribe, unsubscribe, and an archive link.</p>
+<table>
+<thead>
+<tr><th>Name</th><th>Post</th><th>Subscribe</th><th>Unsubscribe</th><th>Archive</th></tr>
+</thead>
+<tbody>
+<tr><td>Development</td><td><a href="mailto:dev@singa.incubator.apache.org">dev@singa.incubator.apache.org</a></td><td><a href="mailto:dev-subscribe@singa.incubator.apache.org">Subscribe</a></td><td><a href="mailto:dev-unsubscribe@singa.incubator.apache.org.">Unsubscribe</a></td><td><a href="http://mail-archives.apache.org/mod_mbox/singa-dev/">mail-archives.apache.org</a></td></tr>
+<tr><td>Commits</td><td><a href="mailto:commits@singa.incubator.apache.org">commits@singa.incubator.apache.org</a></td><td><a href="mailto:commits-subscribe@singa.incubator.apache.org">Subscribe</a></td><td><a href="mailto:commits-unsubscribe@singa.incubator.apache.org">Unsubscribe</a></td><td><a href="http://mail-archives.apache.org/mod_mbox/singa-commits/">mail-archives.apache.org</a></td></tr>
+<tr><td>Security</td><td><a href="mailto:security@singa.apache.org">security@singa.apache.org</a></td><td>private</td><td>private</td><td>private</td></tr>
+</tbody>
+</table>
+</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/3.0.0.rc1/source-repository"><span class="arrow-prev">← </span><span>Source Repository</span></a><a class="docs-next button" href="/docs/3.0.0.rc1/issue-tracking"><span>Issue Tracking</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section c [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/metric.html b/content/docs/3.0.0.rc1/metric.html
new file mode 100644
index 0000000..ff8459b
--- /dev/null
+++ b/content/docs/3.0.0.rc1/metric.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Metric · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright ownershi [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<h2><a class="anchor" aria-hidden="true" id="python-api"></a><a href="#python-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h2><a class="anchor" aria-hidden="true" id="cpp-api"></a><a href="#cpp-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#python-api">Python API</a></li><li><a href="#cpp-api">CPP API</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/singa-logo-square.png" alt="Apache SINGA" width="66" height="58"/></a><div><h5>Docs</h5><a href="/docs/installation">Getting Started</a><a href="/docs/device">Gu [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/metric/index.html b/content/docs/3.0.0.rc1/metric/index.html
new file mode 100644
index 0000000..ff8459b
--- /dev/null
+++ b/content/docs/3.0.0.rc1/metric/index.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Metric · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding copyright ownershi [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<h2><a class="anchor" aria-hidden="true" id="python-api"></a><a href="#python-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<h2><a class="anchor" aria-hidden="true" id="cpp-api"></a><a href="#cpp-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#python-api">Python API</a></li><li><a href="#cpp-api">CPP API</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/singa-logo-square.png" alt="Apache SINGA" width="66" height="58"/></a><div><h5>Docs</h5><a href="/docs/installation">Getting Started</a><a href="/docs/device">Gu [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/model-zoo-char-rnn.html b/content/docs/3.0.0.rc1/model-zoo-char-rnn.html
new file mode 100644
index 0000000..cd8e8be
--- /dev/null
+++ b/content/docs/3.0.0.rc1/model-zoo-char-rnn.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Train Char-RNN over plain text · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information rega [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>Recurrent neural networks (RNN) are widely used for modelling sequential data, e.g., natural language sentences. This example describes how to implement a RNN application (or model) using SINGA's RNN layers. We will use the <a href="https://github.com/karpathy/char-rnn">char-rnn</a> model as an example, which trains over sentences or source code, with each character as an input unit. Particularly, we will train a RNN using GRU over Linux kernel source code. After training, we expect t [...]
+<h2><a class="anchor" aria-hidden="true" id="instructions"></a><a href="#instructions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<h3><a class="anchor" aria-hidden="true" id="compile-and-install-singa"></a><a href="#compile-and-install-singa" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
+<p>Currently the RNN implementation depends on Cudnn with version &gt;= 5.05.</p>
+<h3><a class="anchor" aria-hidden="true" id="prepare-the-dataset"></a><a href="#prepare-the-dataset" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p>Download the <a href="http://cs.stanford.edu/people/karpathy/char-rnn/">kernel source code</a>. Other plain text files can also be used.</p>
+<h3><a class="anchor" aria-hidden="true" id="start-the-training"></a><a href="#start-the-training" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
+<blockquote>
+<p>Please <code>cd</code> to <code>singa/examples/char-rnn/</code> for the following commands</p>
+</blockquote>
+<pre><code class="hljs css language-shell">python train.py linux_input.txt
+</code></pre>
+<p>Some hyper-parameters could be set through command line,</p>
+<pre><code class="hljs css language-shell">python train.py -h
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="sample-characters"></a><a href="#sample-characters" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>Sample characters from the model by providing the number of characters to sample and the seed string.</p>
+<pre><code class="hljs css language-shell">python sample.py 'model.bin' 100 --seed '#include &lt;std'
+</code></pre>
+<p>Please replace 'model.bin' with the path to one of the checkpoint paths.</p>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#instructions">Instructions</a><ul class="toc-headings"><li><a href="#compile-and-install-singa">Compile and install SINGA.</a></li><li><a href="#prepare-the-dataset">Prepare the dataset.</a></li><li><a href="#start-the-training">Start the training,</a></li><li><a href="#sample-characters">Sample characters</a></li></ul></li></ul></nav></div><footer class [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/model-zoo-char-rnn/index.html b/content/docs/3.0.0.rc1/model-zoo-char-rnn/index.html
new file mode 100644
index 0000000..cd8e8be
--- /dev/null
+++ b/content/docs/3.0.0.rc1/model-zoo-char-rnn/index.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Train Char-RNN over plain text · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information rega [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>Recurrent neural networks (RNN) are widely used for modelling sequential data, e.g., natural language sentences. This example describes how to implement a RNN application (or model) using SINGA's RNN layers. We will use the <a href="https://github.com/karpathy/char-rnn">char-rnn</a> model as an example, which trains over sentences or source code, with each character as an input unit. Particularly, we will train a RNN using GRU over Linux kernel source code. After training, we expect t [...]
+<h2><a class="anchor" aria-hidden="true" id="instructions"></a><a href="#instructions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<h3><a class="anchor" aria-hidden="true" id="compile-and-install-singa"></a><a href="#compile-and-install-singa" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c [...]
+<p>Currently the RNN implementation depends on Cudnn with version &gt;= 5.05.</p>
+<h3><a class="anchor" aria-hidden="true" id="prepare-the-dataset"></a><a href="#prepare-the-dataset" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.2 [...]
+<p>Download the <a href="http://cs.stanford.edu/people/karpathy/char-rnn/">kernel source code</a>. Other plain text files can also be used.</p>
+<h3><a class="anchor" aria-hidden="true" id="start-the-training"></a><a href="#start-the-training" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
+<blockquote>
+<p>Please <code>cd</code> to <code>singa/examples/char-rnn/</code> for the following commands</p>
+</blockquote>
+<pre><code class="hljs css language-shell">python train.py linux_input.txt
+</code></pre>
+<p>Some hyper-parameters could be set through command line,</p>
+<pre><code class="hljs css language-shell">python train.py -h
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="sample-characters"></a><a href="#sample-characters" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<p>Sample characters from the model by providing the number of characters to sample and the seed string.</p>
+<pre><code class="hljs css language-shell">python sample.py 'model.bin' 100 --seed '#include &lt;std'
+</code></pre>
+<p>Please replace 'model.bin' with the path to one of the checkpoint paths.</p>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#instructions">Instructions</a><ul class="toc-headings"><li><a href="#compile-and-install-singa">Compile and install SINGA.</a></li><li><a href="#prepare-the-dataset">Prepare the dataset.</a></li><li><a href="#start-the-training">Start the training,</a></li><li><a href="#sample-characters">Sample characters</a></li></ul></li></ul></nav></div><footer class [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/model-zoo-cnn-cifar10.html b/content/docs/3.0.0.rc1/model-zoo-cnn-cifar10.html
new file mode 100644
index 0000000..e7aaf71
--- /dev/null
+++ b/content/docs/3.0.0.rc1/model-zoo-cnn-cifar10.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Train CNN over Cifar-10 · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding c [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>Convolution neural network (CNN) is a type of feed-forward artificial neural network widely used for image and video classification. In this example, we will train three deep CNN models to do image classification for the CIFAR-10 dataset,</p>
+<ol>
+<li><p><a href="https://code.google.com/p/cuda-convnet/source/browse/trunk/example-layers/layers-18pct.cfg">AlexNet</a> the best validation accuracy (without data augmentation) we achieved was about 82%.</p></li>
+<li><p><a href="http://torch.ch/blog/2015/07/30/cifar.html">VGGNet</a>, the best validation accuracy (without data augmentation) we achieved was about 89%.</p></li>
+<li><p><a href="https://github.com/facebook/fb.resnet.torch">ResNet</a>, the best validation accuracy (without data augmentation) we achieved was about 83%.</p></li>
+<li><p><a href="https://github.com/BVLC/caffe/tree/master/examples/cifar10">Alexnet from Caffe</a>, SINGA is able to convert model from Caffe seamlessly.</p></li>
+</ol>
+<h2><a class="anchor" aria-hidden="true" id="instructions"></a><a href="#instructions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<h3><a class="anchor" aria-hidden="true" id="singa-installation"></a><a href="#singa-installation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
+<p>Users can compile and install SINGA from source or install the Python version. The code can ran on both CPU and GPU. For GPU training, CUDA and CUDNN (V4 or V5) are required. Please refer to the <a href="/docs/3.0.0.rc1/installation">installation page</a> for detailed instructions.</p>
+<blockquote>
+<p>Please <code>cd</code> to <code>singa/examples/cifar10/</code> for the following commands</p>
+</blockquote>
+<h3><a class="anchor" aria-hidden="true" id="data-preparation"></a><a href="#data-preparation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<p>The binary Cifar-10 dataset could be downloaded by</p>
+<pre><code class="hljs css language-shell">python download_data.py bin
+</code></pre>
+<p>The Python version could be downloaded by</p>
+<pre><code class="hljs css language-shell">python download_data.py py
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="training"></a><a href="#training" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>There are four training programs</p>
+<ol>
+<li><p><code>train.py</code>. The following command would train the VGG model using the python version of the Cifar-10 dataset in <code>cifar-10-batches-py</code> folder. <code>shell python train.py vgg cifar-10-batches-py</code></p>
+<pre><code class="hljs">To train other models, please replace 'vgg' to 'alexnet', 'resnet' or 'caffe',
+where 'caffe' refers to the alexnet model converted from Caffe. By default
+the training would run on a CudaGPU device, to run it on CppCPU, add an additional
+argument
+```shell
+python train.py vgg cifar-10-batches-py  --use_cpu
+```
+</code></pre></li>
+<li><p><code>alexnet.cc</code>. It trains the AlexNet model using the CPP APIs on a CudaGPU,</p>
+<pre><code class="hljs css language-shell">./run.sh
+</code></pre></li>
+<li><p><code>alexnet-parallel.cc</code>. It trains the AlexNet model using the CPP APIs on two CudaGPU devices. The two devices run synchronously to compute the gradients of the mode parameters, which are averaged on the host CPU device and then be applied to update the parameters. <code>shell ./run-parallel.sh</code></p></li>
+<li><p><code>vgg-parallel.cc</code>. It trains the VGG model using the CPP APIs on two CudaGPU devices similar to <code>alexnet-parallel.cc</code>.</p></li>
+</ol>
+<h3><a class="anchor" aria-hidden="true" id="prediction"></a><a href="#prediction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p><code>predict.py</code> includes the prediction function</p>
+<pre><code class="hljs css language-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">predict</span><span class="hljs-params">(net, images, dev, topk=<span class="hljs-number">5</span>)</span>:</span>
+</code></pre>
+<p>The net is created by loading the previously trained model; Images consist of a numpy array of images (one row per image); dev is the training device, e.g., a CudaGPU device or the host CppCPU device; It returns the topk labels for each instance.</p>
+<p>The predict.py file's main function provides an example of using the pre-trained alexnet model to do prediction for new images. The 'model.bin' file generated by the training program should be placed at the cifar10 folder to run</p>
+<pre><code class="hljs css language-shell">python predict.py
+</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#instructions">Instructions</a><ul class="toc-headings"><li><a href="#singa-installation">SINGA installation</a></li><li><a href="#data-preparation">Data preparation</a></li><li><a href="#training">Training</a></li><li><a href="#prediction">Prediction</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a hre [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/model-zoo-cnn-cifar10/index.html b/content/docs/3.0.0.rc1/model-zoo-cnn-cifar10/index.html
new file mode 100644
index 0000000..e7aaf71
--- /dev/null
+++ b/content/docs/3.0.0.rc1/model-zoo-cnn-cifar10/index.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Train CNN over Cifar-10 · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regarding c [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>Convolution neural network (CNN) is a type of feed-forward artificial neural network widely used for image and video classification. In this example, we will train three deep CNN models to do image classification for the CIFAR-10 dataset,</p>
+<ol>
+<li><p><a href="https://code.google.com/p/cuda-convnet/source/browse/trunk/example-layers/layers-18pct.cfg">AlexNet</a> the best validation accuracy (without data augmentation) we achieved was about 82%.</p></li>
+<li><p><a href="http://torch.ch/blog/2015/07/30/cifar.html">VGGNet</a>, the best validation accuracy (without data augmentation) we achieved was about 89%.</p></li>
+<li><p><a href="https://github.com/facebook/fb.resnet.torch">ResNet</a>, the best validation accuracy (without data augmentation) we achieved was about 83%.</p></li>
+<li><p><a href="https://github.com/BVLC/caffe/tree/master/examples/cifar10">Alexnet from Caffe</a>, SINGA is able to convert model from Caffe seamlessly.</p></li>
+</ol>
+<h2><a class="anchor" aria-hidden="true" id="instructions"></a><a href="#instructions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<h3><a class="anchor" aria-hidden="true" id="singa-installation"></a><a href="#singa-installation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
+<p>Users can compile and install SINGA from source or install the Python version. The code can ran on both CPU and GPU. For GPU training, CUDA and CUDNN (V4 or V5) are required. Please refer to the <a href="/docs/3.0.0.rc1/installation">installation page</a> for detailed instructions.</p>
+<blockquote>
+<p>Please <code>cd</code> to <code>singa/examples/cifar10/</code> for the following commands</p>
+</blockquote>
+<h3><a class="anchor" aria-hidden="true" id="data-preparation"></a><a href="#data-preparation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2. [...]
+<p>The binary Cifar-10 dataset could be downloaded by</p>
+<pre><code class="hljs css language-shell">python download_data.py bin
+</code></pre>
+<p>The Python version could be downloaded by</p>
+<pre><code class="hljs css language-shell">python download_data.py py
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="training"></a><a href="#training" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>There are four training programs</p>
+<ol>
+<li><p><code>train.py</code>. The following command would train the VGG model using the python version of the Cifar-10 dataset in <code>cifar-10-batches-py</code> folder. <code>shell python train.py vgg cifar-10-batches-py</code></p>
+<pre><code class="hljs">To train other models, please replace 'vgg' to 'alexnet', 'resnet' or 'caffe',
+where 'caffe' refers to the alexnet model converted from Caffe. By default
+the training would run on a CudaGPU device, to run it on CppCPU, add an additional
+argument
+```shell
+python train.py vgg cifar-10-batches-py  --use_cpu
+```
+</code></pre></li>
+<li><p><code>alexnet.cc</code>. It trains the AlexNet model using the CPP APIs on a CudaGPU,</p>
+<pre><code class="hljs css language-shell">./run.sh
+</code></pre></li>
+<li><p><code>alexnet-parallel.cc</code>. It trains the AlexNet model using the CPP APIs on two CudaGPU devices. The two devices run synchronously to compute the gradients of the mode parameters, which are averaged on the host CPU device and then be applied to update the parameters. <code>shell ./run-parallel.sh</code></p></li>
+<li><p><code>vgg-parallel.cc</code>. It trains the VGG model using the CPP APIs on two CudaGPU devices similar to <code>alexnet-parallel.cc</code>.</p></li>
+</ol>
+<h3><a class="anchor" aria-hidden="true" id="prediction"></a><a href="#prediction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1 [...]
+<p><code>predict.py</code> includes the prediction function</p>
+<pre><code class="hljs css language-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">predict</span><span class="hljs-params">(net, images, dev, topk=<span class="hljs-number">5</span>)</span>:</span>
+</code></pre>
+<p>The net is created by loading the previously trained model; Images consist of a numpy array of images (one row per image); dev is the training device, e.g., a CudaGPU device or the host CppCPU device; It returns the topk labels for each instance.</p>
+<p>The predict.py file's main function provides an example of using the pre-trained alexnet model to do prediction for new images. The 'model.bin' file generated by the training program should be placed at the cifar10 folder to run</p>
+<pre><code class="hljs css language-shell">python predict.py
+</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#instructions">Instructions</a><ul class="toc-headings"><li><a href="#singa-installation">SINGA installation</a></li><li><a href="#data-preparation">Data preparation</a></li><li><a href="#training">Training</a></li><li><a href="#prediction">Prediction</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a hre [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/model-zoo-imagenet-alexnet.html b/content/docs/3.0.0.rc1/model-zoo-imagenet-alexnet.html
new file mode 100644
index 0000000..8462602
--- /dev/null
+++ b/content/docs/3.0.0.rc1/model-zoo-imagenet-alexnet.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Train AlexNet over ImageNet · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regardi [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>Convolution neural network (CNN) is a type of feed-forward neural network widely used for image and video classification. In this example, we will use a <a href="http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks">deep CNN model</a> to do image classification against the ImageNet dataset.</p>
+<h2><a class="anchor" aria-hidden="true" id="instructions"></a><a href="#instructions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<h3><a class="anchor" aria-hidden="true" id="compile-singa"></a><a href="#compile-singa" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>Please compile SINGA with CUDA, CUDNN and OpenCV. You can manually turn on the options in CMakeLists.txt or run <code>ccmake ..</code> in <code>build/</code> folder.</p>
+<p>We have tested CUDNN V4 and V5 (V5 requires CUDA 7.5)</p>
+<h3><a class="anchor" aria-hidden="true" id="data-download"></a><a href="#data-download" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<ul>
+<li>Please refer to step1-3 on <a href="https://github.com/amd/OpenCL-caffe/wiki/Instructions-to-create-ImageNet-2012-data">Instructions to create ImageNet 2012 data</a> to download and decompress the data.</li>
+<li>You can download the training and validation list by <a href="https://github.com/BVLC/caffe/blob/master/data/ilsvrc12/get_ilsvrc_aux.sh">get_ilsvrc_aux.sh</a> or from <a href="http://www.image-net.org/download-images">Imagenet</a>.</li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="data-preprocessing"></a><a href="#data-preprocessing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
+<blockquote>
+<p>Please <code>cd</code> to <code>singa/examples/imagenet/alexnet/</code> for the following commands</p>
+</blockquote>
+<ul>
+<li><p>Assuming you have downloaded the data and the list. Now we should transform the data into binary files. You can run:</p>
+<pre><code class="hljs css language-shell">sh create_data.sh
+</code></pre>
+<p>The script will generate a test file(<code>test.bin</code>), a mean file(<code>mean.bin</code>) and several training files(<code>trainX.bin</code>) in the specified output folder.</p></li>
+<li><p>You can also change the parameters in <code>create_data.sh</code>.</p>
+<ul>
+<li><code>-trainlist &lt;file&gt;</code>: the file of training list;</li>
+<li><code>-trainfolder &lt;folder&gt;</code>: the folder of training images;</li>
+<li><code>-testlist &lt;file&gt;</code>: the file of test list;</li>
+<li><code>-testfolder &lt;floder&gt;</code>: the folder of test images;</li>
+<li><code>-outdata &lt;folder&gt;</code>: the folder to save output files, including mean, training and test files. The script will generate these files in the specified folder;</li>
+<li><code>-filesize &lt;int&gt;</code>: number of training images that stores in each binary file.</li>
+</ul></li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="training"></a><a href="#training" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<ul>
+<li><p>After preparing data, you can run the following command to train the Alexnet model.</p>
+<pre><code class="hljs css language-shell">sh run.sh
+</code></pre></li>
+<li><p>You may change the parameters in <code>run.sh</code>.</p>
+<ul>
+<li><code>-epoch &lt;int&gt;</code>: number of epoch to be trained, default is 90;</li>
+<li><code>-lr &lt;float&gt;</code>: base learning rate, the learning rate will decrease each 20 epochs, more specifically, <code>lr = lr * exp(0.1 * (epoch / 20))</code>;</li>
+<li><code>-batchsize &lt;int&gt;</code>: batchsize, it should be changed regarding to your memory;</li>
+<li><code>-filesize &lt;int&gt;</code>: number of training images that stores in each binary file, it is the same as the <code>filesize</code> in data preprocessing;</li>
+<li><code>-ntrain &lt;int&gt;</code>: number of training images;</li>
+<li><code>-ntest &lt;int&gt;</code>: number of test images;</li>
+<li><code>-data &lt;folder&gt;</code>: the folder which stores the binary files, it is exactly the output folder in data preprocessing step;</li>
+<li><code>-pfreq &lt;int&gt;</code>: the frequency(in batch) of printing current model status(loss and accuracy);</li>
+<li><code>-nthreads &lt;int&gt;</code>: the number of threads to load data which feed to the model.</li>
+</ul></li>
+</ul>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#instructions">Instructions</a><ul class="toc-headings"><li><a href="#compile-singa">Compile SINGA</a></li><li><a href="#data-download">Data download</a></li><li><a href="#data-preprocessing">Data preprocessing</a></li><li><a href="#training">Training</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a hre [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/model-zoo-imagenet-alexnet/index.html b/content/docs/3.0.0.rc1/model-zoo-imagenet-alexnet/index.html
new file mode 100644
index 0000000..8462602
--- /dev/null
+++ b/content/docs/3.0.0.rc1/model-zoo-imagenet-alexnet/index.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Train AlexNet over ImageNet · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information regardi [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>Convolution neural network (CNN) is a type of feed-forward neural network widely used for image and video classification. In this example, we will use a <a href="http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks">deep CNN model</a> to do image classification against the ImageNet dataset.</p>
+<h2><a class="anchor" aria-hidden="true" id="instructions"></a><a href="#instructions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<h3><a class="anchor" aria-hidden="true" id="compile-singa"></a><a href="#compile-singa" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>Please compile SINGA with CUDA, CUDNN and OpenCV. You can manually turn on the options in CMakeLists.txt or run <code>ccmake ..</code> in <code>build/</code> folder.</p>
+<p>We have tested CUDNN V4 and V5 (V5 requires CUDA 7.5)</p>
+<h3><a class="anchor" aria-hidden="true" id="data-download"></a><a href="#data-download" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<ul>
+<li>Please refer to step1-3 on <a href="https://github.com/amd/OpenCL-caffe/wiki/Instructions-to-create-ImageNet-2012-data">Instructions to create ImageNet 2012 data</a> to download and decompress the data.</li>
+<li>You can download the training and validation list by <a href="https://github.com/BVLC/caffe/blob/master/data/ilsvrc12/get_ilsvrc_aux.sh">get_ilsvrc_aux.sh</a> or from <a href="http://www.image-net.org/download-images">Imagenet</a>.</li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="data-preprocessing"></a><a href="#data-preprocessing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
+<blockquote>
+<p>Please <code>cd</code> to <code>singa/examples/imagenet/alexnet/</code> for the following commands</p>
+</blockquote>
+<ul>
+<li><p>Assuming you have downloaded the data and the list. Now we should transform the data into binary files. You can run:</p>
+<pre><code class="hljs css language-shell">sh create_data.sh
+</code></pre>
+<p>The script will generate a test file(<code>test.bin</code>), a mean file(<code>mean.bin</code>) and several training files(<code>trainX.bin</code>) in the specified output folder.</p></li>
+<li><p>You can also change the parameters in <code>create_data.sh</code>.</p>
+<ul>
+<li><code>-trainlist &lt;file&gt;</code>: the file of training list;</li>
+<li><code>-trainfolder &lt;folder&gt;</code>: the folder of training images;</li>
+<li><code>-testlist &lt;file&gt;</code>: the file of test list;</li>
+<li><code>-testfolder &lt;floder&gt;</code>: the folder of test images;</li>
+<li><code>-outdata &lt;folder&gt;</code>: the folder to save output files, including mean, training and test files. The script will generate these files in the specified folder;</li>
+<li><code>-filesize &lt;int&gt;</code>: number of training images that stores in each binary file.</li>
+</ul></li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="training"></a><a href="#training" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<ul>
+<li><p>After preparing data, you can run the following command to train the Alexnet model.</p>
+<pre><code class="hljs css language-shell">sh run.sh
+</code></pre></li>
+<li><p>You may change the parameters in <code>run.sh</code>.</p>
+<ul>
+<li><code>-epoch &lt;int&gt;</code>: number of epoch to be trained, default is 90;</li>
+<li><code>-lr &lt;float&gt;</code>: base learning rate, the learning rate will decrease each 20 epochs, more specifically, <code>lr = lr * exp(0.1 * (epoch / 20))</code>;</li>
+<li><code>-batchsize &lt;int&gt;</code>: batchsize, it should be changed regarding to your memory;</li>
+<li><code>-filesize &lt;int&gt;</code>: number of training images that stores in each binary file, it is the same as the <code>filesize</code> in data preprocessing;</li>
+<li><code>-ntrain &lt;int&gt;</code>: number of training images;</li>
+<li><code>-ntest &lt;int&gt;</code>: number of test images;</li>
+<li><code>-data &lt;folder&gt;</code>: the folder which stores the binary files, it is exactly the output folder in data preprocessing step;</li>
+<li><code>-pfreq &lt;int&gt;</code>: the frequency(in batch) of printing current model status(loss and accuracy);</li>
+<li><code>-nthreads &lt;int&gt;</code>: the number of threads to load data which feed to the model.</li>
+</ul></li>
+</ul>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#instructions">Instructions</a><ul class="toc-headings"><li><a href="#compile-singa">Compile SINGA</a></li><li><a href="#data-download">Data download</a></li><li><a href="#data-preprocessing">Data preprocessing</a></li><li><a href="#training">Training</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a hre [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/model-zoo-imagenet-densenet.html b/content/docs/3.0.0.rc1/model-zoo-imagenet-densenet.html
new file mode 100644
index 0000000..e75a0dc
--- /dev/null
+++ b/content/docs/3.0.0.rc1/model-zoo-imagenet-densenet.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Image Classification using DenseNet · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>In this example, we convert DenseNet on <a href="https://github.com/pytorch/vision/blob/master/torchvision/models/densenet.py">PyTorch</a> to SINGA for image classification.</p>
+<h2><a class="anchor" aria-hidden="true" id="instructions"></a><a href="#instructions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<blockquote>
+<p>Please <code>cd</code> to <code>singa/examples/imagenet/densenet/</code> for the following commands</p>
+</blockquote>
+<h3><a class="anchor" aria-hidden="true" id="download-one-parameter-checkpoint-file"></a><a href="#download-one-parameter-checkpoint-file" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1. [...]
+<p>Download one parameter checkpoint file (see below) and the synset word file of ImageNet into this folder, e.g.,</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> wget https://s3-ap-southeast-1.amazonaws.com/dlfile/densenet/densenet-121.tar.gz</span>
+<span class="hljs-meta">$</span><span class="bash"> wget https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/synset_words.txt</span>
+<span class="hljs-meta">$</span><span class="bash"> tar xvf densenet-121.tar.gz</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="usage"></a><a href="#usage" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> python serve.py -h</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#example" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">#</span><span class="bash"> use cpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py --use_cpu --parameter_file densenet-121.pickle --depth 121 &amp;</span>
+<span class="hljs-meta">#</span><span class="bash"> use gpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py --parameter_file densenet-121.pickle --depth 121 &amp;</span>
+</code></pre>
+<p>The parameter files for the following model and depth configuration pairs are provided: <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/densenet/densenet-121.tar.gz">121</a>, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/densenet/densenet-169.tar.gz">169</a>, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/densenet/densenet-201.tar.gz">201</a>, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/densenet/densenet-161.tar.gz">161</a></p>
+<h3><a class="anchor" aria-hidden="true" id="submit"></a><a href="#submit" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<p>Submit images for classification</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image1.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image2.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image3.jpg http://localhost:9999/api</span>
+</code></pre>
+<p>image1.jpg, image2.jpg and image3.jpg should be downloaded before executing the above commands.</p>
+<h2><a class="anchor" aria-hidden="true" id="details"></a><a href="#details" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>The parameter files were converted from the pytorch via the convert.py program.</p>
+<p>Usage:</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> python convert.py -h</span>
+</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#instructions">Instructions</a><ul class="toc-headings"><li><a href="#download-one-parameter-checkpoint-file">Download one parameter checkpoint file</a></li><li><a href="#usage">Usage</a></li><li><a href="#example">Example</a></li><li><a href="#submit">Submit</a></li></ul></li><li><a href="#details">Details</a></li></ul></nav></div><footer class="nav-foot [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/model-zoo-imagenet-densenet/index.html b/content/docs/3.0.0.rc1/model-zoo-imagenet-densenet/index.html
new file mode 100644
index 0000000..e75a0dc
--- /dev/null
+++ b/content/docs/3.0.0.rc1/model-zoo-imagenet-densenet/index.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Image Classification using DenseNet · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>In this example, we convert DenseNet on <a href="https://github.com/pytorch/vision/blob/master/torchvision/models/densenet.py">PyTorch</a> to SINGA for image classification.</p>
+<h2><a class="anchor" aria-hidden="true" id="instructions"></a><a href="#instructions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<blockquote>
+<p>Please <code>cd</code> to <code>singa/examples/imagenet/densenet/</code> for the following commands</p>
+</blockquote>
+<h3><a class="anchor" aria-hidden="true" id="download-one-parameter-checkpoint-file"></a><a href="#download-one-parameter-checkpoint-file" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1. [...]
+<p>Download one parameter checkpoint file (see below) and the synset word file of ImageNet into this folder, e.g.,</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> wget https://s3-ap-southeast-1.amazonaws.com/dlfile/densenet/densenet-121.tar.gz</span>
+<span class="hljs-meta">$</span><span class="bash"> wget https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/synset_words.txt</span>
+<span class="hljs-meta">$</span><span class="bash"> tar xvf densenet-121.tar.gz</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="usage"></a><a href="#usage" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> python serve.py -h</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#example" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">#</span><span class="bash"> use cpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py --use_cpu --parameter_file densenet-121.pickle --depth 121 &amp;</span>
+<span class="hljs-meta">#</span><span class="bash"> use gpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py --parameter_file densenet-121.pickle --depth 121 &amp;</span>
+</code></pre>
+<p>The parameter files for the following model and depth configuration pairs are provided: <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/densenet/densenet-121.tar.gz">121</a>, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/densenet/densenet-169.tar.gz">169</a>, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/densenet/densenet-201.tar.gz">201</a>, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/densenet/densenet-161.tar.gz">161</a></p>
+<h3><a class="anchor" aria-hidden="true" id="submit"></a><a href="#submit" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2. [...]
+<p>Submit images for classification</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image1.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image2.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image3.jpg http://localhost:9999/api</span>
+</code></pre>
+<p>image1.jpg, image2.jpg and image3.jpg should be downloaded before executing the above commands.</p>
+<h2><a class="anchor" aria-hidden="true" id="details"></a><a href="#details" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>The parameter files were converted from the pytorch via the convert.py program.</p>
+<p>Usage:</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> python convert.py -h</span>
+</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#instructions">Instructions</a><ul class="toc-headings"><li><a href="#download-one-parameter-checkpoint-file">Download one parameter checkpoint file</a></li><li><a href="#usage">Usage</a></li><li><a href="#example">Example</a></li><li><a href="#submit">Submit</a></li></ul></li><li><a href="#details">Details</a></li></ul></nav></div><footer class="nav-foot [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/model-zoo-imagenet-googlenet.html b/content/docs/3.0.0.rc1/model-zoo-imagenet-googlenet.html
new file mode 100644
index 0000000..f3d5d3d
--- /dev/null
+++ b/content/docs/3.0.0.rc1/model-zoo-imagenet-googlenet.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Image Classification using GoogleNet · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional informatio [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>In this example, we convert GoogleNet trained on Caffe to SINGA for image classification. Tested on <a href="https://github.com/apache/singa/commit/8c990f7da2de220e8a012c6a8ecc897dc7532744">SINGA commit</a> with <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/bvlc_googlenet.tar.gz">the parameters</a>.</p>
+<h2><a class="anchor" aria-hidden="true" id="instructions"></a><a href="#instructions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<blockquote>
+<p>Please <code>cd</code> to <code>singa/examples/imagenet/googlenet/</code> for the following commands</p>
+</blockquote>
+<h3><a class="anchor" aria-hidden="true" id="download"></a><a href="#download" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>Download the parameter checkpoint file into this folder</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> wget https://s3-ap-southeast-1.amazonaws.com/dlfile/bvlc_googlenet.tar.gz</span>
+<span class="hljs-meta">$</span><span class="bash"> tar xvf bvlc_googlenet.tar.gz</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="run-the-program"></a><a href="#run-the-program" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">#</span><span class="bash"> use cpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py -C &amp;</span>
+<span class="hljs-meta">#</span><span class="bash"> use gpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py &amp;</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="submit-images-for-classification"></a><a href="#submit-images-for-classification" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image1.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image2.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image3.jpg http://localhost:9999/api</span>
+</code></pre>
+<p>image1.jpg, image2.jpg and image3.jpg should be downloaded before executing the above commands.</p>
+<h2><a class="anchor" aria-hidden="true" id="details"></a><a href="#details" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>We first extract the parameter values from <a href="http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel">Caffe's checkpoint file</a> into a pickle version After downloading the checkpoint file into <code>caffe_root/python</code> folder, run the following script</p>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># to be executed within caffe_root/python folder</span>
+<span class="hljs-keyword">import</span> caffe
+<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
+<span class="hljs-keyword">import</span> cPickle <span class="hljs-keyword">as</span> pickle
+
+model_def = <span class="hljs-string">'../models/bvlc_googlenet/deploy.prototxt'</span>
+weight = <span class="hljs-string">'bvlc_googlenet.caffemodel'</span>  <span class="hljs-comment"># must be downloaded at first</span>
+net = caffe.Net(model_def, weight, caffe.TEST)
+
+params = {}
+<span class="hljs-keyword">for</span> layer_name <span class="hljs-keyword">in</span> net.params.keys():
+    weights=np.copy(net.params[layer_name][<span class="hljs-number">0</span>].data)
+    bias=np.copy(net.params[layer_name][<span class="hljs-number">1</span>].data)
+    params[layer_name+<span class="hljs-string">'_weight'</span>]=weights
+    params[layer_name+<span class="hljs-string">'_bias'</span>]=bias
+    <span class="hljs-keyword">print</span> layer_name, weights.shape, bias.shape
+
+<span class="hljs-keyword">with</span> open(<span class="hljs-string">'bvlc_googlenet.pickle'</span>, <span class="hljs-string">'wb'</span>) <span class="hljs-keyword">as</span> fd:
+    pickle.dump(params, fd)
+</code></pre>
+<p>Then we construct the GoogleNet using SINGA's FeedForwardNet structure. Note that we added a EndPadding layer to resolve the issue from discrepancy of the rounding strategy of the pooling layer between Caffe (ceil) and cuDNN (floor). Only the MaxPooling layers outside inception blocks have this problem. Refer to <a href="https://gist.github.com/joelouismarino/a2ede9ab3928f999575423b9887abd14">this</a> for more detials.</p>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#instructions">Instructions</a><ul class="toc-headings"><li><a href="#download">Download</a></li><li><a href="#run-the-program">Run the program</a></li><li><a href="#submit-images-for-classification">Submit images for classification</a></li></ul></li><li><a href="#details">Details</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section cl [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/model-zoo-imagenet-googlenet/index.html b/content/docs/3.0.0.rc1/model-zoo-imagenet-googlenet/index.html
new file mode 100644
index 0000000..f3d5d3d
--- /dev/null
+++ b/content/docs/3.0.0.rc1/model-zoo-imagenet-googlenet/index.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Image Classification using GoogleNet · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional informatio [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>In this example, we convert GoogleNet trained on Caffe to SINGA for image classification. Tested on <a href="https://github.com/apache/singa/commit/8c990f7da2de220e8a012c6a8ecc897dc7532744">SINGA commit</a> with <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/bvlc_googlenet.tar.gz">the parameters</a>.</p>
+<h2><a class="anchor" aria-hidden="true" id="instructions"></a><a href="#instructions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<blockquote>
+<p>Please <code>cd</code> to <code>singa/examples/imagenet/googlenet/</code> for the following commands</p>
+</blockquote>
+<h3><a class="anchor" aria-hidden="true" id="download"></a><a href="#download" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>Download the parameter checkpoint file into this folder</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> wget https://s3-ap-southeast-1.amazonaws.com/dlfile/bvlc_googlenet.tar.gz</span>
+<span class="hljs-meta">$</span><span class="bash"> tar xvf bvlc_googlenet.tar.gz</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="run-the-program"></a><a href="#run-the-program" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">#</span><span class="bash"> use cpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py -C &amp;</span>
+<span class="hljs-meta">#</span><span class="bash"> use gpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py &amp;</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="submit-images-for-classification"></a><a href="#submit-images-for-classification" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image1.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image2.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image3.jpg http://localhost:9999/api</span>
+</code></pre>
+<p>image1.jpg, image2.jpg and image3.jpg should be downloaded before executing the above commands.</p>
+<h2><a class="anchor" aria-hidden="true" id="details"></a><a href="#details" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>We first extract the parameter values from <a href="http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel">Caffe's checkpoint file</a> into a pickle version After downloading the checkpoint file into <code>caffe_root/python</code> folder, run the following script</p>
+<pre><code class="hljs css language-python"><span class="hljs-comment"># to be executed within caffe_root/python folder</span>
+<span class="hljs-keyword">import</span> caffe
+<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
+<span class="hljs-keyword">import</span> cPickle <span class="hljs-keyword">as</span> pickle
+
+model_def = <span class="hljs-string">'../models/bvlc_googlenet/deploy.prototxt'</span>
+weight = <span class="hljs-string">'bvlc_googlenet.caffemodel'</span>  <span class="hljs-comment"># must be downloaded at first</span>
+net = caffe.Net(model_def, weight, caffe.TEST)
+
+params = {}
+<span class="hljs-keyword">for</span> layer_name <span class="hljs-keyword">in</span> net.params.keys():
+    weights=np.copy(net.params[layer_name][<span class="hljs-number">0</span>].data)
+    bias=np.copy(net.params[layer_name][<span class="hljs-number">1</span>].data)
+    params[layer_name+<span class="hljs-string">'_weight'</span>]=weights
+    params[layer_name+<span class="hljs-string">'_bias'</span>]=bias
+    <span class="hljs-keyword">print</span> layer_name, weights.shape, bias.shape
+
+<span class="hljs-keyword">with</span> open(<span class="hljs-string">'bvlc_googlenet.pickle'</span>, <span class="hljs-string">'wb'</span>) <span class="hljs-keyword">as</span> fd:
+    pickle.dump(params, fd)
+</code></pre>
+<p>Then we construct the GoogleNet using SINGA's FeedForwardNet structure. Note that we added a EndPadding layer to resolve the issue from discrepancy of the rounding strategy of the pooling layer between Caffe (ceil) and cuDNN (floor). Only the MaxPooling layers outside inception blocks have this problem. Refer to <a href="https://gist.github.com/joelouismarino/a2ede9ab3928f999575423b9887abd14">this</a> for more detials.</p>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#instructions">Instructions</a><ul class="toc-headings"><li><a href="#download">Download</a></li><li><a href="#run-the-program">Run the program</a></li><li><a href="#submit-images-for-classification">Submit images for classification</a></li></ul></li><li><a href="#details">Details</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section cl [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/model-zoo-imagenet-inception.html b/content/docs/3.0.0.rc1/model-zoo-imagenet-inception.html
new file mode 100644
index 0000000..8fa81a5
--- /dev/null
+++ b/content/docs/3.0.0.rc1/model-zoo-imagenet-inception.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Image Classification using Inception V4 · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional informa [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>In this example, we convert Inception V4 trained on Tensorflow to SINGA for image classification. Tested on SINGA version 1.1.1 with <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/inception_v4.tar.gz">parameters pretrained by tensorflow</a>.</p>
+<h2><a class="anchor" aria-hidden="true" id="instructions"></a><a href="#instructions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<blockquote>
+<p>Please <code>cd</code> to <code>singa/examples/imagenet/inception/</code> for the following commands</p>
+</blockquote>
+<h3><a class="anchor" aria-hidden="true" id="download"></a><a href="#download" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>Download the parameter checkpoint file</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> wget https://s3-ap-southeast-1.amazonaws.com/dlfile/inception_v4.tar.gz</span>
+<span class="hljs-meta">$</span><span class="bash"> tar xvf inception_v4.tar.gz</span>
+</code></pre>
+<p>Download <a href="https://github.com/BVLC/caffe/blob/master/data/ilsvrc12/get_ilsvrc_aux.sh">synset_word.txt</a> file.</p>
+<h3><a class="anchor" aria-hidden="true" id="run-the-program"></a><a href="#run-the-program" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">#</span><span class="bash"> use cpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py -C &amp;</span>
+<span class="hljs-meta">#</span><span class="bash"> use gpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py &amp;</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="submit-images-for-classification"></a><a href="#submit-images-for-classification" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image1.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image2.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image3.jpg http://localhost:9999/api</span>
+</code></pre>
+<p>image1.jpg, image2.jpg and image3.jpg should be downloaded before executing the above commands.</p>
+<h2><a class="anchor" aria-hidden="true" id="details"></a><a href="#details" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>We first extract the parameter values from <a href="http://download.tensorflow.org/models/inception_v4_2016_09_09.tar.gz">Tensorflow's checkpoint file</a> into a pickle version. After downloading and decompressing the checkpoint file, run the following script</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> python convert.py --file_name=inception_v4.ckpt</span>
+</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#instructions">Instructions</a><ul class="toc-headings"><li><a href="#download">Download</a></li><li><a href="#run-the-program">Run the program</a></li><li><a href="#submit-images-for-classification">Submit images for classification</a></li></ul></li><li><a href="#details">Details</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section cl [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/model-zoo-imagenet-inception/index.html b/content/docs/3.0.0.rc1/model-zoo-imagenet-inception/index.html
new file mode 100644
index 0000000..8fa81a5
--- /dev/null
+++ b/content/docs/3.0.0.rc1/model-zoo-imagenet-inception/index.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Image Classification using Inception V4 · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional informa [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>In this example, we convert Inception V4 trained on Tensorflow to SINGA for image classification. Tested on SINGA version 1.1.1 with <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/inception_v4.tar.gz">parameters pretrained by tensorflow</a>.</p>
+<h2><a class="anchor" aria-hidden="true" id="instructions"></a><a href="#instructions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<blockquote>
+<p>Please <code>cd</code> to <code>singa/examples/imagenet/inception/</code> for the following commands</p>
+</blockquote>
+<h3><a class="anchor" aria-hidden="true" id="download"></a><a href="#download" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>Download the parameter checkpoint file</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> wget https://s3-ap-southeast-1.amazonaws.com/dlfile/inception_v4.tar.gz</span>
+<span class="hljs-meta">$</span><span class="bash"> tar xvf inception_v4.tar.gz</span>
+</code></pre>
+<p>Download <a href="https://github.com/BVLC/caffe/blob/master/data/ilsvrc12/get_ilsvrc_aux.sh">synset_word.txt</a> file.</p>
+<h3><a class="anchor" aria-hidden="true" id="run-the-program"></a><a href="#run-the-program" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5  [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">#</span><span class="bash"> use cpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py -C &amp;</span>
+<span class="hljs-meta">#</span><span class="bash"> use gpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py &amp;</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="submit-images-for-classification"></a><a href="#submit-images-for-classification" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image1.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image2.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image3.jpg http://localhost:9999/api</span>
+</code></pre>
+<p>image1.jpg, image2.jpg and image3.jpg should be downloaded before executing the above commands.</p>
+<h2><a class="anchor" aria-hidden="true" id="details"></a><a href="#details" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>We first extract the parameter values from <a href="http://download.tensorflow.org/models/inception_v4_2016_09_09.tar.gz">Tensorflow's checkpoint file</a> into a pickle version. After downloading and decompressing the checkpoint file, run the following script</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> python convert.py --file_name=inception_v4.ckpt</span>
+</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#instructions">Instructions</a><ul class="toc-headings"><li><a href="#download">Download</a></li><li><a href="#run-the-program">Run the program</a></li><li><a href="#submit-images-for-classification">Submit images for classification</a></li></ul></li><li><a href="#details">Details</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section cl [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/model-zoo-imagenet-resnet.html b/content/docs/3.0.0.rc1/model-zoo-imagenet-resnet.html
new file mode 100644
index 0000000..37b968c
--- /dev/null
+++ b/content/docs/3.0.0.rc1/model-zoo-imagenet-resnet.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Image Classification using Residual Networks · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional in [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>In this example, we convert Residual Networks trained on <a href="https://github.com/facebook/fb.resnet.torch">Torch</a> to SINGA for image classification. Tested with the <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/resnet-18.tar.gz">parameters pretrained by Torch</a></p>
+<h2><a class="anchor" aria-hidden="true" id="instructions"></a><a href="#instructions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<blockquote>
+<p>Please <code>cd</code> to <code>singa/examples/imagenet/resnet/</code> for the following commands</p>
+</blockquote>
+<h3><a class="anchor" aria-hidden="true" id="download"></a><a href="#download" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>Download one parameter checkpoint file (see below) and the synset word file of ImageNet into this folder, e.g.,</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> wget https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/resnet-18.tar.gz</span>
+<span class="hljs-meta">$</span><span class="bash"> wget https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/synset_words.txt</span>
+<span class="hljs-meta">$</span><span class="bash"> tar xvf resnet-18.tar.gz</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="usage"></a><a href="#usage" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> python serve.py -h</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#example" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">#</span><span class="bash"> use cpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py --use_cpu --parameter_file resnet-18.pickle --model resnet --depth 18 &amp;</span>
+<span class="hljs-meta">#</span><span class="bash"> use gpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py --parameter_file resnet-18.pickle --model resnet --depth 18 &amp;</span>
+</code></pre>
+<p>The parameter files for the following model and depth configuration pairs are provided:</p>
+<ul>
+<li>resnet (original resnet), <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/resnet-18.tar.gz">18</a>|<a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/resnet-34.tar.gz">34</a>|<a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/resnet-101.tar.gz">101</a>|<a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/resnet-152.tar.gz">152</a></li>
+<li>addbn (resnet with a batch normalization layer after the addition), <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/resnet-50.tar.gz">50</a></li>
+<li>wrn (wide resnet), <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/wrn-50-2.tar.gz">50</a></li>
+<li>preact (resnet with pre-activation) <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/resnet-200.tar.gz">200</a></li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="submit-images-for-classification"></a><a href="#submit-images-for-classification" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image1.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image2.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image3.jpg http://localhost:9999/api</span>
+</code></pre>
+<p>image1.jpg, image2.jpg and image3.jpg should be downloaded before executing the above commands.</p>
+<h2><a class="anchor" aria-hidden="true" id="details"></a><a href="#details" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>The parameter files were extracted from the original <a href="https://github.com/facebook/fb.resnet.torch/tree/master/pretrained">torch files</a> via the convert.py program.</p>
+<p>Usage:</p>
+<pre><code class="hljs">$ <span class="hljs-keyword">python</span> convert.<span class="hljs-keyword">py</span> -h
+</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#instructions">Instructions</a><ul class="toc-headings"><li><a href="#download">Download</a></li><li><a href="#usage">Usage</a></li><li><a href="#example">Example</a></li><li><a href="#submit-images-for-classification">Submit images for classification</a></li></ul></li><li><a href="#details">Details</a></li></ul></nav></div><footer class="nav-footer" id=" [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/model-zoo-imagenet-resnet/index.html b/content/docs/3.0.0.rc1/model-zoo-imagenet-resnet/index.html
new file mode 100644
index 0000000..37b968c
--- /dev/null
+++ b/content/docs/3.0.0.rc1/model-zoo-imagenet-resnet/index.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Image Classification using Residual Networks · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional in [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>In this example, we convert Residual Networks trained on <a href="https://github.com/facebook/fb.resnet.torch">Torch</a> to SINGA for image classification. Tested with the <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/resnet-18.tar.gz">parameters pretrained by Torch</a></p>
+<h2><a class="anchor" aria-hidden="true" id="instructions"></a><a href="#instructions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<blockquote>
+<p>Please <code>cd</code> to <code>singa/examples/imagenet/resnet/</code> for the following commands</p>
+</blockquote>
+<h3><a class="anchor" aria-hidden="true" id="download"></a><a href="#download" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>Download one parameter checkpoint file (see below) and the synset word file of ImageNet into this folder, e.g.,</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> wget https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/resnet-18.tar.gz</span>
+<span class="hljs-meta">$</span><span class="bash"> wget https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/synset_words.txt</span>
+<span class="hljs-meta">$</span><span class="bash"> tar xvf resnet-18.tar.gz</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="usage"></a><a href="#usage" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> python serve.py -h</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#example" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">#</span><span class="bash"> use cpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py --use_cpu --parameter_file resnet-18.pickle --model resnet --depth 18 &amp;</span>
+<span class="hljs-meta">#</span><span class="bash"> use gpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py --parameter_file resnet-18.pickle --model resnet --depth 18 &amp;</span>
+</code></pre>
+<p>The parameter files for the following model and depth configuration pairs are provided:</p>
+<ul>
+<li>resnet (original resnet), <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/resnet-18.tar.gz">18</a>|<a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/resnet-34.tar.gz">34</a>|<a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/resnet-101.tar.gz">101</a>|<a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/resnet-152.tar.gz">152</a></li>
+<li>addbn (resnet with a batch normalization layer after the addition), <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/resnet-50.tar.gz">50</a></li>
+<li>wrn (wide resnet), <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/wrn-50-2.tar.gz">50</a></li>
+<li>preact (resnet with pre-activation) <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/resnet-200.tar.gz">200</a></li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="submit-images-for-classification"></a><a href="#submit-images-for-classification" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image1.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image2.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image3.jpg http://localhost:9999/api</span>
+</code></pre>
+<p>image1.jpg, image2.jpg and image3.jpg should be downloaded before executing the above commands.</p>
+<h2><a class="anchor" aria-hidden="true" id="details"></a><a href="#details" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>The parameter files were extracted from the original <a href="https://github.com/facebook/fb.resnet.torch/tree/master/pretrained">torch files</a> via the convert.py program.</p>
+<p>Usage:</p>
+<pre><code class="hljs">$ <span class="hljs-keyword">python</span> convert.<span class="hljs-keyword">py</span> -h
+</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#instructions">Instructions</a><ul class="toc-headings"><li><a href="#download">Download</a></li><li><a href="#usage">Usage</a></li><li><a href="#example">Example</a></li><li><a href="#submit-images-for-classification">Submit images for classification</a></li></ul></li><li><a href="#details">Details</a></li></ul></nav></div><footer class="nav-footer" id=" [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/model-zoo-imagenet-vgg.html b/content/docs/3.0.0.rc1/model-zoo-imagenet-vgg.html
new file mode 100644
index 0000000..d4c919e
--- /dev/null
+++ b/content/docs/3.0.0.rc1/model-zoo-imagenet-vgg.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Image Classification using VGG · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information rega [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>In this example, we convert VGG on <a href="https://github.com/pytorch/vision/blob/master/torchvision/models/vgg.py">PyTorch</a> to SINGA for image classification.</p>
+<h2><a class="anchor" aria-hidden="true" id="instructions"></a><a href="#instructions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<blockquote>
+<p>Please <code>cd</code> to <code>singa/examples/imagenet/vgg/</code> for the following commands</p>
+</blockquote>
+<h3><a class="anchor" aria-hidden="true" id="download"></a><a href="#download" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>Download one parameter checkpoint file (see below) and the synset word file of ImageNet into this folder, e.g.,</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> wget https://s3-ap-southeast-1.amazonaws.com/dlfile/vgg/vgg11.tar.gz</span>
+<span class="hljs-meta">$</span><span class="bash"> wget https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/synset_words.txt</span>
+<span class="hljs-meta">$</span><span class="bash"> tar xvf vgg11.tar.gz</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="usage"></a><a href="#usage" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> python serve.py -h</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#example" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">#</span><span class="bash"> use cpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py --use_cpu --parameter_file vgg11.pickle --depth 11 &amp;</span>
+<span class="hljs-meta">#</span><span class="bash"> use gpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py --parameter_file vgg11.pickle --depth 11 &amp;</span>
+</code></pre>
+<p>The parameter files for the following model and depth configuration pairs are provided:</p>
+<ul>
+<li>Without batch-normalization, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/vgg/vgg11.tar.gz">11</a>, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/vgg/vgg13.tar.gz">13</a>, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/vgg/vgg16.tar.gz">16</a>, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/vgg/vgg19.tar.gz">19</a></li>
+<li>With batch-normalization, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/vgg/vgg11_bn.tar.gz">11</a>, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/vgg/vgg13_bn.tar.gz">13</a>, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/vgg/vgg16_bn.tar.gz">16</a>, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/vgg/vgg19_bn.tar.gz">19</a></li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="submit-images-for-classification"></a><a href="#submit-images-for-classification" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image1.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image2.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image3.jpg http://localhost:9999/api</span>
+</code></pre>
+<p>image1.jpg, image2.jpg and image3.jpg should be downloaded before executing the above commands.</p>
+<h2><a class="anchor" aria-hidden="true" id="details"></a><a href="#details" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>The parameter files were converted from the pytorch via the convert.py program.</p>
+<p>Usage:</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> python convert.py -h</span>
+</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#instructions">Instructions</a><ul class="toc-headings"><li><a href="#download">Download</a></li><li><a href="#usage">Usage</a></li><li><a href="#example">Example</a></li><li><a href="#submit-images-for-classification">Submit images for classification</a></li></ul></li><li><a href="#details">Details</a></li></ul></nav></div><footer class="nav-footer" id=" [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/model-zoo-imagenet-vgg/index.html b/content/docs/3.0.0.rc1/model-zoo-imagenet-vgg/index.html
new file mode 100644
index 0000000..d4c919e
--- /dev/null
+++ b/content/docs/3.0.0.rc1/model-zoo-imagenet-vgg/index.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Image Classification using VGG · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional information rega [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>In this example, we convert VGG on <a href="https://github.com/pytorch/vision/blob/master/torchvision/models/vgg.py">PyTorch</a> to SINGA for image classification.</p>
+<h2><a class="anchor" aria-hidden="true" id="instructions"></a><a href="#instructions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83. [...]
+<blockquote>
+<p>Please <code>cd</code> to <code>singa/examples/imagenet/vgg/</code> for the following commands</p>
+</blockquote>
+<h3><a class="anchor" aria-hidden="true" id="download"></a><a href="#download" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>Download one parameter checkpoint file (see below) and the synset word file of ImageNet into this folder, e.g.,</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> wget https://s3-ap-southeast-1.amazonaws.com/dlfile/vgg/vgg11.tar.gz</span>
+<span class="hljs-meta">$</span><span class="bash"> wget https://s3-ap-southeast-1.amazonaws.com/dlfile/resnet/synset_words.txt</span>
+<span class="hljs-meta">$</span><span class="bash"> tar xvf vgg11.tar.gz</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="usage"></a><a href="#usage" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09 [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> python serve.py -h</span>
+</code></pre>
+<h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#example" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">#</span><span class="bash"> use cpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py --use_cpu --parameter_file vgg11.pickle --depth 11 &amp;</span>
+<span class="hljs-meta">#</span><span class="bash"> use gpu</span>
+<span class="hljs-meta">$</span><span class="bash"> python serve.py --parameter_file vgg11.pickle --depth 11 &amp;</span>
+</code></pre>
+<p>The parameter files for the following model and depth configuration pairs are provided:</p>
+<ul>
+<li>Without batch-normalization, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/vgg/vgg11.tar.gz">11</a>, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/vgg/vgg13.tar.gz">13</a>, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/vgg/vgg16.tar.gz">16</a>, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/vgg/vgg19.tar.gz">19</a></li>
+<li>With batch-normalization, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/vgg/vgg11_bn.tar.gz">11</a>, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/vgg/vgg13_bn.tar.gz">13</a>, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/vgg/vgg16_bn.tar.gz">16</a>, <a href="https://s3-ap-southeast-1.amazonaws.com/dlfile/vgg/vgg19_bn.tar.gz">19</a></li>
+</ul>
+<h3><a class="anchor" aria-hidden="true" id="submit-images-for-classification"></a><a href="#submit-images-for-classification" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13. [...]
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image1.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image2.jpg http://localhost:9999/api</span>
+<span class="hljs-meta">$</span><span class="bash"> curl -i -F image=@image3.jpg http://localhost:9999/api</span>
+</code></pre>
+<p>image1.jpg, image2.jpg and image3.jpg should be downloaded before executing the above commands.</p>
+<h2><a class="anchor" aria-hidden="true" id="details"></a><a href="#details" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>The parameter files were converted from the pytorch via the convert.py program.</p>
+<p>Usage:</p>
+<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> python convert.py -h</span>
+</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#instructions">Instructions</a><ul class="toc-headings"><li><a href="#download">Download</a></li><li><a href="#usage">Usage</a></li><li><a href="#example">Example</a></li><li><a href="#submit-images-for-classification">Submit images for classification</a></li></ul></li><li><a href="#details">Details</a></li></ul></nav></div><footer class="nav-footer" id=" [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/model-zoo-rbm-mnist.html b/content/docs/3.0.0.rc1/model-zoo-rbm-mnist.html
new file mode 100644
index 0000000..ca30dc4
--- /dev/null
+++ b/content/docs/3.0.0.rc1/model-zoo-rbm-mnist.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Train a RBM model against MNIST dataset · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with this work for additional informa [...]
+        document.addEventListener('DOMContentLoaded', function() {
+          addBackToTop(
+            {"zIndex":100}
+          )
+        });
+        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-in [...]
+<p>This example is to train an RBM model using the MNIST dataset. The RBM model and its hyper-parameters are set following <a href="http://www.cs.toronto.edu/~hinton/science.pdf">Hinton's paper</a></p>
+<h2><a class="anchor" aria-hidden="true" id="running-instructions"></a><a href="#running-instructions" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
+<h3><a class="anchor" aria-hidden="true" id="download"></a><a href="#download" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64  [...]
+<p>Download the pre-processed <a href="https://github.com/mnielsen/neural-networks-and-deep-learning/raw/master/data/mnist.pkl.gz">MNIST dataset</a></p>
+<h3><a class="anchor" aria-hidden="true" id="start-the-training"></a><a href="#start-the-training" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
+<blockquote>
+<p>Please <code>cd</code> to <code>singa/examples/mnist/</code> for the following commands</p>
+</blockquote>
+<pre><code class="hljs css language-shell">python train.py mnist.pkl.gz
+</code></pre>
+<p>By default the training code would run on CPU. To run it on a GPU card, please start the program with an additional argument</p>
+<pre><code class="hljs css language-shell">python train.py mnist.pkl.gz --use_gpu
+</code></pre>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#running-instructions">Running instructions</a><ul class="toc-headings"><li><a href="#download">Download</a></li><li><a href="#start-the-training">Start the training</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/singa-logo-square.png" alt="Apache SINGA" width= [...]
+   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter- [...]
+                document.addEventListener('keyup', function(e) {
+                  if (e.target !== document.body) {
+                    return;
+                  }
+                  // keyCode for '/' (slash)
+                  if (e.keyCode === 191) {
+                    const search = document.getElementById('search_input_react');
+                    search && search.focus();
+                  }
+                });
+              </script><script>
+              var search = docsearch({
+                
+                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
+                indexName: 'apache_singa',
+                inputSelector: '#search_input_react',
+                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
+              });
+            </script></body></html>
\ No newline at end of file
diff --git a/content/docs/3.0.0.rc1/model-zoo-rbm-mnist/index.html b/content/docs/3.0.0.rc1/model-zoo-rbm-mnist/index.html
new file mode 100644
index 0000000..ca30dc4
--- /dev/null
+++ b/content/docs/3.0.0.rc1/model-zoo-rbm-mnist/index.html
@@ -0,0 +1,46 @@
... 5317 lines suppressed ...