“为人工智能世界革新Python”

“以Python革新人工智能世界”

Python是现今最受欢迎的编程语言之一。易于学习和使用,它存在多年,有着庞大的Python开发人员社区互相支持,并形成了一个库生态系统,允许用户添加所需的功能。然而,它也有一些不足之处:其程序运行速度较慢,并且由于其并行运行进程效率低下,不适用于一些最新的人工智能(AI)编程。

为了克服这些困难,计算机科学家Chris Lattner决定创建一种新的语言Mojo,它具有Python易用性和C++或Rust等更复杂语言的性能。他与Tim Davis合作,两人曾在Google共事,于2022年1月共同创办了Modular。作为首席执行官的Lattner和首席产品官的Davis公司,为从事AI研发的公司提供支持,并正在开发Mojo。

现代AI编程框架通常在顶层使用Python,Lattner表示,但由于其效率低下,底层使用C++来处理实现。然后,C++必须与性能加速器或图形处理单元(GPU)进行通信,因此开发人员添加一个平台,如CUDA,以有效利用这些GPU。Lattner说:“Mojo的出现是为了统一这三个不同部分的堆栈,以便我们可以构建一个能够扩展上下的统一解决方案。”

结果产生了一种与Python具有相同语法的语言,因此习惯于使用Python编程的人可以轻松采用它,但根据某些度量标准,其运行速度可提高多达35,000倍。对于AI应用来说,Mojo在执行许多神经网络中使用的矩阵乘法时特别快,因为它将乘法代码编译为直接在GPU上运行,绕过了CUDA。

Lattner并不陌生于开发编程语言。在其在伊利诺伊大学香槟分校的硕士论文中,他与一些同事创建了LLVM,一套用于优化其他程序的编译器和编程工具。他还为苹果开发了Swift编程语言,该语言使开发人员能够为苹果的iOS操作系统编写自己的应用程序。

澳大利亚昆士兰大学的计算机科学名誉教授、fast.ai创始人之一Jeremy Howard表示,开发神经网络需要比Python更好的语言,因为神经网络处理大量数据,因此需要提高运行速度。通常,程序员会使用C、C++或Rust等语言编写此类程序,其运行速度比Python快100,000至1,000,000倍。他还是Modular公司的顾问。Howard说:“问题是,现在你不仅需要考虑如何实现神经网络,还要考虑诸如内存分配、释放和处理字符串终止等各种事情。”他说:“如果我想用C写点东西,可能要比用Python写慢十倍或者百倍。”

此外,GPU和Tensor Processing Units(TPU)可以比中央处理单位(CPU)更快地运行基于C的程序。然而,Howard表示,相对于CPU而言,为GPU或TPU编写C更加困难。他说:“所以现在我们又谈论了另外几个数量级的开发时间变慢。”虽然库可以提供代码来加速开发过程,但它们局限于他人已经创建的操作,这可能抑制创新,Howard认为。

他说,这对计算机程序员来说已经是足够的挑战了,但需要有一种像Python一样适用于普通大众的语言。Howard说:“越来越多的代码不是由计算机程序员编写的。它们是由医生、记者、化学家和游戏玩家编写的。”Howard说:“所有的数据科学家都会编写代码,但很少有数据科学家认为自己是专业的计算机程序员。”

Mojo试图通过成为Python的超集来填补这一需求。据该公司表示,用Python编写的程序可以复制到Mojo中,并立即运行得更快。这种加速来自多种因素。例如,与Python一样,Mojo以及其他现代语言可以启用线程,即可以同时运行的小任务,而不是按顺序运行。Mojo使用编译器将代码转换为汇编语言,而不是像Python一样使用解释器执行代码。Mojo还给开发人员提供了使用静态类型的选项,这可以定义数据元素并减少错误数量。

Python被放慢的一个因素是它的全局解释器锁(Global Interpreter Lock),它一次只能执行一个线程。Howard表示,这在Python在20世纪90年代初创建时是有道理的,因为大多数人只有一个CPU核心可以使用。虽然在Python中可以创建一些并行进程,但是这样做很麻烦,并且Python无法高效地使用多个线程,因此无法充分利用可用的硬件。Lattner说:“手机上可能有8个CPU核心,现代台式机可能有16个。如果你只能使用其中一个,那意味着你只能获得系统计算能力的1/16。”

此外,他还表示:“使用编译器而不是解释器可以消除所有的开销。” 这使得程序可以运行10到20倍的速度,而不需要更改代码。其他的改进使得程序可以比Python快数百倍甚至数千倍运行。该公司使用Mojo创建了一个Mandelbrot集合,它是一个在不同尺度上具有相同几何形状的分形形状。虽然它不是一个实际的应用程序,但它代表着一个基准,Mojo能以比Python快35,000倍的速度创建该集合。

