diff --git a/docs/tutorial/how-to-setup.md b/docs/tutorial/how-to-setup.md
new file mode 100644
index 000000000..d0cc5510a
--- /dev/null
+++ b/docs/tutorial/how-to-setup.md
@@ -0,0 +1,129 @@
+# 背景
+
+当前的 Paddle Symbolic Opcode Translator 已经可以处理常见的场景。其中包含Paddle的API调用、Paddle Method调用、Layer 调用甚至Resnet也可以以单子图的形式运行。因此Paddle Symbolic Opcode Translator进入了正确率和成功率的保证阶段:对Paddle原有动转静的所有单测进行兼容测试,保证 100% 的兼容。
+
+# 单测调研现状
+
+在Paddle侧提了`AST to static` 和 `PSOT to static` 的统一PR之后,我们进行了一次正确率测试,目前的成功率是:47.5%(上述是开了非严格模式下的成功率)。一共 120 个单测只完整通过了 57个。
+
+
+目前还存在问题的单测如下: [单测完整情况]
+
+
+为了加速单测的测试,并且让更多的开发者参与进来,我们将这些单测的修复以任务的形式发布,大家可以自主认领,并参与开发。这里将介绍如何联合 Paddle 进行 PSOT 仓库的单测复现和单测修复。
+
+
+# 环境搭建部分
+
+这个章节讲述如何进行单测修复环境的搭建。
+
+## Step1: 下载并编译Paddle
+
+因为单测是依赖Paddle的,因此我们需要首先编译Paddle,并且获取最新的 PSOT pr。
+
+1. 使用下面命令clone paddle仓库。
+```bash
+git clone https://github.com/PaddlePaddle/Paddle
+git remote add upstream https://github.com/PaddlePaddle/Paddle
+```
+
+2. 拉取最新的 Paddle 补丁,[PSOT 对 Paddle 的 PR](https://github.com/PaddlePaddle/Paddle/pull/54202)。这个PR让`paddle.jit.to_static` 接口默认调用 PSOT 进行动转静,而不是原来的AST to static。
+```bash
+git fetch upstream pull/54202/head:pr_54202
+git checkout pr_54202
+```
+
+3. 编译 paddle,具体的编译问题可以查看[paddle的官网](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/install/compile/linux-compile.html#anchor-0)。下面给出推荐的编译脚本文件(rebuild.sh)。CPU和GPU都可以,注意我们默认的Python版本是3.8,大家记得安装对应的环境,推荐使用 Conda。
+```bash
+set -e
+cmake .. -DPY_VERSION=3.8 -DWITH_GPU=OFF -DWITH_TESTING=ON -DCMAKE_BUILD_TYPE=Release
+make install -j 16 #> /home/data/error2 2>&1
+```
+
+上述命令都走完了,我们可以使用如下的命令来测试是否成功安装了Paddle:
+
+```bash
+cd ~ # 切换到别的目录,防止复用了原来的Paddle目录。
+PYTHONPAYH=$PADDLE_ROOT/build/python python
+```
+
+如果上述代码import paddle成功,那么说明paddle安装成功了。注意将你的 PADDLE_ROOT 替换为你git clone 的目录
+
+
+## Step2: 联合PSOT仓库
+
+编译完毕Paddle之后,我们需要配置 PSOT仓库,让Paddle使用最新的PSOT 仓库代码。
+
+1. 拉取最新的 PSOT 仓库
+```bash
+git clone https://github.com/2742195759/paddle-symbolic-trace
+git checkout origin/develop
+```
+
+2. 找到 tests/run_all.sh 文件,修改第2行的`export PYTHONPATH=$PYTHONPATH:../` 为 `export PYTHONPATH=$PYTHONPATH:../:$PADDLE_ROOT/build/python` 然后运行,查看是否可以成功运行所有的单测,如果提示Paddle找不到,请认真查看PYTHONPATH的路径是否设置正确。
+```bash
+bash run_all.sh
+```
+
+3. 软链到最新的PSOT仓库:
+```bash
+cd $PADDLE_ROOT/build/python/paddle/jit/
+rm -rf symbolic_trace
+ln -sf $PSOT_ROOT/symbolic_trace
+```
+
+4. 在`$PSOT_ROOT/`目录下创建脚本: start_test.sh,输入如下内容
+```bash
+PYTHONPATH=$PADDLE_ROOT/build/python/ python $PADDLE_ROOT/test/dygraph_to_static/$1 $2
+```
+
+5. 运行单测,看是否成功:
+```bash
+cd $PSOT_ROOT/
+./start_test.sh test_tensor_hook.py
+```
+
+如果在第5步成功运行了单测,说明成功了,可以进行单测的修复了。
+
+# 单测修复指导
+
+单测的修复需要对PSOT仓库有一定的了解,但是大部分单测我们都给出的可能的问题和解决方法,所以可以在修复单测的过程中注重看对应的部分,然后进行修复,使用 pdb 来进行流程的跟踪还是很推荐的。
+
+## AST Static Only 单测
+
+由于Paddle的存量单测都是 AST 下的单测,所有并不是所有的单测我们都需要保证正确,有的单测就是专门在AST下运行的,如果在运行对应的单测出现了:
+```log
+ERROR: test_switch_eval_and_train (__main__.TestWithTrainAndEval)
+----------------------------------------------------------------------
+Traceback (most recent call last):
+ File "/home/ssd2/xiongkun/Paddle/test/dygraph_to_static/test_partial_program.py", line 135, in test_switch_eval_and_train
+ _, train_partial_layer = linear_net.forward.program_cache.last()[-1]
+ File "/home/ssd2/xiongkun/Paddle/build/python/paddle/jit/dy2static/program_translator.py", line 717, in program_cache
+ raise_error_template("program_cache")()
+ File "/home/ssd2/xiongkun/Paddle/build/python/paddle/jit/dy2static/program_translator.py", line 664, in _raise_error
+ raise RuntimeError(error_template.format(func=func_str))
+RuntimeError: Can't call program_cache when enable_fallback=True.Use paddle.jit.to_static(enable_fallback=False) instead.
+
+----------------------------------------------------------------------
+```
+从报错中我们可以看到,出错的原因是enable fallback=True,这类问题可以直接对单测进行装饰来修复:
+
+```python
+@AST_ONLY #<-- 添加这个装饰器就可以了,这个单测将只跑 AST to static
+class TestPruneUnusedParamInProgram(unittest.TestCase):
+ def test_prune(self):
+ input_ids = np.array([[15, 11, 6, 3, 18, 13]]).astype("float32")
+
+ place = fluid.CPUPlace()
+ with fluid.dygraph.guard(place):
+ model = GPT2LMHeadModel()
+ model.eval()
+ input_ids = paddle.to_tensor(input_ids)
+ out = model(input_ids)
+ np.testing.assert_array_equal(out.numpy(), [[15, 11]])
+```
+
+
+## API 列表问题
+
+有的问题是因为