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)
