[深度学习框架] Pytorch源码学习之JIT

JIT–Just-In-Time Compiler
JIT有两种模式,一种叫tracing,一种叫scripting
[深度学习框架] Pytorch源码学习之JIT
tracing不会记录任何控制流信息,如if条件句和循环。但是scripting会保留这些信息。tracing和scripting都包含在TorchScript中,TorchScript的主要目的是从python代码中串行化和优化模型,用TorchScript实现的代码能较方便地部署到其他平台,且而不用依赖于python环境。[深度学习框架] Pytorch源码学习之JIT

上图中的IR表示的是源码到目标语言的中间程序,它是一种抽象的机器语言,独立于源码,不限定于任何特定的机器。
[深度学习框架] Pytorch源码学习之JIT
[深度学习框架] Pytorch源码学习之JIT

[深度学习框架] Pytorch源码学习之JIT[深度学习框架] Pytorch源码学习之JIT
JIT的各个阶段如下:
[深度学习框架] Pytorch源码学习之JIT

如同python解释器执行python程序一样,pytorch也有解释器来执行IR的指令

[深度学习框架] Pytorch源码学习之JIT
JIT优化:模型计算图的优化方法包括有 loop unrolling、peephole optimization,constant propagation,DCE,fusion,inlining 等
[深度学习框架] Pytorch源码学习之JIT
[深度学习框架] Pytorch源码学习之JIT

JIT 串行化
[深度学习框架] Pytorch源码学习之JIT
[深度学习框架] Pytorch源码学习之JIT
JIT 在C++中导入模型:
[深度学习框架] Pytorch源码学习之JIT
【参考文献】
1、https://speakerdeck.com/perone/pytorch-under-the-hood
2、https://www.cs.princeton.edu/courses/archive/spr03/cs320/notes/IR-trans1.pdf