PyTorch 社区最近有一种声音:下个版本应该抛弃 Python 改用 Julia 语言。
现在就连 PyTorch 团队内部也会拿这个说法来开玩笑。
对这个问题,核心开发成员中的 Edward Yang 在论坛上作出过一些回应。
他认为 PyTorch 的确越来越像 Julia 了,比如借鉴 Julia 的多重分派特性开发了 Pytorch Dispatcher。
PyTorch 总体的发展方向也和 Julia 的愿景一致,也就是同时具备拓展性、易用性和执行性能。
一方面 PyTorch 的底层代码后期用 C++ 重写以获得更好的性能,另一方面 functorch、fx 等新功能又让用户可以直接使用 Python 做以前必须借助 C++ 完成的工作。
那为什么不直接改用 Julia 呢?
害,其实是舍不得 Python 那无可替代的生态。
当初从原版 Torch 使用的 Lua 改用 Python 就是看中了生态这一点。这么多年过去了其他语言生态连一点可能超过 Python 的迹象都没有。
简而言之,Julia 语言本身的特性和 Python 的生态他们全都要,向 Julia 的优点学习也是团队未来的努力方向。
那么,Julia 这种语言到底好在哪,让 PyTorch 开发团队都向它学习?
面向科学计算设计的语言
Julia 来自麻省理工 CSAIL 实验室,设计初衷就是想要一个既有 C 的速度又有 Ruby 的动态性、既能像 Matlab 一样使用数学表达式又有 Python 的通用性。
Julia 要能像 Perl 一样自然地处理字符串、像 R 一样适用于统计,像 Shell 一样作为胶水语言去和其他语言交互。
要有 Hadoop 的并行计算能力,又不想要那些繁杂的配置。
最后做出来的 Julia 采用即时编译(Just In Time),速度比需要解释器的 Python 快得多,又没有失去交互性。
通过多重分派(Multiple Dispatch)特性来实现类型稳定又不失脚本语言的简洁灵活。
同一个函数名对不同参数类型的调用分派不同的操作,因为适合处理多种数据类型还被 PyTorch 给学了去。
具体到机器学习来说,Julia 执行各类算法包括矩阵运算的速度都比 Python 快得多。
Julia 生态里也有自己的开源深度学习框架 Julia Flux。
此外 Julia 还在语法上对线性代数、数据处理这些场景有额外的优化。
比如支持 Unicode 数学符号,数字乘以变量时候可以省略「*」,以及索引从 1 而不是 0 开始更符合人类直觉….
Julia 代码可以写成这样:
α = 0.5 ∇f(u) = α*u; ∇f(2) sin(2π)
以至于有些数学背景的开发者认为,Julia 代码写起来就像在黑板上做数学题一样的,很亲切。