Mojo 🔥 — 面向所有 AI 开发人员的编程语言.

Mojo将Python的可用性与C的性能相结合,解锁了AI硬件无与伦比的可编程性和AI模型的可扩展性.

SOFTMAX.PY
Mojo 🔥
python
def softmax(lst):
  norm = np.exp(lst - np.max(lst))
  return norm / norm.sum()
def softmax(lst):
  norm = np.exp(lst - np.max(lst))
  return norm / norm.sum()

struct NDArray:
  def max(self) -> NDArray:
    return self.pmap(SIMD.max)

struct SIMD[type: DType, width: Int]:
  def max(self, rhs: Self) -> Self:
    return (self >= rhs).select(self, rhs)

用一种语言编写所有内容

编写 Python 或一直扩展到metal。对大量低级 AI 硬件进行编程。无需C++或 CUDA.

参观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])
struct MyPair:
  var first: Int
  var second: F32
  
  def __init__(self, first: Int, second: F32):
    self.first = first
    self.second = second
def reorder_and_process(owned x: HugeArray):
  sort(x)	# Update in place
  
  give_away(x^)	# Transfer ownership
  
  print(x[0])	# Error: ‘x’ moved away!
def exp[dt: DType, elts: Int]
    (x: SIMD[dt, elts]) -> SIMD[dt, elts]:
  x = clamp(x, -88.3762626647, 88.37626266)
  k = floor(x * INV_LN2 + 0.5)
  r = k * NEG_LN2 + x
  return ldexp(_exp_taylor(r), k)
def exp_buffer[dt: DType](data: ArraySlice[dt]):

  # Search for the best vector length
  alias vector_len = autotune(1, 4, 8, 16, 32)
  
  # Use it as the vectorization length
  vectorize[exp[dt, vector_len]](data)

MLIR的全部力量

并行异构运行时

快速编译时间

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])
struct MyPair:
  var first: Int
  var second: F32
  
  def __init__(self, first: Int, second: F32):
    self.first = first
    self.second = second
def reorder_and_process(owned x: HugeArray):
  sort(x)	# Update in place
  
  give_away(x^)	# Transfer ownership
  
  print(x[0])	# Error: ‘x’ moved away!
def exp[dt: DType, elts: Int]
    (x: SIMD[dt, elts]) -> SIMD[dt, elts]:
  x = clamp(x, -88.3762626647, 88.37626266)
  k = floor(x * INV_LN2 + 0.5)
  r = k * NEG_LN2 + x
  return ldexp(_exp_taylor(r), k)
def exp_buffer[dt: DType](data: ArraySlice[dt]):

  # Search for the best vector length
  alias vector_len = autotune(1, 4, 8, 16, 32)
  
  # Use it as the vectorization length
  vectorize[exp[dt, vector_len]](data)

解锁 Python 性能

利用世界上最先进的编译器和异构运行时,充分利用硬件的功能,包括多核、向量单元和奇异的加速器单元。无需复杂性即可实现与 C++ 和 CUDA 相当的性能.

Mojo利用MLIR,使Mojo开发人员能够利用矢量,线程和AI硬件单元.

单线程执行

跨多个内核的并行处理

1027 s
1x
46.1 s
22x
0.20 s
5000x
0.03 s
68000x

访问整个 Python 生态系统

体验与 Python 生态系统的真正互操作性。将任意库(如 Numpy 和 Matplotlib)与您的自定义代码与 Mojo 无缝混合.

阅读编程手册
MAKE_PLOT.🔥
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 🔥

升级您的模型和模块化堆栈

通过预处理和后处理操作轻松扩展模型,或将操作替换为自定义操作。利用内核融合、图重写、形状函数等.

Mojo可以升级模型中的现有操作.

下载Mojo 🔥并立即尝试

Mojo仍在开发中,但今天可以通过我们的Mojo SDK试用。运行教程并编写自己的 Mojo 代码.

立即注册
Mojo 🔥

01.

立即获取 Mojo 🔥 SDK,并在 GitHub 上开始使用我们的示例代码.

02.

我们的文档将帮助您快速发现为什么Mojo是Python的强大扩展,以及AI编程的未来.

03.

快来在我们的 Discord 上与我们聊天,并在我们继续开发语言的同时帮助塑造该语言的未来.

准备好玩Mojo了吗?

立即注册并下载Mojo SDK.

阅读 Mojo 文档