试图替代 Python 的下一代AI编程语言:Mojo
文章目录
Mojo 是一种创新的编程语言,结合了 Python 的可用性和 C 的性能。它旨在成为人工智能 (AI) 开发的首选语言,因为它允许开发人员编写既快速又易于阅读的代码。
这里有一些关键点,
- Modular 是一种新的编程语言,旨在应对整个 AI 堆栈的编程挑战。
- Mojo 旨在成为一种创新且可扩展的编程模型,可以针对加速器和其他异构系统。
- Mojo 建立在 Python 生态系统之上,这使其广泛可用且易于使用。
为什么叫 Mojo ?
Mojo 的意思是“神奇的魅力”或“神奇的力量”。这个名字很适合为 Python 带来神奇力量的语言,包括用于加速器和 AI 中无处不在的其他异构系统的创新编程模型。
Python 家族的一员,Mojo
Mojo 是一种新的编程语言,旨在与 Python 生态系统完全兼容。
- 将提供可预测的低级性能和低级控制。
- 将允许开发人员将代码子集部署到加速器。
- 不会创建一个支离破碎的软件生态系统。
- 将从其他语言的经验教训中受益。
- 将成为 Python 的超集,并将与现有的 Python 程序兼容。
- 将提供新工具来开发安全和高性能的系统级代码。
- 将允许开发人员在静态类型和动态类型之间进行选择。
Python 的好处:
Python 是 ML 和无数其他领域的主导力量。
Python 易于学习,被重要的程序员群体所熟知,拥有令人惊叹的社区,拥有大量有价值的软件包,并且拥有各种各样的好工具。
Python 通过其动态编程特性支持开发美观且富有表现力的 API。
TensorFlow 和 PyTorch 等机器学习框架采用 Python 作为其用 C++ 实现的高性能运行时的前端。
对于 Modular,Python 是其 API 表面堆栈中不可或缺的部分。
模块化团队希望 Python 生态系统中的人们看到他们的 Mojo 目标是将 Python 提升到一个新的水平——完成它——而不是与之竞争。
Python 兼容性
Mojo 旨在与 Python 生态系统完全兼容。兼容性有两种类型:导入兼容性和迁移兼容性。
Mojo 与 Python 100% 导入兼容,因为它使用 CPython 实现互操作性。但 Mojo 尚未完全与 Python 兼容。
就 Python 和 Mojo 而言,Mojo 期望直接与 CPython 运行时合作,并具有与 CPython 类和对象集成的类似支持,而无需自行编译代码。
这提供了与现有代码的庞大生态系统的插件兼容性,并且它支持渐进式迁移方法,在该方法中,向 Mojo 的增量迁移会产生增量收益。
Python 的问题
Python 有一些众所周知的问题,包括糟糕的底层性能和全局解释器锁 (GIL),这使得 Python 成为单线程的。这些问题在通常需要高性能和多线程能力的 AI 领域影响尤其大。
解决这些问题的一种方法是使用混合库,它们是使用 Python 和 C/C++ 的组合构建的。但是,构建混合库很复杂,需要 Python 和 C/C++ 的知识。这会使大型框架的发展变得困难,并可能导致可用性问题。
此外,必须同时处理 Python 和 C/C++ 代码的两个世界问题可能会导致难以使用调试器和其他工具。这对于 AI 开发人员来说尤其成问题,他们经常需要使用像 CUDA(计算统一设备架构)这样的加速器。
CUDA(计算统一设备架构)是一种定制的编程语言,有其自身的特殊问题和局限性。
AI 世界在硬件方面有大量的创新,因此,复杂性正在失控。现在有几种尝试为加速器(OpenCL、Sycl、OneAPI 等)构建有限的编程系统。
然而,这些系统都没有解决工具和生态系统中严重损害行业的基本碎片化问题。
Mojo 旨在通过提供一种可用于系统编程和 AI 开发的统一语言来解决这些问题。
Mojo 仍在开发中,但它有可能彻底改变人工智能行业。
移动和服务器部署:
Python 生态系统的另一个挑战是部署。这有很多方面,包括如何控制依赖关系、如何部署密封编译的“a.out”文件以及如何提高多线程和性能。
Python 子集和其他类似 Python 的语言:
已经有很多构建可部署 Python 的尝试,例如 PyTorch 项目中的 TorchScript。
这些语言很有用,因为它们通常提供低依赖性部署解决方案,有时还具有高性能。它们使用类似 Python 的语法,这使得它们比一门新语言更容易学习。
但是,这些语言并未得到广泛采用,因为它们:
- 不与 Python 生态系统互操作
- 没有出色的工具(例如调试器)
- 单方面更改 Python 中不方便的行为,这会破坏兼容性并进一步分割生态系统
这些方法的挑战在于它们试图解决 Python 的一个弱点,但它们在 Python 的强项上并不擅长。
充其量,它们可以提供 C 和 C++ 的新替代方案,但如果不解决 Python 的动态用例,它们就无法解决“两个世界问题”。
这种方法导致碎片化,不兼容性使迁移变得困难甚至不可能。