从bert pretrain打印的结果如何计算吞吐率性能?
Created by: mir-of
跑单机单卡, batch_size: 16, 打印的结果如下:
epoch: 1, progress: 1/64, step: 2, loss: 11.409644, ppl: 14829.729492, next_sent_acc: 0.562500, speed: 5.488533 steps/s, file: part-00012-01b065c2-8e4a-442b-9920-d986845ab3d2-c000.txt.gz
跑单机4卡, batch_size: 64, 打印的结果如下:
epoch: 1, progress: 1/64, step: 3, loss: 8.647623, ppl: 2778.657471, next_sent_acc: 0.433594, speed: 1.436274 steps/s, file: part-00035-01b065c2-8e4a-442b-9920-d986845ab3d2-c000.txt.gz
我的问题是: 单机单卡的速度是5.488533 steps/s, 换算成吞吐率是:5.488533 * 16 = 87.816528 sample/s。
单机4卡的速度是1.436274 steps/s, 换算成吞吐率是:1.436274 * 64 = 91.921536 samples/s。
那么,4卡相对于单卡,加速比是 91.921536/87.816528 = 1.046。
1)请问这样计算吞吐率和加速比的方法是正确的吗? 2)如果计算方式是正确的,请问加速比很低的原因是什么? 3)如果计算方式是错误的,请问正确的计算方法是什么?
附上我的运行命令: 仓库:https://github.com/PaddlePaddle/models.git commit: 4ffbe264
单机单卡:
CUDA_VISIBLE_DEVICES=0 \
python3 -u PaddleNLP/PaddleLARK/BERT/train.py \
--is_distributed false \
--use_cuda true \
--weight_sharing true \
--batch_size 16 \
--in_tokens False \
--data_dir $PADDLE_BERT_DATA_DIR \
--validation_set_dir $PADDLE_BERT_DATA_DIR \
--bert_config_path $CONFIG_PATH \
--vocab_path $VOCAB_PATH \
--num_train_steps 120 \
--warmup_steps 0 \
--epoch 1 \
--max_seq_len 128 \
--skip_steps 1 \
--generate_neg_sample=False
单机4卡:
CUDA_VISIBLE_DEVICES=0,1,2,3 \
python3 -u PaddleNLP/PaddleLARK/BERT/train.py \
--is_distributed false \
--use_cuda true \
--weight_sharing true \
--batch_size 64 \
--in_tokens False \
--data_dir $PADDLE_BERT_DATA_DIR \
--validation_set_dir $PADDLE_BERT_DATA_DIR \
--bert_config_path $CONFIG_PATH \
--vocab_path $VOCAB_PATH \
--num_train_steps 120 \
--warmup_steps 0 \
--epoch 1 \
--max_seq_len 128 \
--skip_steps 1 \
--generate_neg_sample=False