You can manually ship different parts of your model to different GPUs. For example
class MyModel(Module):
    def __init__(self):
        super(MyModel, self).__init__()
        self.m1 = nn.Linear(10, 10)
        self.m2 = nn.Linear(10, 10)
        self.m3 = nn.Linear(10, 10)
        self.m1.cuda(0) # puts in GPU0
        self.m2.cuda(1) # puts in GPU1
        self.m3.cuda(2) # puts in GPU2

    def forward(self, x):
        x = self.m1(x.cuda(0))
        x = self.m2(x.cuda(1))
        x = self.m3(x.cuda(2))
        return x