Nice example, I hope you enjoyed the trip to some obscure location. 
So what happens is that Python and PyTorch do all sorts of (dynamic) bookkeeping in between of the actual computation. Given that the computation is very trivial, this overhead is extremely large in relation. When you get to more realistic problems, the relation is quite different and the overhead will be much smaller. At that point there are then other factors determining the performance.
Best regards
Thomas