What is volatile variable in Pytorch
For versions of Pytorch
previous to 0.4.0, Variable
and Tensor
were two different entities. For variables, you could specify two flags: volatile
and require_grad
. Both of them were used for fine grained exclusion of subgraphs from gradient computation.
The difference between volatile
and requires_grad
is in how the flag is applied to the outputs of an operation. If there is even a single volatile = True
Variable as input to an operation, its output is also going to be marked as volatile
. For requires_grad
, you need all the inputs to that operation to be flagged requires_grad = False
, so that the output is also flagged in the same way.
From Pytorch
0.4.0, Tensors
and Variables
have merged, and the volatile
flag is deprecated.
Basically, set the input to a network to volatile if you are doing inference only and won't be running backpropagation in order to conserve memory.
From the docs:
Volatile is recommended for purely inference mode, when you’re sure you won’t be even calling .backward(). It’s more efficient than any other autograd setting - it will use the absolute minimal amount of memory to evaluate the model. volatile also determines that requires_grad is False.
Edit: The volatile keyword has been deprecated as of pytorch version 0.4.0