eval mode has (almost) no impact on memory. It only changes how certain functions behave, e.g. batch norm, dropout.
I don’t quite understand your reasoning in not using volatile. You only need to set your input as volatile. This feature is almost specifically built for cases like yours.