Hi, Jiade!
I’m no expert here, but I believe that the functions in the torch._Variable namespace are “generated at runtime” in order to set up all of the hooks required by autograd to calculate gradients.  Functions generated at runtime (a lambda function is a “typical” example) are not eligible for pickling as they violate the “defined at the top level of a module” requirement outlined in the current stable python documentation 7.
Hope this helps!  Maybe someone more knowledgeable will comment with a definitive answer…
As an aside, the fix in my case was to simply change the object that I pickled.  Rather than pickling a function reference, I pickled a string that could be passed to the built-in eval function whenever I called torch.load on my pickled model.
–SEH