AI编译器前端:动态图转静态图的问题
创始人
2024-05-28 21:45:18
0

python因其易用性和灵活性,被广泛应用于深度学习框架和AI编译器前端。像现在火爆的pytorch框架推崇python first哲学,pytorch这种命令式的执行方式(eager模式)非常方便研发和调试。但是eager模式不方便生产部署,也不能发挥硬件的极致性能。pytorch 2.0正式引入图编译器作为后端,可能也是想做到动静结合,收敛之前的多条编译器路线(torch.jit.script、torch.jit.trace、LazyTensor)到TorchDynamo方案。

python作为动态语言,想要转换为静态的图IR是困难的,目前主要有下面三种方案:

  • Tracing Based:主要把Python代码假执行一遍,保存执行序列,基于执行序列变换到图层IR进行编译优化。例如 pytorch torch.jit.trace。
  • AST Based:主要通过Python的修饰符(例如Numba),把Python代码的AST拿到,然后变换成图层的IR,进行编译优化。例如 torch.jit.script。
  • ByteCode Based:主要原理在Python的bytecode上做 graph capture,如果发现有不支持的Python语法,fallback到python bytecode,从而保证泛化性。例如TorchDynamo。

Tracing的模式不好处理动态控制流,比如循环,对于tracing来说就是展开,但是有些情况下循环无法展开,如循环条件根据训练的收敛情况/算子的执行结果等。AST模式的问题是python语法的翻译需要比较全量的翻译,工程量比较大/方案比较复杂。ByteCode的方法也会遇到不支持的语法也会fall back到python执行,至于实际效果如何有待观察。

以上的静态化方法最大的困难还是python这种灵活的动态语言如何转换为静态IR的问题,似乎都是妥协的做法,还不是完美的方案。不过只要fall back的机制+图编译的方式在不影响用户体验的基础上有可观的性能收益,就会继续迭代向前发展。

更加专业和详细的分析参阅下面大佬们的博客:
https://zhuanlan.zhihu.com/p/508345356
https://zhuanlan.zhihu.com/p/416643687
https://zhuanlan.zhihu.com/p/393031067
https://zhuanlan.zhihu.com/p/383547872
https://www.zhihu.com/question/396105855/answer/1868408680
https://www.zhihu.com/question/570220953/answer/2802367735

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...