《架构师》2023年6月
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

比Python快35000倍!LLVM&Swift之父宣布全新编程语言Mojo:编程被颠覆了

作者 核子可乐 Tina

“Mojo可能是近几十年来最大的编程语言进步。”

近日,由LLVM和Swift编程语言的联合创始人Chris Lattner创办的新公司Modular AI发布了一种名为Mojo的新编程语言。

Mojo将大家喜爱的Python特性,同C、C++和CUDA的系统编程功能结合了起来,并通过其所谓“极限加速”与其他Python速度增强方案区分了开来。凭借着硬件加速,它在运行Mandelbrot等数字算法时比原始Python快上3.5万倍!

更重要的是,作为LLVM的缔造者, Chris Lattner良好的出身为Mojo奠定了成功的基础。数据科学家、fast.ai的创始研究员Jeremy Howard评价Mojo为“Mojo可能是近几十年来最大的编程语言进步。”

为什么会有Mojo?

对于全球各地开发者来说,我们应该都熟悉Chris Lattner这个名字。

Chris Lattner曾先后效力于苹果、谷歌和特斯拉等公司,参与创建了我们今天所依赖的许多项目:开发了LLVM编译器工具链、共同创建了MLIR编译器,并带头开发出Swift编程语言。

最初,作为他博士论文的一部分,他开始了LLVM的开发。LLVM最终从根本上改变了编译器的创建方式,构成了当今世界上许多应用广泛的语言生态系统的基础。然后他继续推出Clang,这是一个位于LLVM之上的C和C++编译器。

Chris发现C和C++并没有真正充分利用LLVM的强大功能,因此在苹果工作期间,他设计了一种名为“Swift”的新语言,他将其描述为“LLVM的语法糖”。Swift已经成为世界上使用最广泛的编程语言之一,特别是作为当今为iPhone、iPad、MacOS和Apple TV创建iOS应用程序的主要方式。

不幸的是,苹果对Swift的控制意味着它还没有真正在苹果之外的世界大放异彩。Chris在谷歌工作了一段时间,试图将Swift带出苹果的舒适区,希望它成为人工智能模型开发中Python的替代者,但遗憾的是他没有得到苹果或谷歌所需的支持,最终也没有成功。

话虽如此,Chris在谷歌期间还开发了另一个取得巨大成功的项目:MLIR。MLIR是现代多核计算和AI工作负载的LLVM IR的替代品。这对于充分利用GPU、TPU和越来越多地添加到服务器级CPU的矢量单元等硬件的强大功能至关重要。

2022年1月,Chris Lattner正式宣布创业,和Tim Davis共同建立了“Modular AI”,希望自下而上重建全球ML基础设施。Tim Davis曾经执掌谷歌机器学习项目,负责管理谷歌的机器学习API、编译器和运行时基础设施。

他们在构建自己的平台以此统一世界上的ML/AI基础设施时,却意识到,在整个堆栈中编程太复杂了。“这些系统严重碎片化,硬件种类繁多,每个都有定制的工具”。

“我们想要的是一个创新的、可扩展的编程模型,可以针对加速器和其他机器学习中普遍存在的异构系统。这意味着一种具有强大的编译时元编程的编程语言,整合自适应编译技术,在整个编译流程中进行缓存,以及其他现有语言不支持的东西。”

所以在这种情况下,这家初创公司一口气公布了两个相关项目:Mojo,一种建立在Python基础上的编程语言,号称拥有与C比肩的速度优势;还有可移植、高性能Modular推荐引擎,能够在生产中以更低成本运行AI模型(所谓推理,就是经过训练的模型在实际场景中的使用过程)。

该公司表示,“Mojo将研究人员喜爱的Python特性,同C、C++和CUDA的系统编程功能结合了起来。”

“Mojo建立在下一代编译器技术之上。当您向程序中添加类型时,该技术能够显著提高性能,帮助您定义零成本抽象、受益于Rust级别的内存安全特性,并支持独特的自动调优和编译时元编程能力。”

“Mojo从Rust和Swift中学到了很多东西,并更进了一步。”

Mojo:比Python快35000倍的编程语言

Mojo是Python家族的一员,但有着远大的目标——想要与Python生态系统完全兼容,因此开发人员可以继续使用自己熟悉的工具。Mojo旨在通过保留Python的动态特性,同时为系统编程添加新原语,逐渐成为Python的超集。

