0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

比Python快68000倍!Mojo正式发布

jf_WZTOguxH 来源:AI前线 2023-09-08 16:01 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

自 5 月 2 日首次亮相以来,Modular 公司的 Mojo 编程语言引起了开发人员的极大兴趣,已经有超 12 万开发人员注册使用 Mojo Playground,19 万开发者热情参与 Discord 与 GitHub 讨论。Fast.ai 联合创始人、数据科学家 Jeremy Howard 更是表示,“Mojo 可能是近几十年来最大的编程语言进步。”

9 月 7 日,Modular 公司宣布正式发布 Mojo:Mojo 现在已经开放本地下载——初步登陆 Linux 系统,并将很快提供 Mac 与 Windows 版本。

8a18f9a8-4e09-11ee-a25d-92fbcf53809c.jpg

Modular 公司由 LLVM 和 Swift 编程语言的联合创始人 Chris Lattner 创办,此前刚获得 1 亿美元(约 7 亿人民币)融资。Chris Lattner 表示,本轮融资总额达到 1.3 亿美元,所得款项将用于产品扩展、硬件支持和推动自研 AI 编程语言 Mojo 的进一步发展。

据介绍,Mojo Playground 提供的只是一套简单的语言展示,而本地 Mojo 工具链则可帮助开发人员完成更多工作。本地开发者工具将开放全部 Mojo 功能,包括一套完整的编译器功能与 IDE 工具,让开发者能够轻松对 Mojo 应用进行构建与迭代。

Mojo:面向 AI 开发者的新型编程语言

Mojo 是一种面向 AI 开发者的新型编程语言。随着时间推移,它将逐步成长为 Python 的超集。Mojo 已经支持与任意 Python 代码的无缝集成,并提供可扩展的编程模型以支撑各类关键性能系统,包括在 AI 场景中普遍存在的加速器(例如 GPU)。

Mojo 能够切实满足开发者需求,引导大家逐步采用新功能,从而在必要时获得高性能体验。具体来说,Mojo 可以为开发者带来的主要收益:

  • 一种语言编写所有内容:Mojo 能够随时随地服务于 AI 开发者,将 Python 的可用性与以往强制开发者使用 C、C++ 或 CUDA 的系统编程功能结合起来。开发者可以在公共代码库上工作,从而简化从研究到生产的整个工作流程。

  • 突破 Python 性能极限:时至今日,Python 已经无处不在。但对于需要更高性能或特殊硬件的任务,Python 的表现往往不那么理想。Mojo 能够发挥 CPU 的性能潜力,并可良好支持 GPU 和 ASIC 等外部加速器,提供与 C++ 和 CUDA 相当的卓越性能。

  • 对接完整 Python 生态系统:Mojo 提供与 Python 生态系统间的全面互操作性,使其能够无缝利用 Python 库资源,同时发挥 Mojo 自身的功能与性能优势。例如,开发者可以将 NumPy 和 Matpotlib 同自己的 Mojo 代码无缝混合起来。

  • 升级 AI 工作负载:Mojo 紧密集成有模块化 AI 引擎,允许开发者通过自定义操作轻松扩展自己的 AI 工作负载,包括预处理、后处理操作和高性能数学算法。开发者还可以引入内核融合、图重写、sharp 函数等。

