实战Mojo🔥安装 & 使用,Python 开发者不必惊慌

2025-06-13 04:47:02 1958世界杯

0x00.前言前一阵子就在各个公众号中看到 Mojo 相关的文章推送了,标题中均与 py 进行了对比

只保留标题,链接就不放了

比 Python 快 9 万倍的 Mojo 终于开源了!刚上线 star 已超过 1.7 万放弃Python拥抱Mojo?鹅厂工程师真实使用感受毕竟自己对于 py 实在是太熟悉了,于是决定趁此征文机会来亲体验一下这个 Mojo 到底怎么样

0x01.Modular官网:https://www.modular.com/

映入眼帘的是 MAX 平台——Modular Accelerated Xecution,而 Mojo 应该是其中的一个产品

The Modular Accelerated Xecution (MAX) platform is a unified set of tools and libraries that provides everything you need to deploy low-latency, high-throughput, real-time AI inference pipelines into production.

意思是:模块化加速执行 (MAX) 平台是一套统一的工具和库,可提供部署低延迟、高吞吐量、实时 AI 推理管道到生产环境所需的一切

在下面的 MAX 组件中找到了 Mojo,除他之外还有 MAX Engine 和 MAX Serving

Mojo 中提供的代码片段也是与机器学习相关的库,使用 Mojo 仅需三行代码即可接入

可用于替换TensorFlow, PyTorch,ONNX inference(这个就叫做 MAX Engine)

0x02.Mojo官网:https://www.modular.com/max/mojo

这下明白了为啥 mojo 的 uri 是 /max/mojo 了,因为它是 modular 推出的 MAX 平台的产品之一

官网上的吉祥物?似乎就是个拟人化的🔥,xswl

Mojo 结合了 py 的易用性和 C 的性能。众所周知,其实 py 的 Numpy 库,为了速度也把关键的计算部分下放到 C/C++ 上了

一、部分特性:1. PROGRESSIVE TYPES高级类型。像是 py 的 typing

代码语言:python代码运行次数:0运行复制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])2. ZERO COST ABSTRACTIONS零成本抽象。通过将值内联分配到结构中来掌控存储

代码语言:javascript代码运行次数:0运行复制struct MyPair:

var first: Int

var second: F32

def __init__(self, first: Int, second: F32):

self.first = first

self.second = second3.OWNERSHIP + BORROW CHECKER利用具有内存安全性而无毛边的优势?

代码语言:javascript代码运行次数:0运行复制def reorder_and_process(owned x: HugeArray):

sort(x) # Update in place

give_away(x^) # Transfer ownership

print(x[0]) # Error: ‘x’ moved away!4.PORTABLE PARAMETRIC ALGORITHMS可移植参数化算法。hardware-agnostic 是与硬件无关的算法,难道说的是 SHA256?

代码语言:javascript代码运行次数:0运行复制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)5. LANGUAGE INTEGRATED AUTO-TUNING语言集成自动调优。会自动找到参数的最佳值,这个特性看起来可以的

代码语言:javascript代码运行次数:0运行复制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)还有未详细列出的

The full power of MLIRParallel heterogenous runtimeFast compile times二、解锁 py 的性能可利用多核、矢量单元和外来加速器单元。可实现与 C++ & CUDA 相当的性能,震惊😱

虽然 py 有 GIL,但是 py 又不是不能并行……这个图就看个乐子吧

果然之后在官方文档中找到了详细说明。没错,指的果然是 GIL

然后就看到了广为传播的 68000x:https://www.modular.com/blog/mojo-a-journey-to-68-000x-speedup-over-python-part-3

三、互操作性说的就是可以与 py 代码结合的写,比如下面的 Python.import_module("matplotlib.pyplot")

四、可拓展性已经完全看不懂了,说的应该是模型相关的内容

0x03.安装文档:https://docs.modular.com/mojo/manual/get-started/

在官网看了这么久,终于可以 get-started 来安装尝试一下了 > <

目前仅支持:Linux 和 Mac,自己用的是后者。并且 Mac 必须是 Apple silicon (M1 or M2 processor),自己是最基础的 M1

Mac 需求

Apple silicon (M1 or M2 processor) ✅macOS Monterey (12) or later✅Python 3.8 - 3.11✅Command-line tools for Xcode, or Xcode✅最高支持到 py3.11,并不支持 py3.12。这里也能看出其实 mojo 是依赖 py 的

首先检查本地的 py3 版本,然后升级 py3.11 到最新 3.11.9

代码语言:bash复制yuangezhizao@MacMini ~ % brew search python@3

==> Formulae

boost-python3 python@3.12 ✔ python@3.9 ✔ cython

python@3.10 ✔ python@3.7 ipython jython

python@3.11 ✔ python@3.8 bpython

yuangezhizao@MacMini ~ % brew upgrade python@3.11

Warning: python@3.11 3.11.9 already installed

yuangezhizao@MacMini ~ % python3.11

