OK I am stupid. Sorry
The output of this:
def forward(ctx, x, y):
    ctx.save_for_backward(x,y)
    print 'CMul.forward'  
    print 'x', x.size(), type(x.data)
    print 'y', y.size(), type(y.data) 
    return x * y

is
x torch.Size([732, 1, 1, 128, 128]) <class ‘torch.cuda.ZFloatTensor’>
y torch.Size([732, 1, 1, 128, 128]) <class ‘torch.ZFloatTensor’>
So that’s where the mistake is. Sorry for wasting your time.