写点什么

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

  • 2023-05-07
    北京
  • 本文字数:3220 字

    阅读完需:约 11 分钟

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

“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/

2023-05-07 16:0016845

评论 4 条评论

发布
用户头像
中文文档大家一起来贡献吧 mojofire.cn
2023-09-25 14:11 · 广东
回复
用户头像
看数据真实激动人心,不知道这个场景是不是具有普适性,我一个for循环也能快这么多么?
2023-08-04 10:21 · 北京
回复
用户头像
感觉世界是一个循环,我们用虚拟机实现了跨平台,但现在又抛弃了跨平台
2023-05-08 09:07 · 波兰
回复
跨平台本身就是伪需求, 不被某一家公司卡脖子才是本质
2023-05-11 13:49 · 广东
回复
没有更多了
发现更多内容

项目管理实践篇(一):技术人如何做好风险把控

后台技术汇

项目管理

华为数据治理及数据分类管理实践

王知无

北鲲云计算,用技术成就生物科学领域发展

北鲲云

Fil矿机怎么购买?Fil矿机哪里买?

fil矿机怎么购买 fil矿机 ipfs矿机

科学主义 -- 个人进步的杀手

俞凡

认知

架构实战营 - 模块二作业

李东旭

「架构实战营」

模块-1 微信业务架构图 和 备选方案

小遵

vivo S系列的爆款密码:自拍,自然,自出机杼

脑极体

华为18级工程师耗时三年才总结出这份Java亿级高并发核心编程手册

Java 编程 程序员

八位阿里大牛耗时三年总结出Java面试复盘手册!带你实现逆风翻盘

白嫖一份小白到进阶网络安全学习宝典【建议收藏】

网络安全学海

面试 网络安全 信息安全 渗透测试 开发安全

八位阿里大牛耗时三年总结出Java面试复盘手册!带你实现逆风翻盘

白亦杨

Java 编程 程序员

模块 2. 架构设计

Geek_ywh40v

模块二作业

SAKIN

Spark SQL和DataFrames:与外部数据源进行交互(五)

Databri_AI

sql spark

金九银十马上要来了,我熬夜整理10 万字节详细面试笔记(带完整目录) 良心分享

Java 编程 程序员 架构 面试

模块一作业

A先生

Python OpenCV 对象检测,图像处理取经之旅第 37 篇

梦想橡皮擦

7月日更

两个月面试5家,(美团、360、新浪网、完美世界、搜狐)已拿美团18k*16薪offer

Java 编程 程序员 架构 面试

一文入门 Go 的性能分析

Rayjun

pprof Go 语言

微信朋友圈的高性能复杂度

张文龙

#架构实战营

网络攻防学习笔记 Day77

穿过生命散发芬芳

网络攻防 7月日更

和12岁小同志搞创客开发:检测按键状态的两件法宝

不脱发的程序猿

DIY 中断 创客开发 按键检测

Data Mesh,数据网格的道与术

王知无

分享几个团队敏捷转型过程中的故事

Bruce Talk

Scrum 敏捷 Agile

模块二作业

A先生

福布斯解读区块链行业如何改变全球人才供给

CECBC

OLAP 扫盲

Galaxy数据平台

OLAP 高基数

智能运维(AIOps)系列之四:智能运维落地的思路

micklongen

AIOPS 智能运维

心理韧性:如何让自己从逆境中走出来

石云升

学习 心理学 7月日更

【面试&个人成长】2021年过半,社招和校招的经验之谈

王知无

比Python快35000倍!LLVM&Swift之父宣布全新编程语言Mojo:编程被颠覆了_AI&大模型_核子可乐_InfoQ精选文章