add Vietnamese doc to SINGA
diff --git a/docs-site/docs_viet/assets/AllReduce.png b/docs-site/docs_viet/assets/AllReduce.png
new file mode 100644
index 0000000..ba9cd43
--- /dev/null
+++ b/docs-site/docs_viet/assets/AllReduce.png
Binary files differ
diff --git a/docs-site/docs_viet/assets/GraphOfMLP.png b/docs-site/docs_viet/assets/GraphOfMLP.png
new file mode 100644
index 0000000..19bfbad
--- /dev/null
+++ b/docs-site/docs_viet/assets/GraphOfMLP.png
Binary files differ
diff --git a/docs-site/docs_viet/assets/GraphPipeline.png b/docs-site/docs_viet/assets/GraphPipeline.png
new file mode 100644
index 0000000..c2c5ada
--- /dev/null
+++ b/docs-site/docs_viet/assets/GraphPipeline.png
Binary files differ
diff --git a/docs-site/docs_viet/assets/MPI.png b/docs-site/docs_viet/assets/MPI.png
new file mode 100644
index 0000000..536fb03
--- /dev/null
+++ b/docs-site/docs_viet/assets/MPI.png
Binary files differ
diff --git a/docs-site/docs_viet/assets/benchmark.png b/docs-site/docs_viet/assets/benchmark.png
new file mode 100644
index 0000000..711e6b5
--- /dev/null
+++ b/docs-site/docs_viet/assets/benchmark.png
Binary files differ
diff --git a/docs-site/docs_viet/assets/singav1-sw.png b/docs-site/docs_viet/assets/singav1-sw.png
new file mode 100644
index 0000000..e443c6e
--- /dev/null
+++ b/docs-site/docs_viet/assets/singav1-sw.png
Binary files differ
diff --git a/docs-site/docs_viet/assets/singav3-sw.png b/docs-site/docs_viet/assets/singav3-sw.png
new file mode 100644
index 0000000..cf6b044
--- /dev/null
+++ b/docs-site/docs_viet/assets/singav3-sw.png
Binary files differ
diff --git a/docs-site/docs_viet/assets/singav3.1-sw.png b/docs-site/docs_viet/assets/singav3.1-sw.png
new file mode 100644
index 0000000..2bfd2c0
--- /dev/null
+++ b/docs-site/docs_viet/assets/singav3.1-sw.png
Binary files differ
diff --git a/docs-site/docs_viet/autograd.md b/docs-site/docs_viet/autograd.md
new file mode 100644
index 0000000..722b5a3
--- /dev/null
+++ b/docs-site/docs_viet/autograd.md
@@ -0,0 +1,256 @@
+---
+id: autograd
+title: Autograd
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+Có hai cách thường dùng để sử dụng autograd, qua symbolic differentiation như là [Theano](http://deeplearning.net/software/theano/index.html) hoặc reverse
+differentiation như là
+[Pytorch](https://pytorch.org/docs/stable/notes/autograd.html). SINGA dùng cách Pytorch, lưu trữ computation graph rồi áp dụng backward
+propagation tự động sau khi forward propagation. Thuật toán autograd được giải thích cụ thể ở
+ [đây](https://pytorch.org/docs/stable/notes/autograd.html). Chúng tôi giải thích các modules liên quan trong Singa và đưa ra ví dụ để minh hoạ cách sử dụng.
+
+## Các Module liên quan
+
+Autograd gồm ba classes với tên gọi `singa.tensor.Tensor`,
+`singa.autograd.Operation`, và `singa.autograd.Layer`. Trong phần tiếp theo của văn kiện này, chúng tôi dùng tensor, operation và layer để chỉ một chương trình (instance) trong class tương ứng. 
+
+### Tensor
+
+Ba tính năng của Tensor được sử dụng bởi autograd,
+
+- `.creator` là một chương trình `Operation`. Chương trình này lưu trữ tác vụ tạo ra Tensor instance.
+- `.requires_grad` là một biến kiểu bool. Biến được sử dụng để chỉ rằng thuật toán autograd cần tính ra độ dốc (gradient) của tensor. (như owner). Ví dụ, khi chạy backpropagation, thì cần phải tính ra độ dốc của tensor cho ma trận trọng lượng (weight matrix) của lớp tuyến tính (linear layer) và bản đồ tính năng (feature map) của convolution
+  layer (không phải lớp cuối).
+- `.stores_grad` là một biến kiểu bool. Biến được sử dụng để chỉ rằng độ dốc của owner tensor cần được lưu và tạo ra bởi hàm backward. Ví dụ, độ dốc của feature maps được tính thông qua backpropagation, nhưng không được bao gồm trong kết quả của hàm backward.
+
+Lập trình viên có thể thay đổi `requires_grad` và `stores_grad` của chương trình Tensor. Ví dụ nếu hàm sau để là True, độ dốc tương ứng sẽ được bao gồm trong kết quả của hàm backward. Cần lưu ý rằng nếu `stores_grad` để là True, thì `requires_grad` cũng phải là True, và ngược lại. 
+
+### Operation
+
+Hàm chạy một hoặc một vài chương trình `Tensor` instances ở đầu vào, sau đó đầu ra là một hoặc một vài chương trình `Tensor` instances. Ví dụ, hàm ReLU có thể được sử dụng như một subclass của một hàm Operation cụ thể. Khi gọi một chương trình `Operation` (sau cài đặt), cần thực hiện hai bước sau: 
+
+1. Ghi lại hàm operations nguồn, vd. biến `creator`của tensor đầu vào.
+2. làm tính toán bằng cách gọi hàm thành viên `.forward()`
+
+Có hai hàm thành viên cho forwarding và backwarding, vd.
+`.forward()` và `.backward()`. Đầu vào là `Tensor.data` (thuộc loại
+`CTensor`), và đầu ra là `Ctensor`. Nếu muốn thêm một hàm operation thì subclass `operation` cần chạy riêng `.forward()` và `.backward()`. Hàm 
+`backward()` được tự động gọi bởi hàm `backward()` của autograd trong quá trình chạy backward để thực hiện độ dốc của đầu vào
+(theo mục `require_grad`).
+
+### Layer
+
+Với các hàm yêu cầu tham số (parameter), chúng tôi gói chúng lại thành một class mới,
+`Layer`. Ví dụ hàm convolution operation thì được nhóm vào trong convolution layer.
+`Layer` quản lý (hoặc lưu trữ) các tham số và sẽ gọi các hàm `Operation` tương ứng để thực hiện việc chuyển đổi.
+
+## Ví dụ
+
+Chúng tôi cung cấp nhiều ví dụ trong 
+[mục ví dụ](https://github.com/apache/singa/tree/master/examples/autograd).
+Chúng tôi đưa ra giải thích cụ thể trong hai ví dụ tiêu biểu ở đây. 
+
+### Dùng hàm Operation
+
+Code dưới đây áp dụng model MLP, chỉ dùng hàm Operation (không dùng hàm Layer).
+
+#### Thêm packages
+
+```python
+from singa.tensor import Tensor
+from singa import autograd
+from singa import opt
+```
+
+#### Tạo ma trận trọng lượng (weight matrix) và bias vector
+
+Tham số tensors được tạo bởi cả `requires_grad` và `stores_grad`
+ở giá trị `True`.
+
+```python
+w0 = Tensor(shape=(2, 3), requires_grad=True, stores_grad=True)
+w0.gaussian(0.0, 0.1)
+b0 = Tensor(shape=(1, 3), requires_grad=True, stores_grad=True)
+b0.set_value(0.0)
+
+w1 = Tensor(shape=(3, 2), requires_grad=True, stores_grad=True)
+w1.gaussian(0.0, 0.1)
+b1 = Tensor(shape=(1, 2), requires_grad=True, stores_grad=True)
+b1.set_value(0.0)
+```
+
+#### Training
+
+```python
+inputs = Tensor(data=data)  # data matrix
+target = Tensor(data=label) # label vector
+autograd.training = True    # cho training
+sgd = opt.SGD(0.05)   # optimizer
+
+for i in range(10):
+    x = autograd.matmul(inputs, w0) # matrix multiplication
+    x = autograd.add_bias(x, b0)    # add the bias vector
+    x = autograd.relu(x)            # ReLU activation operation
+
+    x = autograd.matmul(x, w1)
+    x = autograd.add_bias(x, b1)
+
+    loss = autograd.softmax_cross_entropy(x, target)
+
+    for p, g in autograd.backward(loss):
+        sgd.update(p, g)
+```
+
+### Hàm Operation + Layer
+
+[Ví dụ](https://github.com/apache/singa/blob/master/examples/autograd/mnist_cnn.py) sau đây áp dụng CNN model sử dụng các lớp (layers) tạo từ autograd module.
+
+#### Tạo layers
+
+```python
+conv1 = autograd.Conv2d(1, 32, 3, padding=1, bias=False)
+bn1 = autograd.BatchNorm2d(32)
+pooling1 = autograd.MaxPool2d(3, 1, padding=1)
+conv21 = autograd.Conv2d(32, 16, 3, padding=1)
+conv22 = autograd.Conv2d(32, 16, 3, padding=1)
+bn2 = autograd.BatchNorm2d(32)
+linear = autograd.Linear(32 * 28 * 28, 10)
+pooling2 = autograd.AvgPool2d(3, 1, padding=1)
+```
+
+#### Định nghĩa hàm forward
+
+Hàm trong forward pass sẽ được tự đông lưu cho backward propagation.
+
+```python
+def forward(x, t):
+    # x là input data (batch hình ảnh)
+    # t là label vector (batch số nguyên)
+    y = conv1(x)           # Conv layer
+    y = autograd.relu(y)   # ReLU operation
+    y = bn1(y)             # BN layer
+    y = pooling1(y)        # Pooling Layer
+
+    # hai convolution layers song song
+    y1 = conv21(y)
+    y2 = conv22(y)
+    y = autograd.cat((y1, y2), 1)  # cat operation
+    y = autograd.relu(y)           # ReLU operation
+    y = bn2(y)
+    y = pooling2(y)
+
+    y = autograd.flatten(y)        # flatten operation
+    y = linear(y)                  # Linear layer
+    loss = autograd.softmax_cross_entropy(y, t)  # operation
+    return loss, y
+```
+
+#### Training
+
+```python
+autograd.training = True
+for epoch in range(epochs):
+    for i in range(batch_number):
+        inputs = tensor.Tensor(device=dev, data=x_train[
+                               i * batch_sz:(1 + i) * batch_sz], stores_grad=False)
+        targets = tensor.Tensor(device=dev, data=y_train[
+                                i * batch_sz:(1 + i) * batch_sz], requires_grad=False, stores_grad=False)
+
+        loss, y = forward(inputs, targets) # forward the net
+
+        for p, gp in autograd.backward(loss):  # auto backward
+            sgd.update(p, gp)
+```
+
+### Sử dụng Model API
+
+[Ví dụ](https://github.com/apache/singa/blob/master/examples/cnn/model/cnn.py) sau áp dụng CNN model sử dụng [Model API](./graph).
+
+#### Định nghiã subclass của Model
+
+Model class được định nghĩa là subclass của Model. Theo đó, tất cả các hàm operations được sử dụng trong bước training sẽ tạo thành một computational graph và được phân tích. Hàm operation trong graph sẽ được lên lịch trình và thực hiện hiệu quả. Layers cũng có thể được bao gồm trong model class.
+
+```python
+class MLP(model.Model):  # model là subclass của Model
+
+    def __init__(self, data_size=10, perceptron_size=100, num_classes=10):
+        super(MLP, self).__init__()
+
+        # taọ operators, layers và các object khác
+        self.relu = layer.ReLU()
+        self.linear1 = layer.Linear(perceptron_size)
+        self.linear2 = layer.Linear(num_classes)
+        self.softmax_cross_entropy = layer.SoftMaxCrossEntropy()
+
+    def forward(self, inputs):  # định nghĩa forward function
+        y = self.linear1(inputs)
+        y = self.relu(y)
+        y = self.linear2(y)
+        return y
+
+    def train_one_batch(self, x, y):
+        out = self.forward(x)
+        loss = self.softmax_cross_entropy(out, y)
+        self.optimizer(loss)
+        return out, loss
+
+    def set_optimizer(self, optimizer):  # đính kèm optimizer
+        self.optimizer = optimizer
+```
+
+#### Training
+
+```python
+# tạo hàm model instance
+model = MLP()
+# tạo optimizer và đính vào model
+sgd = opt.SGD(lr=0.005, momentum=0.9, weight_decay=1e-5)
+model.set_optimizer(sgd)
+# input và target placeholders cho model
+tx = tensor.Tensor((batch_size, 1, IMG_SIZE, IMG_SIZE), dev, tensor.float32)
+ty = tensor.Tensor((batch_size, num_classes), dev, tensor.int32)
+# tổng hợp model trước khi training
+model.compile([tx], is_train=True, use_graph=True, sequential=False)
+
+# train model theo bước lặp (iterative)
+for b in range(num_train_batch):
+    # generate the next mini-batch
+    x, y = ...
+
+    # Copy the data into input tensors
+    tx.copy_from_numpy(x)
+    ty.copy_from_numpy(y)
+
+    # Training with one batch
+    out, loss = model(tx, ty)
+```
+
+#### Lưu model checkpoint
+
+```python
+# xác định đường dẫn để lưu checkpoint
+checkpointpath="checkpoint.zip"
+
+# lưu checkpoint
+model.save_states(fpath=checkpointpath)
+```
+
+#### Tải model checkpoint
+
+```python
+# xác định đường dẫn để lưu checkpoint
+checkpointpath="checkpoint.zip"
+
+# lưu checkpoint
+import os
+if os.path.exists(checkpointpath):
+    model.load_states(fpath=checkpointpath)
+```
+
+### Python API
+
+Xem
+[tại đây](https://singa.readthedocs.io/en/latest/autograd.html#module-singa.autograd)
+để thêm thông tin chi tiết về Python API.
diff --git a/docs-site/docs_viet/benchmark-train.md b/docs-site/docs_viet/benchmark-train.md
new file mode 100644
index 0000000..7435a8d
--- /dev/null
+++ b/docs-site/docs_viet/benchmark-train.md
@@ -0,0 +1,21 @@
+---
+id: benchmark-train
+title: Benchmark cho Distributed Training
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+Tải công việc: chúng tôi sử dụng Mạng nơ-ron tích chập sâu (deep convolutional neural network),
+[ResNet-50](https://github.com/apache/singa/blob/master/examples/cnn/model/resnet.py)
+làm ứng dụng. ResNet-50 có 50 lớp tích chập (convolution layers) để phân loại hình ảnh. Nó đòi hỏi 3.8 GFLOPs để đưa vào một hình ảnh (kích thước ảnh 224x224) qua mạng lưới. Kích thước ảnh đầu vào là 224x224.
+
+Phần cứng: chúng tôi sử dụng máy p2.8xlarge từ AWS, mỗi máy gồm 8 Nvidia Tesla
+K80 GPUs, bộ nhớ tổng cộng 96 GB GPU, 32 vCPU, 488 GB main memory, 10 Gbps
+network bandwidth.
+
+Metric: chúng tôi tính thời gian mỗi bước cho mỗi workers để đánh giá khả năng mở rộng của SINGA. Kích thước của mỗi nhóm được cố định ở 32 mỗi GPU.
+Phương thức training đồng bộ (Synchronous training scheme) được áp dụng. Vì thế, kích thước nhóm hiệu quả là 
+$32N$, trong đó N là số máy GPUs. Chúng tôi so sánh với một hệ thống mở được dùng phổ biến có sử dụng  tham số server cấu trúc liên kết. Máy GPU đầu tiên được chọn làm server. 
+
+![Thí nghiệm Benchmark](assets/benchmark.png) <br/> **Kiểm tra khả năng mở rộng. Bars
+được dùng cho thông lượng (throughput); lines dùng cho lượng kết nối (communication cost).**
diff --git a/docs-site/docs_viet/build.md b/docs-site/docs_viet/build.md
new file mode 100644
index 0000000..ace2ce5
--- /dev/null
+++ b/docs-site/docs_viet/build.md
@@ -0,0 +1,453 @@
+---
+id: build
+title: Cài đặt SINGA từ Nguồn (Source)
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+Các tệp nguồn có thể được tải dưới dạng
+[tar.gz file](https://dist.apache.org/repos/dist/dev/singa/), hoặc git repo
+
+```shell
+$ git clone https://github.com/apache/singa.git
+$ cd singa/
+```
+
+Nếu bạn muốn tham gia đóng góp code cho SINGA, tham khảo
+[mục contribute-code](contribute-code.md) với các bước làm và yêu cầu kĩ thuật.
+
+## Sử dụng Conda để cài SINGA
+
+Conda-build là phần mềm giúp cài đặt thư viện chương trình từ dữ liệu đám mây anaconda và thực hiện các tập lệnh tạo chương trình. 
+
+Để cài đặt conda-build (sau khi cài conda)
+
+```shell
+conda install conda-build
+```
+
+### Tạo phiên bản CPU
+
+Để tạo phiên bản CPU cho SINGA
+
+```shell
+conda build tool/conda/singa/
+```
+
+Lệnh trên đã được kiểm tra trên Ubuntu (14.04, 16.04 và 18.04) và macOS
+10.11. Tham khảo [trang Travis-CI](https://travis-ci.org/apache/singa) để biết thêm chi tiết.
+
+###  Tạo phiên bản GPU 
+
+Để tạo phiên bản GPU cho SINGA, máy để cài phải có Nvida GPU, và CUDA driver (>= 384.81), phải được cài đặt CUDA toolkit (>=9) và cuDNN (>=7). Hai Docker images dưới đây cung cấp environment để chạy:
+
+1. apache/singa:conda-cuda9.0
+2. apache/singa:conda-cuda10.0
+
+Sau khi environment để chạy đã sẵn sàng, bạn cần phải export phiên bản CUDA trước, sau đó chạy lệnh conda để cài SINGA: 
+
+```shell
+export CUDA=x.y (e.g. 9.0)
+conda build tool/conda/singa/
+```
+
+### Sau khi chạy chương trình
+
+Vị trí đặt tệp tin của gói chương trình được tạo (`.tar.gz`) hiển thị trên màn hình.
+Gói chương trình được tạo có thể được cài đặt trực tiếp, 
+
+```shell 
+conda install -c conda-forge --use-local <path to the package file>
+```
+
+hoặc tải lên dữ liệu đám mây anaconda cloud để người dùng khác có thể tải và cài đặt. Bạn cần phải đăng kí một tài khoản trên anaconda để có thể 
+[tải lên gói chương trình](https://docs.anaconda.com/anaconda-cloud/user-guide/getting-started/).
+
+```shell
+conda install anaconda-client
+anaconda login
+anaconda upload -l main <path to the package file>
+```
+
+Sau khi tải gói chương trình lên dữ liệu đám mây, bạn có thể tìm thấy gói trên website của
+[Anaconda Cloud](https://anaconda.org/) hoặc qua lệnh
+
+```shell
+conda search -c <anaconda username> singa
+```
+
+Mỗi gói chương trình của SINGA đuợc nhận diện theo phiên bản hoặc dòng lệnh cài đặt. Để cài một gói chương trình SINGA cụ thể, bạn cần phải cung cấp toàn bộ thông tin, vd. 
+
+```shell
+conda install -c <anaconda username> -c conda-forge singa=2.1.0.dev=cpu_py36
+```
+
+Để cho lệnh cài đặt không phức tạp, bạn có thể tạo các gói chương trình bổ sung sau dựa trên các gói chương trình cho SINGA CPU và GPU mới nhất .
+
+```console
+# for singa-cpu
+conda build tool/conda/cpu/  --python=3.6
+conda build tool/conda/cpu/  --python=3.7
+# for singa-gpu
+conda build tool/conda/gpu/  --python=3.6
+conda build tool/conda/gpu/  --python=3.7
+```
+
+Bởi vậy, khi bạn chạy 
+
+```shell
+conda install -c <anaconda username> -c conda-forge singa-xpu
+```
+
+(`xpu` nghĩa là hoặc 'cpu' hoặc 'gpu'), gói SINGA tương ứng thực sự được cài đặt như một library phụ thuộc.
+
+## Sử dụng các phương tiện cơ bản để cài đặt SINGA trên Ubuntu
+
+Tham khảo 
+[Dockerfiles](https://github.com/apache/singa/blob/master/tool/docker/devel/ubuntu/cuda9/Dockerfile#L30)
+của SINGA để xem hướng dẫn cài đặt các chương trình library phụ thuộc trên Ubuntu 16.04. Bạn có thể tạo một Docker container sử dụng [devel images]() và cài SINGA trong container. Để cài SINGA với GPU, DNNL, Python và unit tests, chạy lệnh theo hướng dẫn sau
+
+```shell
+mkdir build    # tại thư mục nguồn của singa
+cd build
+cmake -DENABLE_TEST=ON -DUSE_CUDA=ON -DUSE_DNNL=ON -DUSE_PYTHON3=ON ..
+make
+cd python
+pip install .
+```
+
+Chi tiết các lựa chọn CMake đuợc giải thích ở phần cuối cùng của trang này. Câu lệnh cuối cùng để cài gói Python. Bạn cúng có thể chạy 
+`pip install -e .`, để tạo symlinks thay vì copy các tâp tin Python vào mục site-package.
+
+Nếu SINGA được compile với ENABLE_TEST=ON, bạn có thể chạy unit test bằng cách 
+
+```shell
+$ ./bin/test_singa
+```
+
+Bạn sẽ thấy tất cả các trường hợp test kèm theo kết quả test. Nếu SINGA thông qua tất cả các test, bạn đã cài đặt SINGA thành công. 
+
+## Sử dụng các phương tiện cơ bản để cài đặt SINGA trên Centos7
+
+Tạo từ nguồn sẽ khác trên Centos7 bởi tên của gói chương trình là khác nhau. Làm theo hướng dẫn dưới đây
+
+### Cài các chương trình phụ thuộc (dependent libraries) 
+
+Gói/chương trình cơ bản
+
+```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
+```
+
+Cho build-essential
+
+```shell
+sudo yum group install "Development Tools"
+```
+
+Để cài đặt swig
+
+```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
+```
+
+Để cài đặt gfortran
+
+```shell
+sudo yum install centos-release-scl-rh
+sudo yum --enablerepo=centos-sclo-rh-testing install devtoolset-7-gcc-gfortran
+```
+
+Để cài đặt pip và các gói chương trình khác 
+
+```shell
+sudo yum install epel-release
+sudo yum install python-pip
+pip install matplotlib numpy pandas scikit-learn pydot
+```
+
+### Cài đặt
+
+Làm theo bước 1-5 của _Use native tools để cài SINGA trên Ubuntu_
+
+### Kiểm tra (testing)
+
+Bạn có thể chạy unit tests bằng cách,
+
+```shell
+$ ./bin/test_singa
+```
+
+Bạn sẽ thấy tất cả các trường hợp test kèm theo kết quả test. Nếu SINGA thông qua tất cả các test, bạn đã cài đặt SINGA thành công. 
+
+## Compile SINGA trên Windows
+
+Hướng dẫn cài đặt trên Windows với Python vui lòng xem tại
+[mục install-win](install-win.md).
+
+## Chi tiết bổ sung về các lựa chọn biên dịch (compilation) 
+
+### USE_MODULES (không còn sử dụng)
+
+Nếu protobuf và openblas không được cài đặt, bạn có thể compile SINGA cùng với chúng. 
+
+```shell
+$ In SINGA ROOT folder
+$ mkdir build
+$ cd build
+$ cmake -DUSE_MODULES=ON ..
+$ make
+```
+
+cmake sẽ tải OpenBlas và Protobuf (2.6.1) sau đó compile cùng với SINGA.
+
+Bạn có thể sử dụng `ccmake ..` để định dạng các lựa chọn biên dịch (compilation). Nếu chương trình phụ thuộc (dependent libraries) nào không có trong đường dẫn hệ thống mặc định,bạn cần phải export các biến environment sau: 
+
+```shell
+export CMAKE_INCLUDE_PATH=<path to the header file folder>
+export CMAKE_LIBRARY_PATH=<path to the lib file folder>
+```
+
+### USE_PYTHON
+
+Là lựa chọn để compile Python wrapper cho SINGA,
+
+```shell
+$ cmake -DUSE_PYTHON=ON ..
+$ make
+$ cd python
+$ pip install .
+```
+
+### USE_CUDA
+
+Chúng tôi khuyến khích cài đặt CUDA và
+[cuDNN](https://developer.nvidia.com/cudnn) để chạy SINGA trên GPUs nhằm có kết quả tốt nhất. 
+
+SINGA đã được kiểm nghiệm chạy trên CUDA 9/10, và cuDNN 7. Nếu cuDNN được cài đặt vào thư mục không thuộc hệ thống, vd. /home/bob/local/cudnn/, cần chạy các lệnh sau để cmake và runtime có thể tìm được
+
+```shell
+$ export CMAKE_INCLUDE_PATH=/home/bob/local/cudnn/include:$CMAKE_INCLUDE_PATH
+$ export CMAKE_LIBRARY_PATH=/home/bob/local/cudnn/lib64:$CMAKE_LIBRARY_PATH
+$ export LD_LIBRARY_PATH=/home/bob/local/cudnn/lib64:$LD_LIBRARY_PATH
+```
+
+Các lựa chọn cmake cho CUDA và cuDNN cần được kích hoạt
+
+```shell
+# các Dependent libs đã được cài đặt
+$ cmake -DUSE_CUDA=ON ..
+$ make
+```
+
+### USE_DNNL
+
+Người dùng có thể kích hoạt DNNL để cải thiện hiệu quả cho chương trình CPU.
+
+Hướng dẫn cài đặt DNNL
+[tại đây](https://github.com/intel/mkl-dnn#installation).
+
+SINGA đã được thử nghiệm chạy trên DNNL v1.1.
+
+Để chạy SINGA với DNNL:
+
+```shell
+# các Dependent libs đã được cài đặt
+$ cmake -DUSE_DNNL=ON ..
+$ make
+```
+
+### USE_OPENCL
+
+SINGA sử dụng opencl-headers và viennacl (phiên bản 1.7.1 hoặc mới hơn) để hỗ trợ OpenCL, có thể được cài đặt qua 
+
+```shell
+# Trên Ubuntu 16.04
+$ sudo apt-get install opencl-headers, libviennacl-dev
+# Trên Fedora
+$ sudo yum install opencl-headers, viennacl
+```
+
+Bên cạnh đó, bạn cần OpenCL Installable Client Driver (ICD) cho nền tảng mà bạn muốn chạy OpenCL.
+
+- Với AMD và nVidia GPUs, driver package nên cài đúng bản OpenCL ICD.
+- Với Intel CPUs và/hoặc GPUs, có thể tải driver từ
+  [Intel website.](https://software.intel.com/en-us/articles/opencl-drivers)
+  Lưu ý rằng driver này chỉ hỗ trợ các phiên bản mới của CPUs và Iris GPUs.
+- Với các bản Intel CPUs cũ hơn, bạn có thể sử dụng gói `beignet-opencl-icd`.
+
+Lưu ý rằng chạy OpenCL trên CPUs không được khuyến khích bởi tốc độ chậm. Di chuyển bộ nhớ theo trình tự tính theo từng giây (1000's của ms trên CPUs so với 1's của ms trên GPUs).
+
+Có thể xem thêm thông tin về cách thiết lập environment có chạy OpenCL tại [đây](https://wiki.tiker.net/OpenCLHowTo).
+
+Nếu phiên bản của gói chương trình ViennaCL thấp hơn 1.7.1, bạn cần phải tạo từ nguồn:
+
+Clone [nguồn tại đây](https://github.com/viennacl/viennacl-dev),
+chọn (checkout) tag `release-1.7.1` để cài đặt. Bạn cần nhớ thêm đường dẫn vào phần `PATH` và tạo libraries vào `LD_LIBRARY_PATH`.
+
+Để cài SINGA với hỗ trợ OpenCL (đã thử trên SINGA 1.1):
+
+```shell
+$ cmake -DUSE_OPENCL=ON ..
+$ make
+```
+
+### GÓI CHƯƠNG TRÌNH (PACKAGE)
+
+Cài đặt này được sử dụng để tạo gói chương trình Debian package. Để PACKAGE=ON và tạo gói chương trình với lệnh như sau: 
+
+```shell
+$ cmake -DPACKAGE=ON
+$ make package
+```
+
+## Câu hỏi thường gặp (Q&A)
+
+- Q: Gặp lỗi khi 'import singa'
+
+  A: Vui lòng kiểm tra chi tiết lỗi từ `python -c "from singa import _singa_wrap"`. Đôi khi lỗi xảy ra bởi các dependent libraries, vd. protobuf có nhiều phiên bản, nếu thiếu cudnn, phiên bản numpy sẽ không tương thích. Các bước sau đưa ra giải pháp cho từng trường hợp: 
+
+  1. Kiểm tra cudnn và cuda. Nếu thiếu cudnn hoặc không tương thích với phiên bản của wheel, bạn có thể tải phiên bản đúng của cudnn vào thư mục ~/local/cudnn/ và
+
+     ```shell
+     $ echo "export LD_LIBRARY_PATH=/home/<yourname>/local/cudnn/lib64:$LD_LIBRARY_PATH" >> ~/.bashrc
+     ```
+
+  2. Nếu lỗi liên quan tới protobuf. Bạn có thể cài đặt (3.6.1) từ nguồn vào một thư mục trong máy của bạn(local). chẳng hạn ~/local/; Giải nén file tar, sau đó
+
+     ```shell
+     $ ./configure --prefix=/home/<yourname>local
+     $ make && make install
+     $ echo "export LD_LIBRARY_PATH=/home/<yourname>/local/lib:$LD_LIBRARY_PATH" >> ~/.bashrc
+     $ source ~/.bashrc
+     ```
+
+  3. Nếu không tìm được libs nào bao gồm python, thì taọ virtual env sử dụng `pip` hoặc `conda`;
+
+  4. Nếu lỗi không do các nguyên nhân trên thì đi tới thư mục của `_singa_wrap.so`,
+
+     ```shell
+     $ python
+     >> import importlib
+     >> importlib.import_module('_singa_wrap')
+     ```
+
+    kiểm tra thông báo lỗi. Ví dụ nếu phiên bản numpy không tương thích, thông báo lỗi sẽ là 
+
+     ```shell
+     RuntimeError: module compiled against API version 0xb but this version of numpy is 0xa
+     ```
+
+    sau đó bạn cần phải nâng cấp numpy. 
+
+* Q: Lỗi khi chạy `cmake ..`, không tìm được dependent libraries.
+
+  A: Nếu bạn vẫn chưa cài đặt libraries đó, thì cài đặt chúng. Nếu bạn cài libraries trong thư mục bên ngoài thư mục system, chẳng hạn như /usr/local, bạn cần export các biến sau đây 
+
+  ```shell
+  $ export CMAKE_INCLUDE_PATH=<path to your header file folder>
+  $ export CMAKE_LIBRARY_PATH=<path to your lib file folder>
+  ```
+
+- Q: Lỗi từ `make`, vd. linking phase
+
+  A: Nếu libraries nằm trong thư mục không phải là thư mục system mặc định trong đường dẫn, bạn cần export các biến sau 
+
+  ```shell
+  $ export LIBRARY_PATH=<path to your lib file folder>
+  $ export LD_LIBRARY_PATH=<path to your lib file folder>
+  ```
+
+* Q: Lỗi từ các tệp tin headers vd. 'cblas.h no such file or directory exists'
+
+  A: Bạn cần bao gồm các thư mục cblas.h vào CPLUS_INCLUDE_PATH,
+  e.g.,
+
+  ```shell
+  $ export CPLUS_INCLUDE_PATH=/opt/OpenBLAS/include:$CPLUS_INCLUDE_PATH
+  ```
+
+* Q: Khi compile SINGA, gặp lỗi `SSE2 instruction set not enabled`
+
+  A: Bạn có thể thử lệnh sau:
+
+  ```shell
+  $ make CFLAGS='-msse2' CXXFLAGS='-msse2'
+  ```
+
+* Q:Gặp lỗi `ImportError: cannot import name enum_type_wrapper` từ google.protobuf.internal khi tôi cố gắng import các tệp tin dạng .py.
+
+  A: Bạn cần cài đặt python cho protobuf, có thể cài đặt qua
+
+  ```shell
+  $ sudo apt-get install protobuf
+  ```
+
+ hoặc từ nguồn
+
+  ```shell
+  $ cd /PROTOBUF/SOURCE/FOLDER
+  $ cd python
+  $ python setup.py build
+  $ python setup.py install
+  ```
+
+* Q: Khi tôi tạo OpenBLAS từ nguồn, tôi gặp yêu cầu cần phải có Fortran compiler.
+
+  A: Bạn có thể compile OpenBLAS bằng cách
+
+  ```shell
+  $ make ONLY_CBLAS=1
+  ```
+
+  hoặc cài dặt sử dụng
+
+  ```shell
+  $ sudo apt-get install libopenblas-dev
+  ```
+
+* Q: Khi tôi tạo protocol buffer, thì bị thông báo `GLIBC++_3.4.20` không được tìm thấy trong `/usr/lib64/libstdc++.so.6`?
+
+  A: Nghĩa là linker trong libstdc++.so.6 nhưng chương trình này thuộc về một phiên bản cũ hơn của GCC đã được dùng để compile và link chương trình. Chương trình phụ thuộc vào code viết trong phiên bản libstdc++ cập nhật thuộc về phiên bản mới hơn của GCC, vì vậy linker phải chỉ ra cách để cài phiên bản libstdc++ mới hơn được chia sẻ trong library. Cách đơn giản nhất để sửa lỗi này là tìm phiên bản đúng cho libstdc++ và export nó vào LD_LIBRARY_PATH. Ví dụ nếu GLIBC++\_3.4.20 có trong output của lệnh sau
+
+        $ strings /usr/local/lib64/libstdc++.so.6|grep GLIBC++
+
+  thì bạn chỉ cần tạo biến environment 
+
+        $ export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
+
+* Q: Khi tạo glog, nhận thông báo "src/logging_unittest.cc:83:20: error:
+  ‘gflags’ is not a namespace-name"
+
+  A: Có thể do bạn đã cài gflags với một namespace khác như là "google". vì thế glog không thể tìm thấy 'gflags' namespace. Do cài glog thì không cần phải có gflags. Nên bạn cần sửa tệp tin configure.ac thành ignore gflags.
+
+        1. cd to glog src directory
+        2. change line 125 of configure.ac  to "AC_CHECK_LIB(gflags, main, ac_cv_have_libgflags=0, ac_cv_have_libgflags=0)"
+        3. autoreconf
+
+  Sau đó bạn có thể cài lại glog.
+
+* Q: Khi sử dụng virtual environment, bất cứ khi nào tôi chạy pip install, numpy sẽ tự cài lại numpy. Tuy nhiên, numpy này không được sử dụng khi tôi `import numpy`
+
+  A: Lỗi có thể gây ra bởi `PYTHONPATH` vốn nên được để trống (empty) khi bạn sử dụng virtual environment nhằm tránh conflict với đường dẫn của virtual environment.
+
+* Q: Khi compile PySINGA từ nguồn, có lỗi compilation do thiếu <numpy/objectarray.h>
+
+  A: Vui lòng cài đặt numpy và export đường dẫn của tệp tin numpy header như sau
+
+        $ export CPLUS_INCLUDE_PATH=`python -c "import numpy; print numpy.get_include()"`:$CPLUS_INCLUDE_PATH
+
+* Q: Khi chạy SINGA trên Mac OS X, tôi gặp lỗi "Fatal Python error:
+  PyThreadState_Get: no current thread Abort trap: 6"
+
+  A: Lỗi này thường xảy ra khi bạn có nhiều phiên bản Python trong hệ thống, và bạn cài SINGA qua pip (vấn đề này có thể được giải quyết nếu cài đặt bằng conda), vd. một bên qua OS và một bên cài đặt qua Homebrew. Python dùng trong PySINGA phải là Python interpreter. Bạn có thể kiểm tra trình thông dịch (interpreter) của mình bằng `which python` và kiểm tra bản Python dùng trong PySINGA qua `otool -L <path to _singa_wrap.so>`. Để sửa lỗi này, bạn compile SINGA với đúng phiên bản mà SINGA cần. Cụ thể, nếu bạn tạo PySINGA từ nguồn, bạn cần cụ thể đường dẫn khi gọi [cmake](http://stackoverflow.com/questions/15291500/i-have-2-versions-of-python-installed-but-cmake-is-using-older-version-how-do)
+
+        $ cmake -DPYTHON_LIBRARY=`python-config --prefix`/lib/libpython2.7.dylib -DPYTHON_INCLUDE_DIR=`python-config --prefix`/include/python2.7/ ..
+
+  Nếu cài đặt PySINGA từ gói binary packages, vd. debian hay wheel, thì bạn cần thay đổi trình thông dịch của python (python interpreter), vd., reset \$PATH để đường dẫn dúng của Python ở đằng trước. 
diff --git a/docs-site/docs_viet/contribute-code.md b/docs-site/docs_viet/contribute-code.md
new file mode 100644
index 0000000..ac10b1c
--- /dev/null
+++ b/docs-site/docs_viet/contribute-code.md
@@ -0,0 +1,112 @@
+---
+id: contribute-code
+title: Tham gia viết code
+---
+
+<!-- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License. -->
+
+## Định dạng mã code
+
+Nền tảng code của SINGA tuân theo định dạng Google cho cả code [CPP](http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml) và
+[Python](http://google.github.io/styleguide/pyguide.html).
+
+Một cách đơn giản để thực hiện định dạng lập trình Google là sử dụng linting và các công cụ định dạng trong Visual Studio Code editor:
+
+- [C/C++ extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools)
+- [Python extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python)
+- [cpplint extension](https://marketplace.visualstudio.com/items?itemName=mine.cpplint)
+- [Clang-Format](https://marketplace.visualstudio.com/items?itemName=xaver.clang-format)
+
+Sau khi cài extensions, chỉnh sửa tệp tin `settings.json`.
+
+```json
+{
+  "[cpp]": {
+    "editor.defaultFormatter": "xaver.clang-format"
+  },
+  "cpplint.cpplintPath": "path/to/cpplint",
+
+  "editor.formatOnSave": true,
+  "python.formatting.provider": "yapf",
+  "python.linting.enabled": true,
+  "python.linting.lintOnSave": true,
+  "clang-format.language.cpp.style": "google",
+  "python.formatting.yapfArgs": ["--style", "{based_on_style: google}"]
+}
+```
+
+Dựa vào nền tảng bạn đang sử dụng. tệp tin user settings được đặt tại đây:
+
+1. Windows %APPDATA%\Code\User\settings.json
+2. macOS "\$HOME/Library/Application Support/Code/User/settings.json"
+3. Linux "\$HOME/.config/Code/User/settings.json"
+
+Thông số cấu hình cụ thể có trong các tệp tin config file tuơng ứng. Những công cụ này sẽ tự động tìm kiếm các tập tin cấu hình configuration files trong root của dự án, vd. `.pylintrc`.
+
+#### Cài đặt công cụ
+
+Tốt nhất là tất cả người tham gia viết mã code sử dụng cùng một phiên bản công cụ định dạng mã code (clang-format 9.0.0 và yapf 0.29.0), để tất cả định dạng mã code sẽ giống nhau dù thuộc về các PRs khác nhau, nhằm tránh tạo conflict trong github pull request.
+
+Trước tiên, cài đặt LLVM 9.0 cung cấp clang-format phiên bản 9.0.0. Trang tải LLVM là:
+
+- [LLVM](http://releases.llvm.org/download.html#9.0.0)
+
+  - Trên Ubuntu
+
+    ```sh
+    sudo apt-get install clang-format-9
+    ```
+
+  - Trên Windows. Tải gói pre-built và cài đặt
+
+Sau đó, cài cpplint, pylint và yapf
+
+- Ubuntu or OSX:
+
+  ```
+  $ sudo pip install cpplint
+  $ which cpplint
+  /path/to/cpplint
+
+  $ pip install yapf==0.29.0
+  $ pip install pylint
+  ```
+
+- Windows: Cài Anaconda cho gói quản lý package management.
+
+  ```
+  $ pip install cpplint
+  $ where cpplint
+  C:/path/to/cpplint.exe
+
+  $ pip install yapf==0.29.0
+  $ pip install pylint
+  ```
+
+#### Sử dụng
+
+- Sau khi kích hoạt, linting sẽ tự động được áp dụng khi bạn chỉnh sửa các tập tin mã code nguồn (source code file). Lỗi và cảnh báo sẽ hiển thị trên thanh Visual Studio Code `PROBLEMS`.
+- Định dạng mã code có thể thực hiện bằng cách sử dụng Command Palette(`Shift+Ctrl+P` cho
+  Windows hay `Shift+Command+P` cho OSX) và gõ `Format Document`.
+
+#### Gửi 
+
+Bạn cần phải chữa lỗi định dạng nếu có trước khi gửi đi pull requests.
+
+## Tạo Environment
+
+Chúng tôi khuyến khích dùng Visual Studio Code để viết code. Có thể cài các Extensions như Python, C/C++,
+Code Spell Checker, autoDocstring, vim, Remote Development. Tham khảo cấu hình (vd., `settings.json`) của các extensions [tại đây](https://gist.github.com/nudles/3d23cfb6ffb30ca7636c45fe60278c55).
+
+Nếu bạn cập nhật mã code CPP, bạn cần recompile SINGA
+[từ nguồn](./build.md). Nên sử dụng các công cụ cài đặt cơ bản trong `*-devel` Docker images hay `conda build`.
+
+Nếu bạn chỉ cập nhật mã code Python, bạn cần cài đặt SINGAS một lần, sau đó copy các tập tin Python cập nhật để thay thế chúng trong thư mục cài đặt Python,
+
+```shell
+cp python/singa/xx.py  <path to conda>/lib/python3.7/site-packages/singa/
+```
+
+## Trình Tự
+
+Vui lòng tham khảo mục [git workflow](./git-workflow.md).
diff --git a/docs-site/docs_viet/contribute-docs.md b/docs-site/docs_viet/contribute-docs.md
new file mode 100644
index 0000000..e129519
--- /dev/null
+++ b/docs-site/docs_viet/contribute-docs.md
@@ -0,0 +1,96 @@
+---
+id: contribute-docs
+title: Tham gia chỉnh sửa Hướng Dẫn Sử Dụng
+---
+
+<!-- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License. -->
+
+Hướng Dẫn Sử Dụng có hai dạng, dạng tập tin markdown và dạng sử dụng API
+reference. Tài liệu này giới thiệu vài công cụ và chỉ dẫn trong việc chuẩn bị các tập tin nguồn markdown và chú thích API.
+
+Tập tin markdown sẽ được sử dụng trong việc tạo trang HTML qua [Docusaurus](https://docusaurus.io/); Chú thích API (từ nguồn mã code) sẽ được sử dụng để tạo các trang tham khảo API sử dụng Sphinx (cho Python) và Doxygen (cho CPP).
+
+## Tập Tin Markdown
+
+Làm theo
+[định dạng Văn bản Google](https://developers.google.com/style). Ví dụ,
+
+1. Bỏ 'vui lòng' (please) khỏi bất cứ hướng dẫn sử dụng nào. 'Please click...' thành 'Click ...'.
+2. Làm theo
+   [qui tắc viết hoa tiêu chuẩn](https://owl.purdue.edu/owl/general_writing/mechanics/help_with_capitals.html).
+3. Sử dụng 'bạn' thay cho 'chúng tôi' trong hướng dẫn.
+4. Sử dụng thì hiện tại và tránh sử dụng từ 'sẽ' 
+5. Nên dùng dạng chủ động thay vì bị động 
+
+Thêm vào đó, để cho nội dung hướng dẫn sủ dụng thống nhất,
+
+1. Viết câu ngắn, chẳng hạn độ dài <=80
+2. Sử dụng đường dẫn liên quan, mặc định chúng ta đang ở thư mục root của repo,
+   vd., `doc-site/docs` để chỉ `singa-doc/docs-site/docs`
+3. Nhấn mạnh câu lệnh, đường dẫn, class, function và biến sử dụng backticks,
+   vd., `Tensor`, `singa-doc/docs-site/docs`.
+4. Để nêu bật các điều khoản/khái niệm, sử dụng _graph_ hoặc **graph**
+
+[Cộng cụ prettier](https://prettier.io/) được sử dụng bởi dự án này sẽ tự làm định dạng code dựa trên 
+[cấu hình](https://github.com/apache/singa-doc/blob/master/docs-site/.prettierrc)
+khi thực hiện `git commit`. Ví dụ, nó sẽ gói chữ trong các tập tin markdown thành nhiều nhất 80 kí tự (trừ các dòng chú thích).
+
+Khi giới thiệu một khái niệm (concept) (vd., class `Tensor`), đưa ra khái quát chung (mục đích và mối quan hệ với các khái niệm khác), APIs và ví dụ. Google colab có thể được sử dụng để mô phỏng điều này. 
+
+Tham khảo [trang](https://github.com/apache/singa-doc/tree/master/docs-site)
+để biết thêm chi tiết về cách chỉnh sửa các tập tin markdown và xây dựng website. 
+
+## Tham Khảo API
+
+### CPP API
+
+Thực hiện theo
+[Mẫu chú thích của Google CPP](https://google.github.io/styleguide/cppguide.html#Comments).
+
+Để tạo văn bản, chạy "doxygen" từ thư mục doc (khuyến khích Doxygen >= 1.8)
+
+### Python API
+
+Thực hiện theo
+[Mẫu Google Python DocString](http://google.github.io/styleguide/pyguide.html#38-comments-and-docstrings).
+
+## Visual Studio Code (vscode)
+
+Nếu bạn sử dụng vscode để viết code, các plugins sau sẽ giúp ích.
+
+### Docstring Snippet
+
+[autoDocstring](https://marketplace.visualstudio.com/items?itemName=njpwerner.autodocstring)
+tạo docstring của functions, classes, v.v. Lựa chọn định dạng DocString
+to `google`.
+
+### Kiểm Tra Lỗi Chính Tả
+
+[Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker)
+có thể được cơ cấu để kiểm tra chú thích trong mã code, hoặc các tập tin .md và .rst.
+
+Để kiểm tra lỗi chính tả cho các dòng chú thích trong code Python, thêm vào các snippet sau qua
+`File - Preferences - User Snippets - python.json`
+
+    "cspell check" : {
+    "prefix": "cspell",
+    "body": [
+        "# Chỉ dẫn kiểm tra lỗi chính tả cho các dòng chú thích trong code python và c/cpp",
+        "# cSpell:includeRegExp #.* ",
+        "# cSpell:includeRegExp (\"\"\"|''')[^\1]*\1",
+        "# cSpell: CStyleComment",
+    ],
+    "description": "# chỉ kiểm tra lỗi chính tả cho chú thích trong python"
+    }
+
+Để kiểm tra lỗi chính tả cho các dòng chú thích trong code Cpp, thêm vào các snippet sau qua
+`File - Preferences - User Snippets - cpp.json`
+
+    "cspell check" : {
+    "prefix": "cspell",
+    "body": [
+        "// Chỉ dẫn kiểm tra lỗi chính tả cho các dòng chú thích trong code cpp",
+        "// cSpell:includeRegExp CStyleComment",
+    ],
+    "description": "# chỉ kiểm tra lỗi chính tả cho chú thích trong cpp"
+    }
diff --git a/docs-site/docs_viet/device.md b/docs-site/docs_viet/device.md
new file mode 100644
index 0000000..e5029e0
--- /dev/null
+++ b/docs-site/docs_viet/device.md
@@ -0,0 +1,29 @@
+---
+id: device
+title: Device
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+Device dùng ở đây nghĩa là thiết bị phần cứng với bộ nhớ và các bộ phận máy tính. Tất cả [Tensor operations](./tensor) được sắp xếp bởi các thiết bị resident device
+khi chạy. Bộ nhớ của Tensor luôn luôn được quản lý bởi memory manager của thiết bị đó. Bởi vậy việc tận dụng tối đa bộ nhớ và thực hiện được tiến hành tại Device class.
+
+## Các thiết bị cụ thể
+
+Hiện tại, SINGA được chạy trên ba Device,
+
+1.  CudaGPU cho cạc Nvidia GPU card chạy code Cuda 
+2.  CppCPU cho CPU chạy Cpp code
+3.  OpenclGPU cho cạc GPU chạy OpenCL code
+
+## Ví Dụ Sử Dụng
+
+Code dưới đây là ví dụ về việc tạo device:
+
+```python
+from singa import device
+cuda = device.create_cuda_gpu_on(0)  # sử dụng cạc GPU với ID 0
+host = device.get_default_device()  # tạo host mặc định cho device (CppCPU)
+ary1 = device.create_cuda_gpus(2)  # tạo 2 devices, bắt đầu từ ID 0
+ary2 = device.create_cuda_gpus([0,2])  # tạo 2 devices với ID 0 và 2
+```
diff --git a/docs-site/docs_viet/dist-train.md b/docs-site/docs_viet/dist-train.md
new file mode 100644
index 0000000..7135d8f
--- /dev/null
+++ b/docs-site/docs_viet/dist-train.md
@@ -0,0 +1,395 @@
+---
+id: dist-train
+title: Distributed Training
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+SINGA hỗ trợ data parallel training trên nhiều GPUs (trên một node hoặc nhiều node khác nhau). Sơ đồ sau mô phỏng data parallel training:
+
+![MPI.png](assets/MPI.png)
+
+Trong distributed training, mỗi chỉ lệnh (gọi là worker) chạy một training script trên một máy GPU. Mỗi chỉ lệnh (process) có một communication rank riêng. Dữ liệu để training được phân cho các worker và model thì được sao chép cho mỗi worker. Ở mỗi vòng, worker đọc một mini-batch dữ liệu (vd.,
+256 hình ảnh) từ phần được chia và chạy thuật toán BackPropagation để tính ra độ dốc (gradient) của weight, được lấy trung bình qua all-reduce (cung cấp bởi [NCCL](https://developer.nvidia.com/nccl)) 
+để cập nhật weight theo thuật toán
+stochastic gradient descent (SGD).
+
+Hàm all-reduce operation bởi NCCL có thể được sử dụng để giảm và đồng bộ hoá độ dốc từ các máy GPU các nhau. Xem thử training với 4 GPUs như dưới đây. Sau khi độ dốc (gradients) từ 4 GPUs được tính, all-reduce sẽ trả lại tổng độ dốc (gradient) cho các GPU và đưa tới mỗi GPU. Sau đó có thể dễ dàng tính ra độ dốc trung bình.
+
+![AllReduce.png](assets/AllReduce.png)
+
+## Sử Dụng
+
+SINGA áp dụng một module gọi là `DistOpt` (là dạng con của `Opt`) cho distributed
+training. Nó gói lại normal SGD optimizer và gọi  `Communicator` để động bộ hoá độ dốc. Ví dụ sau mô phỏng cách sử dụng `DistOpt` để
+training một CNN model với dữ liệu MNIST. Nguồn code có thể tìm 
+[tại đây](https://github.com/apache/singa/blob/master/examples/cnn/), và [Colab notebook]().
+
+### Code Ví Dụ 
+
+1. Định nghĩa neural network model:
+
+```python
+class CNN(model.Model):
+
+    def __init__(self, num_classes=10, num_channels=1):
+        super(CNN, self).__init__()
+        self.conv1 = layer.Conv2d(num_channels, 20, 5, padding=0, activation="RELU")
+        self.conv2 = layer.Conv2d(20, 50, 5, padding=0, activation="RELU")
+        self.linear1 = layer.Linear(500)
+        self.linear2 = layer.Linear(num_classes)
+        self.pooling1 = layer.MaxPool2d(2, 2, padding=0)
+        self.pooling2 = layer.MaxPool2d(2, 2, padding=0)
+        self.relu = layer.ReLU()
+        self.flatten = layer.Flatten()
+        self.softmax_cross_entropy = layer.SoftMaxCrossEntropy()
+
+    def forward(self, x):
+        y = self.conv1(x)
+        y = self.pooling1(y)
+        y = self.conv2(y)
+        y = self.pooling2(y)
+        y = self.flatten(y)
+        y = self.linear1(y)
+        y = self.relu(y)
+        y = self.linear2(y)
+        return y
+
+    def train_one_batch(self, x, y, dist_option='fp32', spars=0):
+        out = self.forward(x)
+        loss = self.softmax_cross_entropy(out, y)
+
+        # cho phép nhiều lựa chọn dùng trong distributed training
+        # Tham khảo mục "Optimizations về Distributed Training"
+        if dist_option == 'fp32':
+            self.optimizer(loss)
+        elif dist_option == 'fp16':
+            self.optimizer.backward_and_update_half(loss)
+        elif dist_option == 'partialUpdate':
+            self.optimizer.backward_and_partial_update(loss)
+        elif dist_option == 'sparseTopK':
+            self.optimizer.backward_and_sparse_update(loss,
+                                                      topK=True,
+                                                      spars=spars)
+        elif dist_option == 'sparseThreshold':
+            self.optimizer.backward_and_sparse_update(loss,
+                                                      topK=False,
+                                                      spars=spars)
+        return out, loss
+
+# tạo model
+model = CNN()
+```
+
+2. Tạo `DistOpt` instance và đính nó vào model đã tạo:
+
+```python
+sgd = opt.SGD(lr=0.005, momentum=0.9, weight_decay=1e-5)
+sgd = opt.DistOpt(sgd)
+model.set_optimizer(sgd)
+dev = device.create_cuda_gpu_on(sgd.local_rank)
+```
+
+Đây là giải thích cho các biến sử dụng trong code: 
+
+(i) `dev`
+
+dev dùng để chỉ `Device` instance, nơi tải dữ liệu và chạy CNN model.
+
+(ii)`local_rank`
+
+Local rank chỉ số GPU mà chỉ lệnh (process) hiện tại đang sử dụng trên cùng một node. Ví dụ, nếu bạn đang sử dụng một node có 2 GPUs, `local_rank=0` nghĩa là chỉ lệnh này đang sử dụng máy GPU đầu tiên, trong khi  `local_rank=1` nghĩa là đang sử dụng máy GPU thứ hai. Sử dụng MPI hay đa xử lý, bạn có thể chạy cùng một tập lệnh training chỉ khác giá trị của `local_rank`.
+
+(iii)`global_rank`
+
+Rank trong global biểu thị global rank cho tất cả các chỉ lệnh (process) trong các nodes mà bạn đang sử dụng. Lấy ví dụ trường hợp bạn có 3 nodes và mỗi một node có hai GPUs, `global_rank=0` nghĩa là chỉ lệnh đang sử dụng máy GPU đầu tiên ở node đầu tiên, `global_rank=2` nghĩa là chỉ lệnh đang sử dụng máy GPU đầu tiên ở node thứ 2, và `global_rank=4` nghĩa là chỉ lệnh đang sử dụng máy GPU đầu tiên ở node thứ 3. 
+
+3. Tải và phân chia dữ liệu để training/validation 
+
+```python
+def data_partition(dataset_x, dataset_y, global_rank, world_size):
+    data_per_rank = dataset_x.shape[0] // world_size
+    idx_start = global_rank * data_per_rank
+    idx_end = (global_rank + 1) * data_per_rank
+    return 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)
+```
+
+Một phần của bộ dữ liệu (dataset) được trả lại cho `dev`.
+
+Tại đây, `world_size` thể hiện tổng số chỉ lệnh trong tất cả các node mà bạn đang sử dụng cho distributed training.
+
+4. Khởi tạo và đồng bộ các tham số của model cho tất cả workers:
+
+```python
+# Đồng bộ tham số ban đầu 
+tx = tensor.Tensor((batch_size, 1, IMG_SIZE, IMG_SIZE), dev, tensor.float32)
+ty = tensor.Tensor((batch_size, num_classes), dev, tensor.int32)
+model.compile([tx], is_train=True, use_graph=graph, sequential=True)
+...
+# Sử dụng cùng một random seed cho các ranks khác nhau
+seed = 0
+dev.SetRandSeed(seed)
+np.random.seed(seed)
+```
+
+5. Chạy BackPropagation và distributed SGD
+
+```python
+for epoch in range(max_epoch):
+    for b in range(num_train_batch):
+        x = train_x[idx[b * batch_size: (b + 1) * batch_size]]
+        y = train_y[idx[b * batch_size: (b + 1) * batch_size]]
+        tx.copy_from_numpy(x)
+        ty.copy_from_numpy(y)
+        # Train the model
+        out, loss = model(tx, ty)
+```
+
+### Hướng Dẫn Thực Hiện
+
+Có hai cách để bắt đầu quá trình training: MPI hoặc Python đa xử lý.
+
+#### Python Đa Xử Lý
+
+Chạy trên một node với nhiều GPUs, trong đó mỗi GPU là một worker.
+
+1. Đặt tất cả các training codes trong cùng một hàm (function)
+
+```python
+def train_mnist_cnn(nccl_id=None, local_rank=None, world_size=None):
+    ...
+```
+
+2. Tạo `mnist_multiprocess.py`
+
+```python
+if __name__ == '__main__':
+    # Generate a NCCL ID to be used for collective communication
+    nccl_id = singa.NcclIdHolder()
+
+    # Define the number of GPUs to be used in the training process
+    world_size = int(sys.argv[1])
+
+    # Define and launch the multi-processing
+	import multiprocessing
+    process = []
+    for local_rank in range(0, world_size):
+        process.append(multiprocessing.Process(target=train_mnist_cnn,
+                       args=(nccl_id, local_rank, world_size)))
+
+    for p in process:
+        p.start()
+```
+
+Dưới đây là giải thích cho các biến tạo ở trên:
+
+(i) `nccl_id`
+
+Lưu ý rằng chúng ta cần phải tạo một NCCL ID ở đây để sử dụng cho collective
+communication, sau đó gửi nó tới tất cả các chỉ lệnh. NCCL ID giống như là vé vào cửa, khi chỉ có chỉ lệnh với ID này có thể tham gia vào quá trình all-reduce.
+(Về sua nếu dùng MPI, thì việc sử dụng NCCL ID là không cần thiết, bởi vì ID được gửi đi bởi MPI trong code của chúng tôi một cách tự động)
+
+(ii) `world_size`
+
+world_size là số lượng máy GPUs bạn muốn sử dụng cho training.
+
+(iii) `local_rank`
+
+local_rank xác định local rank của distributed training và máy gpu được sử dụng trong chỉ lệnh. Trong code bên trên, for loop được sử dụng để chạy hàm train function, và local_rank chạy vòng từ 0 tới world_size. Trong trường hợp này, chỉ lệnh khác nhau có thể sử dụng máy GPUs khác nhau để training.
+
+Tham số để tạo `DistOpt` instance cần được cập nhật như sau: 
+
+```python
+sgd = opt.DistOpt(sgd, nccl_id=nccl_id, local_rank=local_rank, world_size=world_size)
+```
+
+3. Chạy `mnist_multiprocess.py`
+
+```sh
+python mnist_multiprocess.py 2
+```
+
+Kết qủa hiển thị tốc độ so với training trên một máy GPU.
+
+```
+Starting Epoch 0:
+Training loss = 408.909790, training accuracy = 0.880475
+Evaluation accuracy = 0.956430
+Starting Epoch 1:
+Training loss = 102.396790, training accuracy = 0.967415
+Evaluation accuracy = 0.977564
+Starting Epoch 2:
+Training loss = 69.217010, training accuracy = 0.977915
+Evaluation accuracy = 0.981370
+Starting Epoch 3:
+Training loss = 54.248390, training accuracy = 0.982823
+Evaluation accuracy = 0.984075
+Starting Epoch 4:
+Training loss = 45.213406, training accuracy = 0.985560
+Evaluation accuracy = 0.985276
+Starting Epoch 5:
+Training loss = 38.868435, training accuracy = 0.987764
+Evaluation accuracy = 0.986278
+Starting Epoch 6:
+Training loss = 34.078186, training accuracy = 0.989149
+Evaluation accuracy = 0.987881
+Starting Epoch 7:
+Training loss = 30.138697, training accuracy = 0.990451
+Evaluation accuracy = 0.988181
+Starting Epoch 8:
+Training loss = 26.854443, training accuracy = 0.991520
+Evaluation accuracy = 0.988682
+Starting Epoch 9:
+Training loss = 24.039650, training accuracy = 0.992405
+Evaluation accuracy = 0.989083
+```
+
+#### MPI
+
+Có thể dùng cho cả một node và nhiều node miễn là có nhiều máy GPUs.
+
+1. Tạo `mnist_dist.py`
+
+```python
+if __name__ == '__main__':
+    train_mnist_cnn()
+```
+
+2. Tạo một hostfile cho MPI, vd. hostfile dưới đây sử dụng 2 chỉ lệnh (vd.,
+   2 GPUs) trên một node
+
+```txt
+localhost:2
+```
+
+3. Khởi động quá trình training qua `mpiexec`
+
+```sh
+mpiexec --hostfile host_file python mnist_dist.py
+```
+
+Kết qủa có thể hiển thị tốc độ so với training trên một máy GPU.
+
+```
+Starting Epoch 0:
+Training loss = 383.969543, training accuracy = 0.886402
+Evaluation accuracy = 0.954327
+Starting Epoch 1:
+Training loss = 97.531479, training accuracy = 0.969451
+Evaluation accuracy = 0.977163
+Starting Epoch 2:
+Training loss = 67.166870, training accuracy = 0.978516
+Evaluation accuracy = 0.980769
+Starting Epoch 3:
+Training loss = 53.369656, training accuracy = 0.983040
+Evaluation accuracy = 0.983974
+Starting Epoch 4:
+Training loss = 45.100403, training accuracy = 0.985777
+Evaluation accuracy = 0.986078
+Starting Epoch 5:
+Training loss = 39.330826, training accuracy = 0.987447
+Evaluation accuracy = 0.987179
+Starting Epoch 6:
+Training loss = 34.655270, training accuracy = 0.988799
+Evaluation accuracy = 0.987780
+Starting Epoch 7:
+Training loss = 30.749735, training accuracy = 0.989984
+Evaluation accuracy = 0.988281
+Starting Epoch 8:
+Training loss = 27.422146, training accuracy = 0.991319
+Evaluation accuracy = 0.988582
+Starting Epoch 9:
+Training loss = 24.548153, training accuracy = 0.992171
+Evaluation accuracy = 0.988682
+```
+
+## Tối Ưu Hoá Distributed Training
+
+SINGA cung cấp chiến lược đa tối ưu hoá cho distributed training để giảm communication cost. Tham khảo API của `DistOpt` cho cấu hình của mỗi cách. 
+
+Khi sử dụng `model.Model` để tạo một model, cần phải đặt các lựa chọn cho 
+distributed training trong phương pháp `train_one_batch`. Tham khảo code ví dụ trên đầu trang. Bạn có thể chỉ cần copy code cho các lựa chọn và sử dụng nó cho các model khác. 
+Với các lựa chọn xác định, ta có thể đặt tham số`dist_option` và `spars` khi bắt đầu training với  `model(tx, ty, dist_option, spars)`
+
+### Không Tối Ưu Hoá
+
+```python
+out, loss = model(tx, ty)
+```
+
+`loss` là output tensor từ hàm loss function, vd., cross-entropy cho
+classification tasks.
+
+### Half-precision Gradients
+
+```python
+out, loss = model(tx, ty, dist_option = 'fp16')
+```
+
+Chuyển đổi gía trị độ dốc sang hiển thị dạng 16-bit (vd., half-precision) trước khi gọi hàm all-reduce.
+
+### Đồng Bộ Cục Bộ (Partial Synchronization)
+
+```python
+out, loss = model(tx, ty, dist_option = 'partialUpdate')
+```
+
+Ở mỗi vòng lặp (iteration), mỗi rank thực hiện việc cập nhật sgd. Sau đó chỉ một nhóm tham số là được tính trung bình để đồng bộ hoá. Điều này giúp tiết kiệm communication cost.
+Độ lớn của nhóm này được xác định khi tạo hàm `DistOpt` instance.
+
+### Phân Bổ Độ Dốc (Gradient Sparsification)
+
+Kế hoạch phân bổ để chọn ra một nhóm nhỏ độ dốc nhằm thực hiện all-reduce. Có hai cách:
+
+- Chọn K phần tử lớn nhất. spars là một phần (0 - 1) của tổng số phần tử được chọn. 
+
+```python
+out, loss = model(tx, ty, dist_option = 'sparseTopK', spars = spars)
+```
+
+- Tất cả độ dốc có giá trị tuyệt đối lớn hơn ngưỡng spars đặt trước được lựa chọn.
+
+```python
+out, loss = model(tx, ty, dist_option = 'sparseThreshold', spars = spars)
+```
+
+Các hyper-parameter được cấu tạo khi tạo hàm `DistOpt` instance.
+
+## Thực Hiện
+
+Mục này chủ yếu dành cho các lập trình viên (developer) muốn biết lập trình trong 
+distribute module được thực hiện như thế nào.
+
+### Giao Diện C cho Bộ Chuyển Mạch (communicator) NCCL
+
+Trước tiên, communication layer được lập trình bằng ngôn ngữ C
+[communicator.cc](https://github.com/apache/singa/blob/master/src/io/communicator.cc).
+Nó áp dụng NCCL library cho collective communication.
+
+Có hai hàm tạo nên communicator, một cho MPI và một cho đa phương thức (multiprocess).
+
+(i) Hàm tạo sử dụng MPI
+
+Hàm tạo bước đầu sẽ sử dụng global rank và world size, sau đó tính toán ra local rank. Tiếp theo, rank 0 sẽ tạo ra NCCL ID và phát nó lên mỗi rank. Sau đó, nó gọi hàm setup để khởi tạo NCCL
+communicator, cuda streams, và buffers.
+
+(ii) Hàm tạo sử dụng Python đa phương thức
+
+Hàm tạo bước đầu sẽ sử dụng rank, world size, và NCCL ID từ input argument. Sau đó, nó gọi hàm setup function để khởi tạo NCCL communicator, cuda streams, và buffers. 
+
+Sau khi khởi động, nó thực hiện chức năng all-reduce để đồng bộ hoá các tham số model và độ dốc. Ví dụ, synch sử dụng một input tensor và tiến hành all-reduce qua đoạn chương trình NCCL. Sau khi gọi synch, cần gọi hàm wait để đợi hàm all-reduce operation kết thúc. 
+
+### Giao Diện Python của DistOpt
+
+Sau đó, giao diện python sẽ tạo ra một
+[DistOpt](https://github.com/apache/singa/blob/master/python/singa/opt.py) class để gói một 
+[optimizer](https://github.com/apache/singa/blob/master/python/singa/opt.py)
+object để thực hiện distributed training dựa trên MPI hoặc đa xử lý. Trong khi khởi động, nó tạo ra một NCCL communicator object (từ giao diện C đề cập ở mục nhỏ phía trên). Sau đó, communicator object này được sử dụng trong mỗi hàm all-reduce trong DistOpt.
+
+Trong MPI hoặc đa xử lý, mỗi chỉ lệnh có một rank, cho biết thông tin máy GPU nào qui trình này đang sử dụng. Dữ liệu training được chia nhỏ để mỗi chỉ lệnh có thể đánh giá sub-gradient dựa trên dữ liệu đã chia trước đó. Sau khi sub-gradient được tạo ra ở mỗi chỉ lệnh, độ dốc stochastic gradient tổng hợp sẽ được tạo ra bằng cách all-reduce các sub-gradients đánh giá bởi tất cả các chỉ lệnh. 
diff --git a/docs-site/docs_viet/download.md b/docs-site/docs_viet/download.md
new file mode 100644
index 0000000..12bf33e
--- /dev/null
+++ b/docs-site/docs_viet/download.md
@@ -0,0 +1,192 @@
+---
+id: downloads
+title: Tải SINGA
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+## Kiểm Chứng
+
+Để kiểm chứng tập tin tar.gz đã tải, tải 
+[KEYS](https://www.apache.org/dist/singa/KEYS) và tập tin ASC sau đó thực hiện các lệnh sau
+
+```shell
+% gpg --import KEYS
+% gpg --verify downloaded_file.asc downloaded_file
+```
+
+Bạn có thể kiểm tra giá trị của SHA512 hoặc MD5 để xem liệu việc tải về đã hoàn thành chưa. 
+
+## V3.1.0 (30 tháng 10 năm 2020):
+
+- [Apache SINGA 3.1.0](http://www.apache.org/dyn/closer.cgi/singa/3.1.0/apache-singa-3.1.0.tar.gz)
+  [\[SHA512\]](https://www.apache.org/dist/singa/3.1.0/apache-singa-3.1.0.tar.gz.sha512)
+  [\[ASC\]](https://www.apache.org/dist/singa/3.1.0/apache-singa-3.1.0.tar.gz.asc)
+- [Release Notes 3.1.0](http://singa.apache.org/docs/releases/RELEASE_NOTES_3.1.0)
+- Thay đổi chung:
+  - Cập nhật Tensor core:
+    - Hỗ trợ tensor transformation (reshape, transpose) cho tensors có tới 6 chiều (dimensions).
+    - Áp dụn traverse_unary_transform ở Cuda backend, tương tự như CPP backend one.
+  - Thêm hàm tensor operators vào autograd module.
+  - Cải tạo lại sonnx để
+    - Hỗ trợ việc tạo hàm operators từ cả layer và autograd.
+    - Viết lại SingaRep để SINGA representation mạnh và nhanh hơn. 
+    - Thêm SONNXModel áp dụng từ Model để API và các tính năng đồng bộ với nhau. 
+  * Thay thế Travis CI với trình tự Github. Thêm quản lý chất lượng và độ bao phủ. 
+  * Thêm Tập lệnh compiling và packaging nhằm tạo gói wheel packages cho distribution.
+  * Fix bugs
+    - Hoàn thiện Tập lệnh training cho ví dụ về IMDB LSTM model.
+    - Ổn định lại hàm Tensor operation Mult khi sử dụng Broadcasting.
+    - Hàm Gaussian trong Tensor giờ có thể chạy trên Tensor với kích thước lẻ.
+    - Cập nhật hàm hỗ trợ chạy thử gradients() trong autograd để tìm tham số
+      gradient qua tham số python object id khi chạy thử.
+
+## V3.0.0 (18 April 2020):
+
+- [Apache SINGA 3.0.0](https://archive.apache.org/dist/singa/3.0.0/apache-singa-3.0.0.tar.gz)
+  [\[SHA512\]](https://archive.apache.org/dist/singa/3.0.0/apache-singa-3.0.0.tar.gz.sha512)
+  [\[ASC\]](https://archive.apache.org/dist/singa/3.0.0/apache-singa-3.0.0.tar.gz.asc)
+- [Ghi Chú Phát Hành 3.0.0](http://singa.apache.org/docs/releases/RELEASE_NOTES_3.0.0)
+- Các tính năng mới và thay đổi chính, 
+  - Nâng cấp ONNX. Thử nghiệm nhiều ONNX models trên SINGA.
+  - Thực hiện Distributed training với MPI và tối ưu hoá NCCL Communication qua
+    phân bổ và nén độ dốc, và truyền tải phân khúc.
+  - Xây dựng và tối ưu hoá tốc độ và bộ nhớ sử dụng graph của Computational graph.
+  - Lập trang Tài Liệu sử dụng mới (singa.apache.org) và website tham khảo API
+    (apache-singa.rtfd.io).
+  - CI cho việc kiểm tra chất lượng mã code. 
+  - Thay thế MKLDNN bằng DNNL
+  - Cập nhật APIs cho tensor để hỗ trợ hàm broadcasting.
+  - Tạo autograd operators mới để hỗ trợ các ONNX models.
+
+## Incubating v2.0.0 (20 tháng 4 năm 2019):
+
+- [Apache SINGA 2.0.0 (incubating)](https://archive.apache.org/dist/incubator/singa/2.0.0/apache-singa-incubating-2.0.0.tar.gz)
+  [\[SHA512\]](https://archive.apache.org/dist/incubator/singa/2.0.0/apache-singa-incubating-2.0.0.tar.gz.sha512)
+  [\[ASC\]](https://archive.apache.org/dist/incubator/singa/2.0.0/apache-singa-incubating-2.0.0.tar.gz.asc)
+- [Ghi Chú Phát Hành 2.0.0 (incubating)](http://singa.apache.org/docs/releases/RELEASE_NOTES_2.0.0.html)
+- Các tính năng mới và thay đổi chính, 
+  - Nâng cấp autograd (cho Convolution networks và recurrent networks)
+  - Hỗ trợ ONNX
+  - Cải thiện hàm CPP operations qua Intel MKL DNN lib
+  - Thực hiện tensor broadcasting
+  - Chuyển Docker images dưới tên sử dụng trong Apache
+  - Cập nhật các phiên bản dependent lib trong conda-build config
+
+## Incubating v1.2.0 (6 June 2018):
+
+- [Apache SINGA 1.2.0 (incubating)](https://archive.apache.org/dist/incubator/singa/1.2.0/apache-singa-incubating-1.2.0.tar.gz)
+  [\[SHA512\]](https://archive.apache.org/dist/incubator/singa/1.2.0/apache-singa-incubating-1.2.0.tar.gz.sha512)
+  [\[ASC\]](https://archive.apache.org/dist/incubator/singa/1.2.0/apache-singa-incubating-1.2.0.tar.gz.asc)
+- [Release Notes 1.2.0 (incubating)](http://singa.apache.org/docs/releases/RELEASE_NOTES_1.2.0.html)
+- Các tính năng mới và thay đổi chính, 
+  - Thực hiện autograd (đang hỗ trợ MLP model)
+  - Nâng cấp PySinga để hỗ trợ Python 3
+  - Cải thiện Tensor class với mục stride
+  - Nâng cấp cuDNN từ V5 sang V7
+  - Thêm VGG, Inception V4, ResNet, và DenseNet cho ImageNet classification
+  - Tạo alias cho gói conda packages
+  - Hoàn thiện Tài liệu sử dụng bằng tiếng Trung 
+  - Thêm hướng dẫn chạy Singa trên Windows
+  - Cập nhật compilation, CI
+  - Sửa lỗi nếu có
+
+## Incubating v1.1.0 (12 February 2017):
+
+- [Apache SINGA 1.1.0 (incubating)](https://archive.apache.org/dist/incubator/singa/1.1.0/apache-singa-incubating-1.1.0.tar.gz)
+  [\[MD5\]](https://archive.apache.org/dist/incubator/singa/1.1.0/apache-singa-incubating-1.1.0.tar.gz.md5)
+  [\[ASC\]](https://archive.apache.org/dist/incubator/singa/1.1.0/apache-singa-incubating-1.1.0.tar.gz.asc)
+- [Release Notes 1.1.0 (incubating)](http://singa.apache.org/docs/releases/RELEASE_NOTES_1.1.0.html)
+- Các tính năng mới và thay đổi chính, 
+  - Tạo Docker images (phiên bản CPU và GPU)
+  - Tạo Amazon AMI cho SINGA (phiên bản CPU)
+  - Tích hợp với Jenkins để tự động tạo gói Wheel và Debian
+    (cho cài đặt), và cập nhật website.
+  - Nâng cấp FeedFowardNet, vd., nhiều mode cho inputs và verbose để sửa lỗi
+  - Thêm Concat và Slice layers
+  - Mở rộng CrossEntropyLoss nhằm chấp nhật instance với nhiều labels
+  - Thêm image_tool.py với phương thức image augmentation
+  - Hỗ trợ tải và lưu model qua Snapshot API
+  - Compile SINGA source trên Windows
+  - Compile những dependent libraries bắt buộc cùng với SINGA code
+  - Kích hoạt Java binding (cơ bản) cho SINGA
+  - Thêm phiên bản ID trong kiểm soát tập tin
+  - Thêm gói sử dụng Rafiki cung cấp RESTFul APIs
+  - Thêm ví dụ pretrained từ Caffe, bao gồm GoogleNet
+
+## Incubating v1.0.0 (8 September 2016):
+
+- [Apache SINGA 1.0.0 (incubating)](https://archive.apache.org/dist/incubator/singa/1.0.0/apache-singa-incubating-1.0.0.tar.gz)
+  [\[MD5\]](https://archive.apache.org/dist/incubator/singa/1.0.0/apache-singa-incubating-1.0.0.tar.gz.md5)
+  [\[ASC\]](https://archive.apache.org/dist/incubator/singa/1.0.0/apache-singa-incubating-1.0.0.tar.gz.asc)
+- [Release Notes 1.0.0 (incubating)](http://singa.apache.org/docs/releases/RELEASE_NOTES_1.0.0.html)
+- Các tính năng mới và thay đổi chính,
+  - Tạo Tensor nhằm hỗ trợ nhiều model khác nhau.
+  - Tạo Device để chạy trên các thiết bị phần cứng khác nhau, bao gồm CPU, 
+    (Nvidia/AMD) GPU và FPGA (sẽ thử nghiệm ở các phiên bản mới).
+  - Thay thế GNU autotool với cmake khi compilation.
+  - Hỗ trợ Mac OS
+  - Cải thiện Python binding, bao gồm cài đặt và lập trình.
+  - Tạo thêm nhiều deep learning models, bao gồm VGG và ResNet
+  - Thêm IO classes để đọc/viết tập tin và mã hoá/giải mã dữ liệu 
+  - Các thành phần network communication mới trực tiếp từ Socket.
+  - Cudnn V5 với Dropout và RNN layers.
+  - Thay thế công cụ xây dựng website từ maven sang Sphinx
+  - Tích hợp Travis-CI
+
+## Incubating v0.3.0 (20 April 2016):
+
+- [Apache SINGA 0.3.0 (incubating)](https://archive.apache.org/dist/incubator/singa/0.3.0/apache-singa-incubating-0.3.0.tar.gz)
+  [\[MD5\]](https://archive.apache.org/dist/incubator/singa/0.3.0/apache-singa-incubating-0.3.0.tar.gz.md5)
+  [\[ASC\]](https://archive.apache.org/dist/incubator/singa/0.3.0/apache-singa-incubating-0.3.0.tar.gz.asc)
+- [Release Notes 0.3.0 (incubating)](http://singa.apache.org/docs/releases/RELEASE_NOTES_0.3.0.html)
+- Các tính năng mới và thay đổi chính,
+  - Training trên nhóm máy GPU: cho phép training các deep learning models trên một nhóm máy GPU
+  - Cải thiện Python wrapper khiến cho job configuration trở nên dễ dàng, bao gồm
+    neural net và thuật toán SGD.
+  - Thêm cập nhật SGD updaters mới, bao gồm Adam, AdaDelta và AdaMax.
+  - Cài đặt cần ít dependent libraries hơn cho mỗi node training.
+  - Đa dạng training với CPU và GPU.
+  - Hỗ trợ cuDNN V4.
+  - Tìm nạp trước dữ liệu.
+  - Sửa lỗi nếu có.
+
+## Incubating v0.2.0 (14 January 2016):
+
+- [Apache SINGA 0.2.0 (incubating)](https://archive.apache.org/dist/incubator/singa/0.2.0/apache-singa-incubating-0.2.0.tar.gz)
+  [\[MD5\]](https://archive.apache.org/dist/incubator/singa/0.2.0/apache-singa-incubating-0.2.0.tar.gz.md5)
+  [\[ASC\]](https://archive.apache.org/dist/incubator/singa/0.2.0/apache-singa-incubating-0.2.0.tar.gz.asc)
+- [Release Notes 0.2.0 (incubating)](http://singa.apache.org/docs/releases/RELEASE_NOTES_0.2.0.html)
+- Các tính năng mới và thay đổi chính,
+  - Training trên GPU cho phép training các models phức tạp trên một node với nhiều card GPU.
+  - Chia nhỏ Hybrid neural net hỗ trợ dữ liệu và model song song cùng lúc. 
+  - Cải thiện Python wrapper khiến cho job configuration trở nên dễ dàng, bao gồm
+    neural net và thuật toán SGD.
+  - Áp dụng RNN model và thuật toán BPTT để hỗ trợ các ứng dụng dựa trên 
+    RNN models, e.g., GRU.
+  - Tích hợp các phần mêm đám mây bao gồm Mesos, Docker và HDFS.
+  - Cung cấp hình ảnh cấu trúc neural net và thông tin layer, hỗ trợ việc sửa lỗi.
+  - Hàm Linear algebra và các hàm  ngẫu nhiên không dùng Blobs và chỉ điểm dữ liệu thô.
+  - Tạo layers mới, bao gồm SoftmaxLayer, ArgSortLayer, DummyLayer, RNN layers và
+    cuDNN layers.
+  - Cập nhật Layer class để chứa nhiều data/grad Blobs.
+  - Trích xuất các features và thử nghiệm hiệu quả cho dữ liệu mới bằng cách tải các tham số model đã được train từ trước.
+  - Thêm Store class cho hàm IO operations.
+
+## Incubating v0.1.0 (8 October 2015):
+
+- [Apache SINGA 0.1.0 (incubating)](https://archive.apache.org/dist/incubator/singa/apache-singa-incubating-0.1.0.tar.gz)
+  [\[MD5\]](https://archive.apache.org/dist/incubator/singa/apache-singa-incubating-0.1.0.tar.gz.md5)
+  [\[ASC\]](https://archive.apache.org/dist/incubator/singa/apache-singa-incubating-0.1.0.tar.gz.asc)
+- [Amazon EC2 image](https://console.aws.amazon.com/ec2/v2/home?region=ap-southeast-1#LaunchInstanceWizard:ami=ami-b41001e6)
+- [Release Notes 0.1.0 (incubating)](http://singa.apache.org/docs/releases/RELEASE_NOTES_0.1.0.html)
+- Các thay đổi chính gồm có,
+  - Cài đặt sử dụng tiện ích GNU build
+  - Tập lệnh cho job management với zookeeper
+  - Lập trình model dựa trên NeuralNet và trích xuất Layer.
+  - Kết cấu hệ thống dựa trên Worker, Server và Stub.
+  - Training models từ ba model khác nhau, là feed-forward
+    models, energy models và RNN models.
+  - Đồng bộ và không đồng bộ và không đồng bộ distributed training frameworks sử dụng CPU
+  - Điểm kiểm tra (Checkpoint) và khôi phục 
+  - Kiểm tra đơn vị sử dụng gtest
diff --git a/docs-site/docs_viet/examples.md b/docs-site/docs_viet/examples.md
new file mode 100644
index 0000000..d236585
--- /dev/null
+++ b/docs-site/docs_viet/examples.md
@@ -0,0 +1,65 @@
+---
+id: examples
+title: Ví Dụ
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+Phần này đưa ra một vài ví dụ về việc thực hiện deep learning sử dụng SINGA. Mã nguồn (source code) được cung cấp trong SINGA repo trên
+[Github](https://github.com/apache/singa/tree/master/examples). Có thể tham khảo các ví dụ sử dụng SINGA Python APIs trên CPU hoặc một GPU trên
+[Google Colab](https://colab.research.google.com/). Bạn có thể trực tiếp chạy thử trên 
+Google Cloud mà không cần tạo local environment. Đường dẫn tới mỗi ví dụ được cung cấp dưới đây.
+
+## Image Classification
+
+| Model       | Dataset                           | Đường dẫn                                                                                                   |
+| ----------- | --------------------------------- | ------------------------------------------------------------------------------------------------------- |
+| CNN cơ bản  | MNIST, CIFAR10, CIFAR100          | [Colab](https://colab.research.google.com/drive/1fbGUs1AsoX6bU5F745RwQpohP4bHTktq)                      |
+| AlexNet     | ImageNet                          | [Cpp]()                                                                                                 |
+| VGG         | ImageNet                          | [Cpp](), [Python](), [Colab](https://colab.research.google.com/drive/14kxgRKtbjPCKKsDJVNi3AvTev81Gp_Ds) |
+| XceptionNet | MNIST, CIFAR10, CIFAR100          | [Python]()                                                                                              |
+| ResNet      | MNIST, CIFAR10, CIFAR100, CIFAR10 | [Python](), [Colab](https://colab.research.google.com/drive/1u1RYefSsVbiP4I-5wiBKHjsT9L0FxLm9)          |
+| MobileNet   | ImageNet                          | [Colab](https://colab.research.google.com/drive/1HsixqJMIpKyEPhkbB8jy7NwNEFEAUWAf)                      |
+
+## Object Detection
+
+| Model       | Dataset    | Đường dẫn                                                                                |
+| ----------- | ---------- | ---------------------------------------------------------------------------------- |
+| Tiny YOLOv2 | Pascal VOC | [Colab](https://colab.research.google.com/drive/11V4I6cRjIJNUv5ZGsEGwqHuoQEie6b1T) |
+
+## Nhận diện Khuôn mặt và Cảm xúc 
+
+| Model           | Dataset                                                                                                                                                | Đường dẫn                                                                               |
+| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------- |
+| ArcFace         | Refined MS-Celeb-1M                                                                                                                                    | [Colab](https://colab.research.google.com/drive/1qanaqUKGIDtifdzEzJOHjEj4kYzA9uJC) |
+| Emotion FerPlus | [Facial Expression Recognition Challenge](https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data) | [Colab](https://colab.research.google.com/drive/1XHtBQGRhe58PDi4LGYJzYueWBeWbO23r) |
+
+## Image Generation
+
+| Model | Dataset | Đường dẫn                                                                                |
+| ----- | ------- | ---------------------------------------------------------------------------------- |
+| GAN   | MNIST   | [Colab](https://colab.research.google.com/drive/1f86MNDW47DJqHoIqWD1tOxcyx2MWys8L) |
+| LSGAN | MNIST   | [Colab](https://colab.research.google.com/drive/1C6jNRf28vnFOI9JVM4lpkJPqxsnhxdol) |
+
+## Machine Comprehension
+
+| Model      | Dataset                                                                   | Đường dẫn                                                                                |
+| ---------- | ------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| Bert-Squad | [SQuAD v1.1](https://rajpurkar.github.io/SQuAD-explorer/explore/1.1/dev/) | [Colab](https://colab.research.google.com/drive/1kud-lUPjS_u-TkDAzihBTw0Vqr0FjCE-) |
+
+## Text Classification
+
+| Model       | Dataset | Đường dẫn       |
+| ----------- | ------- | ---------- |
+| Simple LSTM | IMDB    | [python]() |
+
+## Text Ranking
+
+| Model  | Dataset     | Đường dẫn      |
+| ------ | ----------- | ---------- |
+| BiLSTM | InsuranceQA | [python]() |
+
+## Misc.
+
+- Restricted Boltzmann Machine sử dụng dữ liệu MNIST, [nguồn](),
+  [Colab](https://colab.research.google.com/drive/19996noGu9JyHHkVmp4edBGu7PJSRQKsd).
diff --git a/docs-site/docs_viet/git-workflow.md b/docs-site/docs_viet/git-workflow.md
new file mode 100644
index 0000000..a9f3516
--- /dev/null
+++ b/docs-site/docs_viet/git-workflow.md
@@ -0,0 +1,119 @@
+---
+id: git-workflow
+title: Quy Trình Sử Dụng Git
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+## Dành cho Lập Trình Viên
+
+1. Fork [SINGA Github repository](https://github.com/apache/singa) về tài khoản Github của bạn.
+
+2. Clone **repo** (viết tắt của repository) từ tài khoản Github của bạn
+
+   ```shell
+   git clone https://github.com/<Github account>/singa.git
+   git remote add upstream https://github.com/apache/singa.git
+   ```
+
+3. Tạo branch mới (vd., `feature-foo` hoặc `fixbug-foo`), chỉnh sửa và 
+   commit code của bạn ở đây .
+
+   ```shell
+   git checkout dev
+   git checkout -b feature-foo
+   # write your code
+   git add <created/updated files>
+   git commit
+   ```
+
+   Nội dung lệnh commit nên bao gồm:
+
+   - Tiêu đề (Title) mô tả.
+   - Mô tả chi tiết. Nếu lệnh commit là sửa lỗi (bugs), tốt nhất là nên 
+     bao gồm việc mô tả ngắn gọn lại vấn đề. Nếu thêm tính năng mới, có thể bao gồm động cơ thúc đẩy/mục đích của 
+     tính năng mới này.
+
+   Nếu branch của bạn có nhiều commits nhỏ, bạn cần súc tích lại các commits bằng cách 
+
+   ```shell
+   git rebase -i <commit id>
+   ```
+
+   Bạn có thể
+   [squash và reword](https://help.github.com/en/articles/about-git-rebase) các 
+   commits.
+
+4. Khi bạn đang xử lý các mã code, branch `dev` của SINGA có thể đang được cập nhật bởi người khác; 
+   Trong trường hợp này, bạn cần pull dev mới nhất
+
+   ```shell
+   git checkout dev
+   git pull upstream dev:dev
+   ```
+
+5. [Rebase](https://git-scm.com/book/en/v2/Git-Branching-Rebasing) `feature-foo`
+   vào branch `dev` và push commits vào tài khoản Github của bạn (
+   branch mới). Lệnh rebase nhằm giúp cho lịch sử commit của bạn rõ ràng. Các lệnh git dưới đây nên 
+   được thực hiện sau khi bạn commit các việc làm của mình:
+
+   ```shell
+   git checkout feature-foo
+   git rebase dev
+   git push origin feature-foo:feature-foo
+   ```
+
+   Lệnh rebase thực hiện các
+   [bước sau](https://git-scm.com/book/en/v2/Git-Branching-Rebasing):
+   "Lệnh này thực hiện bắt đầu từ hình thái ban đầu của hai branches
+   (mà bạn đang sử dụng hoặc bạn đang rebase vào), xác định sự khác nhau
+   ở mỗi commit của branch bạn đang sử dụng, lưu các điểm khác nhau vào 
+   tập tin tạm thời, điều chỉnh branch hiện tại để có cùng commit với
+   branch mà bạn đang rebase vào, rồi cuối cùng áp dụng từng thay đổi một theo thứ tự."
+   Bởi vậy, sau khi thực hiện, bạn sẽ vẫn ở feature branch, nhưng commit IDs/hashes 
+   của bạn được thay đổi do các điểm khác nhau đã được commit trong quá trình rebase; 
+   và branch của bạn giờ đây chứa bản code cập nhật nhất từ branch dev và branch của bạn.
+
+6. Tạo một pull request (PR) vào branch dev của apache/singa trên website Github.
+   Nếu bạn muốn thông báo cho các thành viên khác đang làm việc trên cùng một tập tin, 
+   bạn có thể tìm tập tin đó trên Github và nhấn vào "Blame" để xem chú thích từng dòng một
+   ai đã thay đổi code lần cuối cùng. Sau đó, bạn có thể thêm @username trong mục mô tả PR
+   để nhắc họ. Hãy nói rõ rằng những đóng góp này là công sức của bạn và rằng bạn cấp bản quyền 
+   công sức này cho dự án theo dạng bản quyền dự án mở. Những commits khác (vd., sửa lỗi) 
+   vào branch mới này sẽ được tự động cập nhật vào pull request của bạn bởi Github.
+
+7. Đợi thành viên xét duyệt PR. Trong quá trình này, dev branch của SINGA có thể được những người khác cập nhật,
+   do vậy bạn cần phải [merge the latest dev](https://docs.fast.ai/dev/git.html#how-to-keep-your-feature-branch-up-to-date)
+   để xử lý các conflicts. Một số người 
+   [rebase PR vào branch dev mới nhất](https://github.com/edx/edx-platform/wiki/How-to-Rebase-a-Pull-Request)
+   thay vì merging. Tuy nhiên, nếu các thành viên khác fetch PR này để thêm các tính năng mới rồi gửi PR, việc rebase sẽ gây ra **duplicate commits** (với hash khác) ở PR mới. Xem
+   [Nguyên tắc vàng để Rebasing](https://www.atlassian.com/git/tutorials/merging-vs-rebasing)
+   để biết thêm chi tiết khi nào cần tránh rebase. Một giải pháp đơn giản để cập nhật PR (nhằm xử lý conflicts hay lỗi commit) là checkout một branch mới từ branch dev cập nhật nhất của Apache SINGAS repo; copy và paste các mã code được cập nhật/thêm vào; commit và gửi một PR mới.
+
+## Dành cho commiters
+
+Commiters có thể merge pull requests (PRs) vào dev branch của repo upstream. 
+Trước khi merge mỗi PR, committer nên
+
+- kiểm tra thông điệp commit (nội dung và định dạng)
+- kiểm tra những thay đổi so với code hiện tại. Thay đổi về API nên được ghi lại.
+- kiểm tra kết quả Travis testing cho định dạng mã code/tài liệu và unit tests
+
+Có hai cách để merge một pull request:
+
+- Trên Github. Làm theo [hướng dẫn](https://gitbox.apache.org/setup/) để
+  kết nối tài khoản Apache với tài khoản Github của bạn. Sau đó bạn có thể trực tiếp 
+  merge PRs trên GitHub.
+- Để merge pull request https://github.com/apache/singa/pull/xxx qua command
+  line, thực hiện theo hướng dẫn sau: 
+
+  ```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
+  ```
+
+  Không sử dụng rebase để merge PR; và vô hiệu hoá fast forward.
diff --git a/docs-site/docs_viet/graph.md b/docs-site/docs_viet/graph.md
new file mode 100644
index 0000000..e31df1e
--- /dev/null
+++ b/docs-site/docs_viet/graph.md
@@ -0,0 +1,494 @@
+---
+id: graph
+title: Model
+---
+
+<!-- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License. -->
+
+Forward và backward propagation trong mạng thần kinh nhân tạo (neural network) có thể sử dụng
+một tập hợp các hàm như convolution và pooling. Mỗi hàm nhận một vài input [tensors](./tensor) và áp dụng một [operator](./autograd) để tạo output tensors. 
+Bằng việc thể hiện mỗi operator là một node và mỗi tensor là một
+edge, tất cả dạng hàm tạo thành một computational graph. Với computational graph, tối
+ưu hoá tốc độ và bộ nhớ có thể được tiến hành bởi việc đưa vào thực hiện việc phân bổ/giải phóng bộ nhớ và thao tác
+một cách hợp lý.  Trong SINGA, người dùng chỉ cần xác định neural network model sử dụng API của hàm
+[Model](https://github.com/apache/singa/blob/master/python/singa/model.py).
+Graph được xây dựng và tối ưu hoá ở C++ phía sau một cách tự động.
+
+Theo đó, một mặt người dùng thực hiện network sử dụng API của hàm 
+[Model](./graph) tuân theo phong cách lập trình bắt buộc như PyTorch.
+Có điều khác với PyTorch phải tái tạo lại các thao tác ở mỗi vòng lặp, SINGA
+buffer các thao tác để tạo computational graph một cách đầy đủ (khi tính năng này được kích hoạt) sau vòng lặp đầu tiên. Do đó, mặt khác, SINGA có computational graph giống như được tạo bởi các libraries sử dụng lập trình khai báo
+(declarative programming), như TensorFlow. Nên nó được tối ưu hoá qua graph.
+
+## Ví Dụ
+
+Mã code sau mô phỏng việc sử dụng API của hàm `Model`.
+
+1. Áp dụng model mới như một tập con của Model class.
+
+```Python
+class CNN(model.Model):
+
+    def __init__(self, num_classes=10, num_channels=1):
+        super(CNN, self).__init__()
+        self.conv1 = layer.Conv2d(num_channels, 20, 5, padding=0, activation="RELU")
+        self.conv2 = layer.Conv2d(20, 50, 5, padding=0, activation="RELU")
+        self.linear1 = layer.Linear(500)
+        self.linear2 = layer.Linear(num_classes)
+        self.pooling1 = layer.MaxPool2d(2, 2, padding=0)
+        self.pooling2 = layer.MaxPool2d(2, 2, padding=0)
+        self.relu = layer.ReLU()
+        self.flatten = layer.Flatten()
+        self.softmax_cross_entropy = layer.SoftMaxCrossEntropy()
+
+    def forward(self, x):
+        y = self.conv1(x)
+        y = self.pooling1(y)
+        y = self.conv2(y)
+        y = self.pooling2(y)
+        y = self.flatten(y)
+        y = self.linear1(y)
+        y = self.relu(y)
+        y = self.linear2(y)
+        return y
+
+    def train_one_batch(self, x, y):
+        out = self.forward(x)
+        loss = self.softmax_cross_entropy(out, y)
+        self.optimizer(loss)
+        return out, loss
+```
+
+2. Tạo một instance cho model, optimizer, device, v.v. Compile model đó
+
+```python
+model = CNN()
+
+# khởi tạo optimizer và đính nó vào model
+sgd = opt.SGD(lr=0.005, momentum=0.9, weight_decay=1e-5)
+model.set_optimizer(sgd)
+
+# khởi tạo device
+dev = device.create_cuda_gpu()
+
+# input và target placeholders cho model
+tx = tensor.Tensor((batch_size, 1, IMG_SIZE, IMG_SIZE), dev, tensor.float32)
+ty = tensor.Tensor((batch_size, num_classes), dev, tensor.int32)
+
+# compile model trước khi training
+model.compile([tx], is_train=True, use_graph=True, sequential=False)
+```
+
+3. Train model theo vòng lặp
+
+```python
+for b in range(num_train_batch):
+    # tạo mini-batch tiếp theo
+    x, y = ...
+
+    # Copy dữ liệu vào input tensors
+    tx.copy_from_numpy(x)
+    ty.copy_from_numpy(y)
+
+    # Training với một batch
+    out, loss = model(tx, ty)
+```
+
+Ví dụ này có trên Google Colab notebook
+[tại đây](https://colab.research.google.com/drive/1fbGUs1AsoX6bU5F745RwQpohP4bHTktq).
+
+Các ví dụ khác:
+
+- [MLP](https://github.com/apache/singa/blob/master/examples/mlp/model.py)
+- [CNN](https://github.com/apache/singa/blob/master/examples/cnn/model/cnn.py)
+- [ResNet](https://github.com/apache/singa/blob/master/examples/cnn/model/resnet.py)
+
+## Thực Hiện
+
+### Xây Dựng Graph
+
+SINGA tạo computational graph qua 3 bước:
+
+1. Buffer các thao tác
+2. Phân tích hoạt động các thư viện sử dụng trong dự án (dependencies)
+3. Tạo nodes và edges dựa trên dependencies
+
+Sử dụng phép nhân ma trận từ dense layer của
+[MLP model](https://github.com/apache/singa/blob/master/examples/mlp/model.py)
+làm ví dụ. Quá trình này gọi là hàm `forward` function của class MLP
+
+```python
+class MLP(model.Model):
+
+    def __init__(self, data_size=10, perceptron_size=100, num_classes=10):
+        super(MLP, self).__init__()
+        self.linear1 = layer.Linear(perceptron_size)
+        ...
+
+    def forward(self, inputs):
+        y = self.linear1(inputs)
+        ...
+```
+
+Layer `Linear` tạo thành từ phép tính `mutmul`. `autograd` áp dụng phép `matmul` bằng cách gọi hàm `Mult` được lấy từ CPP qua SWIG.
+
+```python
+# áp dụng matmul()
+singa.Mult(inputs, w)
+```
+
+Từ phía sau, hàm `Mult` function được áp dụng bằng cách gọi `GEMV`, là một hàm CBLAS. thay vì gọi hàm `GEMV` trực tiếp, `Mult` gửi đi `GEMV` và đối số (argument) tới thiết bị (device) như sau, 
+
+```c++
+// Áp dụng Mult()
+C->device()->Exec(
+    [a, A, b, B, CRef](Context *ctx) mutable {
+        GEMV<DType, Lang>(a, A, B, b, &CRef, ctx);
+    },
+    read_blocks, {C->block()});
+```
+
+Hàm `Exec` function của `Device` buffer hàm này và các đối số của nó. Thêm vào đó, nó cũng có thông tin về các block (một block là một đoạn bộ nhớ cho một tensor) để đọc và viết bởi hàm này. 
+
+Sau khi `Model.forward()` được thực hiện xong một lần, tất cả quá trình được buffer bởi 
+`Device`. Tiếp theo, thông tin đọc/viết của tất cả quá trình sẽ được phân tích để tạo computational graph. 
+Ví dụ, nếu một block `b` được viết bởi quá trình 01 và sau đó được đọc bởi quá trình 02 khác, chúng ta sẽ biết 02 là dựa vào 01 và có edge trực tiếp từ A sang B, thể hiện qua block `b` (hoặc tensor của nó). Sau đó một graph không tuần hoàn sẽ được tạo ra như dưới đây.
+Graph chỉ được tạo ra một lần. 
+
+![Computational graph của MLP](assets/GraphOfMLP.png)
+
+<br/>**Sơ đồ 1 - Ví dụ Computational graph của MLP.**
+
+### Tối Ưu Hoá
+
+Hiện nay, các tối ưu hoá sau được thực hiện dựa trên computational graph.
+
+**Phân bổ thụ động (Lazy allocation)** Khi tensor/blocks được tạo ra, các thiết bị (devices) không phân bổ bộ nhớ cho chúng ngay lập tức. Thay vào đó, khi block được tiếp cận lần đầu tiên, bộ nhớ sẽ được phân bổ. 
+
+**Tự động tái sử dụng (Automatic recycling)** Đếm số của mỗi tensor/block được tính dựa trên graph. Trước khi thực hiện quá trình nào, đếm số là số lượng hàm đọc block này. Trong quá trình thực hiện, khi một hàm nào được tiến hành, đếm số của mỗi block đầu vào bị trừ đi 1. Nếu đếm số của một block bằng 0, thì block này sẽ không được đọc lại nữa trong toàn bộ quá trình còn lại. Bởi vậy, bộ nhớ của nó được giải phóng một cách an toàn. Thêm vào đó, SINGA theo dõi việc sử dụng block bên ngoài graph. Nếu block được sử dụng bởi mã code Python (không phải các hàm autograd), nó sẽ không được tái sử dụng. 
+
+**Chia sẻ bộ nhớ** SINGA sử dụng memory pool, như là
+[CnMem](https://github.com/NVIDIA/cnmem) để quản lý bộ nhớ CUDA. Với _Automatic
+recycling_ và memory pool, SINGA có thể chia sẻ bộ nhớ giữa các tensor. Xem xét hai hàm `c = a + b` và `d=2xc`. Trước khi thực hiện hàm thứ hai, theo như _Lazy allocation_ thì bộ nhớ của d nên được sử dụng. Cũng như `a`
+không được sử dụng ở toàn bộ quá trình còn lại. Theo Tự động sử dụng (Automatic recycling), block
+của `a` sẽ được giải phóng sau hàm đầu tiên. Vì thế, SINGA sẽ đề xuất bốn hàm tới CUDA stream: addition, free `a`, malloc `b`, và
+multiplication. Memory pool sau đó có thể chia sẻ bộ nhớ được `a`
+với `b` giải phóng thay vì yêu cầu GPU thực hiện real malloc cho `b`.
+
+Các kĩ thuật tối ưu hoá khác, ví dụ từ compliers, như common
+sub-expression elimination và parallelizing operations trên CUDA
+streams khác nhau cũng có thể được áp dụng. 
+
+## Toán Tử (Operator) mới
+
+Mỗi toán tử được định nghĩa trong `autograd` module áp dụng hai hàm: forward và
+backward, được thực hiện bằng cách gọi toán tử (operator) từ backend. Để thêm một toán tử mới vào hàm `autograd`, bạn cần thêm nhiều toán tử ở backend.
+
+Lấy toán tử
+[Conv2d](https://github.com/apache/singa/blob/master/python/singa/autograd.py)
+làm ví dụ, từ phía Python, hàm forward và backward được thực hiện bằng cách gọi các toán tử từ backend dựa trên loại
+device.
+
+```python
+class _Conv2d(Operation):
+
+    def forward(self, x, W, b=None):
+        ......
+        if training:
+            if self.handle.bias_term:
+                self.inputs = (x, W, b) # ghi chép x, W, b
+            else:
+                self.inputs = (x, W)
+
+        if (type(self.handle) != singa.ConvHandle):
+            return singa.GpuConvForward(x, W, b, self.handle)
+        else:
+            return singa.CpuConvForward(x, W, b, self.handle)
+
+    def backward(self, dy):
+        if (type(self.handle) != singa.ConvHandle):
+            dx = singa.GpuConvBackwardx(dy, self.inputs[1], self.inputs[0],
+                                        self.handle)
+            dW = singa.GpuConvBackwardW(dy, self.inputs[0], self.inputs[1],
+                                        self.handle)
+            db = singa.GpuConvBackwardb(
+                dy, self.inputs[2],
+                self.handle) if self.handle.bias_term else None
+        else:
+            dx = singa.CpuConvBackwardx(dy, self.inputs[1], self.inputs[0],
+                                        self.handle)
+            dW = singa.CpuConvBackwardW(dy, self.inputs[0], self.inputs[1],
+                                        self.handle)
+            db = singa.CpuConvBackwardb(
+                dy, self.inputs[2],
+                self.handle) if self.handle.bias_term else None
+        if db:
+            return dx, dW, db
+        else:
+            return dx, dW
+```
+
+Mỗi toán tử ở backend nên được thực hiện theo cách sau:
+
+- Giả dụ toán từ là `foo()`; khi được thực hiện nên được gói vào trong một hàm khác, như `_foo()`. `foo()` 
+  chuyển `_foo` cùng với các đối số như một hàm lambda tới hàm `Device`'s `Exec` để buffer.
+  Block để đọc và viết cũng được chuyển cho `Exec`.
+
+- Tất cả đối số được sử dụng trong hàm lambda expression cần phải được thu thập dựa trên các nguyên tắc sau. 
+
+  - `thu thập bằng giá trị`: Nếu biến đối số (argument variable) là biến local hoặc sẽ được giải phóng ngay 
+    (như intermediate tensors). Hoặc, những biến số này sẽ bị loại bỏ khi `foo()` tồn tại.
+  - `thu thập theo tham khảo`:Nếu biến số được ghi lại từ phía python hoặc một biến bất biến 
+    (như tham số W và ConvHand trong Conv2d class).
+
+  - `mutable`: Biểu thức lambda expression nên có biến thẻ (mutable tag) nếu một biến được thu thập theo giá trị bị thay đổi trong hàm `_foo()`
+
+Đây là một
+[ví dụ](https://github.com/apache/singa/blob/master/src/model/operation/convolution.cc)
+về operator được áp dụng ở backend.
+
+```c++
+Tensor GpuConvBackwardx(const Tensor &dy, const Tensor &W, const Tensor &x,
+                        const CudnnConvHandle &cch) {
+  CHECK_EQ(dy.device()->lang(), kCuda);
+
+  Tensor dx;
+  dx.ResetLike(x);
+
+  dy.device()->Exec(
+      /*
+       * 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
+       */
+      [dx, dy, &W, &cch](Context *ctx) mutable {
+        Block *wblock = W.block(), *dyblock = dy.block(), *dxblock = dx.block();
+        float alpha = 1.f, beta = 0.f;
+        cudnnConvolutionBackwardData(
+            ctx->cudnn_handle, &alpha, cch.filter_desc, wblock->data(),
+            cch.y_desc, dyblock->data(), cch.conv_desc, cch.bp_data_alg,
+            cch.workspace.block()->mutable_data(),
+            cch.workspace_count * sizeof(float), &beta, cch.x_desc,
+            dxblock->mutable_data());
+      },
+      {dy.block(), W.block()}, {dx.block(), cch.workspace.block()});
+      /* the lambda expression reads the blocks of tensor dy and w
+       * and writes the blocks of tensor dx and chh.workspace
+       */
+
+  return dx;
+}
+```
+
+## Điểm Chuẩn (Benchmark)
+
+### Trên một node
+
+- Thiết lập thí nghiệm
+  - Model
+    - Sử dụng layer: ResNet50 trong
+      [resnet.py](https://github.com/apache/singa/blob/master/examples/cnn/autograd/resnet_cifar10.py)
+    - Sử dụng model: ResNet50 trong
+      [resnet.py](https://github.com/apache/singa/blob/master/examples/cnn/model/resnet.py)
+  - GPU: NVIDIA RTX 2080Ti
+- Kí hiệu
+  - `s` :giây (second)
+  - `it` : vòng lặp (iteration)
+  - `Mem`:sử dụng bộ nhớ tối đa trong một GPU
+  - `Throughout`:số lượng hình ảnh được xử lý mỗi giây
+  - `Time`:tổng thời gian 
+  - `Speed`:vòng lặp mỗi giây
+  - `Reduction`:tốc độ giảm bộ nhớ sử dụng so với sử dụng layer
+  - `Speedup`: tốc độ tăng tốc so với dev branch
+- Kết quả
+  <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>model: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>model: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>model: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>model:disable 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>model: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>model: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>
+
+### Đa quá trình (Multi processes)
+
+- Thiết lập thí nghiệm
+  - API
+    - Sử dụng Layer: ResNet50 trong
+      [resnet_dist.py](https://github.com/apache/singa/blob/master/examples/cnn/autograd/resnet_dist.py)
+    - Sử dụng Model: ResNet50 trong
+      [resnet.py](https://github.com/apache/singa/blob/master/examples/cnn/model/resnet.py)
+  - GPU: NVIDIA RTX 2080Ti \* 2
+  - MPI: hai quá trình MPI trên một node
+- Kí hiệu: như trên
+- kết quả
+  <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>model: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>model: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>model: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>model: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>model: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>model: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>
+
+### Kết Luận
+
+- Training với computational graph giúp giảm đáng kể khối bộ nhớ.
+- Hiện tại, tốc độ có cải thiện một chút. Nhiều tối ưu hoá có thể được thực hiện giúp tăng hiệu quả. 
diff --git a/docs-site/docs_viet/half-precision.md b/docs-site/docs_viet/half-precision.md
new file mode 100644
index 0000000..93f7f58
--- /dev/null
+++ b/docs-site/docs_viet/half-precision.md
@@ -0,0 +1,101 @@
+---
+id: half-precision
+title: Half Precision
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+Half precision training mang lại các lợi ích:
+- sử dụng ít bộ nhớ GPU, hỗ trợ network lớn hơn.
+- training nhanh hơn. 
+
+## Loại dữ liệu Half
+
+### Định nghĩa dữ liệu Half
+Theo tiêu chuẩn IEEE 754 chỉ rõ binary16 có các
+ [định dạng](https://en.wikipedia.org/wiki/Half-precision_floating-point_format) sau:
+Sign bit: 1 bit
+Exponent width: 5 bits
+Significand precision: 11 bits (lưu trữ chính xác 10)
+
+### Xử lý dữ liệu Half
+Tải dữ liệu ở dạng fp32 và dễ dàng đổi sang fp16 bằng casting.
+```python
+>>> from singa import tensor, device
+>>> dev = device.create_cuda_gpu()
+>>> x = tensor.random((2,3),dev)
+>>> x
+[[0.7703407  0.42764223 0.5872884 ]
+ [0.78362167 0.70469785 0.64975065]], float32
+>>> y = x.as_type(tensor.float16)
+>>> y
+[[0.7705 0.4277 0.5874]
+ [0.7837 0.7046 0.65  ]], float16
+```
+
+Các chương trình cơ bản được hỗ trợ với fp16.
+```python
+>>> y+y
+[[1.541  0.8555 1.175 ]
+ [1.567  1.409  1.3   ]], float16
+```
+
+## Training Half
+
+### Training Half qua 3 bước
+Training theo half precision được thực hiện đơn giản qua ba bước:
+1. Tải dữ liệu và chuyển đổi sang half
+2. Chọn loại dữ liệu cho optimizer
+3. Train model như bình thường
+``` python
+# cast dữ liệu đầu vào sang fp16
+x = load_data()
+x = x.astype(np.float16)
+tx = tensor.from_numpy(x)
+
+# tải model
+model = build_model()
+# chuyển optimizer dtype sang fp16
+sgd = opt.SGD(lr=0.1, dtype=tensor.float16)
+
+# train như bình thường
+out, loss = model(tx, ty)
+```
+
+### Ví Dụ
+Tập tin ví dụ `train_cnn.py`, chạy lệnh dưới đây để train theo half.
+```python
+python examples/cnn/train_cnn.py cnn mnist -pfloat16
+```
+
+## Áp Dụng
+
+### Dependency Dạng Half
+Thực hiện theo dạng half được tích hợp ở C++ backend như hỗ trợ dạng half nói chung.
+
+Để chạy trên GPU, `__half` có trên API của Cuda math. Để hỗ trợ chạy `__half` 
+math, cần compile với Nvidia compute arch > 6.0 (Pascal).
+
+### Gia tốc Nvidia Hardware: Tensor Core
+Tensor Core phát hành bởi Nvidia gia tốc half precision và các 
+throughput cho các hàm như GEMM(CuBlas) và convolution(CuDNN). Khi kích hoạt hàm
+Tensor core, có một vài hạn chế về quy mô GEMM, 
+kích thước kênh convolution, phiên bản Cuda, và phiên bản GPU (Turing hoặc mới hơn) v.v.
+
+### Áp dụng Hàm
+Hàm Half cơ bản được thực hiện trong `tensor_math_cuda.h`, bằng cách chuyên môn hoá mô hình thực hiện với half type và áp dụng low level computation.
+
+Ví dụ, hàm GEMM được thực hiện như sau: 
+```c++
+template <>
+void GEMM<half_float::half, lang::Cuda>(const half_float::half alpha,
+                                        const Tensor& A, const Tensor& B,
+                                        const half_float::half beta, Tensor* C,
+                                        Context* ctx) {
+  // ...
+  CUBLAS_CHECK(cublasGemmEx(handle, transb, transa, ncolB, nrowA, ncolA,
+                           alphaPtr, BPtr, Btype, ldb, APtr, Atype, lda,
+                           betaPtr, CPtr, Ctype, ldc, computeType, algo));
+  // ...
+}
+```
\ No newline at end of file
diff --git a/docs-site/docs_viet/history-singa.md b/docs-site/docs_viet/history-singa.md
new file mode 100644
index 0000000..62b4f49
--- /dev/null
+++ b/docs-site/docs_viet/history-singa.md
@@ -0,0 +1,37 @@
+---
+id: history-singa
+title: Lịch Sử Phát Triển SINGA
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+## Lịch Sử Phát Triển
+
+SINGA được phát triển bởi DB System Group tại ĐH Quốc Gia Singapore (NUS) vào năm 2014, hợp tác với nhóm nghiên cứu cơ sở dữ liệu của ĐH Chiết Giang. Vui lòng cite các báo cáo khoa học dưới đây nếu bạn muốn sử dụng SINGA trong nghiên cứu của mình:
+
+- 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.
+  [SINGA: A distributed deep learning platform](http://www.comp.nus.edu.sg/~ooibc/singaopen-mm15.pdf).
+  ACM Multimedia (Open Source Software Competition) 2015
+
+- W. Wang, G. Chen, T. T. A. Dinh, B. C. Ooi, K.-L.Tan, J. Gao, and S. Wang.
+  [SINGA: putting deep learning in the hands of multimedia users](http://www.comp.nus.edu.sg/~ooibc/singa-mm15.pdf).
+  ACM Multimedia 2015.
+
+Rafiki là một mô-đun của SINGA. Vui lòng cite các báo cáo khoa học dưới đây nếu bạn muốn sử dụng Rafiki trong nghiên cứu của mình:
+
+- Wei Wang, Jinyang Gao, Meihui Zhang, Sheng Wang, Gang Chen, Teck Khim Ng, Beng
+  Chin Ooi, Jie Shao, Moaz Reyad.
+  [Rafiki: Machine Learning as an Analytics Service System](http://www.vldb.org/pvldb/vol12/p128-wang.pdf).
+  [VLDB 2019](http://vldb.org/2019/)
+  ([BibTex](https://dblp.org/rec/bib2/journals/pvldb/WangWGZCNOS18.bib)).
+
+Các công ty như [NetEase](http://tech.163.com/17/0602/17/CLUL016I00098GJ5.html),
+[yzBigData](http://www.yzbigdata.com/en/index.html),
+[Shentilium](https://shentilium.com/), [Foodlg](http://www.foodlg.com/) and
+[Medilot](https://medilot.com/technologies) đang sử dụng SINGA cho các ứng dụng của họ.
+
+## Bản Quyền
+
+SINGA được phát hành bởi
+[Bản Quyền Apache phiên bản 2.0](http://www.apache.org/licenses/LICENSE-2.0)
diff --git a/docs-site/docs_viet/how-to-release.md b/docs-site/docs_viet/how-to-release.md
new file mode 100644
index 0000000..69ddc8e
--- /dev/null
+++ b/docs-site/docs_viet/how-to-release.md
@@ -0,0 +1,192 @@
+---
+id: how-to-release
+title: Chuẩn bị trước khi phát hành
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+Đây là hướng dẫn chuẩn bị cho việc phát hành
+[quá trình chuẩn bị trước khi phát hành](http://www.apache.org/dev/release-publishing.html)
+SINGA.
+
+1. Lựa chọn người quản lý cho việc phát hành. Người quản lý chịu trách nhiệm 
+   điều phối quá trình phát hành. Chữ ký của người quản lý (.asc) sẽ được tải lên cùng với
+   bản phát hành. Nggười quản lý tạo KEY (RSA 4096-bit) và tải nó lên 
+   public key server. Để được tin cậy kết nối trên web, người quản lý cần các người dùng Apache khác 
+   chứng thực (signed) Key của mình. Anh ta trước tiên cần yêu cầu mentor giúp chứng thực key. 
+   [Cách tạo Key](http://www.apache.org/dev/release-signing.html)?
+
+2. Kiểm tra bản quyền. [FAQ](https://www.apache.org/legal/src-headers.html#faq-docs);
+   [Các bản SINGA đã phát hành](https://issues.apache.org/jira/projects/SINGA/issues/SINGA-447)
+
+   - Nền tảng code không bao gồm code của bên thứ 3 mà không tương thích với
+     APL;
+   - Các chương trình dependencies phải tương thích với APL. Các licenses giống với GNU là không tương thích;
+   - Các tệp tin nguồn viết bởi chúng tôi PHẢI bao gồm license header của Apache:
+     http://www.apache.org/legal/src-headers.html. Chúng tôi cung cấp script để chạy header trên tất cả các tệp tin. 
+   - Cập nhật tệp tin LICENSE. Nếu code có chứa mã code của một bên thứ 3 trong bản phát hành mà không phải APL, phải nêu rõ ở phần cuối của tập tin THÔNG BÁO.
+
+3. Nâng cấp phiên bản. Kiểm tra mã code và Tài liệu hướng dẫn
+
+   - Quá trình cài đặt không bị lỗi nào.
+   - Bao gồm tests cho những mục nhỏ (nhiều nhất có thể)
+   - Gói chương trình Conda chạy không bị lỗi.
+   - Tài liệu hướng dẫn trực tuyến trên trang web Apache là mới nhất.
+
+4. Chuẩn bị tệp tin RELEASE_NOTES (Lưu ý phát hành). Bao gồm các mục, Giới thiệu, Tính năng nổi bật, Lỗi Bugs, (đường dẫn tới JIRA hoặc Github PR), Những thay đổi, Danh sách thư viện Dependency, Các vấn đề không tương thích. Làm theo
+   [ví dụ](http://commons.apache.org/proper/commons-digester/commons-digester-3.0/RELEASE-NOTES.txt).
+
+5. Gói các phiên bản phát hành. Bản phát hành cần được gói gọn thành:
+   apache-singa-VERSION.tar.gz. Trong bản phát hành không nên chứa bất kì tệp tin dạng binary nào, bao gồm cả các tệp tin git. Tuy nhiên, các tệp CMake compilation dựa vào git tag để tạo số phiên bản; để bỏ qua dependency này, bạn cần cập nhật tệp tin CMakeLists.txt theo cách thủ công để tạo số phiên bản.
+
+   ```
+   # xoá các dòng sau 
+   include(GetGitRevisionDescription)
+   git_describe(VERSION --tags --dirty=-d)
+   string(REGEX REPLACE "^([0-9]+)\\..*" "\\1" VERSION_MAJOR "${VERSION}")
+   string(REGEX REPLACE "^[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${VERSION}")
+   string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${VERSION}")
+
+   # thay đổi số
+   SET(PACKAGE_VERSION 3.0.0)
+   SET(VERSION 3.0.0)
+   SET(SINGA_MAJOR_VERSION 3)  # 0 -
+   SET(SINGA_MINOR_VERSION 0)  # 0 - 9
+   SET(SINGA_PATCH_VERSION 0)  # 0 - 99
+   ```
+
+   Tải gói chương trình lên 
+   [stage repo](https://dist.apache.org/repos/dist/dev/singa/). Cần bao gồm các tệp tin tar,
+   signature, KEY và tệp tin SHA256 checksum. Không sử dụng MD5. Xem chính sách tại
+   [đây](http://www.apache.org/dev/release-distribution#sigs-and-sums). Thư mục
+   stage  cần bao gồm: 
+
+   - apache-singa-VERSION.tar.gz
+   - apache-singa-VERSION.acs
+   - apache-singa-VERSION.SHA256
+
+   Các lệnh để tạo tệp tin và tải chúng lên stage svn repo:
+
+   ```sh
+   # trong singa repo
+   rm -rf .git
+   rm -rf rafiki/*
+   cd ..
+   tar -czvf apache-singa-VERSION.tar.gz  singa/
+
+   mkdir stage
+   cd stage
+   svn co https://dist.apache.org/repos/dist/dev/singa/
+   cd singa
+   # copy tệp tin KEYS từ singa repo sang thư mục này nếu không có
+   cp ../../singa/KEYS .
+   mkdir VERSION
+   # copy tệp tin tar.gz 
+   mv ../../apache-singa-VERSION.tar.gz VERSION/
+   cd VERSION
+   sha512sum apache-singa-VERSION.tar.gz > apache-singa-VERSION.tar.gz.sha512
+   gpg --armor --output apache-singa-VERSION.tar.gz.asc --detach-sig apache-singa-VERSION.tar.gz
+   cd ..
+   svn add VERSION
+   svn commit
+   ```
+
+6) Kêu gọi vote bằng cách gửi email. Xem ví dụ dưới đây. 
+
+   ```
+   To: dev@singa.apache.org
+   Subject: [VOTE] Release apache-singa-X.Y.Z (release candidate N)
+
+   Hi all,
+
+   I have created a build for Apache SINGA 3.1.0, release candidate 2.
+
+   The release note is at
+   https://github.com/apache/singa/blob/master/RELEASE_NOTES.
+
+   The artifacts to be voted on are located here:
+   https://dist.apache.org/repos/dist/dev/singa/3.1.0.rc2/apache-singa-3.1.0.rc2.tar.gz
+    
+   The hashes of the artifacts are as follows:
+   SHA512: 84545499ad36da108c6a599edd1d853f82d331bc03273b5278515554866f0c698e881f956b2eabcb6b29c07fa9fa4ff1add5a777b58db8a6a2362cf383b5c04d 
+
+   Release artifacts are signed with the followingkey:
+   https://dist.apache.org/repos/dist/dev/singa/KEYS
+
+   The signature file is:
+   https://dist.apache.org/repos/dist/dev/singa/3.1.0.rc2/apache-singa-3.1.0.rc2.tar.gz.asc
+
+   The Github tag is at:
+   https://github.com/apache/singa/releases/tag/3.1.0.rc2
+
+   The documentation website is at
+   http://singa.apache.org/docs/next/installation/
+
+   Some examples are available for testing:
+   https://github.com/apache/singa/tree/master/examples
+   ```
+
+Please vote on releasing this package. The vote is open for at least 72 hours
+and passes if a majority of at least three +1 votes are cast.
+
+[ ] +1 Release this package as Apache SINGA X.Y.Z [ ] 0 I don't feel strongly
+about it, but I'm okay with the release [ ] -1 Do not release this package
+because...
+
+Here is my vote: +1
+
+```
+
+7) Sau đó đợi ít nhất 48 giờ để nhận phản hồi. Bất kì PMC, committer hay contributor
+đều có thể kiểm tra các tính năng trước khi phát hành, và đưa ra nhận xét. Mọi người nên kiểm tra trước khi
+đưa ra vote +1. Nếu vote được thông qua, vui lòng gửi email kết quả. Nếu không thì cần lặp lại trình tự từ đầu. 
+
+```
+
+To: dev@singa.apache.org Subject: [RESULT][vote] Release apache-singa-X.Y.Z
+(release candidate N)
+
+Thanks to everyone who has voted and given their comments. The tally is as
+follows.
+
+N binding +1s: <names>
+
+N non-binding +1s: <names>
+
+No 0s or -1s.
+
+I am delighted to announce that the proposal to release Apache SINGA X.Y.Z has
+passed.
+
+````
+
+8) Tải gói chương trình để
+[phân bổ](http://www.apache.org/dev/release-publishing.html#distribution)
+tới https://dist.apache.org/repos/dist/release/singa/.
+
+9) Cập nhật trang Tải (Download) trên website SINGA. Tệp tin tar.gz PHẢI được tải từ mirror, sử dụng closer.cgi script; các tạo tác khác PHẢI được tải từ trang chủ Apache. Xem chi tiết tại 
+[đây](http://www.apache.org/dev/release-download-pages.html). Một vài nhận xét chúng tôi nhận được trong các đợt phát hành trước: "Trang Tải chỉ nên được dẫn tới các bản phát hành chính thức, vì vậy phải bao gồm đường dẫn tới GitHub.", "Đường dẫn tới KEYS, sigs và
+hashes không nên sử dụng dist.apache.org; mà nên dùng 
+https://www.apache.org/dist/singa/...;", "Và bạn chỉ cần một đường dẫn tới KEYS,
+và cần có hướng dẫn cách sử dụng KEYS + sig hay hash để chứng thực hoàn tất việc tải."
+
+10) Xoá tag RC và tập hợp gói conda packages.
+
+11) Xuất bản thông tin phát hành.
+
+ ```
+ To: announce@apache.org, dev@singa.apache.org
+ Subject: [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 at: http://singa.apache.org/downloads.html
+ 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}
+ ```
+````
diff --git a/docs-site/docs_viet/install-win.md b/docs-site/docs_viet/install-win.md
new file mode 100644
index 0000000..66521c9
--- /dev/null
+++ b/docs-site/docs_viet/install-win.md
@@ -0,0 +1,386 @@
+---
+id: install-win
+title: Cách cài SINGA trên Windows
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+Quá trình cài đặt SINGA từ nguồn sử dụng Microsoft Windows bao gồm bốn bước:
+cài đặt thư viện dependencies, cài SINGA từ nguồn, (không bắt buộc) cài đặt python module
+và (không bắt buộc) chạy thử unit tests.
+
+## Cài đặt thư viện dependencies
+
+Bạn có thể tạo một thư mục để cài đặt thư viện dependencies.
+
+Các thư viện dependencies bao gồm:
+
+- Compiler và IDE
+  - Visual Studio. Công cụ biên tập mã này miễn phí và có thể được dùng trong việc cài đặt SINGA.
+    https://www.visualstudio.com/
+- CMake
+  - Có thể tải về qua http://cmake.org/
+  - Đảm bảo đường dẫn khả thi của cmake nằm trong đường dẫn chương trình system path, hoặc sử dụng đường dẫn đầy đủ khi gọi hàm cmake.
+- SWIG
+  - Có thể tải từ http://swig.org/
+  - Đảm bảo đường dẫn khả thi của swig nằm trong đường dẫn chương trình system path, hoặc sử dụng đường dẫn đầy đủ khi gọi hàm swig. Sử dụng các phiên bản cập nhật như 3.0.12.
+
+- Protocol Buffers
+  - Tải các phiên bản phù hợp như 2.6.1:
+    https://github.com/google/protobuf/releases/tag/v2.6.1 .
+  - Tải cả hai tệp protobuf-2.6.1.zip và protoc-2.6.1-win32.zip .
+  - Giải nén cả hai tệp trên trong thư mục thư viện dependencies. Thêm đường dẫn khả thi cho protoc
+    vào system path, hoặc sử dụng đường dẫn đầy đủ khi gọi hàm này. 
+  - Mở Visual Studio solution có thể tìm trong thư mục vsproject.
+  - Thay đổi cài đặt thiết lập Settings tới Release and x64.
+  - Cài đặt libprotobuf project.
+- Openblas
+  - Tải phiên bản nguồn phù hợp như 0.2.20 từ
+    http://www.openblas.net
+  - Giải nén nguồn trong thư mục thư viện dependencies.
+  - Nếu bạn không có chương trình Perl, tải perl environment như
+    Strawberry Perl (http://strawberryperl.com/)
+  - Cài đặt Visual Studio solution bằng lệnh sau từ thư mục nguồn: 
+
+  ```bash
+  cmake -G "Visual Studio 15 2017 Win64"
+  ```
+
+  - Mở Visual Studio solution và thay đổi cấu hình cài đặt cho Release and
+    x64.
+  - Cài libopenblas project
+
+- Google glog
+  - Tải phiên bản phù hợp như 0.3.5 từ
+    https://github.com/google/glog/releases
+  - Giải nén nguồn trong thư mục thư viện dependencies.
+  - Mở Visual Studio solution.
+  - Thay đổi cài đặt thiết lập Settings tới Release and x64.
+  - Cài đặt libglog project
+
+## Cài SINGA từ nguồn
+
+- Tải code nguồn của SINGA
+- Cấu tạo các tệp protobuf:
+
+  - Tới thư mục src/proto
+
+  ```shell
+  mkdir python_out
+  protoc.exe *.proto --python_out python_out
+  ```
+
+- Tạo swig interfaces cho C++ và Python: Tới mục src/api
+
+  ```shell
+  swig -python -c++ singa.i
+  ```
+
+- Tạo Visual Studio solution cho SINGA: Đi tới thư mục nguồn SINGA
+
+  ```shell
+  mkdir build
+  cd build
+  ```
+
+- Gọi hàm cmake và thêm đường dẫn vào trong system của bạn, tương tự như ví dụ sau: 
+
+  ```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" ^
+    ..
+  ```
+
+- Mở generated solution trong Visual Studio
+- Thay đổi cài đặt thiết lập Settings tới Release and x64
+- Thêm tệp tin singa_wrap.cxx từ src/api tới singa_objects project
+- Trong singa_objects project, mở Additional Include Directories.
+- Thêm Python bao gồm đường dẫn 
+- Thêm numpy bao gồm đường dẫn 
+- Thêm protobuf bao gồm đường dẫn 
+- Trong định nghĩa preprocessor của singa_objects project, thêm USE_GLOG
+- Sử dụng singa_objects project
+
+- Trong singa project:
+
+  - thêm singa_wrap.obj vào Thư viện Object
+  - đổi tên mục target thành \_singa_wrap
+  - đổi định dạng tệp target thành .pyd
+  - đổi định dạng cấu hình sang Dynamic Library (.dll)
+  - đi tới Additional Library Directories và thêm đường dẫn vào các thư viện python, openblas,
+    protobuf và glog
+  - đi tới các thư viện Dependencies bổ sung để thêm libopenblas.lib, libglog.lib và
+    libprotobuf.lib
+
+- tạo singa project
+
+## Cài đặt Python module
+
+- Đổi `_singa_wrap.so` thành `_singa_wrap.pyd` trong build/python/setup.py
+- Copy các tệp tin trong `src/proto/python_out` sang `build/python/singa/proto`
+
+- Không bắt buộc, tạo và kích hoạt virtual environment:
+
+  ```shell
+  mkdir SingaEnv
+  virtualenv SingaEnv
+  SingaEnv\Scripts\activate
+  ```
+
+- tới thư mục build/python và chạy:
+
+  ```shell
+  python setup.py install
+  ```
+
+- Sử dụng \_singa_wrap.pyd, libglog.dll và libopenblas.dll bằng cách thêm chúng vào đường dẫn hoặc copy chúng vào thư mục gói chương trình singa trong gói python site-packages
+
+- Xác nhận SINGA đã được cài đặt bằng cách chạy:
+
+  ```shell
+  python -c "from singa import tensor"
+  ```
+
+Tham khảo video quá trình cài đặt tại đây: 
+
+[![youtube video](https://img.youtube.com/vi/cteER7WeiGk/0.jpg)](https://www.youtube.com/watch?v=cteER7WeiGk)
+
+## Chạy Unit Tests
+
+- Trong thư mục test, tạo Visual Studio solution:
+
+  ```shell
+  cmake -G "Visual Studio 15 2017 Win64"
+  ```
+
+- Mở generated solution trong Visual Studio.
+
+- Thay đổi cài đặt thiết lập Settings tới Release and x64.
+
+- Tạo glog project.
+
+- Trong mục test_singa project:
+
+  - Thêm USE_GLOG vào Định nghĩa Preprocessor.
+  - Trong Additional Include Directories, thêm đường dẫn của GLOG_INCLUDE_DIR,
+    CBLAS_INCLUDE_DIR và Protobuf_INCLUDE_DIR đã được dùng ở bước 2 bên trên. 
+    Đồng thời tạo và tạo/bao gồm các thư mục.
+  - Đi tới Additional Library Directories và thêm đường dẫn vào thư viện openblas, protobuf
+    và glog. Thêm build/src/singa_objects.dir/Release.
+  - Tới Thư viện Dependencies bổ sung và thêm libopenblas.lib, libglog.lib và
+    libprotobuf.lib. Sửa tên của hai thư viện: gtest.lib và
+    singa_objects.lib.
+
+- Cài test_singa project.
+
+- Sử dụng libglog.dll và libopenblas.dll bằng cách thêm chúng vào đường dẫn hoặc copy chúng vào thư mục test/release. 
+
+- Tiến hành unit tests bằng cách
+
+  - Từ dòng lệnh:
+
+  ```shell
+  test_singa.exe
+  ```
+
+  - Từ Visual Studio:
+    - ấn chuột phải tại test_singa project và chọn 'Set as StartUp Project'.
+    - Từ mục Debug menu, chọn 'Start Without Debugging'
+
+Tham khảo video hướng dẫn chạy unit tests tại đây:
+
+[![youtube video](https://img.youtube.com/vi/393gPtzMN1k/0.jpg)](https://www.youtube.com/watch?v=393gPtzMN1k)
+
+## Cài đặt hỗ trợ GPU với CUDA
+
+Trong mục này, chúng tôi sẽ mở rộng các bước phía trên để sử dụng GPU. 
+
+### Cài đặt thư viện Dependencies
+
+Ngoài các thư viện dependencies ở mục 1 phía trên, chúng ta cần: 
+
+- CUDA
+
+  Tải phiên bản phù hợp như 9.1 từ
+  https://developer.nvidia.com/cuda-downloads . Đảm bảo bạn cài đặt Visual
+  Studio integration module.
+
+- cuDNN
+
+  Tải phiên bản phù hợp như 7.1 từ
+  https://developer.nvidia.com/cudnn
+
+- cnmem:
+
+  - Tải phiên bản mới nhất tại  https://github.com/NVIDIA/cnmem
+  - Tạo Visual Studio solution:
+
+  ```shell
+  cmake -G "Visual Studio 15 2017 Win64"
+  ```
+
+  - Mở generated solution trong Visual Studio.
+  - Thay đổi cài đặt thiết lập Settings tới Release and x64.
+  - Tạo cnmem project.
+
+### Cài SINGA từ nguồn
+
+- Gọi hàm cmake và thêm đường dẫn vào trong system của bạn, tương tự như ví dụ sau: 
+  ```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 ^
+    ..
+  ```
+
+* Tạo swig interfaces cho C++ và Python: Tới mục src/api
+
+  ```shell
+  swig -python -c++ singa.i
+  ```
+
+* Mở generated solution trong Visual Studio
+
+* Thay đổi cài đặt thiết lập Settings tới Release and x64.
+
+#### Tạo singa_objects
+
+- Thêm tệp tin singa_wrap.cxx từ src/api tới singa_objects project
+- Trong singa_objects project, mở Additional Include Directories.
+- Thêm Python bao gồm đường dẫn
+- Thêm numpy bao gồm đường dẫn
+- Thêm protobuf bao gồm đường dẫn
+- Bổ sung bao gồm đường dẫn cho CUDA, cuDNN và cnmem
+- Trong định nghĩa preprocessor của singa_objects project, thêm USE_GLOG,
+  USE_CUDA và USE_CUDNN. Xoá DISABLE_WARNINGS.
+- Tạo singa_objects project
+
+#### Tạo singa-kernel
+
+- Tạo một Visual Studio project mới dưới dạng "CUDA 9.1 Runtime". Đặt tên dạng như singa-kernel.
+- project này chứa sẵn một tệp tin là kernel.cu. Xoá tệp tin này khỏi project.
+- Thêm tệp tin này: src/core/tensor/math_kernel.cu
+- Trong mục cài đặt project:
+
+  - Đặt Platform Toolset sang dạng "Visual Studio 2015 (v140)"
+  - Đổi Configuration Type sang " Static Library (.lib)"
+  - Trong mục Include Directories, thêm vào build/include.
+
+- Tạo singa-kernel project
+
+#### Cài đặt singa
+
+- Trong singa project:
+
+  - thêm singa_wrap.obj vào Object Libraries
+  - đổi tên target thành \_singa_wrap
+  - đổi định dạng target sang .pyd
+  - đổi định dạng cấu hình sang Dynamic Library (.dll)
+  - đi tới Additional Library Directories và thêm đường dẫn vào các thư viện python, openblas,
+    protobuf và glog
+  - thêm các đường dẫn thư viện cho singa-kernel, cnmem, cuda và cudnn.
+  - đi tới các thư viện Dependencies bổ sung để thêm libopenblas.lib, libglog.lib và
+    libprotobuf.lib
+  - Đồng thời thêm: singa-kernel.lib, cnmem.lib, cudnn.lib, cuda.lib , cublas.lib,
+    curand.lib và cudart.lib.
+
+- tạo singa project
+
+### Cài đặt Python module
+
+- Đổi tên  \_singa_wrap.so sang \_singa_wrap.pyd trong mục build/python/setup.py
+- Copy các tệp tin trong src/proto/python_out sang build/python/singa/proto
+
+- Không bắt buộc, tạo và kích hoạt virtual environment:
+
+  ```shell
+  mkdir SingaEnv
+  virtualenv SingaEnv
+  SingaEnv\Scripts\activate
+  ```
+
+- tới thư mục build/python và chạy:
+
+  ```shell
+  python setup.py install
+  ```
+- Sử dụng \_singa_wrap.pyd, libglog.dll, libopenblas.dll, cnmem.dll, CUDA Runtime
+  (e.g. cudart64_91.dll) và cuDNN (e.g. cudnn64_7.dll) bằng cách thêm chúng vào đường dẫn hoặc copy chúng vào thư mục gói chương trình singa trong gói python site-packages
+
+- Xác nhận SINGA đã được cài đặt bằng cách chạy:
+
+  ```shell
+  python -c "from singa import device; dev = device.create_cuda_gpu()"
+  ```
+
+Tham khảo video hướng dẫn cho mục này tại đây: 
+
+[![youtube video](https://img.youtube.com/vi/YasKVjRtuDs/0.jpg)](https://www.youtube.com/watch?v=YasKVjRtuDs)
+
+### Run Unit Tests
+
+- Trong thư mục tests, tạo Visual Studio solution:
+
+  ```shell
+  cmake -G "Visual Studio 15 2017 Win64"
+  ```
+
+- Mở solution được tạo trong Visual Studio, hoặc thêm project vào singa
+  solution đã được tạo ở bước 5.2
+
+- Thay đổi cài đặt thiết lập Settings tới Release and x64.
+
+- Tạo glog project.
+
+- Trong test_singa project:
+
+  - Thêm USE_GLOG; USE_CUDA; USE_CUDNN vào Định Nghĩa Preprocessor.
+  - Trong Thư viện Dependencies bổ sung, thêm đường dẫn của GLOG_INCLUDE_DIR,
+    CBLAS_INCLUDE_DIR và Protobuf_INCLUDE_DIR đã được sử dụng tại bước 5.2
+    ở trên. Và thêm build, build/include, CUDA và cuDNN bao gồm thư mục.
+  - Tới Thư viện Dependencies bổ sung và thêm đường dẫn của thư viện openblas, protobuf
+    và glog. Và thêm đường dẫn thư viện của build/src/singa_objects.dir/Release,
+    singa-kernel, cnmem, CUDA và cuDNN.
+  - Tới Thư viện Dependencies bổ sung và thêm libopenblas.lib; libglog.lib;
+    libprotobuf.lib; cnmem.lib; cudnn.lib; cuda.lib; cublas.lib; curand.lib;
+    cudart.lib; singa-kernel.lib. Sửa tên của hai thư viện: gtest.lib và
+    singa_objects.lib.
+
+* Tạo test_singa project.
+
+* Sử dụng libglog.dll, libopenblas.dll, cnmem.dll, cudart64_91.dll và
+  cudnn64_7.dll bằng cách thêm chúng vào đường dẫn hoặc copy chúng vào thư mục test/release.
+  
+
+* Tiến hành unit tests bằng cách:
+
+  - Từ dòng lệnh:
+
+    ```shell
+    test_singa.exe
+    ```
+
+  - Từ Visual Studio:
+    - ấn chuột phải tại test_singa project và chọn 'Set as StartUp Project'.
+    - Từ mục Debug menu, chọn 'Start Without Debugging'
+
+Tham khảo video hướng dẫn chạy unit tests tại đây:
+
+[![youtube video](https://img.youtube.com/vi/YOjwtrvTPn4/0.jpg)](https://www.youtube.com/watch?v=YOjwtrvTPn4)
diff --git a/docs-site/docs_viet/installation.md b/docs-site/docs_viet/installation.md
new file mode 100644
index 0000000..2eb8c4f
--- /dev/null
+++ b/docs-site/docs_viet/installation.md
@@ -0,0 +1,168 @@
+---
+id: installation
+title: Cài đặt
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+## Sử dụng Conda
+
+Conda là gói quản lý chương trình cho Python, CPP và các phần mềm khác. 
+
+Hiện nay SINGA có gói conda packages dùng cho Linux và MacOSX.
+[Miniconda3](https://conda.io/miniconda.html) được khuyến khích dùng với SINGA. 
+Sau khi cài đặt miniconda, thực hiện các lệnh sau để cài đặt
+SINGA.
+
+1. Cho CPU
+   [![Mở trên Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1Ntkhi-Z6XTR8WYPXiLwujHd2dOm0772V?usp=sharing)
+
+```shell
+$ conda install -c nusdbsystem -c conda-forge singa-cpu
+```
+
+2. GPU với CUDA và cuDNN (yêu cầu CUDA driver >=384.81)
+   [![Mở trên Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1do_TLJe18IthLOnBOsHCEe-FFPGk1sPJ?usp=sharing)
+
+```shell
+$ conda install -c nusdbsystem -c conda-forge singa-gpu
+```
+
+3. Cài đặt SINGA với phiên bản cụ thể. Câu lệnh sau cho danh sách tất cả gói chương trình SINGA đang hoạt động.
+
+```shell
+$ conda search -c nusdbsystem singa
+
+Loading channels: done
+# Name                       Version           Build  Channel
+singa                      3.1.0.rc2        cpu_py36  nusdbsystem
+singa                      3.1.0.rc2 cudnn7.6.5_cuda10.2_py36  nusdbsystem
+singa                      3.1.0.rc2 cudnn7.6.5_cuda10.2_py37  nusdbsystem
+```
+
+<!--- > Lưu ý rằng việc sử dụng nightly built images không được khuyến khích ngoại trừ trong quá trình phát triển và kiểm định. Khuyến khích việc sử dụng phiên bản phát hành ổn định. -->
+
+Dùng câu lệnh sau để cài đặt một phiên bản SINGA cụ thể,
+
+```shell
+$ conda install -c nusdbsystem -c conda-forge singa=X.Y.Z=cpu_py36
+```
+
+Nếu không có lỗi khi chạy
+
+```shell
+$ python -c "from singa import tensor"
+```
+
+thì bạn đã cài đặt SINGA thành công. 
+
+## Sử dụng Pip
+
+1. Cho CPU
+   [![Mở trên Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/17RA056Brwk0vBQTFaZ-l9EbqwADO0NA9?usp=sharing)
+
+```bash
+pip install singa -f http://singa.apache.org/docs/next/wheel-cpu.html --trusted-host singa.apache.org
+```
+
+Bạn có thể cài đặt một phiên bản SINGA cụ thể sử dụng `singa==<version>`, thay thông tin
+`<version>`, v.d, `3.1.0`. Xem danh sách các phiên bản SINGA đang hoạt động ở đường dẫn. 
+
+Để cài đặt phiên bản phát triển mới nhất, thay đường dẫn bằng 
+http://singa.apache.org/docs/next/wheel-cpu-dev.html
+
+2. GPU với CUDA và cuDNN
+   [![Mở trên Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1W30IPCqj5fG8ADAQsFqclaCLyIclVcJL?usp=sharing)
+
+```bash
+pip install singa -f http://singa.apache.org/docs/next/wheel-gpu.html --trusted-host singa.apache.org
+```
+
+Bạn có thể thiết lập phiên bản SINGA và CUDA, như
+`singa==3.1.0+cuda10.2`. Danh sách tổ hợp phiên bản SINGA với CUDA được cung cấp trong đường dẫn.
+
+Để cài đặt phiên bản phát triển mới nhất, thay đường dẫn bằng 
+http://singa.apache.org/docs/next/wheel-gpu-dev.html
+
+Lưu ý: phiên bản Python của Python environment trong máy của bạn sẽ được sử dụng để tìm gói wheel tương ứng. Ví dụ, nếu bạn sử dụng Python 3.6, thì gói wheel kết cấu trong Python 3.6 sẽ được pip chọn để cài đặt. 
+Thực tế, tên của tệp tin wheel bao gồm phiên bản SINGA, phiên bản CUDA và Python. Vì thế, `pip` biết tệp tin wheel nào để tải và cài đặt. 
+
+Tham khảo chú thích ở phần đầu của tệp tin `setup.py` về cách tạo các gói
+wheel packages.
+
+## Sử dụng Docker
+
+Cài đặt Docker vào máy chủ local theo
+[hướng dẫn](https://docs.docker.com/install/). Thêm người dùng vào
+[nhóm docker](https://docs.docker.com/install/linux/linux-postinstall/) để chạy câu lệnh docker mà không cần dùng `sudo`.
+
+1. Cho CPU.
+
+```shell
+$ docker run -it apache/singa:X.Y.Z-cpu-ubuntu16.04 /bin/bash
+```
+
+2. Với GPU. Cài đặt 
+   [Nvidia-Docker](https://github.com/NVIDIA/nvidia-docker) sau khi cài
+   Docker.
+
+```shell
+$ nvidia-docker run -it apache/singa:X.Y.Z-cuda9.0-cudnn7.4.2-ubuntu16.04 /bin/bash
+```
+
+3. Xem danh sách toàn bộ SINGA Docker images (tags), tại
+   [trang web docker hub](https://hub.docker.com/r/apache/singa/). Với mỗi docker
+   image, tag được đặt tên theo 
+
+```shell
+version-(cpu|gpu)[-devel]
+```
+
+| Tag       | Mô tả                      | Ví dụ giá trị                                                                                                                                                             |
+| --------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `phiên bản` | phiên bản SINGA                    | '2.0.0-rc0', '2.0.0', '1.2.0'                                                                                                                                             |
+| `cpu`     | image không thể sử dụng cho GPUs     | 'cpu'                                                                                                                                                                     |
+| `gpu`     | image có thể sử dụng cho Nvidia GPUs | 'gpu', or 'cudax.x-cudnnx.x' e.g., 'cuda10.0-cudnn7.3'                                                                                                                    |
+| `devel`   | chỉ số phát triển       | nếu không có, gói SINGA Python package chỉ được cài đặt cho runtime; nếu có, environment cũng được tạo ra, bạn có thể kết cấu lại SINGA từ nguồn tại '/root/singa' |
+| `OS`      | cho biết phiên bản OS       | 'ubuntu16.04', 'ubuntu18.04'                                                                                                                                              |
+
+## Từ nguồn
+
+Bạn có thể [tạo và cài đặt SINGA](build.md) từ mã code nguồn sử dụng các công cụ tạo chương trình hoặc conda-build, trên hệ điều hành máy chủ cục bộ (local host os) hay trong Docker container.
+
+## Câu Hỏi Thường Gặp
+
+- Q: Lỗi khi chạy `from singa import tensor`
+
+  A: Kiểm tra chi tiết lỗi từ
+
+  ```shell
+  python -c  "from singa import _singa_wrap"
+  # tới thưu mục chứa _singa_wrap.so
+  ldd path to _singa_wrap.so
+  python
+  >> import importlib
+  >> importlib.import_module('_singa_wrap')
+  ```
+
+  Thư mục chứa `_singa_wrap.so` thường ở
+  `~/miniconda3/lib/python3.7/site-packages/singa`. Thông thường, lỗi này được gây ra bởi sự không tương thích hoặc thiếu các thư viện dependent libraries, v.d cuDNN hay
+  protobuf. Cách giải quyết là tạo một virtual environment mới và cài đặt SINGA trong environment đó, v.d,
+
+  ```shell
+  conda create -n singa
+  conda activate singa
+  conda install -c nusdbsystem -c conda-forge singa-cpu
+  ```
+
+- Q: Khi sử dụng virtual environment, mỗi khi tôi cài SINGA, numpy cũng tự động bị cài lại. Tuy nhiên, numpy không được sử dụng khi chạy `import numpy`
+
+  A: Lỗi này có thể do biến `PYTHONPATH` environment lẽ ra phải để trống trong khi bạn sử dụng virtual environment để tránh mâu thuẫn với đường dẫn của virtual environment.
+
+- Q: Khi chạy SINGA trên Mac OS X, tôi gặp lỗi "Fatal Python error:
+  PyThreadState_Get: no current thread Abort trap: 6"
+
+  A: Lỗi này thường xảy ra khi bạn có nhiều phiên bản Python trong hệ thống, v.d, bản của OS và bản được cài bởi Homebrew.
+  Bản Python dùng cho SINGA phải giống với bản Python interpreter. Bạn có thể kiểm tra interpreter của mình bằng  `which python` và kiểm tra bản Python dùng cho SINGA
+  qua `otool -L <path to _singa_wrap.so>`. Vấn đề này được giải quyết nếu
+  SINGA được cài qua conda.
diff --git a/docs-site/docs_viet/issue-tracking.md b/docs-site/docs_viet/issue-tracking.md
new file mode 100644
index 0000000..af84849
--- /dev/null
+++ b/docs-site/docs_viet/issue-tracking.md
@@ -0,0 +1,11 @@
+---
+id: issue-tracking
+title: Theo Dõi Vấn Đề
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+SINGA sử dụng [JIRA](https://issues.apache.org/jira/browse/singa) để quản lý các vấn đề bao gồm lỗi 
+(bugs), các tính năng mới và thảo luận.
+
+Chúng tôi đang trong quá trình chuyển sang mục [Github Issues](https://github.com/apache/singa/issues).
diff --git a/docs-site/docs_viet/mail-lists.md b/docs-site/docs_viet/mail-lists.md
new file mode 100644
index 0000000..f2a2fed
--- /dev/null
+++ b/docs-site/docs_viet/mail-lists.md
@@ -0,0 +1,14 @@
+---
+id: mail-lists
+title: Danh sách liên hệ của Dự Án
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+Có một danh sách liên hệ được thiết lập cho dự án này. Mỗi danh sách bao gồm đường dẫn để đăng kí(subscribe), huỷ đăng kí (unsubscribe), và đường dẫn tới kho lưu trữ.
+
+| Tên        | Loại                                 | Đăng kí                                                        | Huỷ Đăng kí                                                          | Lưu Trữ                                                                             |
+| ----------- | ------------------------------------ | ---------------------------------------------------------------- | -------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
+| Phát triển | <dev@singa.incubator.apache.org>     | [Đăng kí](mailto:dev-subscribe@singa.incubator.apache.org)     | [Huỷ đăng kí](mailto:dev-unsubscribe@singa.incubator.apache.org.)    | [mail-archives.apache.org](http://mail-archives.apache.org/mod_mbox/singa-dev/)     |
+| Đóng góp     | <commits@singa.incubator.apache.org> | [Đăng kí](mailto:commits-subscribe@singa.incubator.apache.org) | [Huỷ đăng kí](mailto:commits-unsubscribe@singa.incubator.apache.org) | [mail-archives.apache.org](http://mail-archives.apache.org/mod_mbox/singa-commits/) |
+| Bảo mật    | <security@singa.apache.org>          | private                                                          | private                                                              | private                                                                             |
diff --git a/docs-site/docs_viet/onnx.md b/docs-site/docs_viet/onnx.md
new file mode 100644
index 0000000..2be7b52
--- /dev/null
+++ b/docs-site/docs_viet/onnx.md
@@ -0,0 +1,376 @@
+---
+id: onnx
+title: ONNX
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+[ONNX](https://onnx.ai/) là một định dạng đại diện mở dùng trong các model của machine learning, cho phép nhà phát triển AI sử dụng các models trên các libraries và công cụ khác nhau. SINGA hỗ trợ tải các models dạng ONNX trong training và inference, và lưu các models ở dạng ONNX với SINGA APIs (e.g., [Module](./module)).
+
+SINGA đã được thử nghiệm với 
+[phiên bản sau](https://github.com/onnx/onnx/blob/master/docs/Versioning.md) của ONNX.
+
+| Phiên bản ONNX | Phiên bản định dạng tệp tin | Opset phiên bản ai.onnx | Opset phiên bản ai.onnx.ml | Opset phiên bản ai.onnx.training |
+| ------------ | ------------------- | --------------------- | ------------------------ | ------------------------------ |
+| 1.6.0        | 6                   | 11                    | 2                        | -                              |
+
+## Sử dụng chung
+
+### Tải một ONNX Model trong SINGA
+
+Sau khi tải một ONNX model từ disk qua `onnx.load`, bạn chỉ cần cập nhật batch-size của input sử dụng `tensor.PlaceHolder` sau SINGA v3.0, shape của internal tensors sẽ tự động được tạo ra.
+
+Sau đó, bạn định nghĩa một class thừa hưởng từ `sonnx.SONNXModel` và thực hiện hai phương pháp `forward` cho quá trình forward và `train_one_batch` cho quá trình training.
+Sau khi gọi hàm `model.compile`, hàm SONNX sẽ lặp lại và dịch tất cả các nodes trong phạm vi graph của ONNX model sang các hàm SINGA, tải tất cả weights đã lưu trữ và tạo ra shape của từng tensor trung gian.
+
+```python3
+import onnx
+from singa import device
+from singa import sonnx
+
+class MyModel(sonnx.SONNXModel):
+
+    def __init__(self, onnx_model):
+        super(MyModel, self).__init__(onnx_model)
+
+    def forward(self, *x):
+        y = super(MyModel, self).forward(*x)
+        # Since SINGA model returns the output as a list,
+        # if there is only one output,
+        # you just need to take the first element.
+        return y[0]
+
+    def train_one_batch(self, x, y):
+        pass
+
+model_path = "PATH/To/ONNX/MODEL"
+onnx_model = onnx.load(model_path)
+
+# convert onnx model into SINGA model
+dev = device.create_cuda_gpu()
+x = tensor.PlaceHolder(INPUT.shape, device=dev)
+model = MyModel(onnx_model)
+model.compile([x], is_train=False, use_graph=True, sequential=True)
+```
+
+### Inference với SINGA model
+
+Sau khi tạo models, bạn có thể tiến hành inference bằng cách gọi hàm `model.forward`. Đầu vào và đầu ra phải ở dạng phiên bản của SINGA `Tensor`.
+
+```python3
+x = tensor.Tensor(device=dev, data=INPUT)
+y = model.forward(x)
+```
+
+### Lưu model của SINGA dưới dạng ONNX 
+
+Với hàm tensors đầu vào và đầu ra được tạo ra bởi các hàm của model, bạn có thể truy nguyên đến tất cả các hàm nội bộ. Bởi vậy, một model SINGA được xác định bởi tensors đầu vào và đầu ra. Để biến một model SINGA sang dạng ONNX, bạn chỉ cần cung cấp danh sách tensor đầu vào và đầu ra. 
+
+```python3
+# x is the input tensor, y is the output tensor
+sonnx.to_onnx([x], [y])
+```
+
+### Training lại với model ONNX
+
+Để train (hay luyện) một model ONNX sử dụng SINGA, bạn cần thực hiện
+`train_one_batch` từ `sonnx.SONNXModel` và đánh dấu `is_train=True` khi gọi hàm `model.compile`.
+
+```python3
+from singa import opt
+from singa import autograd
+
+class MyModel(sonnx.SONNXModel):
+
+    def __init__(self, onnx_model):
+        super(MyModel, self).__init__(onnx_model)
+
+    def forward(self, *x):
+        y = super(MyModel, self).forward(*x)
+        return y[0]
+
+    def train_one_batch(self, x, y, dist_option, spars):
+        out = self.forward(x)
+        loss = autograd.softmax_cross_entropy(out, y)
+        if dist_option == 'fp32':
+            self.optimizer.backward_and_update(loss)
+        elif dist_option == 'fp16':
+            self.optimizer.backward_and_update_half(loss)
+        elif dist_option == 'partialUpdate':
+            self.optimizer.backward_and_partial_update(loss)
+        elif dist_option == 'sparseTopK':
+            self.optimizer.backward_and_sparse_update(loss,
+                                                      topK=True,
+                                                      spars=spars)
+        elif dist_option == 'sparseThreshold':
+            self.optimizer.backward_and_sparse_update(loss,
+                                                      topK=False,
+                                                      spars=spars)
+        return out, loss
+
+    def set_optimizer(self, optimizer):
+        self.optimizer = optimizer
+
+sgd = opt.SGD(lr=0.005, momentum=0.9, weight_decay=1e-5)
+model.set_optimizer(sgd)
+model.compile([tx], is_train=True, use_graph=graph, sequential=True)
+```
+
+### Transfer-learning một model ONNX
+
+Bạn cũng có thể thêm một vài layers vào phần cuối của ONNX model để làm 
+transfer-learning. Hàm `last_layers` chấp nhận một số nguyên âm để chỉ layer bị cắt ra. Ví dụ, `-1` nghĩa là bị cắt ra sau kết quả cuối cùng (không xoá bớt layer nào) `-2` nghĩa là bị cắt ra sau hai layer cuối cùng.
+
+```python3
+from singa import opt
+from singa import autograd
+
+class MyModel(sonnx.SONNXModel):
+
+    def __init__(self, onnx_model):
+        super(MyModel, self).__init__(onnx_model)
+        self.linear = layer.Linear(1000, 3)
+
+    def forward(self, *x):
+        # cut off after the last third layer
+        # and append a linear layer
+        y = super(MyModel, self).forward(*x, last_layers=-3)[0]
+        y = self.linear(y)
+        return y
+
+    def train_one_batch(self, x, y, dist_option, spars):
+        out = self.forward(x)
+        loss = autograd.softmax_cross_entropy(out, y)
+        if dist_option == 'fp32':
+            self.optimizer.backward_and_update(loss)
+        elif dist_option == 'fp16':
+            self.optimizer.backward_and_update_half(loss)
+        elif dist_option == 'partialUpdate':
+            self.optimizer.backward_and_partial_update(loss)
+        elif dist_option == 'sparseTopK':
+            self.optimizer.backward_and_sparse_update(loss,
+                                                      topK=True,
+                                                      spars=spars)
+        elif dist_option == 'sparseThreshold':
+            self.optimizer.backward_and_sparse_update(loss,
+                                                      topK=False,
+                                                      spars=spars)
+        return out, loss
+
+    def set_optimizer(self, optimizer):
+        self.optimizer = optimizer
+
+sgd = opt.SGD(lr=0.005, momentum=0.9, weight_decay=1e-5)
+model.set_optimizer(sgd)
+model.compile([tx], is_train=True, use_graph=graph, sequential=True)
+```
+
+## ONNX model zoo
+
+[ONNX Model Zoo](https://github.com/onnx/models) là tổ hợp các models ở dạng ONNX, đã được train có kết quả tốt nhất, đóng góp bởi cộng đồng thành viên. SINGA giờ đây đã hỗ trợ một số models CV và NLP. Chúng tôi dự định sẽ sớm hỗ trợ thêm các models khác. 
+
+### Phân loại hình ảnh (Image Classification)
+
+Tổ hợp models này có đầu vào là hình ảnh, sau đó phân loại các đối tượng chính trong hình ảnh thành 1000 mục đối tượng như bàn phím, chuột, bút chì, và các động vật.
+
+| Model Class        | Tham khảo          | Mô tả                                                                                                                                                                                                                               | Đường dẫn                                                                                                                                                    |
+| --------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| <b>[MobileNet](https://github.com/onnx/models/tree/master/vision/classification/mobilenet)</b>      | [Sandler et al.](https://arxiv.org/abs/1801.04381)      | deep neural network nhỏ, nhẹ phù hợp nhất cho điện thoại và ứng dụng hình ảnh đính kèm. <br>Top-5 error từ báo cáo - ~10%                                                                                                               | [![Mở trên Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1HsixqJMIpKyEPhkbB8jy7NwNEFEAUWAf) |
+| <b>[ResNet18](https://github.com/onnx/models/tree/master/vision/classification/resnet)</b>          | [He et al.](https://arxiv.org/abs/1512.03385)           | Mô hình CNN (lên tới 152 layers). Sử dụng liên kết ngắn gọn để đạt độ chính xác cao hơn khi phân loại hình ảnh. <br> Top-5 error từ báo cáo - ~3.6%                                                                                         | [![Mở trên Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1u1RYefSsVbiP4I-5wiBKHjsT9L0FxLm9) |
+| <b>[VGG16](https://github.com/onnx/models/tree/master/vision/classification/vgg)</b>                | [Simonyan et al.](https://arxiv.org/abs/1409.1556)      | Mô hình CNN chuyên sâu (lên tới 19 layers). Tương tự như AlexNet nhưng sử dụng nhiều loại filters cỡ kernel nhỏ hơn mang lại độ chính xác cao hơn khi phân loại hình ảnh. <br>Top-5 từ báo cáo - ~8%                                                  | [![Mở trên Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/14kxgRKtbjPCKKsDJVNi3AvTev81Gp_Ds) |
+| <b>[ShuffleNet_V2](https://github.com/onnx/models/tree/master/vision/classification/shufflenet)</b> | [Simonyan et al.](https://arxiv.org/pdf/1707.01083.pdf) | Mô hình CNN cực kỳ hiệu quả trong sử dụng tài nguyên, được thiết kế đặc biệt cho các thiết bị di động. Mạng lưới thiết kế hệ mô hình sử dụng số liệu trực tiếp như tốc độ, thay vì các số liệu gián tiếp như FLOP. Top-1 error từ báo cáo - ~30.6% | [![Mở trên Colab](https://colab.research.google.com/drive/19HfRu3YHP_H2z3BcZujVFRp23_J5XsuA?usp=sharing)                                                |
+
+Chúng tôi cung cấp ví dụ re-training sử dụng VGG và ResNet, vui lòng xem tại
+`examples/onnx/training`.
+
+### Nhận Diện Đối Tượng (Object Detection)
+
+Các models Object detection nhận diện sự hiện diện của các đối tượng trong một hình ảnh và phân đoạn ra các khu vực của bức ảnh mà đối tượng được nhận diện. 
+
+| Model Class                                                                                                       | Tham khảo                                             | Mô tả                                                                                                                        | Đường dẫn                                                                                                                                                    |
+| ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| <b>[Tiny YOLOv2](https://github.com/onnx/models/tree/master/vision/object_detection_segmentation/tiny_yolov2)</b> | [Redmon et al.](https://arxiv.org/pdf/1612.08242.pdf) | Mô hình CNN thời gian thực cho Nhận diện đối tượng có thể nhận diện 20 loại đối tượng khác nhau. Phiên bản nhỏ của mô hình phức tạp Yolov2. | [![Mở trên Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/11V4I6cRjIJNUv5ZGsEGwqHuoQEie6b1T) |
+
+### Phân tích Khuôn Mặt (Face Analysis)
+
+Các mô hình Nhận Diện Khuôn Mặt xác định và/hoặc nhận diện khuôn mặt người và các trạng thái cảm xúc trong bức ảnh.
+
+| Model Class                                                                                               | Tham khảo                                          | Mô tả                                                                                                                         | Đường dẫn                                                                                                                                                    |
+| --------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| <b>[ArcFace](https://github.com/onnx/models/tree/master/vision/body_analysis/arcface)</b>                 | [Deng et al.](https://arxiv.org/abs/1801.07698)    | Mô hình dựa trên CNN để nhận diện khuôn mặt, học từ các đặc tính khác nhau trên khuôn mặt và tạo ra các embeddings cho hình ảnh khuôn mặt đầu vào. | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1qanaqUKGIDtifdzEzJOHjEj4kYzA9uJC) |
+| <b>[Emotion FerPlus](https://github.com/onnx/models/tree/master/vision/body_analysis/emotion_ferplus)</b> | [Barsoum et al.](https://arxiv.org/abs/1608.01041) | Mô hình CNN chuyên sâu nhận diện cảm xúc được train trên các hình ảnh khuôn mặt.                                                                        | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1XHtBQGRhe58PDi4LGYJzYueWBeWbO23r) |
+
+### Máy Hiểu (Machine Comprehension)
+
+Một dạng của mô hình xử lý ngôn ngữ tự nhiên giúp trả lời câu hỏi trên một đoạn ngôn ngữ cung cấp.
+
+| Model Class                                                                                           | Tham khảo                                                                                                                           | Mô tả                                                                                                       | Đường dẫn                                                                                                                                                                |
+| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| <b>[BERT-Squad](https://github.com/onnx/models/tree/master/text/machine_comprehension/bert-squad)</b> | [Devlin et al.](https://arxiv.org/pdf/1810.04805.pdf)                                                                               | Mô hình này trả lời câu hỏi dựa trên ngữ cảnh của đoạn văn đầu vào.                            | [![Mở trên Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1kud-lUPjS_u-TkDAzihBTw0Vqr0FjCE-)             |
+| <b>[RoBERTa](https://github.com/onnx/models/tree/master/text/machine_comprehension/roberta)</b>       | [Devlin et al.](https://arxiv.org/pdf/1907.11692.pdf)                                                                               | Mô hình transformer-based kích thước lớn, dự đoán ngữ nghĩa dựa trên đoạn văn đầu vào.                       | [![Mở trên Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1F-c4LJSx3Cb2jW6tP7f8nAZDigyLH6iN?usp=sharing) |
+| <b>[GPT-2](https://github.com/onnx/models/tree/master/text/machine_comprehension/gpt-2)</b>           | [Devlin et al.](https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf) | Mô hình ngôn ngữ transformer-based kích thước lớn, đưa ra một đoạn chữ, rồi dự đoán từ tiếp theo. | [![Mở trên Colab](https://colab.research.google.com/drive/1ZlXLSIMppPch6HgzKRillJiUcWn3PiK7?usp=sharing)                                                            |
+
+## Các toán tử (Operators) được hỗ trợ
+
+Chúng tôi hỗ trợ các toán tử sau:
+
+- Acos
+- Acosh
+- Add
+- And
+- Asin
+- Asinh
+- Atan
+- Atanh
+- AveragePool
+- BatchNormalization
+- Cast
+- Ceil
+- Clip
+- Concat
+- ConstantOfShape
+- Conv
+- Cos
+- Cosh
+- Div
+- Dropout
+- Elu
+- Equal
+- Erf
+- Expand
+- Flatten
+- Gather
+- Gemm
+- GlobalAveragePool
+- Greater
+- HardSigmoid
+- Identity
+- LeakyRelu
+- Less
+- Log
+- MatMul
+- Max
+- MaxPool
+- Mean
+- Min
+- Mul
+- Neg
+- NonZero
+- Not
+- OneHot
+- Or
+- Pad
+- Pow
+- PRelu
+- Reciprocal
+- ReduceMean
+- ReduceSum
+- Relu
+- Reshape
+- ScatterElements
+- Selu
+- Shape
+- Sigmoid
+- Sign
+- Sin
+- Sinh
+- Slice
+- Softmax
+- Softplus
+- Softsign
+- Split
+- Sqrt
+- Squeeze
+- Sub
+- Sum
+- Tan
+- Tanh
+- Tile
+- Transpose
+- Unsqueeze
+- Upsample
+- Where
+- Xor
+
+### Các lưu ý đặc biệt cho ONNX backend
+
+- Conv, MaxPool và AveragePool
+
+  Đầu vào phải có shape 1d`(N*C*H)` và 2d(`N*C*H*W`) trong khi `dilation` phải là 1.
+
+- BatchNormalization
+
+  `epsilon` là 1e-05 và không được đổi.
+
+- Cast
+
+  Chỉ hỗ trợ float32 và int32, các dạng khác phải được cast thành hai dạng này.
+
+- Squeeze và Unsqueeze
+
+  Nếu gặp lỗi khi dùng `Squeeze` hay `Unsqueeze` giữa `Tensor` và
+  Scalar, vui lòng báo cho chúng tôi.
+
+- Empty tensor Empty tensor không được chấp nhận trong SINGA.
+
+## Thực hiện
+
+Mã code của SINGA ONNX được đặt trong `python/singa/soonx.py`. Có bốn loại chính, `SingaFrontend`, `SingaBackend`, `SingaRep` và `SONNXModel`.
+`SingaFrontend` qui đổi mô hình SINGA model sang mô hình ONNX model; `SingaBackend` biến mô hình ONNX model sang đối tượng `SingaRep` giúp lưu trữ tất cả các toán tử SINGA operators và
+tensors(tensor trong văn bản này nghĩa là SINGA `Tensor`); `SingaRep` có thẻ chạy giống như mô hình SINGA model. `SONNXModel` tạo ra từ `model.Model` xác định thống nhất API cho SINGA.
+
+### SingaFrontend
+
+Hàm function đầu vào của `SingaFrontend` là `singa_to_onnx_model` cũng được gọi là `to_onnx`. `singa_to_onnx_model` tạo ra mô hình ONNX model, và nó cũng tạo ra một ONNX graph bằng việc 
+sử dụng `singa_to_onnx_graph`.
+
+`singa_to_onnx_graph` chấp nhận đầu ra của mô hình, và lặp lại đệ quy graph của mô hình 
+SINGA model từ đầu ra để gom tất cả toán tử tạo thành một hàng. 
+Tensors đầu vào và trực tiếp, v.d, weights để train, của mô hình SINGA model
+được chọn cùng một lúc. Đầu vào được lưu trong `onnx_model.graph.input`;
+đầu ra được lưu trong `onnx_model.graph.output`; và weights để train được lưu trong `onnx_model.graph.initializer`.
+
+Sau đó toán tử SINGA operator trong hàng được đổi sang từng toán tử ONNX operators.
+`_rename_operators` xác định tên toán tử giữa SINGA và ONNX.
+`_special_operators` xác định function sử dụng để biến đổi toán tử. 
+
+Thêm vào đó, một vài toán tử trong SINGA có các định nghĩa khác với ONNX, chẳng hạn như, 
+ONNX coi một vài thuộc tính của toán tử SINGA operators là đầu vào, vì thế
+`_unhandled_operators` xác định function nào dùng để xử lý toán tử đặc biệt. 
+
+Do dạng bool được coi là dạng int32 trong SINGA, `_bool_operators` địng nghĩa toán tử có thể 
+chuyển sang dạng bool.
+
+### SingaBackend
+
+Function đầu vào của `SingaBackend` là `prepare` kiểm tra phiên bản nào của mô hình
+ONNX model rồi gọi `_onnx_model_to_singa_ops`.
+
+Chức năng của `_onnx_model_to_singa_ops` là để lấy SINGA tensors và operators.
+Các tensors được lưu trong một thư viện, theo tên trong ONNX, và operators được
+lưu trong hàng ở dạng `namedtuple('SingaOps', ['node', 'operator'])`.
+Với mỗi toán tử operator, `node` là một ví dụ từ OnnxNode được dùng để lưu các thông 
+tin cơ bản của ONNX node; `operator` là forward function cho toán tử SINGA;
+
+Bước đầu tiên của `_onnx_model_to_singa_ops` có bốn bước, đầu tiên là gọi 
+`_parse_graph_params` để lấy tất các các tensors lưu trong `params`. Sau đó gọi hàm 
+`_parse_graph_inputs_outputs` để lấy tất cả thông tin đầu vào đầu ra lưu trong 
+`inputs` và `outputs`. Cuối cùng nó lặp lại tất cả các nodes trong ONNX graph
+và đẩy sang `_onnx_node_to_singa_op` như SINGA operators hoặc layers và lưu chúng thành 
+`outputs`. Một vài weights được lưu trong ONNX node gọi là
+`Constant`, SONNX có thể xử lý chúng bằng `_onnx_constant_to_np` để lưu trong 
+`params`.
+
+Cuối cùng class này trả lại một đối tượng `SingaRep` và lưu trên `params`,
+`inputs`, `outputs`, `layers`.
+
+### SingaRep
+
+`SingaBackend` lưu tất cả SINGA tensors và operators. `run` chấp nhận đầu vào của mô hình và 
+chạy từng toán tử SINGA operators một, theo hàng của toán tử. Người dùng có thể sử dụng `last_layers`
+để xoá mô hình model sau vài layers cuối cùng. 
+
+### SONNXModel
+
+`SONNXModel` được tạo từ  `sonnx.SONNXModel` và thực hiện phương pháp 
+`forward` để cung cấp một API đồng bộ với các mô hình SINGA.
diff --git a/docs-site/docs_viet/optimizer.md b/docs-site/docs_viet/optimizer.md
new file mode 100644
index 0000000..788d0a7
--- /dev/null
+++ b/docs-site/docs_viet/optimizer.md
@@ -0,0 +1,124 @@
+---
+id: optimizer
+title: Optimizer
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+SINGA hỗ trợ đa dạng các thuật toán tối ưu (optimizers) phổ biến bao gồm stochastic gradient descent
+với momentum, Adam, RMSProp, và AdaGrad, etc. Với mỗi thuật toán tối ưu, SINGA hỗ trợ để sử dụng decay schedular để lên kế hoạch learning rate áp dụng trong các epochs khác nhau. Các mỗi thuật toán tối ưu và 
+decay schedulers có trong `singa/opt.py`.
+
+## Tạo thuật toán tối ưu
+
+1. SGD với momentum
+
+```python
+# xác định hyperparameter learning rate
+lr = 0.001
+# xác định hyperparameter momentum
+momentum = 0.9
+# xác định hyperparameter weight decay
+weight_decay = 0.0001
+
+from singa import opt
+sgd = opt.SGD(lr=lr, momentum=momentum, weight_decay=weight_decay)
+```
+
+2. RMSProp
+
+```python
+# xác định hyperparameter learning rate
+lr = 0.001
+# xác định hyperparameter rho
+rho = 0.9
+# xác định hyperparameter epsilon
+epsilon = 1e-8
+# xác định hyperparameter weight decay
+weight_decay = 0.0001
+
+from singa import opt
+sgd = opt.RMSProp(lr=lr, rho=rho, epsilon=epsilon, weight_decay=weight_decay)
+```
+
+3. AdaGrad
+
+```python
+# xác định hyperparameter learning rate
+lr = 0.001
+# xác định hyperparameter epsilon
+epsilon = 1e-8
+# xác định hyperparameter weight decay
+weight_decay = 0.0001
+
+from singa import opt
+sgd = opt.AdaGrad(lr=lr, epsilon=epsilon, weight_decay=weight_decay)
+```
+
+4. Adam
+
+```python
+# xác định hyperparameter learning rate
+lr = 0.001
+# xác định hyperparameter beta 1
+beta_1= 0.9
+# xác định hyperparameter beta 2
+beta_1= 0.999
+# xác định hyperparameter epsilon
+epsilon = 1e-8
+# xác định hyperparameter weight decay
+weight_decay = 0.0001
+
+from singa import opt
+sgd = opt.Adam(lr=lr, beta_1=beta_1, beta_2=beta_2, epsilon=epsilon, weight_decay=weight_decay)
+```
+
+## Tạo Decay Scheduler
+
+```python
+from singa import opt
+
+# xác định learning rate ban đầu
+lr_init = 0.001
+# xác định rate của decay trong decay scheduler
+decay_rate = 0.95
+# xác định learning rate schedule có ở dạng staircase shape
+staircase=True
+# xác định bước decay của decay scheduler (trong ví dụ này lr giảm sau mỗi 2 bước)
+decay_steps = 2
+
+# tạo decay scheduler, schedule của lr trở thành lr_init * (decay_rate ^ (step // decay_steps) )
+lr = opt.ExponentialDecay(0.1, 2, 0.5, True)
+# sử dụng lr để tạo một thuật toán tối ưu 
+sgd = opt.SGD(lr=lr, momentum=0.9, weight_decay=0.0001)
+```
+
+## Sử dụng thuật toán tối ưu trong Model API
+
+Khi tạo mô hình model, cần đính kèm thuật toán tối ưu vào model. 
+
+```python
+# tạo CNN sử dụng Model API
+model = CNN()
+
+# khởi tạo thuật toán tối ưu và đính vào model 
+sgd = opt.SGD(lr=0.005, momentum=0.9, weight_decay=1e-5)
+model.set_optimizer(sgd)
+```
+
+Sau đó, khi gọi hàm model, chạy phương pháp `train_one_batch` để sử dụng thuật toán tối ưu. 
+
+Do vậy, một ví dụ cho lặp lại loop để tối ưu hoá model là:
+
+```python
+for b in range(num_train_batch):
+    # tạo mini-batch tiếp theo
+    x, y = ...
+
+    # Copy dữ liệu vào tensors đầu vào
+    tx.copy_from_numpy(x)
+    ty.copy_from_numpy(y)
+
+    # Train với một batch 
+    out, loss = model(tx, ty)
+```
diff --git a/docs-site/docs_viet/releases/RELEASE_NOTES_0.1.0.md b/docs-site/docs_viet/releases/RELEASE_NOTES_0.1.0.md
new file mode 100644
index 0000000..a025794
--- /dev/null
+++ b/docs-site/docs_viet/releases/RELEASE_NOTES_0.1.0.md
@@ -0,0 +1,152 @@
+---
+id: RELEASE_NOTES_0.1.0
+title: Apache SINGA-incubating-0.1.0 Release Notes
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+SINGA is a general distributed deep learning platform for training big deep
+learning models over large datasets. It is designed with an intuitive
+programming model based on the layer abstraction. SINGA supports a wide variety
+of popular deep learning models.
+
+This release includes following features:
+
+- Job management
+  - [SINGA-3](https://issues.apache.org/jira/browse/SINGA-3) Use Zookeeper to
+    check stopping (finish) time of the system
+  - [SINGA-16](https://issues.apache.org/jira/browse/SINGA-16) Runtime Process
+    id Management
+  - [SINGA-25](https://issues.apache.org/jira/browse/SINGA-25) Setup glog output
+    path
+  - [SINGA-26](https://issues.apache.org/jira/browse/SINGA-26) Run distributed
+    training in a single command
+  - [SINGA-30](https://issues.apache.org/jira/browse/SINGA-30) Enhance
+    easy-to-use feature and support concurrent jobs
+  - [SINGA-33](https://issues.apache.org/jira/browse/SINGA-33) Automatically
+    launch a number of processes in the cluster
+  - [SINGA-34](https://issues.apache.org/jira/browse/SINGA-34) Support external
+    zookeeper service
+  - [SINGA-38](https://issues.apache.org/jira/browse/SINGA-38) Support
+    concurrent jobs
+  - [SINGA-39](https://issues.apache.org/jira/browse/SINGA-39) Avoid ssh in
+    scripts for single node environment
+  - [SINGA-43](https://issues.apache.org/jira/browse/SINGA-43) Remove
+    Job-related output from workspace
+  - [SINGA-56](https://issues.apache.org/jira/browse/SINGA-56) No automatic
+    launching of zookeeper service
+  - [SINGA-73](https://issues.apache.org/jira/browse/SINGA-73) Refine the
+    selection of available hosts from host list
+
+* Installation with GNU Auto tool
+  - [SINGA-4](https://issues.apache.org/jira/browse/SINGA-4) Refine
+    thirdparty-dependency installation
+  - [SINGA-13](https://issues.apache.org/jira/browse/SINGA-13) Separate
+    intermediate files of compilation from source files
+  - [SINGA-17](https://issues.apache.org/jira/browse/SINGA-17) Add root
+    permission within thirdparty/install.
+  - [SINGA-27](https://issues.apache.org/jira/browse/SINGA-27) Generate python
+    modules for proto objects
+  - [SINGA-53](https://issues.apache.org/jira/browse/SINGA-53) Add lmdb
+    compiling options
+  - [SINGA-62](https://issues.apache.org/jira/browse/SINGA-62) Remove building
+    scrips and auxiliary files
+  - [SINGA-67](https://issues.apache.org/jira/browse/SINGA-67) Add singatest
+    into build targets
+
+- Distributed training
+  - [SINGA-7](https://issues.apache.org/jira/browse/SINGA-7) Implement shared
+    memory Hogwild algorithm
+  - [SINGA-8](https://issues.apache.org/jira/browse/SINGA-8) Implement
+    distributed Hogwild
+  - [SINGA-19](https://issues.apache.org/jira/browse/SINGA-19) Slice large Param
+    objects for load-balance
+  - [SINGA-29](https://issues.apache.org/jira/browse/SINGA-29) Update NeuralNet
+    class to enable layer partition type customization
+  - [SINGA-24](https://issues.apache.org/jira/browse/SINGA-24) Implement
+    Downpour training framework
+  - [SINGA-32](https://issues.apache.org/jira/browse/SINGA-32) Implement
+    AllReduce training framework
+  - [SINGA-57](https://issues.apache.org/jira/browse/SINGA-57) Improve
+    Distributed Hogwild
+
+* Training algorithms for different model categories
+  - [SINGA-9](https://issues.apache.org/jira/browse/SINGA-9) Add Support for
+    Restricted Boltzman Machine (RBM) model
+  - [SINGA-10](https://issues.apache.org/jira/browse/SINGA-10) Add Support for
+    Recurrent Neural Networks (RNN)
+
+- Checkpoint and restore
+  - [SINGA-12](https://issues.apache.org/jira/browse/SINGA-12) Support
+    Checkpoint and Restore
+
+* Unit test
+  - [SINGA-64](https://issues.apache.org/jira/browse/SINGA-64) Add the test
+    module for utils/common
+
+- Programming model
+  - [SINGA-36](https://issues.apache.org/jira/browse/SINGA-36) Refactor job
+    configuration, driver program and scripts
+  - [SINGA-37](https://issues.apache.org/jira/browse/SINGA-37) Enable users to
+    set parameter sharing in model configuration
+  - [SINGA-54](https://issues.apache.org/jira/browse/SINGA-54) Refactor job
+    configuration to move fields in ModelProto out
+  - [SINGA-55](https://issues.apache.org/jira/browse/SINGA-55) Refactor main.cc
+    and singa.h
+  - [SINGA-61](https://issues.apache.org/jira/browse/SINGA-61) Support user
+    defined classes
+  - [SINGA-65](https://issues.apache.org/jira/browse/SINGA-65) Add an example of
+    writing user-defined layers
+
+* Other features
+  - [SINGA-6](https://issues.apache.org/jira/browse/SINGA-6) Implement
+    thread-safe singleton
+  - [SINGA-18](https://issues.apache.org/jira/browse/SINGA-18) Update API for
+    displaying performance metric
+  - [SINGA-77](https://issues.apache.org/jira/browse/SINGA-77) Integrate with
+    Apache RAT
+
+Some bugs are fixed during the development of this release
+
+- [SINGA-2](https://issues.apache.org/jira/browse/SINGA-2) Check failed:
+  zsock_connect
+- [SINGA-5](https://issues.apache.org/jira/browse/SINGA-5) Server early
+  terminate when zookeeper singa folder is not initially empty
+- [SINGA-15](https://issues.apache.org/jira/browse/SINGA-15) Fixg a bug from
+  ConnectStub function which gets stuck for connecting layer*dealer*
+- [SINGA-22](https://issues.apache.org/jira/browse/SINGA-22) Cannot find
+  openblas library when it is installed in default path
+- [SINGA-23](https://issues.apache.org/jira/browse/SINGA-23) Libtool version
+  mismatch error.
+- [SINGA-28](https://issues.apache.org/jira/browse/SINGA-28) Fix a bug from
+  topology sort of Graph
+- [SINGA-42](https://issues.apache.org/jira/browse/SINGA-42) Issue when loading
+  checkpoints
+- [SINGA-44](https://issues.apache.org/jira/browse/SINGA-44) A bug when reseting
+  metric values
+- [SINGA-46](https://issues.apache.org/jira/browse/SINGA-46) Fix a bug in
+  updater.cc to scale the gradients
+- [SINGA-47](https://issues.apache.org/jira/browse/SINGA-47) Fix a bug in data
+  layers that leads to out-of-memory when group size is too large
+- [SINGA-48](https://issues.apache.org/jira/browse/SINGA-48) Fix a bug in
+  trainer.cc that assigns the same NeuralNet instance to workers from diff
+  groups
+- [SINGA-49](https://issues.apache.org/jira/browse/SINGA-49) Fix a bug in
+  HandlePutMsg func that sets param fields to invalid values
+- [SINGA-66](https://issues.apache.org/jira/browse/SINGA-66) Fix bugs in
+  Worker::RunOneBatch function and ClusterProto
+- [SINGA-79](https://issues.apache.org/jira/browse/SINGA-79) Fix bug in
+  singatool that can not parse -conf flag
+
+Features planned for the next release
+
+- [SINGA-11](https://issues.apache.org/jira/browse/SINGA-11) Start SINGA using
+  Mesos
+- [SINGA-31](https://issues.apache.org/jira/browse/SINGA-31) Extend Blob to
+  support xpu (cpu or gpu)
+- [SINGA-35](https://issues.apache.org/jira/browse/SINGA-35) Add random number
+  generators
+- [SINGA-40](https://issues.apache.org/jira/browse/SINGA-40) Support sparse
+  Param update
+- [SINGA-41](https://issues.apache.org/jira/browse/SINGA-41) Support single node
+  single GPU training
diff --git a/docs-site/docs_viet/releases/RELEASE_NOTES_0.2.0.md b/docs-site/docs_viet/releases/RELEASE_NOTES_0.2.0.md
new file mode 100644
index 0000000..72c2baf
--- /dev/null
+++ b/docs-site/docs_viet/releases/RELEASE_NOTES_0.2.0.md
@@ -0,0 +1,81 @@
+---
+id: RELEASE_NOTES_0.2.0
+title: Apache SINGA-incubating-0.2.0 Release Notes
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+SINGA is a general distributed deep learning platform for training big deep
+learning models over large datasets. It is designed with an intuitive
+programming model based on the layer abstraction. SINGA supports a wide variety
+of popular deep learning models.
+
+This release includes the following **major features**:
+
+- [Training on GPU](../docs/gpu.html) enables training of complex models on a
+  single node with multiple GPU cards.
+- [Hybrid neural net partitioning](../docs/hybrid.html) supports data and model
+  parallelism at the same time.
+- [Python wrapper](../docs/python.html) makes it easy to configure the job,
+  including neural net and SGD algorithm.
+- [RNN model and BPTT algorithm](../docs/general-rnn.html) are implemented to
+  support applications based on RNN models, e.g., GRU.
+- [Cloud software integration](../docs/distributed-training.md) includes Mesos,
+  Docker and HDFS.
+
+**More details** are listed as follows,
+
+- Programming model
+  - [SINGA-80] New Blob Level and Address Level Math Operation Interface
+  - [SINGA-82] Refactor input layers using data store abstraction
+  - [SINGA-87] Replace exclude field to include field for layer configuration
+  - [SINGA-110] Add Layer member datavec* and gradvec*
+  - [SINGA-120] Implemented GRU and BPTT (BPTTWorker)
+
+* Neuralnet layers
+  - [SINGA-91] Add SoftmaxLayer and ArgSortLayer
+  - [SINGA-106] Add dummy layer for test purpose
+  - [SINGA-120] Implemented GRU and BPTT (GRULayer and OneHotLayer)
+
+- GPU training support
+  - [SINGA-100] Implement layers using CUDNN for GPU training
+  - [SINGA-104] Add Context Class
+  - [SINGA-105] Update GUN make files for compiling cuda related code
+  - [SINGA-98] Add Support for AlexNet ImageNet Classification Model
+
+* Model/Hybrid partition
+  - [SINGA-109] Refine bridge layers
+  - [SINGA-111] Add slice, concate and split layers
+  - [SINGA-113] Model/Hybrid Partition Support
+
+- Python binding
+  - [SINGA-108] Add Python wrapper to singa
+
+* Predict-only mode
+  - [SINGA-85] Add functions for extracting features and test new data
+
+- Integrate with third-party tools
+  - [SINGA-11] Start SINGA on Apache Mesos
+  - [SINGA-78] Use Doxygen to generate documentation
+  - [SINGA-89] Add Docker support
+
+* Unit test
+  - [SINGA-95] Add make test after building
+
+- Other improvment
+  - [SINGA-84] Header Files Rearrange
+  - [SINGA-93] Remove the asterisk in the log tcp://169.254.12.152:\*:49152
+  - [SINGA-94] Move call to google::InitGoogleLogging() from Driver::Init() to
+    main()
+  - [SINGA-96] Add Momentum to Cifar10 Example
+  - [SINGA-101] Add ll (ls -l) command in .bashrc file when using docker
+  - [SINGA-114] Remove short logs in tmp directory
+  - [SINGA-115] Print layer debug information in the neural net graph file
+  - [SINGA-118] Make protobuf LayerType field id easy to assign
+  - [SIGNA-97] Add HDFS Store
+
+* Bugs fixed
+  - [SINGA-85] Fix compilation errors in examples
+  - [SINGA-90] Miscellaneous trivial bug fixes
+  - [SINGA-107] Error from loading pre-trained params for training stacked RBMs
+  - [SINGA-116] Fix a bug in InnerProductLayer caused by weight matrix sharing
diff --git a/docs-site/docs_viet/releases/RELEASE_NOTES_0.3.0.md b/docs-site/docs_viet/releases/RELEASE_NOTES_0.3.0.md
new file mode 100644
index 0000000..868c173
--- /dev/null
+++ b/docs-site/docs_viet/releases/RELEASE_NOTES_0.3.0.md
@@ -0,0 +1,42 @@
+---
+id: RELEASE_NOTES_0.3.0
+title: Apache SINGA-incubating-0.3.0 Release Notes
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+SINGA is a general distributed deep learning platform for training big deep
+learning models over large datasets. It is designed with an intuitive
+programming model based on the layer abstraction. SINGA supports a wide variety
+of popular deep learning models.
+
+This release includes following features:
+
+- GPU Support
+
+  - [SINGA-131] Implement and optimize hybrid training using both CPU and GPU
+  - [SINGA-136] Support cuDNN v4
+  - [SINGA-134] Extend SINGA to run over a GPU cluster
+  - [SINGA-157] Change the priority of cudnn library and install libsingagpu.so
+
+- Remove Dependences
+
+  - [SINGA-156] Remove the dependency on ZMQ for single process training
+  - [SINGA-155] Remove zookeeper for single-process training
+
+- Python Binding
+
+  - [SINGA-126] Python Binding for Interactive Training
+
+- Other Improvements
+
+  - [SINGA-80] New Blob Level and Address Level Math Operation Interface
+  - [SINGA-130] Data Prefetching
+  - [SINGA-145] New SGD based optimization Updaters: AdaDelta, Adam, AdamMax
+
+- Bugs Fixed
+  - [SINGA-148] Race condition between Worker threads and Driver
+  - [SINGA-150] Mesos Docker container failed
+  - [SIGNA-141] Undesired Hash collision when locating process id to worker…
+  - [SINGA-149] Docker build fail
+  - [SINGA-143] The compilation cannot detect libsingagpu.so file
diff --git a/docs-site/docs_viet/releases/RELEASE_NOTES_1.0.0.md b/docs-site/docs_viet/releases/RELEASE_NOTES_1.0.0.md
new file mode 100644
index 0000000..36ecc98
--- /dev/null
+++ b/docs-site/docs_viet/releases/RELEASE_NOTES_1.0.0.md
@@ -0,0 +1,95 @@
+---
+id: RELEASE_NOTES_1.0.0
+title: Apache SINGA-incubating-1.0.0 Release Notes
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+SINGA is a general distributed deep learning platform for training big deep
+learning models over large datasets. It is designed with an intuitive
+programming model based on the layer abstraction. SINGA supports a wide variety
+of popular deep learning models.
+
+This release includes following features:
+
+- Core abstractions including Tensor and Device
+  - [SINGA-207] Update Tensor functions for matrices
+  - [SINGA-205] Enable slice and concatenate operations for Tensor objects
+  - [SINGA-197] Add CNMem as a submodule in lib/
+  - [SINGA-196] Rename class Blob to Block
+  - [SINGA-194] Add a Platform singleton
+  - [SINGA-175] Add memory management APIs and implement a subclass using CNMeM
+  - [SINGA-173] OpenCL Implementation
+  - [SINGA-171] Create CppDevice and CudaDevice
+  - [SINGA-168] Implement Cpp Math functions APIs
+  - [SINGA-162] Overview of features for V1.x
+  - [SINGA-165] Add cross-platform timer API to singa
+  - [SINGA-167] Add Tensor Math function APIs
+  - [SINGA-166] light built-in logging for making glog optional
+  - [SINGA-164] Add the base Tensor class
+
+* IO components for file read/write, network and data pre-processing
+  - [SINGA-233] New communication interface
+  - [SINGA-215] Implement Image Transformation for Image Pre-processing
+  - [SINGA-214] Add LMDBReader and LMDBWriter for LMDB
+  - [SINGA-213] Implement Encoder and Decoder for CSV
+  - [SINGA-211] Add TextFileReader and TextFileWriter for CSV files
+  - [SINGA-210] Enable checkpoint and resume for v1.0
+  - [SINGA-208] Add DataIter base class and a simple implementation
+  - [SINGA-203] Add OpenCV detection for cmake compilation
+  - [SINGA-202] Add reader and writer for binary file
+  - [SINGA-200] Implement Encoder and Decoder for data pre-processing
+
+- Module components including layer classes, training algorithms and Python
+  binding
+  - [SINGA-235] Unify the engines for cudnn and singa layers
+  - [SINGA-230] OpenCL Convolution layer and Pooling layer
+  - [SINGA-222] Fixed bugs in IO
+  - [SINGA-218] Implementation for RNN CUDNN version
+  - [SINGA-204] Support the training of feed-forward neural nets
+  - [SINGA-199] Implement Python classes for SGD optimizers
+  - [SINGA-198] Change Layer::Setup API to include input Tensor shapes
+  - [SINGA-193] Add Python layers
+  - [SINGA-192] Implement optimization algorithms for SINGA v1 (nesterove,
+    adagrad, rmsprop)
+  - [SINGA-191] Add "autotune" for CudnnConvolution Layer
+  - [SINGA-190] Add prelu layer and flatten layer
+  - [SINGA-189] Generate python outputs of proto files
+  - [SINGA-188] Add Dense layer
+  - [SINGA-187] Add popular parameter initialization methods
+  - [SINGA-186] Create Python Tensor class
+  - [SINGA-184] Add Cross Entropy loss computation
+  - [SINGA-183] Add the base classes for optimizer, constraint and regularizer
+  - [SINGA-180] Add Activation layer and Softmax layer
+  - [SINGA-178] Add Convolution layer and Pooling layer
+  - [SINGA-176] Add loss and metric base classes
+  - [SINGA-174] Add Batch Normalization layer and Local Response Nomalization
+    layer.
+  - [SINGA-170] Add Dropout layer and CudnnDropout layer.
+  - [SINGA-169] Add base Layer class for V1.0
+
+* Examples
+
+  - [SINGA-232] Alexnet on Imagenet
+  - [SINGA-231] Batchnormlized VGG model for cifar-10
+  - [SINGA-228] Add Cpp Version of Convolution and Pooling layer
+  - [SINGA-227] Add Split and Merge Layer and add ResNet Implementation
+
+* Documentation
+
+  - [SINGA-239] Transfer documentation files of v0.3.0 to github
+  - [SINGA-238] RBM on mnist
+  - [SINGA-225] Documentation for installation and Cifar10 example
+  - [SINGA-223] Use Sphinx to create the website
+
+* Tools for compilation and some utility code
+  - [SINGA-229] Complete install targets
+  - [SINGA-221] Support for Travis-CI
+  - [SINGA-217] build python package with setup.py
+  - [SINGA-216] add jenkins for CI support
+  - [SINGA-212] Disable the compilation of libcnmem if USE_CUDA is OFF
+  - [SINGA-195] Channel for sending training statistics
+  - [SINGA-185] Add CBLAS and GLOG detection for singav1
+  - [SINGA-181] Add NVCC supporting for .cu files
+  - [SINGA-177] Add fully cmake supporting for the compilation of singa_v1
+  - [SINGA-172] Add CMake supporting for Cuda and Cudnn libs
diff --git a/docs-site/docs_viet/releases/RELEASE_NOTES_1.1.0.md b/docs-site/docs_viet/releases/RELEASE_NOTES_1.1.0.md
new file mode 100644
index 0000000..41ccd28
--- /dev/null
+++ b/docs-site/docs_viet/releases/RELEASE_NOTES_1.1.0.md
@@ -0,0 +1,56 @@
+---
+id: RELEASE_NOTES_1.1.0
+title: Apache SINGA-incubating-1.1.0 Release Notes
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+SINGA is a general distributed deep learning platform for training big deep
+learning models over large datasets.
+
+This release includes following features:
+
+- Core components
+
+  - [SINGA-296] Add sign and to_host function for pysinga tensor module
+
+- Model components
+
+  - [SINGA-254] Implement Adam for V1
+  - [SINGA-264] Extend the FeedForwardNet to accept multiple inputs
+  - [SINGA-267] Add spatial mode in batch normalization layer
+  - [SINGA-271] Add Concat and Slice layers
+  - [SINGA-275] Add Cross Entropy Loss for multiple labels
+  - [SINGA-278] Convert trained caffe parameters to singa
+  - [SINGA-287] Add memory size check for cudnn convolution
+
+- Utility functions and CI
+
+  - [SINGA-242] Compile all source files into a single library.
+  - [SINGA-244] Separating swig interface and python binding files
+  - [SINGA-246] Imgtool for image augmentation
+  - [SINGA-247] Add windows support for singa
+  - [SINGA-251] Implement image loader for pysinga
+  - [SINGA-252] Use the snapshot methods to dump and load models for pysinga
+  - [SINGA-255] Compile mandatory dependent libaries together with SINGA code
+  - [SINGA-259] Add maven pom file for building java classes
+  - [SINGA-261] Add version ID into the checkpoint files
+  - [SINGA-266] Add Rafiki python toolkits
+  - [SINGA-273] Improve license and contributions
+  - [SINGA-284] Add python unittest into Jenkins and link static libs into whl
+    file
+  - [SINGA-280] Jenkins CI support
+  - [SINGA-288] Publish wheel of PySINGA generated by Jenkins to public servers
+
+- Documentation and usability
+
+  - [SINGA-263] Create Amazon Machine Image
+  - [SINGA-268] Add IPython notebooks to the documentation
+  - [SINGA-276] Create docker images
+  - [SINGA-289] Update SINGA website automatically using Jenkins
+  - [SINGA-295] Add an example of image classification using GoogleNet
+
+- Bugs fixed
+  - [SINGA-245] float as the first operand can not multiply with a tensor object
+  - [SINGA-293] Bug from compiling PySINGA on Mac OS X with multiple version of
+    Python
diff --git a/docs-site/docs_viet/releases/RELEASE_NOTES_1.2.0.md b/docs-site/docs_viet/releases/RELEASE_NOTES_1.2.0.md
new file mode 100644
index 0000000..2da1cbd
--- /dev/null
+++ b/docs-site/docs_viet/releases/RELEASE_NOTES_1.2.0.md
@@ -0,0 +1,62 @@
+---
+id: RELEASE_NOTES_1.2.0
+title: Apache SINGA-incubating-1.2.0 Release Notes
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+SINGA is a general distributed deep learning platform for training big deep
+learning models over large datasets.
+
+This release includes following features:
+
+- Core components
+
+  - [SINGA-290] Upgrade to Python 3
+  - [SINGA-341] Added stride functionality to tensors for CPP
+  - [SINGA-347] Create a function that supports einsum
+  - [SINGA-351] Added stride support and cudnn codes to cuda
+
+- Model components
+
+  - [SINGA-300] Add residual networks for imagenet classification
+  - [SINGA-312] Rename layer parameters
+  - [SINGA-313] Add L2 norm layer
+  - [SINGA-315] Reduce memory footprint by Python generator for parameter
+  - [SINGA-316] Add SigmoidCrossEntropy
+  - [SINGA-324] Extend RNN layer to accept variant seq length across batches
+  - [SINGA-326] Add Inception V4 for ImageNet classification
+  - [SINGA-328] Add VGG models for ImageNet classification
+  - [SINGA-329] Support layer freezing during training (fine-tuning)
+  - [SINGA-346] Update cudnn from V5 to V7
+  - [SINGA-349] Create layer operations for autograd
+  - [SINGA-363] Add DenseNet for Imagenet classification
+
+- Utility functions and CI
+
+  - [SINGA-274] Improve Debian packaging with CPack
+  - [SINGA-303] Create conda packages
+  - [SINGA-337] Add test cases for code
+  - [SINGA-348] Support autograd MLP Example
+  - [SINGA-345] Update Jenkins and fix bugs in compliation
+  - [SINGA-354] Update travis scripts to use conda-build for all platforms
+  - [SINGA-358] Consolidated RUN steps and cleaned caches in Docker containers
+  - [SINGA-359] Create alias for conda packages
+
+- Documentation and usability
+
+  - [SINGA-223] Fix side navigation menu in the website
+  - [SINGA-294] Add instructions to run CUDA unit tests on Windows
+  - [SINGA-305] Add jupyter notebooks for SINGA V1 tutorial
+  - [SINGA-319] Fix link errors on the index page
+  - [SINGA-352] Complete SINGA documentation in Chinese version
+  - [SINGA-361] Add git instructions for contributors and committers
+
+- Bugs fixed
+  - [SINGA-330] fix openblas building on i7 7700k
+  - [SINGA-331] Fix the bug of tensor division operation
+  - [SINGA-350] Error from python3 test
+  - [SINGA-356] Error using travis tool to build SINGA on mac os
+  - [SINGA-363] Fix some bugs in imagenet examples
+  - [SINGA-368] Fix the bug in Cifar10 examples
+  - [SINGA-369] the errors of examples in testing
diff --git a/docs-site/docs_viet/releases/RELEASE_NOTES_2.0.0.md b/docs-site/docs_viet/releases/RELEASE_NOTES_2.0.0.md
new file mode 100644
index 0000000..9288784
--- /dev/null
+++ b/docs-site/docs_viet/releases/RELEASE_NOTES_2.0.0.md
@@ -0,0 +1,55 @@
+---
+id: RELEASE_NOTES_2.0.0
+title: Apache SINGA-incubating-2.0.0 Release Notes
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+SINGA is a general distributed deep learning platform for training big deep
+learning models over large datasets.
+
+This release includes following features:
+
+- Core components
+
+  - [SINGA-434] Support tensor broadcasting
+  - [SINGA-370] Improvement to tensor reshape and various misc. changes related
+    to SINGA-341 and 351
+
+- Model components
+
+  - [SINGA-333] Add support for Open Neural Network Exchange (ONNX) format
+  - [SINGA-385] Add new python module for optimizers
+  - [SINGA-394] Improve the CPP operations via Intel MKL DNN lib
+  - [SINGA-425] Add 3 operators , Abs(), Exp() and leakyrelu(), for Autograd
+  - [SINGA-410] Add two function, set_params() and get_params(), for Autograd
+    Layer class
+  - [SINGA-383] Add Separable Convolution for autograd
+  - [SINGA-388] Develop some RNN layers by calling tiny operations like matmul,
+    addbias.
+  - [SINGA-382] Implement concat operation for autograd
+  - [SINGA-378] Implement maxpooling operation and its related functions for
+    autograd
+  - [SINGA-379] Implement batchnorm operation and its related functions for
+    autograd
+
+- Utility functions and CI
+
+  - [SINGA-432] Update depdent lib versions in conda-build config
+  - [SINGA-429] Update docker images for latest cuda and cudnn
+  - [SINGA-428] Move Docker images under Apache user name
+
+- Documentation and usability
+  - [SINGA-395] Add documentation for autograd APIs
+  - [SINGA-344] Add a GAN example
+  - [SINGA-390] Update installation.md
+  - [SINGA-384] Implement ResNet using autograd API
+  - [SINGA-352] Complete SINGA documentation in Chinese version
+
+* Bugs fixed
+  - [SINGA-431] Unit Test failed - Tensor Transpose
+  - [SINGA-422] ModuleNotFoundError: No module named "\_singa_wrap"
+  - [SINGA-418] Unsupportive type 'long' in python3.
+  - [SINGA-409] Basic `singa-cpu` import throws error
+  - [SINGA-408] Unsupportive function definition in python3
+  - [SINGA-380] Fix bugs from Reshape
diff --git a/docs-site/docs_viet/releases/RELEASE_NOTES_3.0.0.md b/docs-site/docs_viet/releases/RELEASE_NOTES_3.0.0.md
new file mode 100644
index 0000000..2922dec
--- /dev/null
+++ b/docs-site/docs_viet/releases/RELEASE_NOTES_3.0.0.md
@@ -0,0 +1,105 @@
+---
+id: RELEASE_NOTES_3.0.0
+title: Apache SINGA-3.0.0 Release Notes
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+SINGA is a distributed deep learning library.
+
+This release includes following changes:
+
+- Code quality has been promoted by introducing linting check in CI and auto
+  code formatter. For linting, the tools, `cpplint` and `pylint`, are used and
+  configured to comply
+  [google coding styles](http://google.github.io/styleguide/) details in
+  `tool/linting/`. Similarly, formatting tools, `clang-format` and `yapf`
+  configured with google coding styles, are the recommended one for developers
+  to clean code before submitting changes, details in `tool/code-format/`.
+  [LGTM](https://lgtm.com) is enabled on Github for code quality check; License
+  check is also enabled.
+
+- New Tensor APIs are added for naming consistency, and feature enhancement:
+
+  - size(), mem_size(), get_value(), to_proto(), l1(), l2(): added for the sake
+    of naming consistency
+  - AsType(): convert data type between `float` and `int`
+  - ceil(): perform element-wise ceiling of the input
+  - concat(): concatenate two tensor
+  - index selector: e.g. tensor1[:,:,1:,1:]
+  - softmax(in, axis): allow to perform softmax on a axis on a multi-dimensional
+    tensor
+
+- 14 new operators are added into the autograd module: Gemm, GlobalAveragePool,
+  ConstantOfShape, Dropout, ReduceSum, ReduceMean, Slice, Ceil, Split, Gather,
+  Tile, NonZero, Cast, OneHot. Their unit tests are added as well.
+
+- 14 new operators are added to sonnx module for both backend and frontend:
+  [Gemm](https://github.com/onnx/onnx/blob/master/docs/Operators.md#Gemm),
+  [GlobalAveragePool](https://github.com/onnx/onnx/blob/master/docs/Operators.md#GlobalAveragePool),
+  [ConstantOfShape](https://github.com/onnx/onnx/blob/master/docs/Operators.md#ConstantOfShape),
+  [Dropout](https://github.com/onnx/onnx/blob/master/docs/Operators.md#Dropout),
+  [ReduceSum](https://github.com/onnx/onnx/blob/master/docs/Operators.md#ReduceSum),
+  [ReduceMean](https://github.com/onnx/onnx/blob/master/docs/Operators.md#ReduceMean),
+  [Slice](https://github.com/onnx/onnx/blob/master/docs/Operators.md#Slice),
+  [Ceil](https://github.com/onnx/onnx/blob/master/docs/Operators.md#Ceil),
+  [Split](https://github.com/onnx/onnx/blob/master/docs/Operators.md#Split),
+  [Gather](https://github.com/onnx/onnx/blob/master/docs/Operators.md#Gather),
+  [Tile](https://github.com/onnx/onnx/blob/master/docs/Operators.md#Tile),
+  [NonZero](https://github.com/onnx/onnx/blob/master/docs/Operators.md#NonZero),
+  [Cast](https://github.com/onnx/onnx/blob/master/docs/Operators.md#Cast),
+  [OneHot](https://github.com/onnx/onnx/blob/master/docs/Operators.md#OneHot).
+  Their tests are added as well.
+
+- Some ONNX models are imported into SINGA, including
+  [Bert-squad](https://github.com/onnx/models/tree/master/text/machine_comprehension/bert-squad),
+  [Arcface](https://github.com/onnx/models/tree/master/vision/body_analysis/arcface),
+  [FER+ Emotion](https://github.com/onnx/models/tree/master/vision/body_analysis/emotion_ferplus),
+  [MobileNet](https://github.com/onnx/models/tree/master/vision/classification/mobilenet),
+  [ResNet18](https://github.com/onnx/models/tree/master/vision/classification/resnet),
+  [Tiny Yolov2](https://github.com/onnx/models/tree/master/vision/object_detection_segmentation/tiny_yolov2),
+  [Vgg16](https://github.com/onnx/models/tree/master/vision/classification/vgg),
+  and Mnist.
+
+- Some operators now support
+  [multidirectional broadcasting](https://github.com/onnx/onnx/blob/master/docs/Broadcasting.md#multidirectional-broadcasting),
+  including Add, Sub, Mul, Div, Pow, PRelu, Gemm
+
+- [Distributed training with communication optimization].
+  [DistOpt](./python/singa/opt.py) has implemented multiple optimization
+  techniques, including gradient sparsification, chunk transmission, and
+  gradient compression.
+
+- Computational graph construction at the CPP level. The operations submitted to
+  the Device are buffered. After analyzing the dependency, the computational
+  graph is created, which is further analyzed for speed and memory optimization.
+  To enable this feature, use the [Module API](./python/singa/module.py).
+
+- New website based on Docusaurus. The documentation files are moved to a
+  separate repo [singa-doc](https://github.com/apache/singa-doc). The static
+  website files are stored at
+  [singa-site](https://github.com/apache/singa-site).
+
+- DNNL([Deep Neural Network Library](https://github.com/intel/mkl-dnn)), powered
+  by Intel, is integrated into
+  `model/operations/[batchnorm|pooling|convolution]`, the changes is opaque to
+  the end users. The current version is dnnl v1.1 which replaced previous
+  integration of mkl-dnn v0.18. The framework could boost the performance of dl
+  operations when executing on CPU. The dnnl dependency is installed through
+  conda.
+
+- Some Tensor APIs are marked as deprecated which could be replaced by
+  broadcast, and it can support better on multi-dimensional operations. These
+  APIs are add_column(), add_row(), div_column(), div_row(), mult_column(),
+  mult_row()
+
+- Conv and Pooling are enhanced to support fine-grained padding like (2,3,2,3),
+  and
+  [SAME_UPPER, SAME_LOWER](https://github.com/onnx/onnx/blob/master/docs/Operators.md#Conv)
+  pad mode and shape checking.
+
+- Reconstruct soonx,
+  - Support two types of weight value (Initializer and Constant Node);
+  - For some operators (BatchNorm, Reshape, Clip, Slice, Gather, Tile, OneHot),
+    move some inputs to its attributes;
+  - Define and implement the type conversion map.
diff --git a/docs-site/docs_viet/releases/RELEASE_NOTES_3.1.0.md b/docs-site/docs_viet/releases/RELEASE_NOTES_3.1.0.md
new file mode 100644
index 0000000..f8e556f
--- /dev/null
+++ b/docs-site/docs_viet/releases/RELEASE_NOTES_3.1.0.md
@@ -0,0 +1,50 @@
+---
+id: RELEASE_NOTES_3.1.0
+title: Apache SINGA-3.1.0 Release Notes
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+SINGA is a distributed deep learning library.
+
+This release includes following changes:
+
+- Tensor core:
+
+  - Support tensor transformation (reshape, transpose) for tensors up to 6
+    dimensions.
+  - Implement traverse_unary_transform in Cuda backend, which is similar to CPP
+    backend one.
+
+- Add new tensor operators into the autograd module, including CosSim,
+  DepthToSpace, Embedding, Erf, Expand, Floor, Pad, Round, Rounde, SpaceToDepth,
+  UpSample, Where. The corresponding ONNX operators are thus supported by SINGA.
+
+- Add Embedding and Gemm into the layer module.
+
+- Add SGD operators to opt module, including RMSProp, Adam, and AdaGrad.
+
+- Extend the sonnx module to support DenseNet121, ShuffleNetv1, ShuffleNetv2,
+  SqueezeNet, VGG19, GPT2, and RoBERTa.
+
+- Reconstruct sonnx to
+
+  - Support creating operators from both layer and autograd.
+  - Re-write SingaRep to provide a more powerful intermediate representation of
+    SINGA.
+  - Add a SONNXModel which implements from Model to provide uniform API and
+    features.
+
+- Add one example that trains a BiLSTM model over the InsuranceQA data.
+
+- Replace the Travis CI with Github workflow. Add quality and coverage
+  management.
+
+- Add compiling and packaging scripts to creat wheel packages for distribution.
+
+- Fix bugs
+  - Fix IMDB LSTM model example training script.
+  - Fix Tensor operation Mult on Broadcasting use cases.
+  - Gaussian function on Tensor now can run on Tensor with odd size.
+  - Updated a testing helper function gradients() in autograd to lookup param
+    gradient by param python object id for testing purpose.
diff --git a/docs-site/docs_viet/security.md b/docs-site/docs_viet/security.md
new file mode 100644
index 0000000..509d6b4
--- /dev/null
+++ b/docs-site/docs_viet/security.md
@@ -0,0 +1,9 @@
+---
+id: security
+title: Bảo Mật
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+Người dùng có thể báo cáo vấn đề bảo mật tới
+[Mail List của Nhóm SINGA Security](mailto:security@singa.apache.org)
diff --git a/docs-site/docs_viet/software-stack.md b/docs-site/docs_viet/software-stack.md
new file mode 100644
index 0000000..2deb640
--- /dev/null
+++ b/docs-site/docs_viet/software-stack.md
@@ -0,0 +1,144 @@
+---
+id: software-stack
+title: Software Stack
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+Cấu trúc phần mềm của SINGA bao gồm hai cấp độ chính, cấp thấp backend classes
+và cấp giao diện Python. Hình 1 mô tả chúng cùng với phần cứng. Cấu tạo backend cung 
+cấp cấu trúc dữ liệu cơ bản cho các mô hình deep learning, khái quát phần cứng để kế hoạch 
+và thực hiện các phép tính, trong khi thành phần
+communication dùng cho distributed training. Giao diện Python tập hợp cấu trúc 
+dữ liệu CPP và cung cấp các classes cấp cao bổ sung cho việc train neural
+network, giúp tiện lợi hơn khi thực hiện các mô hình neural network
+phức tạp.
+
+Sau đây, chúng tôi giới thiệu cấu trúc phần mềm từ dưới lên.
+
+![Cấu trúc phần mềm SINGA V3](assets/singav3.1-sw.png) <br/> **Hình 1 - Cấu trúc phần mềm SINGA V3.**
+
+## Backend cấp thấp
+
+### Device
+
+Mỗi trường hợp `Device`, hay thiết bị, được tạo ra từ một thiết bị phần cứng, 
+v.d GPU hay CPU. `Device` quản lý bộ nhớ của cấu trúc dữ liệu, và lên kế hoạch 
+hoạt động cho việc thực hiện, v.d, trên CUDA streams hay CPU threads.
+Dựa trên phần cứng và ngôn ngữ lập trình của nó, SINGA sử dụng các loại device 
+cụ thể sau:
+
+- **CudaGPU** tượng trưng cho cạc Nvidia GPU. Đơn vị sử dụng là CUDA
+  streams.
+- **CppCPU** là một CPU thông thường. Đơn vị sử dụng là CPU threads.
+- **OpenclGPU** là cạc GPU thông thường cho cả Nvidia và AMD. Đơn vị sử dụng là
+  CommandQueues. Do OpenCL tương thích với rất nhiều thiết bị phần cứng, như
+  FPGA và ARM, OpenclGPU có thể phù hợp với các thiết bị phần cứng khác. 
+
+### Tensor
+
+Hàm `Tensor` class là một array đa chiều, lưu trữ biến models, như hình ảnh đầu vào và 
+bản đồ đặc tính của convolution layer.
+Mỗi hàm `Tensor` (v.d một tensor) được đặt trong một thiết bị, giúp quản lý bộ nhớ của
+tensor và lên kế hoạch (phép tính) việc thực hiện với mỗi tensor. Hầu hết phép toán 
+trong machine learning có thể thể hiện (dày hoặc
+mỏng) dựa trên nghĩa và việc sử dụng tensor. Bởi vậy SINGA có thể chạy đa dạng nhiều 
+mô hình, bao gồm deep learning và các mô hình machine learning truyền thống khác. 
+
+### Hàm Operator
+
+Có hai dạng hàm operators cho tensors, đại số tuyến tính (linear algebra) như nhân 
+ma trận (matrix multiplication), và các hàm riêng của neural network như convolution
+và pooling. Các hàm đại số tuyến tính được dùng như `Tensor` functions và được áp dụng
+riêng rẽ với các thiết bị phần cứng khác nhau. 
+
+- CppMath (tensor_math_cpp.h) thực hiện hoạt động tensor sử dụng Cpp cho 
+  CppCPU
+- CudaMath (tensor_math_cuda.h) thực hiện hoạt động tensor sử dụng CUDA cho
+  CudaGPU
+- OpenclMath (tensor_math_opencl.h) thực hiện hoạt động tensor sử dụng
+  OpenCL cho OpenclGPU
+
+Các toán tử neural network cụ thể cũng được sử dụng riêng rẽ như:
+
+- GpuConvFoward (convolution.h) thực hiện hàm forward function của convolution
+  qua CuDNN trên Nvidia GPU.
+- CpuConvForward (convolution.h) thực hiện hàm forward function của convolution
+  qua CPP trên CPU.
+
+Thông thường, người dùng tạo một hàm `Device` và sử dụng nó để tạo ra các hàm
+`Tensor`. Khi gọi chức năng Tensor hoặc dùng trong neural network, việc thực hiện 
+tương ứng cho thiết bị sử dụng sẽ được gọi. Nói cách khác, việc áp dụng các toán tử 
+là rõ ràng với người dùng. 
+
+Việc dùng Tensor và Device có thể được áp dụng rộng hơn cho đa dạng thiết bị phần cứng  
+sử dụng ngôn ngữ lập trình. Mỗi thiết bị phần cứng mới sẽ được hỗ trợ bằng cách thêm một 
+Device subclass mới và việc áp dụng tương ứng với các toán tử operators.
+
+Tối ưu hoá cho tốc độ và bộ nhớ được thực hiện bởi `Scheduler` và
+`MemPool` của `Device`. Ví dụ, `Scheduler` tạo ra một 
+[computational graph](./graph) dựa theo thư viện chương trình của toán tử operators.
+Sau đó nó có thể tối ưu lệnh thực hiện của toán tử trong bộ nhớ chia sẻ và song song.
+
+### Communicator
+
+`Communicator` là để hỗ trợ [distributed training](./dist-train). Nó áp dụng 
+communication protocols sử dụng sockets, MPI và NCCL. Thường người dùng chỉ cần gọi 
+APIs cấp cao  như `put()` và `get()` để gửi và nhận tensors. 
+Tối ưu hoá Communication cho cấu trúc liên kết, kích cỡ tin nhắn, v.v được thực hiện 
+nội bộ. 
+
+## Giao diện Python
+
+Tất cả thành phần backend được thể hiện dạng Python modules thông qua SWIG. Thêm vào đó, 
+các classes sau được thêm vào để hỗ trợ việc áp dụng cho các
+networks phức tạp.
+
+### Opt
+
+`Opt` và các lớp con áp dụng phương pháp (như SGD) để cập nhật các giá trị tham số 
+model sử dụng tham số gradients. Một lớp con [DistOpt](./dist-train)
+đồng bộ gradients qua các workers trong distributed training bằng cách gọi phương 
+pháp từ `Communicator`.
+
+### Hàm Operator
+
+Hàm `Operator` gói nhiều functions khác nhau sử dụng toán tử Tensor hoặc neural
+network từ backend. Ví dụ, hàm forward function và
+backward function `ReLU` tạo ra toán tử `ReLU` operator.
+
+### Layer
+
+`Layer` và các lớp con gói các toán tử operators bằng tham số. Ví dụ,
+convolution và linear operators có tham số weight và bias parameters. 
+Tham số được duy trì bởi các lớp `Layer` tương ứng.
+
+### Autograd
+
+[Autograd](./autograd) sử dụng
+[reverse-mode automatic differentiation](https://rufflewind.com/2016-12-30/reverse-mode-automatic-differentiation)
+bằng cách ghi nhớ hoạt động của hàm forward functions của các toán tử rồi tự 
+động gọi hàm backward functions ở chiều ngược lại. Tất cả các hàm functions có thể được 
+hỗ trợ bởi `Scheduler` để tạo ra một [computational graph](./graph) nhằm tối ưu hoá hiệu 
+quả và bộ nhớ. 
+
+### Model
+
+[Model](./graph) cung cấp giao diện cơ bản để thực hiện các mô hình models mới.
+Bạn chỉ cần dùng `Model` và định nghĩa việc thực hiện forward propagation của model bằng cách 
+tạo và gọi các layers của toán tử. `Model` sẽ thực hiện autograd và tự động cập nhật tham số 
+thông qua `Opt` trong khi dữ liệu để training được bơm vào đó.  Với `Model` API, SINGA có 
+nhiều lợi thế trong cả lập trình mệnh lệnh và lập trình khai báo. Người dùng sử dụng một hệ thống 
+sử dụng [Model](./graph) API theo dạng lập trình mệnh lệnh như PyTorch. Khác với
+PyTorch tạo lại phép thực thi operations ở mỗi vòng lặp, SINGA hỗ trợ phép thực thi qua cách 
+tạo một computational graph hàm súc (khi tính năng này được sử dụng) sau vòng lặp đầu tiên. 
+Graph tương tự như đã được tạo bởi các thư viện sử dụng lập trình khai báo, như TensorFlow. 
+Vì thế, SINGA có thể áp dụng các kĩ thuật tối ưu hoá bộ nhớ và tốc độ qua computational graph.
+
+### ONNX
+
+Để hỗ trợ ONNX, SINGA áp dụng một [sonnx](./onnx) module, bao gồm:
+
+- SingaFrontend để lưu SINGA model ở định dạng onnx.
+- SingaBackend để tải model định dạng onnx sang SINGA cho training và
+  inference.
diff --git a/docs-site/docs_viet/source-repository.md b/docs-site/docs_viet/source-repository.md
new file mode 100644
index 0000000..e82b3d5
--- /dev/null
+++ b/docs-site/docs_viet/source-repository.md
@@ -0,0 +1,23 @@
+---
+id: source-repository
+title: Source Repository
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+Dự án này sử dụng [Git](http://git-scm.com/) để quản lý nguồn mã code (source code).
+Hướng dẫn sử dụng Git xem tại http://git-scm.com/documentation .
+
+## Repository
+
+Các đường dẫn sau tới repository của nguồn code online.
+
+- https://gitbox.apache.org/repos/asf?p=singa.git
+
+Bản Github mirror tại
+
+- https://github.com/apache/singa
+
+Mã code có thể cloned từ cả hai repo, vd.,
+
+    git clone https://github.com/apache/singa.git
diff --git a/docs-site/docs_viet/team-list.md b/docs-site/docs_viet/team-list.md
new file mode 100644
index 0000000..1bc56fe
--- /dev/null
+++ b/docs-site/docs_viet/team-list.md
@@ -0,0 +1,57 @@
+---
+id: team-list
+title: Danh sách nhân sự SINGA
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+Một dự án thành công là công sức của rất nhiều người tham gia. Một số thành viên viết code hoặc tài liệu, trong khi những
+người khác góp công sức quí báu vào thử nghiệm, đề xuất sửa chữa và gợi ý. 
+
+Cộng đồng SINGA bao gồm các lập trình viên đa phần đến từ NUS, ĐH Chiết Giang, NetEase, ĐH Osaka, yzBigData, v.v
+
+## PMC
+
+| Tên          | Email                   | Tổ Chức                                  |
+| ------------- | ----------------------- | --------------------------------------------- |
+| Gang Chen     | cg@apache.org           | Zhejiang University                           |
+| Anh Dinh      | dinhtta@apache.org      | Singapore University of Technology and Design |
+| Ted Dunning   | tdunning@apache.org     | Apache Software Foundation                    |
+| Jinyang Gao   | jinyang@apache.org      | DAMO Academy, Alibaba Group                   |
+| Alan Gates    | gates@apache.org        | Apache Software Foundation                    |
+| Zhaojing Luo  | zhaojing@apache.org     | National University of Singapore              |
+| Thejas Nair   | thejas@apache.org       | Apache Software Foundation                    |
+| Beng Chin Ooi | ooibc@apache.org        | National University of Singapore              |
+| Moaz Reyad    | moaz@apache.org         | Université Grenoble Alpes                     |
+| Kian-Lee Tan  | tankianlee@apache.org   | National University of Singapore              |
+| Sheng Wang    | wangsh@apache.org       | DAMO Academy, Alibaba Group                   |
+| Wei Wang      | wangwei@apache.org      | National University of Singapore              |
+| Zhongle Xie   | zhongle@apache.org      | National University of Singapore              |
+| Sai Ho Yeung  | chrishkchris@apache.org | National University of Singapore              |
+| Meihui Zhang  | meihuizhang@apache.org  | Beijing Institute of Technology               |
+| Kaiping Zheng | kaiping@apache.org      | National University of Singapore              |
+
+## Committers
+
+| Tên          | Email                   | Tổ Chức                                      |
+| ------------ | ---------------------- | --------------------------------------------- |
+| Xiangrui Cai | caixr@apache.org       | Nankai University                             |
+| Chonho Lee   | chonho@apache.org      | Osaka University                              |
+| Shicong Lin  | shicong@apache.org     | National University of Singapore              |
+| Rulin Xing   | rulin@apache.org       | Huazhong University of Science and Technology |
+| Wanqi Xue    | xuewanqi@apache.org    | Nanyang Technological University              |
+| Joddiy Zhang | joddiyzhang@apache.org | National University of Singapore              |
+
+## Contributors
+
+| Tên                | Email                        | Tổ Chức                          |
+| ------------------ | ---------------------------- | -------------------------------- |
+| Haibo Chen         | hzchenhaibo@corp.netease.com | NetEase                          |
+| Shicheng Chen      | chengsc@comp.nus.edu.sg      | National University of Singapore |
+| Xin Ji             | vincent.j.xin@gmail.com      | Visenze, Singapore               |
+| Anthony K. H. Tung | atung@comp.nus.edu.sg        | National University of Singapore |
+| Ji Wang            | wangji@mzhtechnologies.com   | Hangzhou MZH Technologies        |
+| Yuan Wang          | wangyuan@corp.netease.com    | NetEase                          |
+| Wenfeng Wu         | dcswuw@gmail.com             | Freelancer, China                |
+| Kaiyuan Yang       | yangky@comp.nus.edu.sg       | National University of Singapore |
+| Chang Yao          | yaochang2009@gmail.com       | Hangzhou MZH Technologies        |
diff --git a/docs-site/docs_viet/tensor.md b/docs-site/docs_viet/tensor.md
new file mode 100644
index 0000000..97d759b
--- /dev/null
+++ b/docs-site/docs_viet/tensor.md
@@ -0,0 +1,268 @@
+---
+id: tensor
+title: Tensor
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+Mỗi thực thể Tensor instance là một array đa chiều được đặt trong một thực thể Device. 
+Thực thể Tensor lưu các biến và cung cấp phép tính đại số tuyến tính cho các loại thiết bị phần cứng khác nhau mà không cần người dùng để ý. Lưu ý rằng người dùng cần đảm bảo các toán hạng tensor được đặt ở cùng một thiết bị ngoại trừ hàm copy. 
+
+## Cách sử dụng Tensor
+
+### Tạo Tensor
+
+```python
+>>> import numpy as np
+>>> from singa import tensor
+>>> tensor.from_numpy( np.asarray([[1, 0, 0], [0, 1, 0]], dtype=np.float32) )
+[[1. 0. 0.]
+ [0. 1. 0.]]
+```
+
+### Chuyển sang numpy
+
+```python
+>>> a = np.asarray([[1, 0, 0], [0, 1, 0]], dtype=np.float32)
+>>> tensor.from_numpy(a)
+[[1. 0. 0.]
+ [0. 1. 0.]]
+>>> tensor.to_numpy(tensor.from_numpy(a))
+array([[1., 0., 0.],
+       [0., 1., 0.]], dtype=float32)
+```
+
+### Phương pháp Tensor
+
+```python
+>>> t = tensor.from_numpy(a)
+>>> t.transpose([1,0])
+[[1. 0.]
+ [0. 1.]
+ [0. 0.]]
+```
+
+biến đổi `tensor` tới 6 chữ số 
+
+```python
+>>> a = tensor.random((2,3,4,5,6,7))
+>>> a.shape
+(2, 3, 4, 5, 6, 7)
+>>> a.reshape((2,3,4,5,7,6)).transpose((3,2,1,0,4,5)).shape
+(5, 4, 3, 2, 7, 6)
+```
+
+### Phương pháp số học Tensor 
+
+`tensor` được đánh giá trong thời gian thực.
+
+```python
+>>> t + 1
+[[2. 1. 1.]
+ [1. 2. 1.]]
+>>> t / 5
+[[0.2 0.  0. ]
+ [0.  0.2 0. ]]
+```
+
+`tensor` tạo số học:
+
+```python
+>>> a
+[[1. 2. 3.]
+ [4. 5. 6.]]
+>>> b
+[[1. 2. 3.]]
+>>> a + b
+[[2. 4. 6.]
+ [5. 7. 9.]]
+>>> a * b
+[[ 1.  4.  9.]
+ [ 4. 10. 18.]]
+>>> a / b
+[[1.  1.  1. ]
+ [4.  2.5 2. ]]
+>>> a/=b # inplace operation
+>>> a
+[[1.  1.  1. ]
+ [4.  2.5 2. ]]
+```
+
+`tensor` broadcasting on matrix multiplication (GEMM)
+
+```python
+>>> from singa import tensor
+>>> a = tensor.random((2,2,2,3))
+>>> b = tensor.random((2,3,4))
+>>> tensor.mult(a,b).shape
+(2, 2, 2, 4)
+```
+
+### Hàm lập trình Tensor Functions
+
+Hàm Functions trong `singa.tensor` tạo ra đối tượng `tensor` mới sau khi áp dụng phép tính trong hàm function.
+
+```python
+>>> tensor.log(t+1)
+[[0.6931472 0.        0.       ]
+ [0.        0.6931472 0.       ]]
+```
+
+### Tensor ở các thiết bị khác nhau
+
+`tensor` được tạo ra trên máy chủ (CPU) từ ban đầu; nó cũng được tạo ra trên các thiết bị phần cứng khác nhau bằng cách cụ thể hoá `device`. Một `tensor` có thể chuyển giữa `device`s qua hàm `to_device()` function.
+
+```python
+>>> from singa import device
+>>> x = tensor.Tensor((2, 3), device.create_cuda_gpu())
+>>> x.gaussian(1,1)
+>>> x
+[[1.531889   1.0128608  0.12691343]
+ [2.1674204  3.083676   2.7421203 ]]
+>>> # move to host
+>>> x.to_device(device.get_default_device())
+```
+
+### Dùng Tensor để train MLP
+
+```python
+
+"""
+  Đoạn mã trích từ examples/mlp/module.py
+"""
+
+label = get_label()
+data = get_data()
+
+dev = device.create_cuda_gpu_on(0)
+sgd = opt.SGD(0.05)
+
+# định nghĩa tensor cho dữ liệu và nhãn đầu vào 
+tx = tensor.Tensor((400, 2), dev, tensor.float32)
+ty = tensor.Tensor((400,), dev, tensor.int32)
+model = MLP(data_size=2, perceptron_size=3, num_classes=2)
+
+# đính model vào graph
+model.set_optimizer(sgd)
+model.compile([tx], is_train=True, use_graph=True, sequential=False)
+model.train()
+
+for i in range(1001):
+    tx.copy_from_numpy(data)
+    ty.copy_from_numpy(label)
+    out, loss = model(tx, ty, 'fp32', spars=None)
+
+    if i % 100 == 0:
+        print("training loss = ", tensor.to_numpy(loss)[0])
+```
+
+Đầu ra:
+
+```bash
+$ python3 examples/mlp/module.py
+training loss =  0.6158037
+training loss =  0.52852553
+training loss =  0.4571422
+training loss =  0.37274635
+training loss =  0.30146334
+training loss =  0.24906921
+training loss =  0.21128304
+training loss =  0.18390492
+training loss =  0.16362564
+training loss =  0.148164
+training loss =  0.13589878
+```
+
+## Áp dụng Tensor
+
+Mục trước chỉ ra cách sử dụng chung của `Tensor`, việc áp dụng cụ thể được đưa ra sau đây. Đầu tiên, sẽ giới thiệu việc thiết lập tensors Python và C++. Phần sau sẽ nói về cách frontend (Python)
+và backend (C++) kết nối với nhau và cách để mở rộng chúng. 
+
+### Python Tensor
+
+`Tensor` của lớp Python, được định nghĩa trong `python/singa/tensor.py`, cung cấp cách dùng tensor ở tầng cao, để thực hiện việc vận hành deep learning (qua
+[autograd](./autograd)), cũng như là quản lý dữ liệu bởi người dùng cuối. 
+
+Hoạt động cơ bản của nó là gói xung quanh các phương pháp C++ tensor, cả phương pháp số học
+(như `sum`) và không số học (như `reshape`). Một vài phép số học cao cấp về sau được giới thiệu
+và áp dụng sử dụng thuần Python
+tensor API, như `tensordot`. Python Tensor APIs có thể sử dụng để thực hiện dễ dàng các phép tính 
+neural network phức tạp với các phương pháp methods linh hoạt có sẵn. 
+
+### C++ Tensor
+
+`Tensor` lớp C++, được định nghĩa trong  `include/singa/core/tensor.h`, về cơ bản quản lý 
+bộ nhớ nắm giữ dữ liệu, và cung cấp APIs tầm thấp cho các hàm thực hiện tensor. Đồng thời nó cũng cung cấp các phương pháp số học đa dạng (như `matmul`) bằng cách gói các chương trình backends khác nhau (CUDA, BLAS, cuBLAS, v.v.).
+
+#### Văn bản thực hiện và Khoá Bộ nhớ 
+
+Hai khái niệm hay cấu trúc dữ liệu quan trọng của `Tensor` là việc áp dụng
+`device`, và khoá bộ nhớ `Block`.
+
+Mỗi `Tensor` được lưu theo nghiã đen và quản lý bởi một thiết bị phần cứng,
+thể hiện theo nghĩa thực hành (CPU, GPU). Tính toán Tensor được thực hiện 
+trên thiết bị. 
+
+Dữ liệu Tensor  trong hàm `Block`, được định nghĩa trong `include/singa/core/common.h`.
+`Block` chứa dữ liệu cơ sở, trong khi tensors chịu trách nhiệm về lý lịch dữ 
+liệu metadata mô tả tensor, như `shape`, `strides`.
+
+#### Tensor Math Backends
+
+Để tận dụng các thư viện chương trình toán hiệu quả cung cấp bởi backend từ các thiết bị phần cứng 
+khác nhau, SINGA cung cấp một bộ Tensor functions cho mỗi backend được hỗ trợ.
+
+- 'tensor_math_cpp.h' áp dụng vận hành sử dụng Cpp (với CBLAS) cho thiết bị CppCPU.
+- 'tensor_math_cuda.h' áp dụng vận hành sử dụng Cuda (với cuBLAS) cho thiết bị
+  CudaGPU.
+- 'tensor_math_opencl.h' áp dụng vận hành sử dụng OpenCL cho thiết bị OpenclGPU.
+
+### Trình bày C++ APIs qua Python
+
+SWIG(http://www.swig.org/) là công cụ có thể tự động qui đổi C++ APIs
+sang Python APIs. SINGA sử dụng SWIG để trình bày C++ APIs sang Python. Một vài tệp tin
+được tạo bởi SWIG, bao gồm `python/singa/singa_wrap.py`. Các Python
+mô-đun (như, `tensor`, `device` và `autograd`) nhập mô-đun để gọi C++ APIs 
+để áp dụng hàm và lớp Python.
+
+```python
+import tensor
+
+t = tensor.Tensor(shape=(2, 3))
+```
+
+Ví dụ, khi một Python `Tensor` instance được tạo ra ở trên, việc áp dụng `Tensor`
+class tạo ra một instance của `Tensor` class định nghĩa trong 
+`singa_wrap.py`, tương ứng với C++ `Tensor` class. Rõ ràng hơn,
+`Tensor` class trong `singa_wrap.py` để chỉ `CTensor` trong `tensor.py`.
+
+```python
+# trong tensor.py
+from . import singa_wrap as singa
+
+CTensor = singa.Tensor
+```
+
+### Tạo Hàm Tensor Functions mới
+
+Với nền tảng được mô tả phía trên, mở rộng hàm tensor functions
+có thể dễ dàng thực hiện từ dưới lên, Với các phép toán, các bước làm như sau: 
+
+- Khai báo API mới cho `tensor.h`
+- Tạo mã code sử dụng tiền tố xác định trước trong `tensor.cc`, lấy 
+  `GenUnaryTensorFn(Abs);` làm ví dụ.
+- Khai báo theo mẫu method/function trong `tensor_math.h`
+- Thực hiện áp dụng ít nhất cho CPU (`tensor_math_cpp.h`) và
+  GPU(`tensor_math_cuda.h`)
+- Trình API qua SWIG bằng cách thêm nó vào `src/api/core_tensor.i`
+- Định nghĩa Python Tensor API trong `tensor.py` bằng cách tự động gọi hàm
+  function được tạo trong `singa_wrap.py`
+- Viết unit tests khi phù hợp
+
+## Python API
+
+_đang cập nhật_
+
+## CPP API
+
+_đang cập nhật_
diff --git a/docs-site/docs_viet/time-profiling.md b/docs-site/docs_viet/time-profiling.md
new file mode 100644
index 0000000..48b6bea
--- /dev/null
+++ b/docs-site/docs_viet/time-profiling.md
@@ -0,0 +1,157 @@
+---
+id: time-profiling
+title: Time Profiling
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+SINGA hỗ trợ hồ sơ thời gian (time profilier) của mỗi toán tử được lưu tạm thời trong graph. Để tận dụng chức năng hồ sơ thời gian, chúng tôi trước tiên gọi method
+`device.SetVerbosity` để tạo độ dài cho hồ sơ thời gian, sau đó gọi hàm `device.PrintTimeProfiling` 
+để in ra kết quả của hồ sơ thời gian.
+
+## Thiết lập Độ dài cho Hồ sơ thời gian 
+
+Để sử dụng chức năng hồ sơ thời gian, bạn cần tạo độ dài cho nó. Có ba mức độ. Giá trị ban đầu đặt sẵn `verbosity == 0`, là không áp dụng hồ sơ thời gian. Khi bạn để `verbosity == 1`, nó sẽ lên hồ sơ thời gian chạy forward và backward. Khi `verbosity == 2`, nó sẽ lên hồ sơ thời gian cho mỗi buffered operation trong graph.
+
+Sau đây là mã code ví dụ để thiết lập chức năng hồ sơ thời gian:
+
+```python
+# tạo thiết bị
+from singa import device
+dev = device.create_cuda_gpu()
+# đặt độ dài
+verbosity = 2
+dev.SetVerbosity(verbosity)
+# không bắt buộc: bỏ qua 5 vòng lặp đầu tiên khi lên hồ sơ thời gian
+dev.SetSkipIteration(5)
+```
+
+Tiếp theo, sau khi kết thúc training ở cuối mỗi chương trình, chúng ta có thể in kết quả hồ sơ thời gian bằng cách gọi method `device.PrintTimeProfiling`:
+
+```python
+dev.PrintTimeProfiling()
+```
+
+## Ví dụ đầu ra cho các độ dài khác nhau
+
+Có thể chạy
+[ví dụ](https://github.com/apache/singa/blob/master/examples/cnn/benchmark.py)
+ResNet để xem kết quả với cách đặt độ dài khác nhau: 
+
+1. `verbosity == 1`
+
+```
+Time Profiling:
+Forward Propagation Time : 0.0409127 sec
+Backward Propagation Time : 0.114813 sec
+```
+
+2. `verbosity == 2`
+
+```
+Time Profiling:
+OP_ID0. SetValue : 1.73722e-05 sec
+OP_ID1. cudnnConvForward : 0.000612724 sec
+OP_ID2. GpuBatchNormForwardTraining : 0.000559449 sec
+OP_ID3. ReLU : 0.000375004 sec
+OP_ID4. GpuPoolingForward : 0.000240041 sec
+OP_ID5. SetValue : 3.4176e-06 sec
+OP_ID6. cudnnConvForward : 0.000115619 sec
+OP_ID7. GpuBatchNormForwardTraining : 0.000150415 sec
+OP_ID8. ReLU : 9.95494e-05 sec
+OP_ID9. SetValue : 3.22432e-06 sec
+OP_ID10. cudnnConvForward : 0.000648668 sec
+OP_ID11. GpuBatchNormForwardTraining : 0.000149793 sec
+OP_ID12. ReLU : 9.92118e-05 sec
+OP_ID13. SetValue : 3.37728e-06 sec
+OP_ID14. cudnnConvForward : 0.000400953 sec
+OP_ID15. GpuBatchNormForwardTraining : 0.000572181 sec
+OP_ID16. SetValue : 3.21312e-06 sec
+OP_ID17. cudnnConvForward : 0.000398698 sec
+OP_ID18. GpuBatchNormForwardTraining : 0.00056836 sec
+OP_ID19. Add : 0.000542246 sec
+OP_ID20. ReLU : 0.000372783 sec
+OP_ID21. SetValue : 3.25312e-06 sec
+OP_ID22. cudnnConvForward : 0.000260731 sec
+OP_ID23. GpuBatchNormForwardTraining : 0.000149041 sec
+OP_ID24. ReLU : 9.9072e-05 sec
+OP_ID25. SetValue : 3.10592e-06 sec
+OP_ID26. cudnnConvForward : 0.000637481 sec
+OP_ID27. GpuBatchNormForwardTraining : 0.000152577 sec
+OP_ID28. ReLU : 9.90518e-05 sec
+OP_ID29. SetValue : 3.28224e-06 sec
+OP_ID30. cudnnConvForward : 0.000404586 sec
+OP_ID31. GpuBatchNormForwardTraining : 0.000569679 sec
+OP_ID32. Add : 0.000542291 sec
+OP_ID33. ReLU : 0.00037211 sec
+OP_ID34. SetValue : 3.13696e-06 sec
+OP_ID35. cudnnConvForward : 0.000261219 sec
+OP_ID36. GpuBatchNormForwardTraining : 0.000148281 sec
+OP_ID37. ReLU : 9.89299e-05 sec
+OP_ID38. SetValue : 3.25216e-06 sec
+OP_ID39. cudnnConvForward : 0.000633644 sec
+OP_ID40. GpuBatchNormForwardTraining : 0.000150711 sec
+OP_ID41. ReLU : 9.84902e-05 sec
+OP_ID42. SetValue : 3.18176e-06 sec
+OP_ID43. cudnnConvForward : 0.000402752 sec
+OP_ID44. GpuBatchNormForwardTraining : 0.000571523 sec
+OP_ID45. Add : 0.000542435 sec
+OP_ID46. ReLU : 0.000372539 sec
+OP_ID47. SetValue : 3.24672e-06 sec
+OP_ID48. cudnnConvForward : 0.000493054 sec
+OP_ID49. GpuBatchNormForwardTraining : 0.000293142 sec
+OP_ID50. ReLU : 0.000190047 sec
+OP_ID51. SetValue : 3.14784e-06 sec
+OP_ID52. cudnnConvForward : 0.00148837 sec
+OP_ID53. GpuBatchNormForwardTraining : 8.34794e-05 sec
+OP_ID54. ReLU : 5.23254e-05 sec
+OP_ID55. SetValue : 3.40096e-06 sec
+OP_ID56. cudnnConvForward : 0.000292971 sec
+OP_ID57. GpuBatchNormForwardTraining : 0.00029174 sec
+OP_ID58. SetValue : 3.3248e-06 sec
+OP_ID59. cudnnConvForward : 0.000590154 sec
+OP_ID60. GpuBatchNormForwardTraining : 0.000294149 sec
+OP_ID61. Add : 0.000275119 sec
+OP_ID62. ReLU : 0.000189268 sec
+OP_ID63. SetValue : 3.2704e-06 sec
+OP_ID64. cudnnConvForward : 0.000341232 sec
+OP_ID65. GpuBatchNormForwardTraining : 8.3304e-05 sec
+OP_ID66. ReLU : 5.23667e-05 sec
+OP_ID67. SetValue : 3.19936e-06 sec
+OP_ID68. cudnnConvForward : 0.000542484 sec
+OP_ID69. GpuBatchNormForwardTraining : 8.60537e-05 sec
+OP_ID70. ReLU : 5.2479e-05 sec
+OP_ID71. SetValue : 3.41824e-06 sec
+OP_ID72. cudnnConvForward : 0.000291295 sec
+OP_ID73. GpuBatchNormForwardTraining : 0.000292795 sec
+OP_ID74. Add : 0.000274438 sec
+OP_ID75. ReLU : 0.000189689 sec
+OP_ID76. SetValue : 3.21984e-06 sec
+OP_ID77. cudnnConvForward : 0.000338776 sec
+OP_ID78. GpuBatchNormForwardTraining : 8.484e-05 sec
+OP_ID79. ReLU : 5.29408e-05 sec
+OP_ID80. SetValue : 3.18208e-06 sec
+OP_ID81. cudnnConvForward : 0.000545542 sec
+OP_ID82. GpuBatchNormForwardTraining : 8.40976e-05 sec
+OP_ID83. ReLU : 5.2256e-05 sec
+OP_ID84. SetValue : 3.36256e-06 sec
+OP_ID85. cudnnConvForward : 0.000293003 sec
+OP_ID86. GpuBatchNormForwardTraining : 0.0002989 sec
+OP_ID87. Add : 0.000275041 sec
+OP_ID88. ReLU : 0.000189867 sec
+OP_ID89. SetValue : 3.1184e-06 sec
+OP_ID90. cudnnConvForward : 0.000340417 sec
+OP_ID91. GpuBatchNormForwardTraining : 8.39395e-05 sec
+OP_ID92. ReLU : 5.26544e-05 sec
+OP_ID93. SetValue : 3.2336e-06 sec
+OP_ID94. cudnnConvForward : 0.000539787 sec
+OP_ID95. GpuBatchNormForwardTraining : 8.2753e-05 sec
+OP_ID96. ReLU : 4.86758e-05 sec
+OP_ID97. SetValue : 3.24384e-06 sec
+OP_ID98. cudnnConvForward : 0.000287108 sec
+OP_ID99. GpuBatchNormForwardTraining : 0.000293127 sec
+OP_ID100. Add : 0.000269478 sec
+.
+.
+.
+```
diff --git a/docs-site/docs_viet/wheel-cpu-dev.md b/docs-site/docs_viet/wheel-cpu-dev.md
new file mode 100644
index 0000000..cfa9771
--- /dev/null
+++ b/docs-site/docs_viet/wheel-cpu-dev.md
@@ -0,0 +1,12 @@
+---
+id: wheel-cpu-dev
+title: Dùng cho CPU (phiên bản dev)
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+## 3.0.0.dev200720
+
+- [Python 3.6](https://singa-wheel.s3-ap-southeast-1.amazonaws.com/singa-3.0.0.dev200720-cp36-cp36m-manylinux2014_x86_64.whl)
+- [Python 3.7](https://singa-wheel.s3-ap-southeast-1.amazonaws.com/singa-3.0.0.dev200720-cp37-cp37m-manylinux2014_x86_64.whl)
+- [Python 3.8](https://singa-wheel.s3-ap-southeast-1.amazonaws.com/singa-3.0.0.dev200720-cp38-cp38-manylinux2014_x86_64.whl)
diff --git a/docs-site/docs_viet/wheel-cpu.md b/docs-site/docs_viet/wheel-cpu.md
new file mode 100644
index 0000000..e231440
--- /dev/null
+++ b/docs-site/docs_viet/wheel-cpu.md
@@ -0,0 +1,18 @@
+---
+id: wheel-cpu
+title: Dùng cho CPU
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+## 3.1.0
+
+- [Python 3.6](https://singa-wheel.s3-ap-southeast-1.amazonaws.com/singa-3.1.0-cp36-cp36m-manylinux2014_x86_64.whl)
+- [Python 3.7](https://singa-wheel.s3-ap-southeast-1.amazonaws.com/singa-3.1.0-cp37-cp37m-manylinux2014_x86_64.whl)
+- [Python 3.8](https://singa-wheel.s3-ap-southeast-1.amazonaws.com/singa-3.1.0-cp38-cp38-manylinux2014_x86_64.whl)
+
+## 3.0.0
+
+- [Python 3.6](https://singa-wheel.s3-ap-southeast-1.amazonaws.com/singa-3.0.0-cp36-cp36m-manylinux2014_x86_64.whl)
+- [Python 3.7](https://singa-wheel.s3-ap-southeast-1.amazonaws.com/singa-3.0.0-cp37-cp37m-manylinux2014_x86_64.whl)
+- [Python 3.8](https://singa-wheel.s3-ap-southeast-1.amazonaws.com/singa-3.0.0-cp38-cp38-manylinux2014_x86_64.whl)
diff --git a/docs-site/docs_viet/wheel-gpu-dev.md b/docs-site/docs_viet/wheel-gpu-dev.md
new file mode 100644
index 0000000..aa48994
--- /dev/null
+++ b/docs-site/docs_viet/wheel-gpu-dev.md
@@ -0,0 +1,12 @@
+---
+id: wheel-gpu-dev
+title: Sử Dụng CUDA (phiên bản dev)
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+## 3.0.0.dev200720
+
+- [CUDA10.2, cuDNN 7.6.5, Python 3.6](https://singa-wheel.s3-ap-southeast-1.amazonaws.com/singa-3.0.0.dev200720%2Bcuda10.2-cp36-cp36m-manylinux2014_x86_64.whl)
+- [CUDA10.2, cuDNN 7.6.5, Python 3.7](https://singa-wheel.s3-ap-southeast-1.amazonaws.com/singa-3.0.0.dev200720%2Bcuda10.2-cp37-cp37m-manylinux2014_x86_64.whl)
+- [CUDA10.2, cuDNN 7.6.5, Python 3.8](https://singa-wheel.s3-ap-southeast-1.amazonaws.com/singa-3.0.0.dev200720%2Bcuda10.2-cp38-cp38-manylinux2014_x86_64.whl)
diff --git a/docs-site/docs_viet/wheel-gpu.md b/docs-site/docs_viet/wheel-gpu.md
new file mode 100644
index 0000000..06ffe57
--- /dev/null
+++ b/docs-site/docs_viet/wheel-gpu.md
@@ -0,0 +1,21 @@
+---
+id: wheel-gpu
+title: Sử Dụng CUDA
+---
+
+<!--- 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.  The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.  -->
+
+## 3.1.0
+
+- [CUDA10.2, cuDNN 7.6.5, Python
+  3.6]https://singa-wheel.s3-ap-southeast-1.amazonaws.com/singa-3.1.0%2Bcuda10.2-cp36-cp36m-manylinux2014_x86_64.whl)
+- [CUDA10.2, cuDNN 7.6.5, Python
+  3.7]https://singa-wheel.s3-ap-southeast-1.amazonaws.com/singa-3.1.0%2Bcuda10.2-cp37-cp37m-manylinux2014_x86_64.whl)
+- [CUDA10.2, cuDNN 7.6.5, Python
+  3.8]https://singa-wheel.s3-ap-southeast-1.amazonaws.com/singa-3.1.0%2Bcuda10.2-cp38-cp38-manylinux2014_x86_64.whl)
+
+## 3.0.0
+
+- [CUDA10.2, cuDNN 7.6.5, Python 3.6](https://singa-wheel.s3-ap-southeast-1.amazonaws.com/singa-3.0.0%2Bcuda10.2-cp36-cp36m-manylinux2014_x86_64.whl)
+- [CUDA10.2, cuDNN 7.6.5, Python 3.7](https://singa-wheel.s3-ap-southeast-1.amazonaws.com/singa-3.0.0%2Bcuda10.2-cp37-cp37m-manylinux2014_x86_64.whl)
+- [CUDA10.2, cuDNN 7.6.5, Python 3.8](https://singa-wheel.s3-ap-southeast-1.amazonaws.com/singa-3.0.0%2Bcuda10.2-cp38-cp38-manylinux2014_x86_64.whl)