torch
TorchDynamo 基础原理
综述 TorchDynamo 的核心目标是:尽可能提高 JIT 对动态 Python 程序的覆盖率,使更多 PyTorch 程序能够在不修改原始代码的情况下获得编译加速。 对于一个待执行的 Python 函数,TorchDynamo 的基本思路是: 1. 尽可能捕获可编译的计算片段。 即使无法将整个函数编译成一个 FX Graph,也可以尝试从中提取部分可编译的计算。 1. 尽可能生成少量、较大的 FX Graph。 Dynamo 会贪婪地尝试捕获连续的计算操作。当遇到无法处理的逻辑时,通过 Graph Break 将当前计算图截断,并尽可能从后续位置继续捕获。 1. 通过原生 Python 执行逻辑将这些计算图串联起来。 最终,程序由编译后的 FX Graph 和无法捕获的 Python 代码共同组成,从而兼顾编译加速和 Python 的灵活性。 例如: