跑DeepSpeech2单机多卡加速效果不理想
Created by: YuMS
尝试用八卡跑DeepSpeech2,发现八卡的加速效果很不理想
具体做法为:
- 使用LibriSpeech数据集
- 使用v2接口,也就是
models/deep_speech_2/train.py
- 只使用 6s-8s 的音频进行训练
- 每个卡上的
batch_size
一致,为16 - 显卡为 GeForce GTX 1080 Ti
- deep_speech_2使用的是models的7月28日develop分支中的版本,commit hash为
57e58ef0c923bad6ecd9fad9925d47f9cb0a98c5
- 运行环境为docker image
paddlepaddle/paddle:latest-gpu
,image id为e5d9d0d01214
,7月31日版本。 - 使用下面的脚本
function join_by { local IFS="$1"; shift; echo "$*"; }
for i in $(seq 8)
do
mkdir $i
NUM_CARDS=$i
DEVICES=$(join_by , $(seq 0 $(($NUM_CARDS-1)) ))
CUDA_VISIBLE_DEVICES=$DEVICES python train.py --use_gpu=True --batch_size $((16 * $NUM_CARDS)) --num_passes 1 --trainer_count $NUM_CARDS --min_duration 6.0 --max_duration 8.0 | tee -a $i/output.log
done
得到的结果为
一个epoch总时间(s) | 每个minibatch的时间(s) | 一个epoch中minibatch 数 |
---|---|---|
771.4 | 0.79 | 972 |
533.2 | 1.10 | 486 |
402.2 | 1.24 | 324 |
363.5 | 1.50 | 243 |
330.0 | 1.69 | 195 |
308.3 | 1.90 | 162 |
307.2 | 2.21 | 139 |
288.7 | 2.37 | 122 |
另外,这之后我们为了进一步分析,在 paddle 的代码中直接做了修改再编译,增加了一些计时的输出。
通过具体看输出的timer信息,发现在使用不同数量显卡的情况下,在computeThread
中,forward、backward和taskSem_wait 三个主要部分的耗时,在一个minibatch中占的总耗时的比例,都相同(各约1/3)。
不知道这样的情况是正常的吗?应该怎么解释?有没有加速的办法?应该怎么调试呢?
谢谢