先说一下今天的发现。
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)。