当前位置: 首页 > 科技观察

PyTorch核心开发者的灵魂发问:为什么我们越来越像Julia?

时间:2023-03-17 18:13:22 科技观察

本文经AI新媒体量子比特(公众号ID:QbitAI)授权转载,转载请联系出处。最近PyTorch社区有一种声音:下一个版本应该放弃Python,使用Julia语言。现在连PyTorch团队都会拿这个说法开玩笑。对于这个问题,核心开发成员之一EdwardYang在论坛上做出了一些回应。他认为PyTorch确实越来越像Julia。例如,PytorchDispatcher就是基于Julia的多重调度特性开发的。PyTorch的整体发展方向也与Julia的愿景一致,即同时具备可扩展性、易用性和执行性能。一方面,PyTorch的底层代码后期会用C++重写,以获得更好的性能。另一方面,functorch和fx等新功能允许用户直接使用Python来完成以前必须使用C++完成的工作。那么为什么不直接切换到Julia呢?Harm,其实是依依不舍,Python不可替代的生态。当初从原来的Torch使用的Lua切换到Python是因为生态的原因。这么多年过去了,完全没有迹象表明其他语言生态有可能超越Python。总之,他们都需要Julia语言本身的特性和Python的生态,学习Julia的优势也是团队未来努力的方向。那么,PyTorch开发团队可以从中学习Julia语言的优点是什么?Julia是一种专为科学计算而设计的语言,来自MITCSAIL实验室。设计的初衷是既有C的速度和Ruby的动态,又有像Matlab一样的数学表达能力和Python的通用性。Julia应该能够像Perl一样自然地处理字符串,像R一样应用于统计,并像Shell一样充当胶水语言与其他语言交互。拥有Hadoop的并行计算能力,但又不想要那些复杂的配置。最终的Julia使用JustInTime编译,比需要解释器的Python快很多,同时又不失交互性。通过多重分派(MultipleDispatch)特性,类型稳定,实现了脚本语言的简单性和灵活性。同一个函数名给不同参数类型的调用分配不同的操作,因为它适合处理多种数据类型,PyTorch已经学会了。就机器学习而言,Julia执行各种算法,包括矩阵运算,比Python快得多。Julia生态系统也有自己的开源深度学习框架JuliaFlux。此外,Julia在语法上也针对线性代数、数据处理等场景进行了额外的优化。比如支持Unicode数学符号,数字与变量相乘时可以省略“*”,索引从1开始而不是0,更符合人的直觉……Julia代码可以这样写:α=0.5?f(u)=α*u;?f(2)sin(2π)让有一定数学背景的开发者觉得写Julia代码就像在黑板上做数学题,非常友好。相比之下,在Python中进行矩阵运算感觉……不是那么好。Python:np.dot(array1,array2)Julia:array1.*array2Julia的历史可以追溯到2009年,由于要实现的功能太多,直到2018年才发布1.0正式版。不过最近多年来,Julia迅速被金融、医药、航天等行业所接受,用户包括摩根大通、辉瑞、NASA等。以至于以往他们只能使用C等高性能语言进行底层开发,同时使用Python等高可用性语言进行扩展开发。今年7月,由Julia创始团队创立的公司JuliaComputing也获得了2400万美元的A轮融资。Julia语言速度快,天生适合机器学习,并且在高速发展。难怪PyTorch社区会用Julia来取代Python。有些人认为Python是一种糟糕的语言。虽然它的生态非常好,但是机器学习生态中最有价值的部分(Numpy)其实是用C实现的。Python生态虽然强大,但也有人诟病其混乱。各种重复开发的包管理系统,导致Python开发环境配置困难。相比之下,Julia的包管理解决方案非常统一,尽管可能还处于起步阶段,没有时间混淆。还有人认为,Python的这些所谓的缺点,其实是它流行的原因。像Python、Javascript和PHP这样难看的语言之所以流行,正是因为它们很容易写出糟糕的代码,降低了入门门槛。在此提醒大家,Julia本身就具有与其他语言交互的功能。他通常在Julia代码中调用Huggingface的Python模型进行开发。两者生态都用才好。最后,有些人不理解,PyTorch开发团队没有选择迁移到Julia。既然Julia语言具备了他们需要的所有特性,花时间在Python中重新造轮子是自找麻烦。另一种观点则略有不同:这正是PyTorch团队希望把方便留给用户,把麻烦留给自己。我很欣赏这种态度。