Transcript

00:00:00编程语言 Mojo 刚刚发布了 1.0 版本,时机有点微妙。
00:00:05它最初发布时是闭源编译器,七天后才开源,
00:00:09而高通刚刚收购了这家公司。
00:00:12不过我们先抛开这些不谈。
00:00:14Mojo 的核心亮点在于,它既能写出类似 Python 的代码,又无需为了追求速度而转投 C++ 或 CUDA。
00:00:20让我们来看看它是否真的能兑现承诺。
00:00:27Mojo 探讨的核心问题是:
00:00:30如果你能编写出感觉和外观都酷似 Python 的代码,
00:00:34同时又能直接运行真正关键的部分,而不需要切换到 C++ 或 CUDA,会怎么样?
00:00:39一种贯穿 CPU 和 GPU 的易读语言。
00:00:42这就是这里的关键所在。
00:00:43现在 Mojo 终于迎来了 1.0 版本,我想亲自验证一下其中有多少是真实可信的。
00:00:49所以在我们讨论高通、开源以及其他事情之前,先跑一下代码吧。
00:00:53如果你喜欢用编程工具来加速工作流,请务必订阅。
00:00:57我们一直在持续更新视频。
00:00:59我将在本地机器上进行演示,但这里不会做成保姆级的 Mojo 教程。
00:01:03如果你以前没见过它,那么是的,它看起来很像 Python,
00:01:07但你会发现一些关键的区别。
00:01:10左边是 Python 代码。
00:01:12右边是 Mojo 代码。
00:01:13它们使用相同的循环、相同的网格以及相同的迭代上限。
00:01:17我不会在这里详细解释其中的数学原理。
00:01:20看这两个 while 循环。
00:01:21它们做的事情是一样的。
00:01:23我们先在这里运行 Python。
00:01:26好的,没问题。
00:01:27它跑起来了。
00:01:28执行完毕。
00:01:28现在,运行经过 Mojo 编译的相同程序。
00:01:32同样,我们运行一下。
00:01:35轰!
00:01:35搞定。
00:01:36现在,校验和的最后一位数字可能不匹配。
00:01:39在二十五万次的计算中,它们相差了区区几百。
00:01:43Python 执行的是先乘后加。
00:01:45而 Mojo 编译可以将其融合成单条指令。
00:01:49少数像素会多进行一次迭代。
00:01:51请把这里的秒数当作真正的参考数字。
00:01:54而且这可不是 NumPy。
00:01:55这不是一个模型。
00:01:56性能提升不仅体现在 CPU 循环变快了上。
00:02:00你可以从 Python 开始,因为这很简单。
00:02:03然后代码路径就会转移到 C++ 或 CUDA。
00:02:06现在你得维护两个文件,它们开始逐渐产生分歧。
00:02:09所以,这就是 Mojo 提出的大哉问。
00:02:12你阅读的文件,能不能就是直接运行在 GPU 上的同一个文件?
00:02:17这个函数就是内核。
00:02:18每个 GPU 线程负责相加一对数字。
00:02:20就是这样。
00:02:21我没有切换到 Metal、Swift 或者是 CUDA。
00:02:24编译它。
00:02:26现在我们的代码顺利跑起来了。
00:02:28所以,是的。
00:02:30Mojo 确实能做到一些相当有趣的事情。
00:02:32我刚刚就在 MacBook 上编译出了一个能正常工作的 GPU 内核,用的正是我编写
00:02:38普通代码时用的语言:Python。
00:02:40你的机器学习代码通常从 Python 开始,因为 Python 易于上手。
00:02:44我们都很清楚这一点。
00:02:45然后随着时间推移,性能变得至关重要。
00:02:48于是,重要的部分开始用 C++ 或 CUDA 重写。
00:02:52现在,我们得维护同一个系统的两个版本。
00:02:55同样,随着时间推移,这只会徒增混乱。
00:02:58Mojo 的宗旨就是让可读文件和高性能文件合为一体。
00:03:03这一切背后的操盘手是克里斯·拉特纳 (Chris Lattner)。
00:03:06他打造了 LLVM,然后是 Clang,接着是 Swift。
00:03:10然而,让 GPU 内核跑起来是一回事。
00:03:14把这门语言称为 1.0 版本,则完全是另一回事了。
00:03:18那么,这里的 1.0 究竟意味着什么?
00:03:21并不是说 Mojo 已经大功告成。
00:03:23它更多地意味着稳定性。
00:03:25官方承诺你今天写的代码以后不会轻易崩溃。
00:03:29这才是像这样的大版本更新所代表的含义。
00:03:30但随后你就会遇到第一个诡异的地方。
00:03:32Mojo 甚至在编译器开源之前就已经发布了 1.1 版本。
00:03:37标准库早在 2024 年 3 月就已经开源了。
00:03:40max 内核在 2025 年开源。
00:03:43但是编译器,也就是真正干编译活的那个东西,一直保持闭源,直到今年 8 月 18 日。
00:03:50采用 Apache 2.0 协议,这很重要,因为就在短短七天前 Mojo 1.0 发布时,它依然是闭源的。
00:03:57这就回应了三年来外界对 Mojo 最严厉的批评之一。
00:04:02你以前可以质问,当然可以,但编译器是闭源的。
00:04:05我们现在不能这么说了,听上去事情正朝着正确的方向发展。
00:04:10也许吧。
00:04:10直到你看看三周前发生了什么。
00:04:14高通的收购于 7 月 29 日完成。
00:04:16Mojo 1.0 于 8 月 11 日发布。
00:04:19编译器于 8 月 18 日开源。
00:04:21所以,Mojo 历史上最大的开源里程碑,竟然发生在 Modular 不再作为独立公司之后的不到三周内。
00:04:29这立刻让人产生了两种完全不同的解读方式。
00:04:33第一种是:高通收购 Modular 是因为他们想让 Mojo 无处不在。
00:04:37可能并非如此。
00:04:37或者高通收购了 Modular,最终整个项目将被吞并到一家大得多的公司里。
00:04:44高通是一家芯片公司。
00:04:45一门能很好地为芯片编译的语言会变得非常有价值。
00:04:49我们实际上可以自由地使用它。
00:04:50所以,开源这一举动是合乎逻辑的。
00:04:53但 Mojo 能否成功,可能并不取决于高通。
00:04:57它取决于这门语言本身是否足够优秀,能够说服大家从一开始就做出改变。
00:05:02但话说回来,这也是事情开始变得混乱的地方。
00:05:05Mojo 存在基准测试的难题。
00:05:07早在 2023 年,宣传的大数字是 Mojo 比 Python 快 68,000 倍。
00:05:13这太疯狂了。
00:05:14现在网上还有一篇文章声称 Mojo 在解析 DNA 时比 Rust 快 50%。
00:05:19那个基准测试后来遭到了全面反驳。
00:05:21人们指出该基准测试根本没有测量它所宣称的内容。
00:05:25而你仍然能看到“快 35,000 倍”的说法四处流传。
00:05:29这源于矩阵乘法测试。
00:05:31但他们对比的实际上是——
00:05:34一方面,是经过全面向量化、并行化和分块优化的 Mojo 实现。
00:05:40另一方面,则是纯 Python 的三重循环。
00:05:44没错,就是三重循环。
00:05:45不是 NumPy,而是一个地球上根本没人会实际使用的嵌套循环。
00:05:49所以其实我并不在乎快 35,000 倍的噱头。
00:05:52我想要的是在我这台机器上跑出的真实数据。
00:05:54我在 M4 Pro 上与纯 Python 进行了对比。
00:05:57相比纯 Python,它快了 26 倍半。
00:06:00而相比 NumPy,单次操作的性能大约快两倍左右。
00:06:05显然,26 倍并不等于 68,000 倍。
00:06:08但 26 倍仍然是一个相当不错的数字,因为 NumPy 底层本来就是 C 语言编写的。
00:06:14到了那个地步,你其实不是在打败 Python。
00:06:16你凭借更好的内存表现战胜了C语言。
00:06:19而这正是 Mojo 让人感到沮丧的地方。
00:06:21但性能其实并不是我今天对 Mojo 犹豫不决的最大原因。
00:06:25我以前玩过它。
00:06:27今天我也在运行它。
00:06:28最重要的一点是稳定性。
00:06:30现在,这东西到底有多稳定?
00:06:32因为 Mojo 1.0 发布时带有 41 个不稳定 API 警告,包括 int、print 和 len 等核心内置函数。
00:06:40它们居然在所谓的“稳定性版本”中被标记为不稳定。
00:06:45就在 Mojo 承诺你的代码不会崩溃的同一天,移除 FN 关键字直接破坏了大约 39 个生态系统软件包。
00:06:52而那个对 Mojo 运作方式至关重要的 FN 关键字,竟然被彻底移除了。
00:06:58没有过渡进程。
00:06:59而且虽然编译器现在开源了,但他们目前还不接受针对它的外部贡献。
00:07:04所以 Mojo 1.0 是稳定的,我猜吧。
00:07:07但也许并没有他们宣称的那么稳定。
00:07:09这就让我们回到了唯一真正重要的问题上。
00:07:12你应该使用它吗?
00:07:13如果你编写 GPU 内核、CUDA、Triton 那个世界的代码,我认为 Mojo 绝对值得花上一两天时间了解一下。
00:07:21一种语言贯穿 CPU 和 GPU,而且我甚至在笔记本电脑上编译出了一个能正常工作的 GPU 内核。
00:07:27市面上没多少其他东西能做到这一点。
00:07:29但它依然有很大的成长空间。
00:07:31所以我目前绝对不会把优先级放在它上面。
00:07:35三年前,反对 Mojo 的理由相当简单。
00:07:38虽说是一门很酷的新语言,但谁会用它呢?
00:07:40它曾是一家初创公司的闭源语言,要求开发者把一切都押在这上面。
00:07:44如今,它的编译器采用了 Apache 2.0 协议。
00:07:47语言版本来到了 1.0。
00:07:48那家初创公司现在也成为了高通的一部分。
00:07:51我是来自 BetterStack 的 Josh。
00:07:53如果你喜欢此类编程技巧与心得,请务必订阅。
00:07:56我们在下一个视频中再见。

Key Takeaway

Mojo 1.0 版本虽然实现了编译器开源并带来高达 26 倍半的性能提升,但仍面临 API 不稳定和生态系统变动的问题。

Highlights

  • Mojo 1.0 版本发布并采用 Apache 2.0 协议开源了编译器,回应了闭源批评。

  • 高通在 Mojo 1.0 发布前不到三周完成了对开发商 Modular 的收购。

  • 在 M4 Pro 本地机器测试中,Mojo 相比纯 Python 快了 26 倍半。

  • Mojo 1.0 发布时带有 41 个不稳定 API 警告,且移除了 FN 关键字破坏了约 39 个生态系统软件包。

  • Mojo 能够让开发者在笔记本电脑上仅用 Python 风格的代码编译出能正常工作的 GPU 内核。

Timeline

Mojo 语言的核心特性与本地运行测试

  • Mojo 旨在提供一种既能写出 Python 风格代码又能直接运行在 CPU 和 GPU 上的高性能语言。
  • 本地机器对比测试显示,Mojo 运行相同程序的耗时远低于纯 Python。

Mojo 试图解决机器学习开发中需要在 Python 与 C++ 或 CUDA 之间切换的痛点。通过在本地机器上运行相同的循环任务,展示了其将可读文件和高性能文件合为一体的能力。编译后的程序在执行时能够融合成单条指令,展现出显著的性能优势。

