May I ask why you wrap each layer with a DataParallel? From my experience this results in lots of scatter/ gather operations which is slowing down execution a lot.
You can just wrap the whole model after instantiating it.
E.g. after model = Net() you can add a line
model = nn.DataParallel(model)
Now regarding the different results.  There might be different reasons.

Different weight initialization
Different learning rate schedule
Different preprocessing / data augmentation