比 Python 快 9 万倍的 Mojo 终于开源了!刚上线 star 已跨越 1.7 万_措辞_开源
2024 年 3 月 29 日,Modular Inc. 宣告开源 Mojo 的核心组件。
Mojo 是一种专为编写人工智能软件设计的编程措辞,去年 8 月份正式发布,迄今为止已经积累了超过 17.5 万名开拓者和 5 万个组织。
人工智能模型常日利用多种编程措辞编写。开拓者会用 Python 实现神经网络最大略的部分,这种措辞易于学习,但运行速率相对较慢。别的部分的代码常日利用 C++ 编写,C++ 的运行速率比 Python 更快,但学习难度也更大。
Modular 将 Mojo 定位为一种更方便的替代方案。它供应了一种易于利用的语法,类似于 Python,但运行速率可以快上数千倍。因此,开拓者可以编写快速的 AI 模型,而无需学习 C++ 等繁芜的措辞。
去年,Mojo 推出后,一些开拓者对它的涌现表现得非常愉快,但当被问及开源日期时, Chris Lattner 在 Discord 上是这样说的:“如果我知道的话我会见告你的。”于是在这一年旁边的韶光里,很多开拓者一贯处于不雅观望和质疑的状态:
“宣扬非常好,但如果不是开源的,我不会花任何韶光来考试测验。”
“它显然是一种被浮夸的编程措辞,它不是开源的!
Chris Lattner 想要欺骗数百万 Python 开拓职员!
”
“我不能花韶光在可能开源也可能不开源的措辞上,特殊是考虑到当前 OSS 的商业环境……”
现在,Mojo 终于开源了!
而且在短韶光内,就已经达到了 17.6k 颗 star,并有了 2.1k 分支!
Modular 本日开源的是 Mojo 标准库的核心部分。标准库是编程措辞的核心部分,它包含了措辞的基本语法元素和一些主要特性。Mojo 的标准库包含用于优化 AI 超参数的功能,这些超参数决定了神经网络处理数据的办法。
“Mojo 标准库还处于大力开拓阶段,变革迅速,因此我们首先开源其核心模块。这是我们开源之旅的一个主要出发点,而不是终点。”
该公司表示,开源能让他们得到更多开拓者的反馈,从而让 Mojo 得到更好的发展。其余,开源代码的办法有很多:有些项目供应源代码但不接管贡献;有些供应不透明的贡献流程,无法理解目标和路线图;有些虽然开源但不积极掩护。 Modular 表示他们选择了更彻底的开源办法:许可通过 GitHub pull request 提交外部贡献,鼓励开拓者参与到 Mojo 的开拓和完善中来,促进社区的壮大。
而且 Modular 的诚意非常足,他们还分享了完全的 commit 历史记录,从第一次 commit 开始!
开放标准库的修订历史,可以使开拓者能够追踪代码的演化过程,更好地理解代码含义。
此外,他们还会发布逐日编译版本 (nightly builds) 的 Mojo 编译器,方便开拓者快速考试测验最新的编译器功能,并进行持续集成测试。
Modular 去年年底推出了商用 AI 平台 MAX,这是一套统一的工具和库,用于构建可跨多个硬件平台高效支配的高性能 AI 运用程序,如在 Kubernetes 环境中运行 AI 运用。该公司本日透露,未来他们也操持开源 MAX 的一些组件。
其余,特殊值得一提的是他们选择了 Apache 2 LLVM 容许证进行开源。
这是一种定制版的 Apache 2 容许证。同时为了方便与遵照 GPL2 容许证的软件结合利用,Modular 做出了相应调度。GPL2 是另一盛行的开源容许证,有名项目 Linux 内核即采取该容许证。在宣告开源的博客文章中,Modular 写道:
Apache 2 容许证是一个很好的出发点,但我们在 LLVM 项目中利用容许证的履历见告我们,它存在两个小问题。有些人担心 Apache 2 容许证可能无法与 GPL2 代码(例如 Linux 内核)很好地稠浊利用,并且 Apache 2 容许证哀求你在衍生项目中确认利用该代码。我们希望你能够在不逼迫承认 Modular 或 Mojo 的情形下利用 Mojo。因此,我们加入了专门为办理这些问题而设计的 LLVM 例外条款。
未来 50 年里,最适宜 AI 编程的措辞?去年 5 月,Mojo 刚发布时,Modular 流传宣传,在运行 Mandelbrot 等算法时它比原始 Python 快 3.5 万倍。
去年 9 月,Modular 再次表示 “Mojo 将动态与静态措辞的优点结合起来,一举将性能提升达 Python 的 68000 倍”。
去年 10 月,Mojo 上岸 Mac,Modular 再次提高了这个性能比拟数据:“比 Python 快 90,000 倍”。
在谈到 Mojo 时,Modular 创始人兼首席实行官 Chris Lattner 表示:“可以这样理解,Mojo 是 Python 家族的一员,它汲取了所有这些酷炫的措辞、编译器和其他技能,让 Python 向前迈进了一大步。我们认为它增强了 Python 的能力,授予 Python 程序员超能力,让熟习 Python 的人能够学习新知识,探索并征服新领域,而无需转用 C++。”
Mojo 基于 MLIR 中最新的编译器技能构成而成,所谓 MLIR 则是 LLVM 的演化产物,因此速率表现更好。只要程序员技能水平达标,又有充分优化的意愿,也完备可以让代码跑得飞快。Mojo 措辞的目标在于既知足 Python 开拓者的需求,又供应一系列新的代码优化技巧来充分发掘硬件设备的性能极限。
另一方面,Mojo 团队对 Rust 高度讴歌,并公开表示“Mojo 的设计也在很大程度上受 Rust 启示”。
在性能上,Modular 公司做了很多跟 Python 的比较,让大家有了清晰的比拟,但比 Rust 快多少大家并没有观点。刚好在上个月,他们特地回应了“Mojo 是不是比 Rust 更快”的问题。
今年 2 月份的时候,Netflix 工程师兼 Rust 倡导者 @ThePrimeagen 发布了一段视频:用 Mojo 以超越 Rust50%的速率解析 DNA 序列。这篇博文引发了大量的关注和谈论,毕竟 Rust 被定位为 AI 领域主导措辞的潜在继任者(目前话事的紧张是 Python 和 C++)。
@ThePrimeagen 对付 Mojo 和 Rust 在 AI 编程领域的未来展望:
如果 Mojo 正式加入战局,那我相信 Mojo 无疑将终极胜出。Mojo 取胜的缘故原由,在于无需改变任何开拓者已经熟知的范式。只须要稍加学习,就能得到惊人的性能表现。首先 Mojo 的编译速率很快,而且利用感想熏染跟大家已经熟习的措辞非常靠近,性能也跟 Rust 不相上下。唯一的问题便是怎么让更多人接管它。
在揭橥评论后,在业界颇著名誉的 Rust 贡献者兼《Rust:从入门莅临盆(Zero to Production in Rust)》一书的作者 Luca Palmieri 在 X 上回应称:
昨天在 Mojo vs Rust 上看到了 @ThePrimeagen 的直播:他说的没错。如果 Mojo 能够全面落地,那么对付从事 AI 事情的朋友们来说,我们再也不用在“userspace”里看到 Rust 了。Mojo 的代价主见对付熟习 Python 的机器学习工程师和数据科学家们都是种福音。
Rust 拥有系统编程措辞领域最出色的高等人体工学设计,但其在 AI 运用领域存在两大问题:
编译速率慢,而 AI 特殊强调实验与快速迭代;大多数有 Python 履历的 AI 研究职员不愿花韶光从零开始学习一门新措辞。Mojo 的目标是让 Python 开拓者能够直不雅观轻松地加以节制。正如 Mohamed 所展示,他在几周之内就以业余项目的形式学会了 Mojo 并利用到 SIMD 优化算法(第一次实现只用了 200 行代码)。
对付关注 AI 开拓的朋友们来说,目前确实存在三种措辞选择其一的难题。
Mojo 与 Rust 都许可开拓者在较低层级进行优化。以 Rust 为例,大家当然也可以把所有内容都打包在 Arc、Mutex 或者 Box 当中,以避免与借用检讨器发生冲突,但这也会相应捐躯掉一部分性能。如果我们是在编写运用程序代码,这点性能差异可能没什么重大影响;但对付库或者其他性能敏感的代码,由此带来的开销可能会迅速增加。详细如何选择,取决于程序员对减少开销和优化性能的关注程度。
这两种措辞都可以利用 LLVM 来优化代码天生,也都许可利用内联汇编(当然,相信没人会真这么做),以是理论上二者在传统硬件上的性能潜力基本相称。
基于最前辈的编译器技能
Rust 于 2006 年启动,Swift 则出身于 2010 年,二者紧张构建在 LLVM IR 之上。Mojo 则亮相于 2022 年,基于 MLIR 构建而成——MLIR 是比 Rust 上利用的 LLVM IR 方法更加当代的“下一代”编译器堆栈。值得把稳的是, Chris Lattner 于 2000 年 12 月在大学里创立了 LLVM,并从其多年来的演化和发展中学到了很多。他随后加入谷歌领导 MLIR 的开拓,旨在支持公司的 TPU 及其他 AI 加速器项目。接下来,他连续利用从 LLVM IR 中学到的知识开启了下一步探索。
Modular 公司表示,Mojo 是首个充分利用到 MLIR 前辈特性的编程措辞,既可以天生优化度更高的 CPU 代码,也能支持 GPU 和其他加速器,而且统计速率也比 Rust 快得多。这是目前其他措辞无法实现的上风,也是 AI 和编译器爱好者们痴迷 Mojo 的核心缘故原由。
他们还重点解析了两个方面:
出色的 SIMD 人体工学设计:CPU 通过分外的寄存器与指令来同时处理多位数据,这便是 SIMD(单指令、多数据)。但从历史上看,此类代码的编写体验在人体工学层面来看非常丑陋且难以利用。这些分外指令已经存在多年,但大多数代码仍未针对其进行过优化。以是谁能办理这种繁芜性并编写出可移植的 SIMD 优化算法,谁就能在市场上脱颖而出,例如 simd_json。
Mojo 的原语在设计之初就考虑到了 SIMD 优先:UInt8 实际上是一个 SIMD[DType.uint8, 1],即 1 元素的 SIMD。以这种办法表示它不会产生性能开销,同时许可程序员轻松将其用于 SIMD 优化。例如,我们可以将文本拆分成 64 字节块,将其表示为 SIMD[DType.uint8, 64],再将其与单个换行符进行比较,从而找到每个换行符的索引。由于机器上的 SIMD 寄存器可以同时打算 512 位数据的运算,因此这种操作就能将此类运算的性能提高 64 倍!
或者举个更大略的例子,假设大家有一个 SIMD[DType.float64, 8](2, 4, 6, 8, 16, 32, 64, 128),那么只需大略将其乘以 Float64(2),就能轻松提高性能。与单独将每个元素相乘比较,这种方法在大多数机器上能够将性能提高 8 倍。
LLVM(也便是 Rust)具有自动向量化优化通道,但由于无法变动 SIMD 的内存布局和其他主要细节,以是其性能表现永久达不到理论层面的开拓优化极限。但 Mojo 在设计之初就考虑到 SIMD 特性,因此编写 SIMD 优化的感想熏染与编写普通代码非常相似。
Eager Destruction 迫切销毁:Rust 的设计灵感来自 C++的 RAII(资源获取即初始化),便是说一旦工具超出范围,运用程序开拓者不必分心开释内存,编程措辞本身会自行处理。这是个非常好的范例,能在保障动态措辞人体工学的条件下回避垃圾网络机制带来的性能毛病。
Mojo 则更进一步,它不会等待末端浸染域,而在末了一次利用工具时开释内存。这对 AI 场景非常有利,由于提前开释工具意味着提前开释 GPU 张量,因此可以在等量 GPU RAM 中拟合更大的模型。这是 Mojo 的独特上风,程序员无需费心设计即可得到最佳性能。Rust 借用检讨器最初会将全部内容的生命周期延长至其浸染域的末端,借此匹配解构函数(destructor)的行为,但这会给用户带来一些令人困惑的后果。Rust 随后添加了一些非词汇生命周期功能以简化开拓者的事情。但凭借 Mojo 中的迫切销毁(eager destructor)机制,这种简化效果可以直接实现,而且其与工具的实际销毁办法保持同等,因此不会引发令人难以理解的极度情形。
Rust 中的另一种开销来自 Drop 的实现办法。它利用 Drop Flags 标记跟踪是否该当在运行时删除工具。Rust 在某些情形下能够实现优化,但 Mojo 可通过明确定义肃清统统情形下的额外开销。
不管怎么说,开拓职员都必须在 Mojo 以及 Python 的易用性、 C、C++ 或 Rust 的高性能之间做出选择。对此,Mojo 团队向开拓者喊话说:“如果各位好奇心兴旺并更多面向未来,希望节制一门可能在未来 50 年内对 AI 发展有所助益的措辞,那不妨给 Mojo 个机会!
”
原文链接:
比Python快9万倍的Mojo终于开源了!
刚上线star已超过1.7万_开源_核子可乐_InfoQ精选文章
本文系作者个人观点,不代表本站立场,转载请注明出处!