版本发布背景、高通收购与开源进程

  • Chris Lattner 是 Mojo 背后的主要操盘手,此前曾打造 LLVM、Clang 和 Swift。
  • 高通在 7 月 29 日完成了对 Modular 的收购,随后 Mojo 1.0 发布并开源了编译器。

Mojo 1.0 版本的发布主要代表了语言的稳定性承诺。编译器直到今年 8 月 18 日才采用 Apache 2.0 协议开源,彻底打破了此前闭源编译器的质疑。高通的收购让该项目融入了芯片大厂的体系中,未来的发展方向更加受到芯片架构的直接影响。

基准测试争议与稳定性现状分析

  • 早期宣传的 68,000 倍速度提升源于与纯 Python 三重循环的对比,缺乏实际参考价值。
  • Mojo 1.0 仍存在 41 个不稳定 API 警告,且移除 FN 关键字直接破坏了部分生态系统软件包。

真实的本地测试表明 Mojo 相比纯 Python 快了 26 倍半,而相比 NumPy 约快两倍。尽管性能表现亮眼,但 1.0 版本伴随着核心内置函数的不稳定警告以及关键字的突然移除,导致生态系统软件受到破坏。目前该语言更适合编写 GPU 内核或 CUDA 相关代码的开发者进行探索,但尚不适合作为高优先级的生产工具。

Community Posts

No posts yet. Be the first to write about this video!

Write about this video