[Python独家资料]
危!比 Python 快 90,000 倍的 Mojo 官宣开源
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。
对此,不少网友持以期待:“Mojo 现已开源。Python 已经很棒了。Mojo 将其提升到了一个全新的水平。我们正在使用 Python 构建 AGI。想象一下当我们加快速度时的可能性!”
01 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 拉取请求允许外部贡献。
02 遵循 Apache 2 LLVM 许可
在遵循的开源协议上,Mojo 使用的 Apache 2,它包含了专利授权条款,为软件的用户和贡献者提高了法律保护。
不过,在使用 Apache 2 许可证时,Modular 团队基于 LLVM 项目经验也发现了两个问题:
其一,有人担心 Apache 2 许可证可能无法与 GPL2 代码(例如 Linux 内核)不太兼容;
其二,Apache 2 许可证要求你承认在衍生项目中使用了代码。
对此,Modular 团队表示,“我们希望你可以在不需要承认使用 Modular 或 Mojo 的情况下使用 Mojo,并且明确表明与 GPL2 代码混合是可以接受的。因此,我们包含了专门设计用于解决这些问题的 LLVM exception。
我们认为这代表了语言和工具项目的开源许可证的最新技术水平,并建议其他 Mojo 开源项目采用相同的方法。我们已经在我们现有的开源代码中使用了这种方法,并将继续以相同的方式发布更多的代码。”
03 对标 Python?也许搞错了
Mojo 作为一门新语言,如今选择开源的方式吸引全球开发者参与其中,无疑对其生态发展有极大的好处,但是就这门语言而言,也有不少人存有争议,毕竟自其发布以来,也有不少人将其对标因 AI 发展而风生水起的 Python 语言,而 Mojo 官方也多次将其与 Python 的运行速度相比较:
2023 年 5 月,在用最先进的编译器和异构运行时,Mojo 能够利用硬件的全部功能,包括多核、向量单元和加速器单元,在不复杂的前提下,实现与 C++ 和 CUDA 相当的性能。与此同时,根据官网测试结果,Mojo 比 Python 快 35000 倍。
同年 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 倍。
基于此,也有人担心自己刚学了 Python,难道又要开始学 Mojo?
其实对于这个问题,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 应用的优秀选择。
05 Mojo 开源初起步
截至目前,对于发布不足一年的 Mojo 而言,有数据显示,其已经建立超过 175000 名开发者和 50000 个组织的用户群,可见它的演进速度并不慢。鉴于此次标准库的开源,也有不少用户翘首期盼 Mojo 编译器开源的那一天。
此次,Modular 团队虽未明说,但是其在公告中透露,“我们认为这是我们开源之旅的一个重要起点,而不是终点。当我们与社区一起学习时,我们逐步发展和迭代我们的开发和贡献流程。随着时间的推移,我们将开放更多代码,包括更多 Mojo 和更广泛的 MAX 平台的部分内容。”
06 AI 时代是否还有“卷”编程语言的必要?
最后,在提及 Mojo 语言之际,也有开发者陷入怀疑之中,发出「AI 时代究竟是否还有必要学习编程语言」的灵魂一问。
回看过往一段时间,3 月初,百度 CEO 李彦宏说,以后不会存在程序员了,只要会说话就能具备程序员能力,而未来的编程语言,只会剩下两种,一种叫英文,一种叫中文。
英伟达 CEO 黄仁勋在对孩子的最新寄语中说,生成式 AI 的未来发展大幅降低了学习编程的意义,人类应该专注于更重要的技能,如生物学、教育学、制造业或农业。我们的工作就是创造计算技术,让所有人都不需要编程。而且编程语言可以普及成为人类的语言,现在世界上每个人都是程序员,这就是人工智能的奇迹。
就在昨日阿里云官宣了 AI 员工——通义灵码,工号 AI 001 号。它擅长 Java、Python、Go、JavaScript、TypeScript、C/C++、C# 等 200 多种编程语言,可以辅助程序员写代码、读代码、查 Bug、优化代码等。
所以,学编程语言究竟是否还有必要,尤其是 Mojo 这样的新语言。带着这样的问题,我们也询问了 ChatGPT,它给出的答案是:
尽管 AI 工具在编程领域的发展和应用可以提供帮助,但程序员仍然需要学习编程语言。以下是几个原因:
1、理解和创造性思维
学习变成语言不仅仅是为了掌握语法和规则,更重要的是理解编程的基本原理和思维方式,这种理解是程序员能够进行创造性思考和解决问题的关键
2、定制化需求
虽然AI工具可以生成代码片段,但在实际项目中,通常需要根据具体的需求进行定制化开发。程序员需要根据项目要求选择合适的算法、数据结构和设计模式,并将其转化为可执行的代码。
3、质量控制和调试
编程语言的学习使得程序员能够编写高质量的代码,并进行必要的调试和优化。尽管AI工具可以提供建议和检查错误,但程序员仍然需要进行代码审查和调试,以确保代码的正确性和稳定性。
4、新技术的应用
编程语言的学习使得程序员能够更好的理解和应用新技术。尽管AI工具可以帮助提升效率,但要想真正掌握新技术并将其应用到实际项目中,仍然需要学习相应的编程语言和框架。
综上所述,尽管AI工具的发展可能改变了编程的方式,但编程语言仍然是程序员必须学习的重要基础。学习变成语言不仅有助于提高编码的效率,更重要的是培养了程序员的思维方式和解决问题的能力。
基于此,你如何看待新出现的开源 Mojo?以及 AI 时代的编程语言是否有必要上手?欢迎留言分享。
参考:
https://www.modular.com/blog/the ... in-mojo-open-source
https://github.com/modularml/mojo/tree/nightly?tab=readme-ov-file
https://codeconfessions.substack ... e-of-ai-programming
————————————————
原文链接:https://blog.csdn.net/csdnnews/article/details/137364547
|
|
|
|
|