通过对现有 Python 代码做一点简单变更,开发者就可以使用 Mojo 对高计算强度工作负载进行显著加速(最高可提速 6.8 万倍)。目前,Mojo 的实际应用案例包括:

  • 知名博主 Maxim Zaks 已经用 Mojo 实现了多个树数据结构,并发布了相关博文(https://pub.aimind.so/a-high-level-introduction-to-fibytree-bd7f8775d815)和一些初步基准测试结果(https://pub.aimind.so/fibytree-vs-set-and-sortedset-7b4e6b56cac8)。

  • GitHub 用户 MadAlex1997 在 Mojo 中构建了 N 维数组的实现(https://github.com/MadAlex1997/Mojo-Arrays)。

    为何能比 Python 快 68000 倍?

Mojo 是 Python 家族的一员,但有着远大的目标——想要与 Python 生态系统完全兼容,因此开发人员可以继续使用自己熟悉的工具。Mojo 旨在通过保留 Python 的动态特性,同时为系统编程添加新原语,逐渐成为 Python 的超集。

LLVM 和 Swift 编程语言的联合创始人、Modular 公司 CEO Chris Lattner 此前在 Hacker News 上表示:“我们的目标不是让动态 Python 神奇地快速。虽然我们在动态代码方面要快得多(因为我们有编译器而不是解释器),但这并不是依靠‘足够智能’的编译器来消除动态性”。

据介绍,Mojo 最初的目标是比 Python 快 35000 倍,近日该团队表示,Mojo 将动态与静态语言的优点结合起来,一举将性能提升达 Python 的 68000 倍

Mojo 团队在系列博文中介绍了 Mojo 是如何比 Python 快 68000 倍的:在第一篇博文中,团队尝试将代码移植为 Mojo,从而获得了约 90 倍的性能提升;在第二篇博文中,团队对代码进行矢量化与并行化,又将性能提升了 2.6 万倍;在第三篇博文中,团队展示如何通过新的性能技术全面超越 3.5 万倍的程序加速目标。

具体来说,Mojo 团队首先用简单端口将 Python 程序提速 89 倍;之后通过针对性优化和利用现代 CPU 的算力潜能,又将速度提升 2.6 万倍。Mojo 团队提出的并行策略是,每个 CPU 核心都应负责处理同等数量的代码行。

然而,只有当跨行工作负载相同时,对负载进行拆分以保证各个线程 worker 获取其中一组代码行才具有可行性;但曼德勃罗集并不是这样。以这种方式进行拆分会引发负载不均衡问题,这是因为曼德勃罗集中的一个像素可能在单次迭代后完成,而另一像素则可能经历 MAX_ITERS 多次迭代。也就是说,各个行的迭代次数并不相等,会导致某些率先完成计算的线程处于闲置状态,不利于全面挖掘性能潜力。

为了演示这种不均衡问题,Mojo 团队绘制了每个行在曼德勃罗集中执行的迭代总数。如下图所示,某些行在转义之前只需要不到 1000 次迭代,但其他一些行则可能需要超 80 万次迭代。

8a2d73b0-4e09-11ee-a25d-92fbcf53809c.png

各个行所执行的迭代总数(以对数坐标系显示)并非均匀分布。某些行(例如图像中央部分的行)可能需要 80 多万次迭代,而两端的行则只需要 800 次左右迭代。

如果硬性为各个线程分配一定数量的连续行,就会发生全体线程都在等待,直至中间某组代码行(被分配给某个核心)完成运行的情况。解决这个问题的办法有很多,但最简单的当然是过度拆分。也就是说,各个线程所获得的不是一组平均分配的行,而是建立起一个工作负载池,再为每个行创建相应的工作项。各线程则以循环方式不断从线程池中拾取这些工作项。

好消息是 Mojo 拥有一个性能出色的并发运行时,所以我们用不着自行创建线程池或者设计循环拾取 / 执行。Mojo 的运行时提供不少高级功能,可以充分利用这样的多核心系统。

fn compute_row(y
    let cy = min_y + h * scale_y
    @parameter
    fn compute_vector[simd_width:Int](w
        let cx = min_x + iota[DType.float64, simd_width]() * scale_x
        output.simd_store[simd_width](Index(h,w), 
                mandelbrot_kernel(ComplexSIMD[DType.float64, 
                                              simd_width](cx,cy))
    vectorize[num_ports * simd_width, compute_vector](width)
with Runtime(num_cores()) as rt:
    let partition_factor = 16 # Is autotuned.
    parallelize[compute_row](rt, height, partition_factor * num_cores())

‍可以分别在拆分成 2、4、8、16 和 32 份时评估程序性能,相应结果如下:

8a426d88-4e09-11ee-a25d-92fbcf53809c.png

到这里,Mojo 团队获得了 2.3 倍于并行版本的加速效果,更是达到矢量化实现版本的 78 倍。那么,在每个行中做进一步划分会不会让性能更上一层楼?如果单行很大,那也许可以。但 Mojo 团队这个示例中的最大单行长度也不过 4096。另外,同一行内的各像素间往往更具相关性。这时候更适合采用单指令流多数据流(SIMD),避免工作被白白浪费在矢量通道当中。

8a72d1a8-4e09-11ee-a25d-92fbcf53809c.png

回顾整个旅程,Mojo 团队先是对 Python 代码实现了 2.6 万倍性能提升,之后又使用超额订阅达成提速 68847 倍的最终成绩,并最终实现了 6.8 万倍的 Python 提速效果;而在应用超额订阅之后,性能在此前并行版本的基础上又提高了 1 倍。

如何使用 Mojo?

目前,开发者可以将 Mojo 下载至自己的本地计算机上,Modular 公司表示,Mojo 绝不只是编译器那么简单。

Mojo 工具箱

Mojo SDK 的首个版本即提供轻松开发 Mojo 程序所需要的一切,具体包括以下工具选项:

  • Mojo 驱动程序:提供用于 read-eval-print-loop(REPL)的 shell,允许开发者构建并运行 Mojo 程序、打包 Mojo 模块、生成文档和格式化代码。

  • 面向 Visual Studio Code(VS Code)的扩展:支持各种生产力功能,例如语法高亮显示、代码补全等。

  • Jupyter 内核:支持构建和运行 Mojo notebook,包括使用 Python 代码。

  • 支持调试(即将推出):进入并检查正在运行中的 Mojo 程序,甚至可以将 C++ 与 Mojo 堆栈帧混合起来。本次发布的 SDK 初始版本将支持 x86/Linux 系统,在后续更新中,团队将进一步扩展至其他操作系统、硬件和工具功能。

8a88a956-4e09-11ee-a25d-92fbcf53809c.png

Mojo SDK 视图示例

Mojo 驱动程序

与 Python 一样,开发者可以运行 Mojo 命令在 REPL 中进行编程。下面是一个在 Mojo 中计算欧氏几何距离的示例:

$ Mojo
Welcome to Mojo! 
Expressions are delimited by a blank line.
Type `:Mojo help` for further assistance.
1> %%python
2. import numpy as np
3. n = 10000000
4. anp = np.random.rand(n)
5. bnp = np.random.rand(n)
6> from tensor import Tensor
7. let n: Int = 10000000
8. var a = Tensor[DType.float64](n)
9. var b = Tensor[DType.float64](n)
10. for i in range(n):
11.    a[i] = anp[i].to_float64()
12.    b[i] = bnp[i].to_float64()
13> from math import sqrt
14. def Mojo_naive_dist(a: Tensor[DType.float64], b: Tensor[DType.float64]) -> Float64:
15.    var s: Float64 = 0.0
16.    n = a.num_elements()
17.    for i in range(n):
18.       dist = a[i] - b[i]
19.       s += dist*dist
20.    return sqrt(s)
23> fn Mojo_fn_dist(a: Tensor[DType.float64], b: Tensor[DType.float64]) -> Float64:
24.    var s: Float64 = 0.0
25.    let n = a.num_elements()
26.    for i in range(n):
27.       let dist = a[i] - b[i]
28.       s += dist*dist
29.    return sqrt(s)
30.
31> let naive_dist = Mojo_naive_dist(a, b)
32. let fn_dist = Mojo_fn_dist(a, b)
33. print(fn_dist)
34. 
1290.8521425092235
35. print(naive_dist)
36. 
1290.8521425092235

此外,Mojo 还允许开发者构建静态编译的可执行文件,从而在无需任何依赖项的前提下进行部署。例如,开发者可以编译并运行示例库当中的 hello. 程序,如下所示:

$ Mojo build hello.
$ ./hello
Hello Mojo !
9
6
3
$ ls -lGtranh hello*
-rw-r--r-- 1 0   817 Sep  3 23:59 hello.
-rwxr-xr-x 1 0   22K Sep  3 23:59 hello

这个静态编译的 22 kB 二进制文件非常酷,它的实现离不开 Mojo 紧凑的依赖项管理机制。

Visual Studio Code 扩展

VS Code 是目前全球最流行的 IDE 之一。Mojo 已经在 Visual Studio Marketplace 上发布了官方扩展,能够直接提供支持。如此一来,各位开发者就能轻松在生产流程中获取 Mojo 支持语法高亮显示、诊断和修复、定义和引用、悬停帮助、格式化、代码补全。

Jupyter 集成

Jupyter 为交互式开发提供了一套强大的环境。Mojo 包含一个 Jupyter 内核,允许开发者直接在其中使用 Jupyter notebook。团队在 GitHub 上共享了 Mojo Playground 中的所有 notebook(https://github.com/modularml/mojo/tree/main/examples/notebooks),关于更多细节信息请参阅 README 自述文件。

调试支持(即将推出)

在即将发布的新版本中,团队将在 VS Code 中添加通过 LLDB 命令行界面实现的交互式调试体验。不仅如此,Mojo 的调试程序能够在同一调试会话中无缝对 Mojo/C/C++ 混合代码进行操作,进一步增强开发者在处理高度专业化代码时的能力。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程语言
    +关注

    关注

    10

    文章

    1959

    浏览量

    38932
  • python
    +关注

    关注

    57

    文章

    4858

    浏览量

    89600
  • 生态系统
    +关注

    关注

    0

    文章

    710

    浏览量

    21505

原文标题:比Python快68000倍!Mojo正式发布,网友:Python生态系统最重要的升级来了

文章出处:【微信号:AI前线,微信公众号:AI前线】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    DeepSeek最新论文:训练速度提升9,推理速度11

    电子发烧友网报道(文/梁浩斌)周二xAI发布了Grok3,这个马斯克称之为“地球上最聪明的AI”抢占了所有人的眼球。   为了打造最强AI大模型,xAI投入了20万块H100 GPU,计算资源
    的头像 发表于 02-20 11:25 2664次阅读
    DeepSeek最新论文:训练速度提升9<b class='flag-5'>倍</b>,推理速度<b class='flag-5'>快</b>11<b class='flag-5'>倍</b>!

    AI算法开发,SpeedDP打辅助!不止10效率

    。而那些能够带来10工作效率的AI自然能够轻松取代人类。当然这也是相对的,不是每个领域都适用,厨师再快,也无法让实物10熟;医生再优秀,也不可能让病人10
    的头像 发表于 11-20 18:09 382次阅读
    AI算法开发,SpeedDP打辅助!不止10<b class='flag-5'>倍</b>效率

    一文了解Mojo编程语言

    和 MLIR(多级中间表示)技术,Mojo 的性能接近 C++,甚至在某些任务中比 Python 数万。 支持直接操作硬件资源,如内存管理和 SIMD(单指令多数据)指令,适合高性
    发表于 11-07 05:59

    谷歌芯片实现量子计算新突破,超算13000

    在特定任务上的运行速度传统超级计算机13000,并且这种算法可以在类似平台上得到重现。   量子比特极易受到环境干扰,导致计算错误,这成为量子计算走向实用的一大阻碍。而谷歌的Willow芯片成功实现了低于表面码阈值的量子纠
    的头像 发表于 10-27 06:51 9144次阅读

    今日看点:谷歌芯片实现量子计算经典超算13000;NFC 技术突破:读取距离从 5 毫米提升至 20 毫米

    谷歌芯片实现量子计算经典超算13000 近日,谷歌在《自然》杂志披露与Willow芯片相关的量子计算突破性研究成果。该公司称这是历史上首次证明量子计算机可以在硬件上成功运行一项可验证算法,其
    发表于 10-23 10:20 1243次阅读

    Pico Technology发布Python软件包pyPicoSDK

    近日,全球领先的基于 PC 的仪器供应商Pico Technology 官方发布了 pyPicoSDK,这是一款旨在简化 PicoScopes 应用的 Python 软件包。pyPicoSDK 在
    的头像 发表于 09-29 15:03 662次阅读

    python app不能运行怎么解决?

    ;python_agent[1241]: xmlrpc request method supervisor.stopProcess failed;python_agent[1241]: xmlrpc request method supervisor.stopProces
    发表于 08-06 06:27

    DDR5速率以上!DDR6已进入平台验证

    计划提升至17600MT/s,达到现行DDR5最高速度(约8000MT/s)的两以上。   2024 年,JEDEC 开始着手研究下一代内存标准 DDR6,目标是为存储器领域带来更快的读写速度和更高
    的头像 发表于 07-31 08:32 3436次阅读

    业界首个华为发布全液冷兆瓦级超充 补能效率较传统充桩提升近4

    在2025华为智能电动&智能充电网络战略与新品发布会上,华为正式发布了业界首个全液冷兆瓦级超充解决方案。不仅仅是充电,寿命还长,使用寿命长达 10 年。 据悉,华为全液冷兆瓦级超充搭载的是华为自主
    的头像 发表于 04-23 16:26 1193次阅读

    新品发布!国民技术推出高性能多协议充协议SoC芯片

    近日,国民技术电源管理产品再添新成员,正式发布高性能多协议充协议SoC芯片(NP11/NP12/NP21系列),采用Arm内核,基于Flash工艺设计,产品可支持PD/QC/UFCS/APPPLE
    的头像 发表于 04-18 21:06 1128次阅读
    新品<b class='flag-5'>发布</b>!国民技术推出高性能多协议<b class='flag-5'>快</b>充协议SoC芯片

    零基础入门:如何在树莓派上编写和运行Python程序?

    是一种非常有用的编程语言,其语法易于阅读,允许程序员使用汇编、C或Java等语言更少的代码行。Python编程语言最初实际上是作为Linux的脚本语言而开发的。Py
    的头像 发表于 03-25 09:27 1548次阅读
    零基础入门:如何在树莓派上编写和运行<b class='flag-5'>Python</b>程序?

    Python绘图Matplotlib快速参考手册

     PYTHON
    发表于 02-07 14:04 0次下载

    使用Python实现xgboost教程

    使用Python实现XGBoost模型通常涉及以下几个步骤:数据准备、模型训练、模型评估和模型预测。以下是一个详细的教程,指导你如何在Python中使用XGBoost。 1. 安装XGBoost
    的头像 发表于 01-19 11:21 2236次阅读

    思氮化镓充电器分享:Super GaN伸缩线充35W

    快节奏的时代,在旅游、办公等场景下,一款高效、便捷的充电器可以让我们的生活更便捷、高效。今天就给大家推荐一款思氮化镓充电器——Super GaN伸缩线充35W。它具备多重亮点,可以满足我们在许多场景下的充电需求,成为我们的得力助手。
    的头像 发表于 01-04 09:41 1103次阅读