Mojo:比 Python 快 35000 倍的 AI 编程语言
Mojo是一门刚刚发布的面向 AI 开发人员的编程语言。
Mojo 被设计为 Python 的超集,所以如果你已经掌握了 Python,学习 Mojo 会很容易。关键是 Mojo 将 Python 的易用性与 C 语言的性能相结合,速度比 Python 快 35000 倍!让你鱼与熊掌兼得。
如果您对 AI 感兴趣并且已经了解 Python,那么 Mojo 绝对值得一试。 这篇文章将带给你有关 Mojo 的所有信息。
文章目录
- 既生Python,何生Mojo?
- Mojo的特性
- 1. Mojo 被设计为 Python 的超集
- 2. 强类型检查
- 3. 内存所有权和借用检查器
- 4. 自动调节
- 5. Mojo 利用 MLIR
- 如何使用 Mojo
既生Python,何生Mojo?
Python 的简洁和强大使其成为数据科学、机器学习和人工智能等领域的首选语言。 它有大量的包,几乎涵盖所有场景和功能,对任何类型的开发者都非常有用。但对于需要极致性能的场景,Python 仅充当胶水语言,绑定到 C、C++ 和其他性能更好的语言上。
这促成了 numpy 和 TensorFlow 等库的诞生。 然而,这样做存在一个缺点:构建这些库非常复杂,需要对 CPython 的内部结构有底层的了解,且需要扎实的 C/C++ 知识等。
根据 Mojo 文档,Python 带来的问题更深层次,尤其是对 AI 领域的影响。
仅靠 Python 无法解决应用人工智能系统所需的所有问题,这就是 Mojo 的诞生理由。 Mojo 是一种结合了 Python 的易用性和 C 语言性能的编程语言。堪称鱼与熊掌兼得,两全其美的!
但 Mojo 并不是一个凭空冒出来的项目。 事实上,Mojo 来自一家名为 Modular 的公司,该公司由 Chris Lattner 共同创立,他是 Swift 编程语言和 LLVM 的创建者。 这就是为什么我认为这个项目值得关注的原因。 现在让我们看看 Mojo 的一些绝佳功能。
Mojo的特性
Mojo 附带了许多开箱即用的有趣功能,下面列举几个我认为很酷的功能特性。
1. Mojo 被设计为 Python 的超集
Mojo 旨在与 Python 生态系统完全兼容。
这意味着如果您是 Python 程序员,您可以轻松地上手 Mojo,因为这两种编程语言有许多共同的功能、特性和库。
Mojo 中还提供了 numpy、pandas 和 matplotlib 等库。 下面代码演示了如何使用 Mojo 完成 matplotlib 绘图。
def make_plot(m: Matrix):
plt = Python.import_module("matplotlib.pyplot")
fig = plt.figure(1,[10,10 * yn // xn],64)
ax = fig.add_axes([0.0,0.0,1.0,1.0],False,1)
plt.imshow(image)
plt.show()
make_plot(compute_mandelbrot())
目前 Mojo 仍处于非常早期的阶段,因此它仍然缺少 Python 的许多功能(例如,它还不支持类)。 希望在未来的更新中,Mojo 能与 Python 完全兼容。
2. 强类型检查
Mojo 利用类型来实现更好的性能和错误检查。
def sort(v: ArraySlice[Int]):
for i in range(len(v)):
for j in range(len(v) - i - 1):
if v[j] > v[j+1]:
swap(v[j], v[j+1])
尽管你仍然可以像 Python 一样使用灵活的类型,但 Mojo 建议使用严格的类型检查。 这可以使你的代码更加可预测、更易于管理也更安全。
3. 内存所有权和借用检查器
Mojo 支持 owned
参数约定,该约定用于想要独占某个值的所有权的函数。
def reorder_and_process(owned x: HugeArray):
sort(x) # 原地更新
give_away(x^) # 转移所有权
print(x[0]) # 错误:x所有权已经移除
这里的概念跟 Rust 类似,相信 Mojo 是借用了 Rust 的部分内存管理思想,提升内存安全性。
4. 自动调节
Mojo 内置自动调整功能,可自动帮你找到参数的最佳值,以便最大化利用目标硬件的性能。
def exp_buffer[dt: DType](data: Arrayslice[dt]):
# 搜索最佳向量长度
alias vector_len = autotune(1,4,8,16,32)
# 用自动调节的最佳值作为矢量化长度
vectorize[exp[dt, vector_len]](data)
5. Mojo 利用 MLIR
通过使用多级中间表示 (MLIR) ,Mojo 开发人员可以充分利用向量、线程和 AI 硬件单元。这有助于 Mojo 实现出色的性能,因为与单线程执行的 Python 不同,Mojo 可以跨多个内核进行并行处理。
这就是 Mojo 比 Python 快 35000 倍的原因之一。
语言 | 时间 | 倍数 |
---|---|---|
Python 3.10.9 | 1027s | 1倍 |
PyPy | 46.1s | 22倍 |
Scalar C++ | 0.20s | 5000倍 |
Mojo | 0.03s | 35000倍 |
如何使用 Mojo
Mojo 仍在开发中,不过你可以在基于 JupyterHub 的 Playground 上试用它。 要试用 Mojo,请访问此网站进行注册。注意,注册时在“Modular Product Interest”这栏请选中 Mojo 。
祝大家编程愉快!