follow comments and refine doc

del_some_in_makelist
tensor-tang 7 years ago
parent 3f2fa0a1f6
commit c1a6870706

@ -22,7 +22,7 @@
## Key Points
### Background
目前PaddlePaddle采用了 Intel® MKL库的cblas_?gemm函数这个函数本身会在计算前将原数据转换为更适合英特尔平台的内部格式。
目前PaddlePaddle采用了 Intel® MKL库的[cblas_?gemm](https://software.intel.com/en-us/mkl-developer-reference-c-cblas-gemm)函数,这个函数本身会在计算前将原数据转换为更适合英特尔平台的内部格式。
1. 转换耗时 \
这一数据格式的转换操作Packing在问题本身的计算量比较小的时候显得相对来说较为耗时。例如在DeepSpeech2 \[[2](#references)\] 的Vanilla RNN部分中矩阵大小是`batch_size * 2048`。
@ -38,9 +38,9 @@
通过使用这些API我们可以先完成对原数据的Packing操作再把已转换为Packed格式的数据传递给那些复用同一数据的gemm_compute函数从而避免了Packing冗余。
### Solution
在RNN的情况下同一次**前向/后向**forward/backward过程中所有**时间步**time step共享同一个**权重**weight。当只做**预测**inference各次**前向**之间也都使用了相同的**权重**,没有必要在每次**前向**中每个**时间步**的计算时对**权重**进行重复的Packing操作。
在RNN的情况下同一次前向、后向forward/backward过程中所有时间步time step共享同一个权重weight。当只做推断inference各次前向之间也都使用了相同的权重没有必要在每次前向中每个时间步的计算时对权重进行重复的Packing操作。
我们通过使用新引入的GEMM Packed APIs在层**初始化**的时时候,先完成对**权重**的Packing操作然后在**前向/后向**时复用已经转换过的**权重**,并在每次**权重**更新后,对新的**权重**进行转换用于下次迭代。
我们通过使用新引入的GEMM Packed APIs在层初始化的时候先完成对权重的Packing操作然后在前向后向时复用已经转换过的权重并在每次权重更新后对新的权重进行转换用于下次迭代。
* 优化前对于序列长度sequence length为`T`的网络模型model, `N`次迭代执行的转换次数为:
- `inference` `N * T`

Loading…
Cancel
Save