Hi,

The forward function does not need to work with Variables because you are defining the backward yourself.
It is the autograd engine that unpacks the Variable to give Tensors to the forward function.
The backward function on the other hand works with Variables (you may need to compute higher order derivatives so the graph of computation needs to be created). If grad_output.requires_grad=False, it is because the .backward(...) or .grad(...) function was called with a gradient that does not require grad.
By default, the backward function should always work with Variable and create a proper graph (similarly to the forward function of an nn.Module).
If in your case, you cannot create a proper graph, you need to add the @oncedifferentiable decorator to your backward function on top of the @staticmethod. In this case, you work with (EDIT:)Tensors and just need to output Tensors containing the gradients.