作者|核子可乐、Tina
2024年3月29日,ModularInc.宣布开源Mojo的核心组件。
Mojo是一种专为编写人工智能软件设计的编程语言,去年8月份正式发布,迄今为止已经积累了超过17.5万名开发者和5万个组织。
人工智能模型通常使用多种编程语言编写。开发者会用Python实现神经网络最简单的部分,这种语言易于学习,但运行速度相对较慢。其余部分的代码通常使用C++编写,C++的运行速度比Python更快,但学习难度也更大。
Modular将Mojo定位为一种更方便的替代方案。它提供了一种易于使用的语法,类似于Python,但运行速度可以快上数千倍。因此,开发者可以编写快速的AI模型,而无需学习C++等复杂的语言。
去年,Mojo推出后,一些开发者对它的出现表现得非常兴奋,但当被问及开源日期时,ChrisLattner在Discord上是这样说的:“如果我知道的话我会告诉你的。”于是在这一年左右的时间里,很多开发者一直处于观望和质疑的状态:
“宣传非常好,但如果不是开源的,我不会花任何时间来尝试。”
“它显然是一种被夸大的编程语言,它不是开源的!ChrisLattner想要欺骗数百万Python开发人员!”
“我不能花时间在可能开源也可能不开源的语言上,特别是考虑到当前OSS的商业环境……”
现在,Mojo终于开源了!
而且在短时间内,就已经达到了17.6k颗star,并有了2.1k分支!
Modular今天开源的是Mojo标准库的核心部分。标准库是编程语言的核心部分,它包含了语言的基本语法元素和一些重要特性。Mojo的标准库包含用于优化AI超参数的功能,这些超参数决定了神经网络处理数据的方式。
“Mojo标准库还处于大力开发阶段,变化迅速,因此我们首先开源其核心模块。这是我们开源之旅的一个重要起点,而不是终点。”
而且Modular的诚意非常足,他们还分享了完整的commit历史记录,从第一次commit开始!开放标准库的修订历史,可以使开发者能够追踪代码的演变过程,更好地理解代码含义。
此外,他们还会发布每日编译版本(nightlybuilds)的Mojo编译器,方便开发者快速尝试最新的编译器功能,并进行持续集成测试。
Modular去年年底推出了商用AI平台MAX,这是一套统一的工具和库,用于构建可跨多个硬件平台高效部署的高性能AI应用程序,如在Kubernetes环境中运行AI应用。该公司今天透露,未来他们也计划开源MAX的一些组件。
另外,特别值得一提的是他们选择了Apache2LLVM许可证进行开源。
这是一种定制版的Apache2许可证。同时为了方便与遵循GPL2许可证的软件结合使用,Modular做出了相应调整。GPL2是另一流行的开源许可证,知名项目Linux内核即采用该许可证。在宣布开源的博客文章中,Modular写道:
未来50年里,最适合AI编程的语言?去年5月,Mojo刚发布时,Modular宣称,在运行Mandelbrot等算法时它比原始Python快3.5万倍。
去年9月,Modular再次表示“Mojo将动态与静态语言的优点结合起来,一举将性能提升达Python的68000倍”。
去年10月,Mojo登陆Mac,Modular再次提高了这个性能对比数据:“比Python快90,000倍”。
在谈到Mojo时,Modular创始人兼首席执行官ChrisLattner表示:“可以这样理解,Mojo是Python家族的一员,它汲取了所有这些酷炫的语言、编译器和其他技术,让Python向前迈进了一大步。我们认为它增强了Python的能力,赋予Python程序员超能力,让熟悉Python的人能够学习新知识,探索并征服新领域,而无需转用C++。”
Mojo基于MLIR中最新的编译器技术构成而成,所谓MLIR则是LLVM的演变产物,因此速度表现更好。只要程序员技术水平达标,又有充分优化的意愿,也完全可以让代码跑得飞快。Mojo语言的目标在于既满足Python开发者的需求,又提供一系列新的代码优化技巧来充分发掘硬件设备的性能极限。
另一方面,Mojo团队对Rust高度赞赏,并公开表示“Mojo的设计也在很大程度上受Rust启发”。
在性能上,Modular公司做了很多跟Python的比较,让大家有了清晰的对比,但比Rust快多少大家并没有概念。刚好在上个月,他们特地回应了“Mojo是不是比Rust更快”的问题。
@ThePrimeagen对于Mojo和Rust在AI编程领域的未来展望:
昨天在MojovsRust上看到了@ThePrimeagen的直播:他说的没错。如果Mojo能够全面落地,那么对于从事AI工作的朋友们来说,我们再也不用在“userspace”里看到Rust了。Mojo的价值主张对于熟悉Python的机器学习工程师和数据科学家们都是种福音。
Rust拥有系统编程语言领域最出色的高级人体工学设计,但其在AI应用领域存在两大问题:
编译速度慢,而AI特别强调实验与快速迭代;
大多数有Python经验的AI研究人员不愿花时间从零开始学习一门新语言。
Mojo的目标是让Python开发者能够直观轻松地加以掌握。正如Mohamed所展示,他在几周之内就以业余项目的形式学会了Mojo并使用到SIMD优化算法(第一次实现只用了200行代码)。
这两种语言都可以使用LLVM来优化代码生成,也都允许使用内联汇编(当然,相信没人会真这么做),所以理论上二者在传统硬件上的性能潜力基本相当。
基于最先进的编译器技术Rust于2006年启动,Swift则诞生于2010年,二者主要构建在LLVMIR之上。Mojo则亮相于2022年,基于MLIR构建而成——MLIR是比Rust上使用的LLVMIR方法更加现代的“下一代”编译器堆栈。值得注意的是,ChrisLattner于2000年12月在大学里创立了LLVM,并从其多年来的演变和发展中学到了很多。他随后加入谷歌领导MLIR的开发,旨在支持公司的TPU及其他AI加速器项目。接下来,他继续利用从LLVMIR中学到的知识开启了下一步探索。
Modular公司表示,Mojo是首个充分利用到MLIR先进特性的编程语言,既可以生成优化度更高的CPU代码,也能支持GPU和其他加速器,而且统计速度也比Rust快得多。这是目前其他语言无法实现的优势,也是AI和编译器爱好者们痴迷Mojo的核心原因。
他们还重点解析了两个方面:
出色的SIMD人体工学设计:CPU通过特殊的寄存器与指令来同时处理多位数据,这就是SIMD(单指令、多数据)。但从历史上看,此类代码的编写体验在人体工学层面来看非常丑陋且难以使用。这些特殊指令已经存在多年,但大多数代码仍未针对其进行过优化。所以谁能解决这种复杂性并编写出可移植的SIMD优化算法,谁就能在市场上脱颖而出,例如simd_json。
Mojo的原语在设计之初就考虑到了SIMD优先:UInt8实际上是一个SIMD[,1],即1元素的SIMD。以这种方式表示它不会产生性能开销,同时允许程序员轻松将其用于SIMD优化。例如,我们可以将文本拆分成64字节块,将其表示为SIMD[,64],再将其与单个换行符进行比较,从而找到每个换行符的索引。由于机器上的SIMD寄存器可以同时计算512位数据的运算,因此这种操作就能将此类运算的性能提高64倍!
或者举个更简单的例子,假设大家有一个SIMD[,8](2,4,6,8,16,32,64,128),那么只需简单将其乘以Float64(2),就能轻松提高性能。与单独将每个元素相乘比较,这种方法在大多数机器上能够将性能提高8倍。
LLVM(也就是Rust)具有自动向量化优化通道,但由于无法更改SIMD的内存布局和其他重要细节,所以其性能表现永远达不到理论层面的开发优化极限。但Mojo在设计之初就考虑到SIMD特性,因此编写SIMD优化的感受与编写普通代码非常相似。
EagerDestruction急切销毁:Rust的设计灵感来自C++的RAII(资源获取即初始化),就是说一旦对象超出范围,应用程序开发者不必分心释放内存,编程语言本身会自行处理。这是个非常好的范例,能在保障动态语言人体工学的前提下回避垃圾收集机制带来的性能缺陷。
Mojo则更进一步,它不会等待末尾作用域,而在最后一次使用对象时释放内存。这对AI场景非常有利,因为提前释放对象意味着提前释放GPU张量,因此可以在等量GPURAM中拟合更大的模型。这是Mojo的独特优势,程序员无需费心设计即可获得最佳性能。Rust借用检查器最初会将全部内容的生命周期延长至其作用域的末尾,借此匹配解构函数(destructor)的行为,但这会给用户带来一些令人困惑的后果。Rust随后添加了一些非词汇生命周期功能以简化开发者的工作。但凭借Mojo中的急切销毁(eagerdestructor)机制,这种简化效果可以直接实现,而且其与对象的实际销毁方式保持一致,因此不会引发令人难以理解的极端情况。
Rust中的另一种开销来自Drop的实现方式。它使用DropFlags标记跟踪是否应该在运行时删除对象。Rust在某些情况下能够实现优化,但Mojo可通过明确定义消除一切情况下的额外开销。
不管怎么说,开发人员都必须在Mojo以及Python的易用性、C、C++或Rust的高性能之间做出选择。对此,Mojo团队向开发者喊话说:“如果各位好奇心旺盛并更多面向未来,希望掌握一门可能在未来50年内对AI发展有所助益的语言,那不妨给Mojo个机会!”
比Python快9万倍的Mojo终于开源了!刚上线star已超过1.7万_开源_核子可乐_InfoQ精选文章
版权所有©Copyright © 2022-2030 汉缘网网站地图