Yes I understand that now, I am just trying to understand the details. So if I understand correctly checkpoint(f,x) will cause parameters within f not to get updated so long as x is the raw data, or just anything for which requires_grad is False? Is there some design reason for this? It seems like a non-obvious and inconvenient behavior.
Edited to say: Ahhh, is it that f(x) is the thing it throws out on the forward pass (and has to recompute) and instead of checking is anything in f needs gradients it only checks if x needs a gradient? That would make sense to me.