Well, But if you can use ie bs 8 with one gpu, dataparallel will replicate model and process 2 samples of your batch with each gpu. Therefore you should have free memory in all your gpus which allows you to increase your batch size.
Can you check memory usage after and before using data parallel?
You would have a problem if your gpu could store the embedding with bs1 but if your model fits in one gpu data parallel should let you increase bs for sure.
This process is not linear because there is usually one gpu which requires more memory (cuda:0 usually) because when you transfer input from cpu to gpu they are initially stored there, some optimizers also store parameters there.
That’s why it would be fine you to check memory usage with and without dataparallel per gpu