Python 3.11.9 (main, Apr 2 2024, 08:25:04) [Clang 15.0.0 (clang-1500.3.9.4)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>>

zsh: suspended python3.111. 这样需求就完全满足了,然后开始安装 modular

因为 Mojo 集成在 MAX SDK 中,所以其实安装后者后就有 Mojo 了

但是这个 MAX SDK 目前仅支持 Linux Ubuntu 20.04/22.04 LTS,不支持 windows 和 macOS。所以在 macOS 下只能安装单 Mojo 了

代码语言:bash复制yuangezhizao@MacMini ~ % curl -s https://get.modular.com | sh -

Updating Homebrew

==> Updating Homebrew...

Already up-to-date.

Installing/upgrading Modular using Homebrew

==> Tapping modularml/packages

Cloning into '/opt/homebrew/Library/Taps/modularml/homebrew-packages'...

remote: Enumerating objects: 120, done.

remote: Counting objects: 100% (120/120), done.

remote: Compressing objects: 100% (67/67), done.

remote: Total 120 (delta 29), reused 100 (delta 24), pack-reused 0

Receiving objects: 100% (120/120), 14.28 KiB | 2.86 MiB/s, done.

Resolving deltas: 100% (29/29), done.

Tapped 1 formula (13 files, 23.2KB).

==> Fetching modularml/packages/modular

==> Downloading https://dl.modular.com/public/installer/raw/names/modular-mac-ar

==> Downloading from https://dl.modular.com/public/installer/raw/names/modular-m

######################################################################### 100.0%

==> Installing modular from modularml/packages

cat <

__ __ _ _

| \/ | ___ __| |_ _| | __ _ _ __

| |\/| |/ _ \ / _\` | | | | |/ _\` | '__|

| | | | (_) | (_| | |_| | | (_| | |

|_| |_|\___/ \__,_|\__,_|_|\__,_|_|

Welcome to the Modular CLI!

To get started, see:

MAX - https://modul.ar/get-started

Mojo - https://modul.ar/mojo-get-started

For info about this tool, type "modular --help".

EOF

==> Caveats

The Modular tool expects or will create a MODULAR_HOME directory.

This defaults to `~/.modular`. You can create your own, and if you do,

please add `MODULAR_HOME=/path/to/your/dir` to your environment.

==> Summary

🍺 /opt/homebrew/Cellar/modular/0.7.1: 6 files, 61.4MB, built in 4 seconds

==> Running `brew cleanup modular`...

Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.

Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).2. 然后还得连接自己的 Modular 账户,竟然不能完全离线使用?也就是说它并不能安装在完全离线的类似客户的生产环境中

于是被迫去注册账户,注册时还得用同一个浏览器,并且验证账户还是 hubspotlinks.com 域名,还不能开代理……

代码语言:bash复制yuangezhizao@MacMini ~ % modular auth

To complete auth, open this web page:

https://developer.modular.com/device?userCode=MPFL-

Verify using this code:

MPFL-

Waiting for confirmation...3. 最后才能正式安装 mojo

代码语言:bash复制yuangezhizao@MacMini ~ % modular install mojo

# Found release for https://packages.modular.com/mojo @ 24.2.1-2f0dcf11-release

# Downloading archive: packages/24.2.1-2f0dcf11-release/mojo-arm64-apple-darwin22.6.0-24.2.1-2f0dcf11-release-12-0.tar.gz

Downloaded [ ██████████████████████████ ] 100% 167MiB/167MiB

# Extracting downloaded archives.

Extracted [ ██████████████████████████ ] 100% 167MiB/167MiB

# Extraction complete, setting configs...

# Configs complete, running post-install hooks...

🔥 Mojo installed! 🔥

Mojo's Python virtual environment created at /Users/yuangezhizao/.modular/pkg/packages.modular.com_mojo/venv

If you are using ZSH (default on macOS), run the following commands:

echo 'export MODULAR_HOME="/Users/yuangezhizao/.modular"' >> ~/.zshrc

echo 'export PATH="/Users/yuangezhizao/.modular/pkg/packages.modular.com_mojo/bin:$PATH"' >> ~/.zshrc

source ~/.zshrc

If you are using bash, run the following commands:

BASHRC=$( [ -f "$HOME/.bash_profile" ] && echo "$HOME/.bash_profile" || echo "$HOME/.bashrc" )

echo 'export MODULAR_HOME="/Users/yuangezhizao/.modular"' >> "$BASHRC"

echo 'export PATH="/Users/yuangezhizao/.modular/pkg/packages.modular.com_mojo/bin:$PATH"' >> "$BASHRC"

source "$BASHRC"

Then enter 'mojo' to start the Mojo REPL.

For tool help, enter 'mojo --help'.

For more docs, see https://docs.modular.com/mojo.

4. 设置环境变量

代码语言:bash复制yuangezhizao@MacMini ~ % echo 'export MODULAR_HOME="/Users/yuangezhizao/.modular"' >> ~/.zshrc

yuangezhizao@MacMini ~ % echo 'export PATH="/Users/yuangezhizao/.modular/pkg/packages.modular.com_mojo/bin:$PATH"' >> ~/.zshrc

yuangezhizao@MacMini ~ % source ~/.zshrc终于,Mojo 安装完成了

0x04. Hello World运行的时候进程时 mojo-lldb

看到它有 VS Code 的拓展,于是去安装并激活

下载例程:git clone https://github.com/modularml/mojo.git

然后就可以在 VS Code 中运行了,成功跑通 hello world

再运行一个 deviceinfo.mojo 查看设备信息

代码语言:bash复制yuangezhizao@MacMini examples % mojo deviceinfo.mojo

System information:

OS : macOS

CPU : apple-m1

Arch : arm64-apple-darwin23.4.0

Physical Cores : 8

Logical Cores : 8

CPU Features : neon Apple M10x05. 后记折腾了这么久(近 3h),是时候来总结一下了。Mojo 对于 AI 方向的使用确实是有优点,毕竟它可以自动调优寻找参数

很明显但是对于传统的 py 开发,它并不能从根本上替代,它本来的定位也是 py 的超集

作为一名 py 开发者也完全没有必要惊慌,毕竟安装 python 可不会让你联网关联账号(笑

关于 Mojo 的特性后续还可以继续深入了解一下,比如还是那个 LANGUAGE INTEGRATED AUTO-TUNING 还是很吸引人的

最新发表
友情链接