First, I should mention I’m on torch version 0.3.1, but am happy to upgrade if necessary.
I am still learning, so please let me know if I misunderstood anything here.
I am building several graphs imperatively, using Variables.  The mathematical expressions might be quite complicated as time goes on, and certain parts of the graphs may be generated using autograd’s gradient functions, which may then be operated on.
I can create whatever expression I want just fine.  The only catch is building up this graph can be quite “slow” - for relatively simple operations (4x4 matrices being multiplied together), it can take a few ms.
Once these graphs are generated, though, I expect that I should be able to update certain Variables’ values, and evaluate the output of the graph (or any node, really), much faster.  I believe that that is probably the case since evaluation should be able to happen completely in the C back-end, which should be pretty otimized for speed?  In other words, building the graph in python might be slow, since it involves python for loops and the like, but re-evaluating a graph with static topology should be fast.
Is this intuition correct?  If so, how can I efficiently re-assign a value and re-evaluate the graph?