guotong1988 / BERT-GPU

multi-gpu pre-training in one machine for BERT from scratch without horovod (Data Parallelism)
Apache License 2.0
173 stars 54 forks source link

关于多GPU训练的一些疑问咨询? #30

Closed rxc205 closed 3 years ago

rxc205 commented 3 years ago

1.我看了一下closed issues , 我被绕晕了。我现在正在使用3张卡跑这个代码,我算了一下不能减少训练时间,和单卡一样也要运行11小时左右。 image 这里多GPU训练是说能够加速loss的下降吗?我在其他场景使用多GPU都是可以减少训练时间的

2.这个num_train_steps=10000,是说3张卡一共训练10000步长还是单张卡的step呢?

guotong1988 commented 3 years ago

加速与否是learning-rate决定的

guotong1988 commented 3 years ago

num_train_steps=10000,3卡,实际30000

guotong1988 commented 3 years ago

README有写

image

rxc205 commented 3 years ago

README有写

image

请问这里one data LR fixed和one batch LR fixed分别是什么意思呢? 我有一个疑问,我数据总量100条数据,在3张卡跑num_train_steps=100,你的意思是我这一百条数据分别在每张卡跑100step吗?这样同等数据下3*100=300steps?是这个意思吗?

guotong1988 commented 3 years ago

300条数据

guotong1988 commented 3 years ago

字面意思

rxc205 commented 3 years ago

300条数据

我的数据总量只有100条,你说的300条数据是什么意思?

guotong1988 commented 3 years ago

相当于300

rxc205 commented 3 years ago

相当于300

行,麻烦再问一个问题: 你这个多GPU和普通的不太一样啊。100条数据不是给3张卡一起处理,而是扩成300条给3张卡处理。 如果通过增大LR来减少训练时间的话,那域训练和微调时候性能是不是必然会下降啊?按照你这个代码的逻辑

guotong1988 commented 3 years ago

没人逼你用我这个

guotong1988 commented 3 years ago

image

rxc205 commented 3 years ago

没人逼你用我这个

抱歉,是我言语有些激烈了。但是这问题确实想知道您的一些见解 100条数据3张卡,扩成300条给3张卡处理。 如果通过增大LR来减少训练时间的话,那域训练和微调时候性能是不是必然会下降啊?不知道我哪里有误解

guotong1988 commented 3 years ago

learning rate 变大是 batch size 变大带来的,每个data产生的反向传播梯度不变,所以效果不下降