-
Notifications
You must be signed in to change notification settings - Fork 157
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Optimize the performance of PyramidDNN on CPU #151
Comments
Profile分析结果@Aurelius84 提供的profile对比
|
search_pyramid_hash分析
使用gperftools分析得到: |
lookup_table & sequence_pool优化方案分析 @intel
优化计划和进展
|
确定框架耗时,@zhaoyuchen2018
|
cmd: perf stat sh run_train.sh
上面是perf的结果,可以看出来paddle相比竞品 context switch多了~200倍,会影响CPU的执行效率。 |
|
murmurhash3_x64_128优化
优化后:
op 时间:
|
@luotao1 关于perf log里观察到context_switch的次数比竞品高200倍的问题,我看了一下vtune log。
一个疑问是:是否这些“无用的”OpenBLAS线程导致了context_switch次数的增加? 尽管它们不占用多少CPU时间,但会增加CPU调度的几率。 |
@jianhang-liu 初步怀疑是numpy调用的OpenBlas库,类似issue:ray-project/ray#1654 tensorflow/tensorflow#17315 |
可以试试用export OPENBLAS_NUM_THREADS=1(或通过代码在runtime进行设置)控制OpenBLAS线程数,然后用Vtune看看是否生效 |
从下面两点做了尝试:
|
复现了 @zhaoyuchen2018 在#151 (comment) 中的结论。
机器和 @zhaoyuchen2018 的不一样。但占比类似。可以看出来paddle相比竞品
|
@bingyanghuang 是的。PE里读数据和主线程计算是异步的。 |
去掉了read lock重新profile的结果:PaddlePaddle/Paddle#19203 |
Search_pyramid_hash分析:@jianhang-liu 的分析:
@luotao 的分析
|
去掉reader lock测试了一个epoch(5500个iter)的整体时间:PaddlePaddle/Paddle#19203
lock对整体时间大概有2%的影响 |
根据补0操作的分析 #151 (comment) , 尝试了@ Aurelius84 PaddlePaddle/Paddle#19290 改动逻辑逻辑是这样的,在pyramid_hash里做padding,之后在squence_pool里是不会再走padding逻辑的,因为不存在有长度为0的sequence; 如果不在pyramid_hash里做padding,则输出分为以下两种情况:
结论
|
使用AVX汇编的memcpy.S,能看到search_pyramid_hash中的memcpy的时间(35s-》30s)降下来了,但整体时间没有明显变化。 memcpy的量
其中 结果对比 |
测试多线程的结果:
paddle比竞品慢44% |
@jianhang-liu @bingyanghuang @yinghu5 wangyang的分析:
wangyang的建议
|
@Aurelius84 在pyramid_hash调用memcpy的地方都做了调用计数,分别用1行样本和5000条样本,在drop_out_percent=0. samplint_rate=1.的条件下,测了一下结果。paddle和竞品的memcpy次数几乎是一样的。从数据里可以看出,竞品同样的数据在每轮也会有波动。 |
大致结论:
|
|
由于:
每个epoch时间和profile结果也有变化。2650 V4上的profile结果见
|
@luotao1 优化的目标是什么?在Clould 24线程环境下追齐竞品?892(-7.5%) |
@jianhang-liu 是的。单机24线程追平竞品。 目前有以下几个可尝试的点:
|
@LeoZhao-Intel Please help to have a check. Thanks! |
看完长长的history,感觉是在用PE做CPU上的PyramidDNN training, 有guide可以帮助我把reproduce环境setup起来吗?或者是ut ? |
PaddlePaddle/Paddle#21206 is to improve memcpy perf by prefetching |
负责人
@zhaoyuchen2018 , @luotao1
初始性能
结论:
新增op
The text was updated successfully, but these errors were encountered: