[PaddlePaddle/Paddle]不同的编译环境编译出来的paddle_trainer性能差异扩大

2024-01-05 169 views
2

用wangyanfei同学编译出来的paddle_trainer和我cmake出来的paddle_trainer训练性能差别很大

相同的数据,一次通过:

王艳飞:22秒 我:35秒

另外,编译出来的paddle_trainer的大小也相差很大

我:22M 王艳飞:130MB

训练器的参数为

${TRAINER_BIN} --config=trainer_config.conf --save_dir=输出 --trainer_count=11 --parallel_thread_num=1 --use_old_updater=1 --use_gpu=0 --save_dir=./output --enable_grad_share=0 -- dot_period=200 --log_period=2000 --num_passes=1

我编译的版本,已经开启了release选项,使用mkl lib

回答

3

这可能是与编译器选项相关的问题。稍后我们将提供静态 bin 和完整的自动编译脚本来处理它。

性能问题:

  • -O3 启用。
  • 链接的库
  • 特别说明。
  • ETC。

@reyoung 请注意这个问题。相关: https: //github.com/baidu/Paddle/issues/259

3

@reyoung 当我编译时,“-D CMAKE_BUILD_TYPE”被设置为“Release”。

0

我记得性能差距不仅仅来自 -O3 选项,即使还有其他不清楚的选项。@reyoung

5

@backyes那么到底是为啥有这么大的性能差距呢?如果此时之内你有时间搞定,就关联到0.8.1上吧。没有的话就关联到0.8.2上。如何?

因为其实现在0.8.1的很多事情还没有做完。

7

解决问题的一个基础是“问题可以被复现”。 @linrongyi 和 @backyes ,请描述一下如何复现这个问题,然后再重复可能对有人解法有点感觉,我们也才能有道理地把这个问题可以被复现关联到某个里程碑。

4

@wangkuiyi 复现方法涉及内部用户环境,@linrongyi 方便话,准备复现方法适当公开。

4

先说一下今天的发现。

CPU训练速度的问题,今天发现如果编译的时候把-DWITH_GPU=OFF,不然不编译GPU版本,CPU就很快;如果-DWITH_GPU=ON,训练CPU就会慢很多。

具体的指标,2827967训练条protobuf格式的二进制数据,

  • -DWITH_GPU=ON,27.s
  • -DWITH_GPU=关闭,16.9秒

速度差别很大。

我用的版本是github最新的dev版本12945b2c9017c8,编译命令是

 cmake  \
          -DCMAKE_BUILD_TYPE="Release" \
          -DWITH_RELEASE_G=ON \
          -DWITH_RDMA=$l_rdma \
          -DWITH_GPU=$l_gpu \
          -DWITH_DOC=OFF \
          -DWITH_SWIG_PY=OFF \
          -DWITH_PYTHON=OFF \
          -DMKL_ROOT=/home/aladdin/paddle_internal_release_tools/idl/paddle/thirdparties/mkl  \
          -DRDMA_ROOT=${DEP_HOME}/rdma \
          -DCUDNN_INCLUDE_DIR=/home/work/cudnn/cudnn_v5/cuda/include \
          -DCUDNN_LIBRARY=/home/work/cudnn/cudnn_v5/cuda/lib64 \
          -DWITH_GFLAGS=OFF \
          -DWITH_GLOG=ON \
          -DWITH_TESTING=OFF \
          -DCMAKE_INSTALL_PREFIX=$l_install_dir \
          ${SRC_ROOT}

训练的命令是

${TRAINER_BIN} --config=trainer_config.conf --save_dir=output --trainer_count=11 --parallel_thread_num=1 --use_old_updater=1 --use_gpu=0 --save_dir=./output --enable_grad_share=0 --dot_period=200 --log_period=2000 --num_passes=1

这样的结果表明,如果追求性能的话,需要单独编译一个CPU的版本,总觉得比较trick。

然而,曾经发现有/没有 CPU 的编译结果在 CPU 上并没有显着的差异。@backyes简单说一下当时的过程,我是在10.6日checkout最新内部的icode上面的paddle。使用comake2编译,训练速度就很快,使用cmake编译,速度就很慢。comake2编译的paddle_trainer和你给我的paddle_trainer的速度是一样的。同时都是用gpu的。

今天@backyes专门做了一个一键脚本脚本,编译出来的paddle_trainer大小是100MB了,但是速度还是慢(27s)。

4

我也搞了自己编译CPU版paddle很慢的问题,基于官方paddle:cpu-devel-latestdocker镜像使用的开发分支,commit 12945b2c9编译如下命令:

cd ~/paddle
git fetch
git checkout develop
mkdir -p build
cd build
cmake .. -DCMAKE_BUILD_TYPE="Release" -DWITH_RELEASE_G=ON \
   -DWITH_DOC=OFF -DWITH_GPU=OFF -DWITH_SWIG_PY=ON \
   -DCUDNN_ROOT=/usr/ -DWITH_STYLE_CHECK=OFF -DWITH_AVX=ON
make -j8
make install

编译后的文件大小如下:

root@6006d11b7879:/usr/local/opt/paddle/bin# ll
total 16964
drwxr-xr-x 2 root root      78 Nov  1 14:29 ./
drwxr-xr-x 4 root root      28 Oct 26 14:23 ../
-rwxr-xr-x 1 root root 5675189 Nov  1 14:29 paddle_merge_model*
-rwxr-xr-x 1 root root 5641468 Nov  1 14:29 paddle_pserver_main*
-rwxr-xr-x 1 root root 6049191 Nov  1 14:29 paddle_trainer*
7

-DWITH_GPU=ON 编译出来的CPU版本比较慢是由于CMakeLists.txt里面有个bug。修复的方法见#239中CMakeLists.txt。GPU编译的时候nvcc没有增加-Xcompiler -mavx参数,导致编译的CPU代码没有AVX优化。

9

赞@hedaoyuan

5

@hedaoyuan 你能尽快帮忙修复吗?