You can properly call them by using self during the forward pass.
What you cannot do is to call them externally since that way you are not splitting the inputs among the gpus available.
You aren’t either supposed to call model.forward(inputs) but model(inputs) as interally it execute model.__call__() and forward is run in __call__
So in short your scheme should be
class Model()
  def init
  def function1
  def function 2
  def forward(inputs);
      x=self.function1(inputs)
      x=self.function2(x)


model = DataParallel(Model(args,kwargs)).cuda()
output= model(input)

That way whatever you code will work but if you do
model = DataParallel(Model(args,kwargs)).cuda()
a=model.module.function1(input)
b=model.module.function2(input)
or even 
out=model.forward(input)
it won't work because you are skipping to run the code inside
model.__call__()