For the sake of the example, let’s say I don’t use Dropout, BatchNorm etc, just a plain CNN.
According to the docs (in PyTorch 0.4),
with torch.set_grad_enabled(is_train)

prevents tracking via autograd, which would make the inference mode more efficient (I assume). Now, if I would use model.eval(), would this have the same effect. E.g., does the following track gradients after model.eval()
model = CNN()
for e in num_epochs:
    # do training

# evaluate model:
model = model.eval()
logits, probas = model(testset_features)

or is it recommended, in addition, to do the following:
model = CNN()
for e in num_epochs:
    # do training

# evaluate model:
model = model.eval()
with torch.set_grad_enabled(False):
    logits, probas = model(testset_features)