[{"data":1,"prerenderedAt":133},["ShallowReactive",2],{"content-query-fGJr6MfWDj":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"cover":11,"type":12,"category":13,"body":14,"_type":127,"_id":128,"_source":129,"_file":130,"_stem":131,"_extension":132},"/technology-blogs/zh/1085","zh",false,"","AI框架会越来越像Julia吗？","从技术路线上看，MindSpore的静态图实现方式与Julia是最相似的","2022-03-21","https://obs-mindspore-file.obs.cn-north-4.myhuaweicloud.com/file/2022/03/22/7ea3492f833e4e939661757aea3f1d18.png","technology-blogs","大V博文",{"type":15,"children":16,"toc":124},"root",[17,25,31,44,49,54,59,79,84,89,94,99,104,109,114,119],{"type":18,"tag":19,"props":20,"children":22},"element","h1",{"id":21},"ai框架会越来越像julia吗",[23],{"type":24,"value":8},"text",{"type":18,"tag":26,"props":27,"children":28},"p",{},[29],{"type":24,"value":30},"作者：金雪锋",{"type":18,"tag":26,"props":32,"children":33},{},[34,36],{"type":24,"value":35},"文章来源：",{"type":18,"tag":37,"props":38,"children":42},"a",{"href":39,"rel":40},"https://zhuanlan.zhihu.com/p/483764491",[41],"nofollow",[43],{"type":24,"value":39},{"type":18,"tag":26,"props":45,"children":46},{},[47],{"type":24,"value":48},"最近看到量子位的一则新闻，Pytorch核心开发者灵魂发问：我们怎么越来越像Julia了？",{"type":18,"tag":26,"props":50,"children":51},{},[52],{"type":24,"value":53},"那到底像不像？",{"type":18,"tag":26,"props":55,"children":56},{},[57],{"type":24,"value":58},"我们先看看Julia的特点：",{"type":18,"tag":60,"props":61,"children":62},"ul",{},[63,69,74],{"type":18,"tag":64,"props":65,"children":66},"li",{},[67],{"type":24,"value":68},"**动态语言+JIT：**其实Julia的JIT很有特色，特别是类型系统和特化这一块，Julia是一个动态语言，但是在jit中需要通过类型系统和特化尽量把类型推导出来，这样才利于JIT优化，这点和AI框架把Python前端翻译到静态图的目标是非常相似的。",{"type":18,"tag":64,"props":70,"children":71},{},[72],{"type":24,"value":73},"**IR反射：**Julia利用IR反射机制实现了自动微分的能力，但是本质IR反射其实就是AST的重写，整体自动微分的思路就是source to source的。",{"type":18,"tag":64,"props":75,"children":76},{},[77],{"type":24,"value":78},"**多指派（multiple-dispatch）：**看上去与AI框架的算子选择在思路上是非常像的。",{"type":18,"tag":26,"props":80,"children":81},{},[82],{"type":24,"value":83},"具体到Pytorch，其实，我感觉这个要分三个方面看：",{"type":18,"tag":26,"props":85,"children":86},{},[87],{"type":24,"value":88},"1、Pytorch主攻的方向动态图，个人感觉这条路线和Julia是不像的，一个是解释执行、基于Tape的自动微分；另外一个是JIT执行、基于source to source的微分。",{"type":18,"tag":26,"props":90,"children":91},{},[92],{"type":24,"value":93},"2、Pytorch的tracing机制，个人认为与Julia的路线也不一样，因为JIT的思路不一样，Pytorch的tracing实际是采用执行记录的方式进行JIT，而Julia的方式，如前面所讲，是类型推导/特化这种传统的编译器思路。",{"type":18,"tag":26,"props":95,"children":96},{},[97],{"type":24,"value":98},"3、Pytorch的TorchScript机制，这个其实和Julia就有点像了，从Python的表达转换到静态图用到了类似Julia的类型推导、特化、编译优化等JIT技术，但是TorchScript的功能完整性弱了很多，比如控制流这些支持就很不完整。",{"type":18,"tag":26,"props":100,"children":101},{},[102],{"type":24,"value":103},"从我个人的观点看，这些路线中动态图才是Pytorch的主推方向，比如，最近推出的FX等功能，也是在Python层上做Python Rewrite等，然后映射到动态图；所以Pytorch越来越像Julia这个观点还待观察。",{"type":18,"tag":26,"props":105,"children":106},{},[107],{"type":24,"value":108},"实际上，从技术路线上看，MindSpore的静态图实现方式与Julia是最相似的，体现在：",{"type":18,"tag":26,"props":110,"children":111},{},[112],{"type":24,"value":113},"1、JIT技术，MindSpore通过类型推导/特化/优化等技术将Python前端转到了静态图，这里面涉及的难点就是动态类型在执行期转到静态类型，这个方式与Julia是类似的，但是Python语言的动态性更强，比Julia的挑战更大。",{"type":18,"tag":26,"props":115,"children":116},{},[117],{"type":24,"value":118},"2、自动微分，两者都是source to source的微分，当然MindSpore考虑到反向微分的便利性采用了函数式的思路，这一点和Julia是有区别的",{"type":18,"tag":26,"props":120,"children":121},{},[122],{"type":24,"value":123},"3、多指派，MindSpore的算子选择和Julia的method选择上都采用了类似技术。",{"title":7,"searchDepth":125,"depth":125,"links":126},4,[],"markdown","content:technology-blogs:zh:1085.md","content","technology-blogs/zh/1085.md","technology-blogs/zh/1085","md",1776506112093]