I encountered the same error and it seems that PyTorch DataParallel doesn’t support  models with multiple inputs, right?
My model prototype can be summaried as below:
class Sphereface20(nn.Module):
  def __init__(self, dim=512, num_class=10572):
    super(Sphereface20, self).__init__()
    self.num_class = num_class
    self.base = Resnet20()
    self.fc6 = AngleLinear(dim, num_class, gamma=0.06)
  def forward(self, x, target=None):
    x = self.base(x)
    if self.training:
      x, lamb = self.fc6(x, target)
      return x, lamb
    else:
      return x

The AngleLinear operator accepts both feature and target (label) as input, and outputs x as well as an intermediate variable lamb that is used for monitoring the training procedure.
Everything works well with single GPU training.
But it gives me error as below when I’m trying to use nn.DataParallel for dual GPUs training:
Traceback (most recent call last):
  File "train_sample_exclusive.py", line 228, in <module>
    main()
  File "train_sample_exclusive.py", line 213, in main
    train_epoch(train_loader, model, optimizer, epoch)
  File "train_sample_exclusive.py", line 127, in train_epoch
    output, fc5, lamb = model(data, label)
  File "/home/guest/.local/lib/python2.7/site-packages/torch/nn/modules/module.py", line 491, in __call__
    result = self.forward(*input, **kwargs)
  File "/home/guest/.local/lib/python2.7/site-packages/torch/nn/parallel/data_parallel.py", line 115, in forward
    return self.gather(outputs, self.output_device)
  File "/home/guest/.local/lib/python2.7/site-packages/torch/nn/parallel/data_parallel.py", line 127, in gather
    return gather(outputs, output_device, dim=self.dim)
  File "/home/guest/.local/lib/python2.7/site-packages/torch/nn/parallel/scatter_gather.py", line 68, in gather
    return gather_map(outputs)
  File "/home/guest/.local/lib/python2.7/site-packages/torch/nn/parallel/scatter_gather.py", line 63, in gather_map
    return type(out)(map(gather_map, zip(*outputs)))
  File "/home/guest/.local/lib/python2.7/site-packages/torch/nn/parallel/scatter_gather.py", line 63, in gather_map
    return type(out)(map(gather_map, zip(*outputs)))
TypeError: zip argument #1 must support iteration

I can provide more model details as you wish @smth.