torch dyname + torch inductor

📅 发布时间:2026/9/15 9:34:13
torch dyname + torch inductor
记录一下torch.compile的两个组件主要资料源于pytorch2-2.pdf首先介绍一下torch.jit.trace这个就是运行时会根据向量以及其走过的代码capture一个TorchScript graphexamplenote:tensor([1,1])走这个会产生错误结果any non-PyTorch operators (such as external libraries, prints, logging, side effects, etc.) will be omitted from the captured graph.非pytorch的运算符会被忽略------torch.jit.script可以用ast静态分析逻辑了但是要么有 要么没有并且在大模型中会非常好时间去分析逻辑-------lazy tensor这个part主要介绍了一下lazy tenosr。这里补充一个概念就是目前tensor 经过pytorch的op之后其实是可以不经过运算就知道output的shape dtype等meta信息的。所以一个shape进入后是可以直接走完整个流程的然后送到XLA编译器对这个grpah进行hash编码。可以复用也有几个缺点额外的开销引入lazy tensor相较于eager模式会引发额外的开销intorduced layers: 这个是说要等全部使用lazy tensor跑了一遍后才能跑减少了cpu gpu的并行recompilation这个是说input不同或者超出某个设置要重编译现在torch dynamo lazy tensor一起使用。lazy tensor的graph capture只用一次-----torch.fx.symbolic_trace基本来说从C层面的op转到了python层面运算的不是tensor而是一个proxy依旧会有问题与这个tensor不相关的函数不捕获------------torch.onnx.export这个没太多可说的-------------Comparison To Graph Capture In JAX这部分没咋看--------------TorchDynamo Design and Implementation这个部分是说PEP 523引入了frame evaluation API,其本身是一个数据结构用于促进在python中JIT编译器和debug工具。当CPython调用一个function时其首先构建一个PyFrameObject,然后调用用户定义的eval_frame hook默认情况下eval_frame指向 _PyEval_EvalFrameDefault这里面包含着CPython主要的interpreter loop。TorchDynamo 可以用一个 python frames 的 JIT compilation替代他主要在以下几方面做优化检查是否有filename exclusionprevious failures in analysis ,超过 cache size limits有任何一种都跳过。对于跳过的文件 call _PyEval_EvalFrameDefault on the original bytecode and return检查这个frame之前有没有被compile并且cached了。如果有的话执行产生的guard function如果guard function返回true代表可以用这个cache compiled bytecode返回这里应该是没有找到合适的compiled bytecode。那么执行symbolic analysis