🔥

焼肉並みに熱い!Mojoで超速プログラミング🔥

2024/06/08に公開

概要

この記事の対象者:
Mojoに興味がある初心者を対象に書いています。

この記事の内容:
「Mojo」の特徴、開発経緯、MLIRについての概要、および導入方法について書いています。

この記事を読むとわかること:
Mojoの基本的な特徴や利点、開発の背景、MLIRの役割、およびMojoのインストール方法について理解できます。

序論

みなさん、「Mojo」はご存知でしょうか。
pythonと互換があり、そしてpythonより60000倍早く
なぜかロゴが火の絵文字🔥の謎の言語「もじゃ?」「もじょ?」
みたいな物があるらしいと先ほど焼肉🔥を食べていた際、聞きました。
そんな流れでお肉とMojoについて触ってみることにしました。

Mojoについて [*1]

Mojoとは

  • MojoはMLIRを基盤から組み込んだ初のプログラミング言語
  • Mojoの読みは「モ'じょ」(モにアクセント)
  • 意味は魅力、気力、魔法、、、(魔法のような言語という意味?)
  • Python互換: Pythonエコシステムと完全な互換性を目指し、既存のPythonコードをインポートして使用可能。
  • 高速: pythonと異なりコンパイル型のプログラミングで、複数コアにわたる並列処理が可能
  • MLIRベース: MLIR(中間表現)を基盤とし、幅広いハードウェアでの高性能実行を可能にする。

もじょMojoを使ってもじょなアプリでもじょを与えるもじょ人になれるかもしれない

Mojoの開発経緯

  • Mojaを開発したModular社は当初プログラミング言語を開発する想定はしていなかった
  • AIのプラットフォーム開発の中、異なるハードウェアに対応するために既存の言語がサポートしていない機能(強力なメタプログラミングや適応型コンパイル技術など)が必要となった。
  • プログラミング言語の重要性を知ったModular社は2023年に言語を公開した。

MLIRとは

  • MLIR(Multi Level Intermediate Representation)とは、プログラミング言語のコンパイラやツールチェーンにおいて、中間表現を多段階で扱うためのフレームワーク
  • MLIRは機械学習モデルのコンパイル、高性能コンピューティング (HPC)、コンパイラ構築などに使われる
  • 例えばTensorFlow(機械学習モデルを構築し、トレーニングし、デプロイするためツールセット)を異なるハードウェア(CPU、GPU、TPUなど)向けに最適化されたコードを生成する時にMLIRを利用する

導入方法(2024年6月現在)[*2]

対応スペック

  • Mac(M1 or M2) or Linuxが対応。
  • Windows一部のMac(M3,intel chip)は非対応。
  • Python 3.8 - 3.11に対応。

1.Install Modular

ターミナルで以下のコマンドを実行してください.
少し時間がかかります(10分ほど)

curl -s https://get.modular.com | sh -

成功すれば以下のように出力されます

  __  __           _       _
 |  \/  | ___   __| |_   _| | __ _ _ __
 | |\/| |/ _ \ / _` | | | | |/ _` | '__|
 | |  | | (_) | (_| | |_| | | (_| | |
 |_|  |_|\___/ \__,_|\__,_|_|\__,_|_|

Welcome to the Modular CLI!

以下のエラーが発生した場合

curl -s https://get.modular.com | sh -で以下のエラーが出た場合。

Installing/upgrading Modular using Homebrew
modular: The arm64 architecture is required for this software.
Error: modular: An unsatisfied requirement failed this build.

エラーの原因は一概ではありませんが、私の場合、以下のコマンドでM1/M2チップに対応したHomebrewをインストールし直すことでエラーが解決できました。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
brew update
brew install modular
curl -s https://get.modular.com | sh -

以下私が確認した項目と手順です。

  1. アーキテクチャの確認
    • ターミナルで以下のコマンドを実行してください.
    uname -m
    
    • もし x86_64 と表示された場合、現在のマシンはIntelベースであり、arm64アーキテクチャでないためインストール不可です
  2. Homebrewのパスの確認
    -以下のコマンドでHomebrewのパスを確認してください
    echo $PATH
    
    • 通常、/opt/homebrew/bin がパスに含まれている必要があります
  3. HomebrewのDoctorコマンドを実行
    • Homebrewの環境が正しく設定されているか確認するために、以下のコマンドを実行します
    brew doctor
    
  4. Homebrewのモジュールリストの更新
    • Homebrewのパッケージリストを更新して、最新の情報を取得します
    brew update
    
  5. Modularのインストールパスを確認
    brew install modular
    
  6. ログファイルの確認
    • Homebrewのインストールログを確認して、具体的なエラーの原因を特定します
    brew --prefix
    
    • 通常、ログファイルは /usr/local/var/log または /opt/homebrew/var/log にあります。
    • しかし、今回/usr/localとなっておりHomebrewがIntelベースの環境としてインストールされていました。
    • そこで上記のM1/M2チップに対応したHomebrewをインストールを行いました。

2.Install Mojo

  1. お馴染みの仮想環境を作ります。
python3 -m venv mojo-venv && source mojo-venv/bin/activate
  1. 次にmodularでmojoをインストールします。
modular install mojo

以下の表示がされれば成功です。

🔥 Mojo installed! 🔥
  1. 最後にパスを通します。(zsh)
MOJO_PATH=$(modular config mojo.path) \
  && BASHRC=$( [ -f "$HOME/.bash_profile" ] && echo "$HOME/.bash_profile" || echo "$HOME/.bashrc" ) \
  && echo 'export MODULAR_HOME="'$HOME'/.modular"' >> "$BASHRC" \
  && echo 'export PATH="'$MOJO_PATH'/bin:$PATH"' >> "$BASHRC" \
  && source "$BASHRC"

3. Run code in the REPL

早速以下のコードよりREPLでmojoを実行してみます。

mojo

以下の画面が表示されますので、`1>``の続きにprint文を入れましょう

Welcome to Mojo! 🔥
Expressions are delimited by a blank line.
Type `:quit` to exit the REPL and `:mojo help repl` for further assistance
1> print("Hello, Enjo! 🔥")

print文が返ってくれば成功です!pythonと同じですね、

4. Run a Mojo file

次は、mojoファイルを作成し実行してみます。
mojoファイルの拡張子は、.mojoまたは.🔥です。

早速、以下のコードをhello.🔥という名前作成します。

fn main():
    print("Hello, Enjo! 🔥")

そしてターミナルで以下を実行します

mojo hello.🔥

print文が返ってくれば成功です。
拡張子が.mojoでも同様の手順です。

ただし、hello.🔥で作成してmojo hello.mojoで実行したり
hello.mojoで作成してmojo hello.🔥実行することはできないので注意です。

結論

今回Mojoを触ってみましたが、「まだまだ味見段階」という感想です。
導入はスムーズでしたが、その真の力を発揮するのはこれからかなと思います。
今後もじょもじょしながらアプリ開発に挑戦してみようと思います。
もしかしたら、本当に焼肉より速いプログラミングができるかもしれません!

参照

*1
https://www.modular.com/max/mojo

*2
https://docs.modular.com/mojo/manual/get-started

ちゅらデータ株式会社

Discussion