爱笑的小姐姐 · 2022年03月25日

AI框架会越来越像Julia吗?

最近看到量子位的一则新闻,Pytorch核心开发者灵魂发问:我们怎么越来越像Julia了?

那到底像不像?

我们先看看Julia的特点:

  • 动态语言+JIT:其实Julia的JIT很有特色,特别是类型系统和特化这一块,Julia是一个动态语言,但是在jit中需要通过类型系统和特化尽量把类型推导出来,这样才利于JIT优化,这点和AI框架把Python前端翻译到静态图的目标是非常相似的。
  • IR反射:Julia利用IR反射机制实现了自动微分的能力,但是本质IR反射其实就是AST的重写,整体自动微分的思路就是source to source的。
  • 多指派(multiple-dispatch):看上去与AI框架的算子选择在思路上是非常像的。

Julia语言编译器特性分析42 赞同 · 12 评论文章

具体到Pytorch,其实,我感觉这个要分三个方面看:

1、Pytorch主攻的方向动态图,个人感觉这条路线和Julia是不像的,一个是解释执行、基于Tape的自动微分;另外一个是JIT执行、基于source to source的微分。

2、Pytorch的tracing机制,个人认为与Julia的路线也不一样,因为JIT的思路不一样,Pytorch的tracing实际是采用执行记录的方式进行JIT,而Julia的方式,如前面所讲,是类型推导/特化这种传统的编译器思路。

3、Pytorch的TorchScript机制,这个其实和Julia就有点像了,从Python的表达转换到静态图用到了类似Julia的类型推导、特化、编译优化等JIT技术,但是TorchScript的功能完整性弱了很多,比如控制流这些支持就很不完整。

从我个人的观点看,这些路线中动态图才是Pytorch的主推方向,比如,最近推出的FX等功能,也是在Python层上做Python Rewrite等,然后映射到动态图;所以Pytorch越来越像Julia这个观点还待观察。

实际上,从技术路线上看,MindSpore的静态图实现方式与Julia是最相似的,体现在:

1、JIT技术,MindSpore通过类型推导/特化/优化等技术将Python前端转到了静态图,这里面涉及的难点就是动态类型在执行期转到静态类型,这个方式与Julia是类似的,但是Python语言的动态性更强,比Julia的挑战更大。
2、自动微分,两者都是source to source的微分,当然MindSpore考虑到反向微分的便利性采用了函数式的思路,这一点和Julia是有区别的
3、多指派,MindSpore的算子选择和Julia的method选择上都采用了类似技术。

来源:知乎
作者:金雪锋

推荐阅读

更多嵌入式AI技术相关内容请关注嵌入式AI专栏。
推荐阅读
关注数
18758
内容数
1316
嵌入式端AI,包括AI算法在推理框架Tengine,MNN,NCNN,PaddlePaddle及相关芯片上的实现。欢迎加入微信交流群,微信号:aijishu20(备注:嵌入式)
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息