I’m afraid that if you used dataparallel with 4 gpus, everything should be allocated in each of them. Is it possible you to be wrongly  coding that?
Anyway, what’s the point of applaying dataparallel to each submodule among all gpus? If you can do that, you can probably apply dataparallel to the parent modulke