solved by:
def Model(nn.Modules): 
    def __init__(self):
        ...
        self.features = nn.Sequential(...)

        self.nClassesPerClassifier = [7, 4, ..., 10]
        # create N classifiers
        for c in range(len(self.nClassesPerClassifier)):
            self.__setattr__('class_%d' % c,
                                nn.Linear(1000, nClassesPerClassifier[c]))

    def forward(self, x):
        x = self.features(x)  # here uses multi gpu
        # returns a dictionary whose key indicates the classN
        return {'class_%d' % c: self.__getattr__('class_%d' % c)(x) 
            for c in range(len(self.nClassesPerClassifier))}


    def set_multiple_gpus(self):
        # here uses multi gpu
        self.features = nn.DataParalell(self.features).cuda()

model = Model()
model.load_dict_state(...)
model.set_multiple_gpus()
...
Y = model(inputs)

The problem was that forward() returned a dictionary {key: Variable} and this can be handled by single gpu or cpu, but cant be handle by torch.nn.DataParallel (multiple gpu). Only a list or tuple can be handled by torch.nn.DataParallel. However, pytorch allows you to specify which parts (layers) of your network are performed with cpu/gpu/multiple-gpu. So, I specified that the feature extraction part must be performed with multiple gpus. Please, check set_multiple_gpus() method. Moreover, if you load a pre trained model, then you have to load it before calling set_multiple_gpus().
Cheers