这些新的系统编程原语将允许Mojo开发人员构建当前需要C、C++、Rust、CUDA和其他加速器系统的高性能库。

在MLIR上,Mojo代码可以访问各种AI调优的硬件功能,例如TensorCores和AMX扩展。因此,对于某些特定算法类型,它的速度要远远超过原始Python——它在AWS r7iz.metal-16xl上运行Mandelbrot算法只需0.03秒,而Python 3.10.9则需要1027秒(约17分钟)。

Chris Lattner在Hacker News上表示:“我们的目标不是让动态Python神奇地快速。虽然我们在动态代码方面要快得多(因为我们有编译器而不是解释器),但这并不是依靠‘足够智能’的编译器来消除动态性”。

他表示,Mojo比Python快得多的原因是它让程序员可控制静态行为,并且可以在有意义的地方逐步采用它。这样做的关键回报是编译过程非常简单,不需要JIT,还可以获得可预测和可控的性能。

Mojo仍在开发当中,但目前已经开放了试用Jupyter notebook。到全面完成之后,它有望成为Python的超集——一个带有系统编程工具包的Python生态系统。到那个时候,它应该能够运行一切Python程序。但目前,Mojo还仅支持Python的核心功能,包括async/await、错误处理和可变参数,距离全面兼容还有很长的路要走。

“感觉编程被颠覆了”

在周四发布的公告中,Fast.ai联合创始人、数据科学家Jeremy Howard表示,“Mojo可能是近几十年来最大的编程语言进步。”

“‘镇’上出现了一种新的编程语言:Mojo!我对此感到非常兴奋。它像Python,但没有Python的任何问题。你可以像C一样快速编写代码,并像C一样部署小型独立应用程序。”

“感觉编程被颠覆了。”在Jeremy Howard的记忆中,上次有这样的感觉,还是他首次上手Visual Basic v1.0。

Jeremy Howard是Python的重度使用者,Python可以并且确实可以做任何事情,但它有一个缺点:性能,它比C++等语言慢数千倍。利用Python进行开发需要避免用Python来实现性能关键部分,并采用Python包装器来覆盖C、FORTRAN、Rust等代码。

因此,凭借着生态系统的丰富性,Python确实在AI模型开发领域占据优势,但又因为性能有限,Python程序员往往最终会将代码指向运行速度更快的其他语言(例如C/C++和Rust)模块。这种“双语”现实导致机器学习应用程序的分析、调试、学习和部署变得愈发困难。Howard解释道,Mojo试图解决的就是AI内部这种割裂现实。

“Mojo的一大亮点在于,开发人员可以随时选择更快的‘模式’,使用‘fn’替代‘def’创建自己的函数。在这种模式下,开发者必须准确声明每个变量的类型,这样Mojo就能创建出经过优化的机器码来实现所需函数。”

“此外,如果使用‘struct’来替代‘class’,属性就会被紧密打包到内存中,甚至可以直接在数据结构内使用、而无需到处寻找指针。这些特性让它获得了堪与C语言比肩的运行速度,也让Python程序员们在稍微学习一点新语法之后就能掌握这处性能宝藏。”

Mojo的另一个好处,在于能将代码编译成独立且快速启动的二进制文件,使其轻松借助可用核心和加速硬件的优势完成部署。

作为一种编译型语言,Mojo的部署过程与C基本相同。例如,一个包含从头编写的matmul版本的示例程序大约在100k左右。

“这彻底的颠覆了传统游戏规则。”

当然,目前的Mojo仍有一定缺失,比如包管理和构建系统——这也是Python社区长久以来一直努力解决的需求。另外,Mojo语言尚未指定开源许可,但相信只是时间问题。

Howard在推文中总结道,“Mojo还没有最终完成——但目前的成果已经令人兴奋,毕竟它是由一支体量极小的团队在短时间内打造而成。Lattner凭借着多年的Clang、LLVM和Swift开发经验,为我们奠定了又一块精心构建的语言基石。”

参考链接

https://www.modular.com/blog/the-future-of-ai-depends-on-modularity

https://news.ycombinator.com/item?id=35811380

https://twitter.com/jeremyphoward/status/1653924474536984577

https://docs.modular.com/mojo/programming-manual.html#argument-passing-control-and-memory-ownership

https://www.theregister.com/2023/05/05/modular_struts_its_mojo_a/