架构师大咖
架构师大咖,打造有价值的架构师交流平台。分享架构师干货、教程、课程、资讯。架构师大咖,每日推送。AI 时代,在各大公司“卷”大模型之际,也有人从工具层“发力”编程语言。
2023 年,Swift 之父、编译器大神 Chris Lattner 和 Google 前员工 Tim Davis 带领其背后的初创团队 Modular 加入 AI 战局,先是火速发布了比 Python 快 35000 倍的 Mojo 编程语言,而后又拿下 1 亿美元的融资,进而推出围绕 Mojo 打造的商业人工智能平台 MAX,最终希望 Mojo 能成为一款所有 AI 程序员都在使用的编程语言。
现如今,Modular 再次展开布局,官宣开源 Mojo 核心组件(https://github.com/modularml/mojo)。基于开源开放的方式,这一项目在短短时间内迅速吸引全球开发者的关注,GitHub Star 数攀升到 19.2k,Fork 达 2.3k。
![](http://mmbiz.qpic.cn/sz_mmbiz_png/q7kM1wTg0ehoI3hYicJdDNeZJvXJZKmSEkw147ibLZSicgItWmRY065Fc5dTgfjbxKDeF3AhuD5X5cvTqhx0m3GuQ/640?wx_fmt=png&from=appmsg)
对此,不少网友持以期待:“Mojo
现已开源。Python 已经很棒了。Mojo 将其提升到了一个全新的水平。我们正在使用 Python 构建 AGI。想象一下当我们加快速度时的可能性!”
![](http://mmbiz.qpic.cn/sz_mmbiz_png/q7kM1wTg0ehoI3hYicJdDNeZJvXJZKmSEq69GI8rEq5uibvkWFfvuicvxwTJAY7LOSA7Z0ibCiaNgo38XedIia3nibOjA/640?wx_fmt=png&from=appmsg)
![](http://mmbiz.qpic.cn/mmbiz_png/Pn4Sm0RsAujX5kS5KQ6BaBUsy1RqR06QuwjkSP1G6wEJHaJCLTONqlcQexqRgJcIICxofIOJs6B6tWBfibb7now/640?wx_fmt=png)
AI 编程语言 Mojo 正式开源标准库
Mojo 自 2023 年 5 月首次面世以来,一直在稳步迭代。它是一种专为 AI 设计的编程语言,可以将 Python 的易用性与 C 的性能相结合,释放 AI 硬件强大的可编程性和 AI 模型的可扩展性。
简单来看,使用 Mojo 可以编写比 C 更快、可移植的代码,并与 Python 生态系统无缝交互。最重要的是,Mojo 具备了使用 Python 库整个生态系统的能力。
之所以选择开源的方式,Modular 在官方公告中写道,“在 Modular,开源已根植于我们的 DNA 中。我们坚信,Mojo 要充分发挥其潜力,就必须开源。我们一直在逐步开源更多 Mojo 和 MAX 平台的部分内容,今天我们很高兴地宣布在 Apache 2 许可证下发布 Mojo 标准库的核心模块!我们始终相信,公开构建 Mojo 会带来更好的结果,因为它允许其设计受到更广泛社区的反馈的影响。”
Modular 开源的 Mojo 组件构成了该语言标准库。这是编程语言的一部分,包括其核心语法元素和其他基本功能。Mojo 的标准库包含优化 AI 超参数等任务的功能,这些设置决定神经网络如何处理数据。
和其他开源项目有所不同,Modular 团队这次除了提供标准库的源代码之外,还开放标准库的修订历史记录、发布 Mojo 编译器的夜间构建版本(软件的每日构建版本),提供了公共持续集成服务(public CI ),并通过 GitHub 拉取请求允许外部贡献。
![](http://mmbiz.qpic.cn/mmbiz_png/Pn4Sm0RsAujX5kS5KQ6BaBUsy1RqR06QDyP5HTUOXsPlJWd79yygiasaqXicpN7ibIfqiak5WFpaxE1mGxxpfmMjiaA/640?wx_fmt=png)
遵循 Apache 2 LLVM 许可
在遵循的开源协议上,Mojo 使用的 Apache 2,它包含了专利授权条款,为软件的用户和贡献者提高了法律保护。
不过,在使用 Apache 2 许可证时,Modular 团队基于 LLVM 项目经验也发现了两个问题:
对此,Modular 团队表示,“我们希望你可以在不需要承认使用 Modular 或 Mojo 的情况下使用 Mojo,并且明确表明与 GPL2 代码混合是可以接受的。因此,我们包含了专门设计用于解决这些问题的 LLVM exception。
我们认为这代表了语言和工具项目的开源许可证的最新技术水平,并建议其他 Mojo 开源项目采用相同的方法。我们已经在我们现有的开源代码中使用了这种方法,并将继续以相同的方式发布更多的代码。”
![](http://mmbiz.qpic.cn/mmbiz_png/Pn4Sm0RsAujX5kS5KQ6BaBUsy1RqR06Q0QtgZAx8xsoTReptvArfwbn9MvHGVfV98Qkl5PMRS6MCt2ljwLJwoQ/640?wx_fmt=png)
对标 Python?也许搞错了
Mojo 作为一门新语言,如今选择开源的方式吸引全球开发者参与其中,无疑对其生态发展有极大的好处,但是就这门语言而言,也有不少人存有争议,毕竟自其发布以来,也有不少人将其对标因 AI 发展而风生水起的 Python 语言,而 Mojo 官方也多次将其与 Python 的运行速度相比较:
![](http://mmbiz.qpic.cn/mmbiz_png/Pn4Sm0RsAuj7qfuzfFfxW72MTqVTlmljjKdMzicNF76FSN3BNTTkwLeGkT3TdiajMK0J7iaIJqyzxic9DspZ9YkXxw/640?wx_fmt=other&wx_lazy=1&wx_co=1)
同年 9 月 7 日,Modular 公司宣布 Mojo 初步登陆 Linux 系统之际介绍称,Mojo 将动态与静态语言的优点结合起来,一举将性能提升达 Python 的 68000 倍。
在 10 月,Mojo 推出了支持 Mac 平台的版本,Chris Lattner 发文表示:Mojo + Apple Silicon 是强强联合,强上加强。
彼时 Mojo 团队fa,Mojo 语言可以充分利用 Mac CPU 内核和矢量单元来实现加速。根据他们提供的测试 —— 使用 matmul.mojo 运行一个矩阵乘法示例。在 Apple MacBook Pro M2 Max 上,与纯 Python 实现的版本相比,Mojo 的速度大约比 Python 快 90,000 倍。
![](http://mmbiz.qpic.cn/sz_mmbiz_png/q7kM1wTg0ehoI3hYicJdDNeZJvXJZKmSEsBqR7mGjl7uXiboPWiacdMkJOAczJs5syuRFZ4dozryU09byZTj817Tw/640?wx_fmt=png&from=appmsg)
基于此,也有人担心自己刚学了 Python,难道又要开始学 Mojo?
![](http://mmbiz.qpic.cn/sz_mmbiz_png/q7kM1wTg0ehoI3hYicJdDNeZJvXJZKmSErGqcYTN3Ytviamiaqr9Y3icSBZol2dvq37FicbjwpNR0W7GgQb5wZhPypQ/640?wx_fmt=png&from=appmsg)
其实对于这个问题,Mojo 之父 Chris Lattner 早些时候也直率地回应过,「Mojo 对 Python 没有威胁:它提升了 Python 的水平并赋予 Python 程序员超能力。如果有人应该害怕的话,那就应该是 C++ ,这种很难使用加速器语言。Python 是开发人员所喜爱的:当你需要性能时,C++ 基本上是一种实用的必要之恶。」
现实来看,也确实如此,Mojo 可以视为是 Python 的一个超集,甚至视为 Python++,它弥补了 Python 的一些不足之处。
要知道过往 20 年间,Python 凭借其简单的语法和广泛的生态系统,巩固了其作为 AI 领域主导语言的地位。然而,性能不佳是它的一个重大缺陷,尤其是在人工智能等计算密集型领域。
至于 Python 性能为什么不好,主要还是和它最初的设计有关,Python 起初优先考虑了生产力和简单的语法,导致它:
是一门解释性语言。解释性语言本质上较慢,因为解释器执行代码而不是直接与硬件交互。相比之下,编译型语言生成机器码,直接由硬件执行,使它们快了几个数量级。
Python 的动态类型意味着变量数据类型在运行时确定,引入了类型检查和处理的开销,这导致了语言的慢速。
Python 使用引用计数来管理内存。虽然对编程很方便,但解释器必须跟踪内存并清理未使用的对象,这会产生额外开销。
现代 CPU 具有多个核心,要最大化性能需要利用这些多个执行线程。虽然 Python 支持多线程,但全局解释器锁(GIL)阻止多个线程同时运行,使大量性能提升未能实现。不过,Python 正在逐步尝试缩小 GIL 的范围,例如在 Python 3.12 中引入了针对每个解释器的 GIL,这意味着各个 Python 解释器不再共享同一个 GIL。
一些如数值计算等操作,在 Python 中可能比 C 或 FORTRAN 等编译型语言慢。
针对其中一些问题有解决方法。例如,性能关键的代码可以用 C 或 C++ 等编译型语言编写,并从 Python 调用。许多机器学习库,如 Numpy、Scipy、TensorFlow 和 PyTorch,就是这样做的。由于这些库是用 C/C++ 实现的,它们还利用 SIMD 指令来改善执行数值计算的性能。
不过,并非所有人都精通 C 语言编写。即使他们能写一些 C,优化以实现最大硬件输出的技能也是极少数人拥有的。诸如 Cython 和 Numba 之类的工具已被开发出来以简化这些问题,但它们无法保证在所有情况下进行优化,也无法针对如今用于部署人工智能应用的各种硬件目标进行优化,比如 CPU、GPU、TPU和定制 FPGA。
后来,Modular 使 Mojo 成为一种更方便的替代方案。它提供了与 Python 类似的相对易于使用的语法,但运行代码的速度快了数千倍。结果是开发人员可以编写快速的 AI 模型,而无需学习 C++ 等复杂技术。
在性能方面,Mojo 提供与 C、Rust 一样快的性能,同时还提供了 Python 的易用性。Mojo 是静态类型的,这可以让编译器能够进一步优化代码,并在编译时执行错误检查。此外,它还支持强大的编译时元编程,允许将通用代码编译成多个由类型参数化的专门版本,类似于其他语言中的泛型,但更强大。
与此同时,Mojo 构建在 MLIR 框架之上,进而可以移植到广泛的硬件设备上,包括 CPU、GPU 和 TPU。这种兼容性使得可以在不同的设备上编译相同的代码而无需修改,使 Mojo 成为构建 AI 应用的优秀选择。
![](http://mmbiz.qpic.cn/mmbiz_png/Pn4Sm0RsAujX5kS5KQ6BaBUsy1RqR06Q0jqAkXB2hEohZkOqYzXVsmJtnNRQncYh54ZQOpcC5ZGSicYFgtBZP4w/640?wx_fmt=png)
Mojo 开源初起步
截至目前,对于发布不足一年的 Mojo 而言,有数据显示,其已经建立超过 175000 名开发者和 50000 个组织的用户群,可见它的演进速度并不慢。鉴于此次标准库的开源,也有不少用户翘首期盼 Mojo 编译器开源的那一天。
此次,Modular 团队虽未明说,但是其在公告中透露,“我们认为这是我们开源之旅的一个重要起点,而不是终点。当我们与社区一起学习时,我们逐步发展和迭代我们的开发和贡献流程。随着时间的推移,我们将开放更多代码,包括更多 Mojo 和更广泛的 MAX 平台的部分内容。”
![](http://mmbiz.qpic.cn/mmbiz_png/Pn4Sm0RsAujX5kS5KQ6BaBUsy1RqR06QGHX4EaTS3AknUHvnayNiaLnANlsxF3g1JR5q9HIdppdNd8c8uyuC05w/640?wx_fmt=png)
AI 时代是否还有“卷”编程语言的必要?
最后,在提及 Mojo 语言之际,也有开发者陷入怀疑之中,发出「AI 时代究竟是否还有必要学习编程语言」的灵魂一问。
回看过往一段时间,3 月初,百度 CEO 李彦宏说,以后不会存在程序员了,只要会说话就能具备程序员能力,而未来的编程语言,只会剩下两种,一种叫英文,一种叫中文。
英伟达 CEO 黄仁勋在对孩子的最新寄语中说,生成式 AI 的未来发展大幅降低了学习编程的意义,人类应该专注于更重要的技能,如生物学、教育学、制造业或农业。我们的工作就是创造计算技术,让所有人都不需要编程。而且编程语言可以普及成为人类的语言,现在世界上每个人都是程序员,这就是人工智能的奇迹。
就在昨日阿里云官宣了 AI 员工——通义灵码,工号 AI 001 号。它擅长 Java、Python、Go、JavaScript、TypeScript、C/C++、C# 等 200 多种编程语言,可以辅助程序员写代码、读代码、查 Bug、优化代码等。
![](http://mmbiz.qpic.cn/sz_mmbiz_png/qdzZBE73hWv9Dwn8vClPLGeVhBaHQYOccg73jlGBZH5iautavIxmEOGURGyaLUGvFd5MsneetPyXSdQeeMZ20Sw/640?wx_fmt=other&from=appmsg&wx_lazy=1&wx_co=1)
所以,学编程语言究竟是否还有必要,尤其是 Mojo 这样的新语言。带着这样的问题,我们也询问了 ChatGPT,它给出的答案是:
尽管 AI 工具在编程领域的发展和应用可以提供帮助,但程序员仍然需要学习编程语言。以下是几个原因:
![](http://mmbiz.qpic.cn/sz_mmbiz_png/q7kM1wTg0ehoI3hYicJdDNeZJvXJZKmSE9LhFmuFUL3BtSzBlt23UQf6SvuvXDa2STng7Luspich8UUcxSusFAoQ/640?wx_fmt=png&from=appmsg)
基于此,你如何看待新出现的开源 Mojo?以及 AI 时代的编程语言是否有必要上手?欢迎留言分享。
参考:
https://www.modular.com/blog/the-next-big-step-in-mojo-open-source
https://github.com/modularml/mojo/tree/nightly?tab=readme-ov-file
https://codeconfessions.substack.com/p/mojo-the-future-of-ai-programming
Python入门到精通
Python入门到精通:人生苦短,我用Python!Python每日推送、Python教程、Python资料、Python视频、Python项目、Python学习等。