グローバルナビゲーションへ

本文へ

フッターへ

お役立ち情報Blog



話題のAIソフトウェア開発向けプログラム言語『Mojo』を使ってみた

『Mojo』は2023年5月2日にModular Inc. から発表されたAI開発用のプログラム言語です。

https://www.modular.com/mojo

特徴としては、Pythonのスーパーセットとして設計されていることと、約35,000倍とも公式が謳っている処理速度です。
『Mojo Playground』という同社サイト上の実行環境で試用することができたのですが、ついに、2023年9月7日からローカルで開発ができるようになりました。

今回は時代の最先端を少しだけ触ってみて、簡単な性能比較をしてみたいと思います。

比較対象

比較としては、ループ処理と再帰処理の二つの簡単な処理の速度で、 Python と Mojo、そして、参考としてこちらも最近リリースされた Python を高速化するコンパイラである codon の3つを比較対象としました。

ループ処理

Python

import time

start_time = time.time()

result = 0
# n の数値を変えて処理速度を比較します
n = 10 ** 10

# 単純なループ処理
for i in range(n):
  result += 1

end_time = time.time()

print(result)
print(end_time - start_time)

Mojo

from time import now

fn main():
  let start_time = now()

  var result = 0
  # n の数値を変えて処理速度を比較します
  let n = 10 ** 10
  
  # 単純なループ処理
  for i in range(n):
    result += 1 

  let end_time = now()

  print(result)
  # mojo の time は ns で出力されるので、 *1e-9 しています
  print((end_time - start_time) * 1e-9)

処理結果

(単位:秒)

n python mojo codon
100,000,000 3.359339 0.000000046 0.048680
1,000,000,000 37.679238 0.000000047 0.490931
10,000,000,000 428.612758 0.000000055 4.811030
100,000,000,000 4875.826876 0.000000057 47.655400

ループ処理に関しては、mojo の処理速度の速さが顕著に表れています。 codon も数十倍の高速化に至っていますが、mojo はそれを遥かに凌ぐ処理速度となり、圧勝と言わざるを得ません。

フィボナッチ数列(再帰処理)

Python

import time

# フィボナッチ数列の計算式
def fibonacci(n):
    if n <= 1:
        return n
    else:
        return fibonacci(n-1) + fibonacci(n-2)

start_time = time.time()

# n の数値を変えて処理速度を比較します
n = 50
result = fibonacci(n)

end_time = time.time()

print(result)
print(end_time - start_time)

Mojo

from time import now

# フィボナッチ数列の計算式
fn fibonacci(n: Int) -> Int:
    if n <= 1:
        return n
    else:
        return fibonacci(n-1) + fibonacci(n-2)

def main():
  let start_time = now()

  # n の数値を変えて処理速度を比較します
  let n = 50
  let result = fibonacci(n)

  let end_time = now()

  print(result)
  # mojo の time は ns で出力されるので、 *1e-9 しています
  print((end_time - start_time) * 1e-9)

処理結果

(単位:秒)

n python mojo codon
35 0.701877 0.021244 0.022000
40 8.105023 0.226062 0.247272
45 94.926369 2.630815 2.651900
50 1012.234829 28.637981 29.855800

再帰処理ということもあり、ループ処理のように顕著に処理速度が変わるということはありませんでしたが、それでも Python と比較すると30倍以上の速度で処理していることが分かります。

mojo と codon に関しては、若干ではありますが mojo の方が処理速度は早く、またmojoのコードでは処理速度の単位を揃えるため ns ⇒ s の処理をしている為、その分を差し引いた純粋な計算処理速度では mojo に軍配が上がるのではないかと考えられます。

使ってみての感想

フロントエンド業務では使用しませんが、元々 Python ユーザでちょっとした作業であれば Python を使うことが多いのですが、 そこまで書き味も変わらず、かつ処理速度が上がったということで、とても驚きました。

今回は numpy などのライブラリを使用しない純粋な計算処理だけでしたが、ライブラリを交えた処理や並列化処理などにおいても高速化を図ることができると考えられます。

このように時代の最先端に触れたことで、AI開発はますます飛躍していくことを肌で実感することができました。

この記事を書いた人

2G
2G
システムエンジニアへの夢をあきらめきれず、建築業界からIT業界へ転職。
アーティス入社後はフロントエンドエンジニアとして、webアプリケーションサービスの開発に従事している。趣味は、ラーメン屋巡り。
この記事のカテゴリ

FOLLOW US

最新の情報をお届けします