回到顶部

可选类型

由于Python是动态类型的,类型在运行时而不是在代码编译时进行检查,这使得程序变慢。Mojo允许开发人员继续使用动态类型,但也提供了静态类型的选项。Lattner表示:“静态行为很好,因为它可以提高性能。静态行为也很好,因为它可以提供更多的正确性和安全性保证。”

他添加的一项创新是自动调优,程序员为程序的各个方面提供了一系列的值范围。例如,他们可以指定瓷砖的尺寸可以是2、4、8或16,或者指定特定的函数可以用各种方法实现。然后,编译器实现所有不同变量组合并运行它们,以查看哪个是最快的。这样,程序可以自动优化为在特定硬件上运行的最佳状态。

Guido van Rossum是创建Python的程序员,他曾被称为该语言的“终身慈善独裁者”,直到2018年他放弃这个角色。他表示对Mojo的发展以及Lattner为之设定的崇高目标非常感兴趣。他说:“如果你听Chris谈论它,Mojo被视为Python的完整超集,在你只写Python代码时,它将以与Python完全相同的方式在Mojo中执行,但速度更快。”他还不确定Mojo是否能够实现这一目标,但他强调该语言还处于早期阶段,并表示截至2023年7月,Mojo尚未发布可供下载。

Van Rossum认为,Mojo可能对那些已经知道如何使用C++或Rust编写高效代码的经验丰富的开发人员更有用。他说:“一个刚开始使用Python的人不会突然能够编写比Python更快的Mojo代码。”

今年5月,Modular让部分用户在Jupyter notebook中使用Mojo进行交互式开发环境,以便让人们玩弄代码。该公司表示预计在2023年秋季允许下载(Linux版本已于9月发布,在10月发布了MacOS版本),完全发布可能在2024年夏季。

Lattner表示,可能有些Python的部分在Mojo中无法工作,但它们是微不足道的。他说,Mojo与Python的关系就像C++与C的关系一样,增加了诸如类和模板之类的内容,将C变成了一种更高级的语言。他说:“你可以用C写一些在C++中无法以相同方式工作甚至无法编译的程序,但它们如此微不足道,以至于无关紧要。Mojo也是如此。”他说:“我们的目标是在所有重要的情况下尽可能兼容,并确保我们能够与现有的生态系统一起工作,因为我们不想打破Python,我们想让Python变得更好。”

Doug Meil是一位撰写有关新编程语言的软件架构师,他说Mojo本质上是面向人工智能的Python++。他说:“他非常努力地支持Python,并满足人们的需求,这是我认为非常务实的做法。” Meil说:“他们没有提出全新的语法,而且在多个硬件平台上的规模性能会更快。所以这真的很酷。”

* 进一步阅读

Mojo:超强的Python人工智能; https://twimlai.com/podcast/twimlai/mojo-a-supercharged-python-for-ai/ .

Don,E. 入门Mojo编程语言用于人工智能。LogRocket. (2023); https://blog.logrocket.com/getting-started-mojo-programming-language/ .

Loy,J. 如何使用Python从头构建自己的神经网络。Towards Data Science. (2018年5月14日); https://towardsdatascience.com/how-to-build-your-own-neural-network-from-scratch-in-python-68998a08e4f6 .

Meil,D. 为什么有这么多编程语言?BLOG@CACM. (2022年7月5日); https://cacm.acm.org/blogs/blog-cacm/262424-why-are-there-so-many-programming-languages/fulltext .

Yegulalp,S. 对Mojo编程语言的首次了解。InfoWorld. (2023年6月7日); https://www.infoworld.com/article/3697739/a-first-look-at-the-mojo-language.html .

返回顶部

作者

Neil Savage是一位位于美国马萨诸塞州洛厄尔的科技作家。

©2023 ACM  0001-0782/23/12

不收取费用的情况下,允许个人或课堂使用这项工作的部分或全部进行数字或纸质副本制作,前提是副本不能为了牟利或商业优势而制作或分发,并且副本上必须标注此通知和全文引文在第一页。对于ACM所有权组件的版权必须予以尊重。允许以带有引用标注的形式进行摘要。要进行其他形式的复制、再版、在服务器上发布或分发给名单,需事先获得明确的许可和/或费用。请向 或传真至(212) 869-0481请求出版许可。

数字图书馆由计算机协会出版。版权所有 © 2023 ACM, Inc.