框架系列-pytorch Eager and Dynamo

146 阅读2分钟

Pytorch Eager模式

Eager Execution模式(即时执行模式)是指一种动态图计算模式,其中每个操作都立即被执行,而不是被先放入计算图中。这与静态图计算框架(如TensorFlow 的早期版本)的工作方式不同。

即时计算 Eager Execution 模式下,每个操作都会立即执行,而不是构建一个计算图。

调试友好 Eager Execution 模式更加直观,更容易进行调试,因为可以像在传统编程中一样逐行执行代码。

动态构建计算图 在 Eager模式下,计算图是动态构建的,这意味着可以使用控制流结构(如 if 语句、循环等)而无需事先定义静态图。

MS,Pytorch,Tensorflow

MS做的是一个不带eager mode能力的tf2.x,5年前领先tf(tf1.x的构图语言易用性差) pytorch 靠eager mode易用性在学术界广泛应用,然后再nv支持下完善算子性能、host调度性能;

TF2.x 一个不需要额外学习的构图语言,并且支持eager mode执行。但对tf1.x不兼容,没有获得用户好评。

MS
MS迟迟无法做eager mode,受两大原因影响:
1 昇腾开始性能最优,是基于Tensorflow1.x上执行CANN整图的Resnet50模型,静态shape,整图编译,极致性能。在叠满了性能的buff时也背负上场景极其受限的包袱;
2 CANN的算子在好几年里只支持静态shape编译无法泛化支持动态shape;

MS号称支持动静统一,实际是对静态图支持较好,用户按照python编码,经常触发图编译失败,原因:支持python语法成图非常难。

Pytorch Dynamo:放弃以前的torchScript思路把所有的用户脚本行为表达成一张图。选用了一个新的思路:只对能表达成图的部分做构图行为,未知的不支持部分保留原生的执行方式。

一文搞懂TorchDynamo原理 fkong.tech/posts/2023-…