所在的位置: C++ >> C++发展 >> TorchDynamo初探PythonB

TorchDynamo初探PythonB

北京市中科医院 http://baijiahao.baidu.com/s?id=1677148070539626801&wfr=spider&for=pc

作者|strint

1

背景

深度学习框架编译优化时,需要先根据计算逻辑形成一个逻辑计算图,然后再改写计算图,最后执行改写后的计算图。其中生成逻辑计算图方式有两种。

一种计算图生成是基于tracetensor的,跟踪tensor的执行路径。tensor执行时,基于函数重载,可以落到支持tensor计算的框架自定义函数,该函数一般是c++层的。c++层的自定义函数中,功能是用于生成一个Operation的符号表达。比如一个对于加法运算,trace就是记录一个符号化的加法算子。如此一连串的运算就被转换了符号化的计算图。

另外一种计算图生成是基于AST(抽象语法树)解析的。在代码执行前,直接根据Python文本代码得到PythonAST,然后根据AST来翻译成计算图(也叫做中间代码IR)。

Python(特指CPython)解释器执行,第一阶段会先把Python源码解析成AST,第二阶段根据AST生成和优化ByteCode(字节码),第三阶段在虚拟机中执行ByteCode。

基于AST解析的计算图生成,发生在这里的第一阶段;基于tracetensor的计算图生成,发生在第三阶段之后。

TorchDynamo特别的地方在于其工作在第二阶段,动态修改PythonByteCode,这样第三阶段执行的已经是修改后的ByteCode了。

2

TorchDynamo概述

TorchDynamo是PyTorch新实验的JIT编译接口,支持使用Python在运行时修改动态执行逻辑,修改的时机是CPython的ByteCode执行前。这个思想类似DynamoRIO(


转载请注明:http://www.aierlanlan.com/tzrz/4129.html