今回はPythonの使いやすさと
C言語のパフォーマンスを併せ持つ
新プログラミング言語「Mojo」が
Colabで使える様になったので試してみました

解説動画はこちら


 
Mojoについて

MojoはPythonのスーパーセットとなる
新しい言語で、Pythonに比べて
パフォーマンスとメモリの安全性が向上しています

コンパイル言語になるので
少しだけやることは増えますが
Pythonの構文はサポートされていて
慣れればPython言語と同じように
コードを書き進める事が
出来るんじゃないかと思います



MojoのSDKライセンス取得

Mojoを始めるにはライセンスが必要です

と言っても、メアドを登録するくらいです

「Get Started」から
Mojoのサイトからメールアドレス等で
登録を行います

Mojo



Mojoのインストール

ライセンス登録すると
インストールコマンドが記載された
ページに飛ばされます

WindowsやMacなど、環境ごとの
コマンドが記載されていますので
Google Colabで動かす場合は
「Linux」を選びましょう

次のコマンドがライブラリ取得のコマンドです
!curl https://get.modular.com | \
  MODULAR_AUTH= <自分のMODULAR_ID> \
  sh -

実行の際には各個人事にIDが変わるので
自身のコマンドを手に入れて実行して下さい


ライブラリ取得できたら
次はインストールコマンドです
!modular install mojo

普通に実行すれば
問題なくインストール出来るかと思います

インストールが終わったかどうかは
確認コマンドで確認できます
!export MODULAR_HOME="/root/.modular" && \
export PATH="/root/.modular/pkg/packages.modular.com_mojo/bin:$PATH" && \
mojo --version
mojo 0.3.1 (a3eed7c8)


MojoとPythonの速度比較


さて、それではPythonとMojoで
同じコードでの速度を比較検証してみましょう

3重ループでカウントするだけの
すごくシンプルな関数を実行して
時間を測るというコードになっています

・Pythonのコード
# サンプルコード
import time

def test_def(n):
    count = 0.0
    for i in range(n):
        for j in range(n):
            for k in range(n):
                count += 1.0
    return count


# Pythonでの実行時間
start_time = time.time()
n=500
print(test_def(n))
elapsed_time = time.time() - start_time
print(f"{elapsed_time}s")
125000000.0
7.398502826690674s


1億2千5百万回計算して
7-8秒ほど掛かる様です


・Mojoのコード

Mojoの場合は一度ファイルとして
作成しないといけません

ソースコードをそのままファイル化します

Mojoファイルの作成コマンド
%%writefile main.mojo

from time import now

def sample_def(n):
    var count: Float64 = 0.0
    for i in range(n):
        for j in range(n):
            for k in range(n):
                count += 1.0
    return count

def main():
    let start_time = now()

    let n: Int64 = 500
    count = sample_def(n)
    print(count)

    let end_time = now()
    let execution_time = Float64(end_time - start_time) / 1000_000_000
    print(execution_time)

これを実行するとGoogle Colabのファイル置き場に
main.mojoが作成されるハズです

このファイルをコマンドで動かします
mojoファイルを実行するコマンドはこれです
# Mojoの実行
!export MODULAR_HOME="/root/.modular" && \
export PATH="/root/.modular/pkg/packages.modular.com_mojo/bin:$PATH" && \
mojo main.mojo
125000000.0
0.18964049799999999


先ほどのPython実行は7-8秒ほどになるので
単純計算で40倍くらいは速くなっているようです

単純だけども、時間の掛かる計算をやらなければ
いけない場合に、一部をmojoに書き換えておけば
その分格段に速くなりそうですね

複雑なものだとコードの差異が大きいので
大変そうですが、簡単なアルゴリズムの
書き換え程度なら、実用出来かなと思いました

今後は機械学習系の実装も
徐々にMojoに置き換わって行くのかなと
推測します

速くなる分には
何のデメリットも無いですもんね
今後の動きを期待したいです

今回はMojoをGoogle Colabで試してみました
それでは