🎐

【Mojo🔥】ColaboratoryはPythonからMojoぞ

2024/06/15に公開

ColabでもMojoを䜿圹臎したしょう

Googleの提䟛するColaboratoryでは、Pythonを䜿甚するこずが通垞です。優良な環境を無償で䜿われるずあっお、愛甚せられる方は数倚、もはや算えるこずを埗ないでしょう。しかし、䜕もプログラミング蚀語は唯䞀ではなし、Colaboratoryでも倚様な蚀語を䜿甚できるこずは、諞賢の既に確認するずころです。

珟圚、Mojoは未だWindowsに察応しおいたせん。WSL(仮想環境)には察応しおいるようですね。私のようにWindowsを䜿っおいる堎合、珟状は仮想環境にわざわざ導入するしかないわけですから、Colaboratoryのような倖郚サヌビスで䜿えるならば、その方が手軜です。

Colab掻甚䟋

䞀に、数倀蚈算で奜たれおいるJuliaの䟋を瀺したす。

https://colab.research.google.com/github/ageron/julia_notebooks/blob/master/Julia_Colab_Notebook_Template.ipynb

こちらは、Pythonず同じようにしおJuliaを蚘述できるようになる代物です。初めお拝芋した時の驚嘆は、それは忘れがたいものです。

たた、間接的ながらもRustやMojoを実行されおいる方がいらっしゃいたす。

https://qiita.com/YutaroOgawa2/items/ce6bf46eebc901f68dde#手順2-google-colabでmojoを䜿甚できるように蚭定する

「間接的」ず蚀いたすのは、「ファむルを䜜り」、「コマンドを実行する」ずいう手順を螏たねばならないずいうこずです。無償版Colaboratoryの性質䞊、攟瞊にコマンドを実行するずはゆきたせん。少しの制玄がありたすから、理想ずしおは、先に瀺したJuliaの䟋が劂く、コマンドを芁せずしお実行したいものでありたす。

本題

Mojoの実行にコマンドは避けられぬかず思っお居りたしたが、偶然にも理想ずする圢を実珟するこずができたした。加えお、どうやら圓時ず珟圚ずではMojoを取り巻く事情が倉わったようで、先䟋ずは手順を異にしたす。今埌の移ろい次第では本蚘事の手法が無甚になるやもしれたせんこずを、ここにお断りいたしたす。

今回䜜成したipynb型匏のファむルは、以䞋で共有しおおりたす。

https://github.com/amenaruya/Mojo_in_GoogleColab/tree/main

むンストヌル

手順は次の二぀です。

  1. modularの導入
  2. modularによるmojoの導入

そもそもMojoを導入するには、先んじおModularずいうものが必芁になりたす。Modularに぀いお、本蚘事では特に述べたせんが、珟状Mojo取埗に䞍可避の存圚ずなっおいるようですのでご泚意䞋さい。

modularをダりンロヌドする
curl -s https://get.modular.com | sh -

次に、Mojoを導入したす。

mojoをむンストヌルする
modular install mojo
公匏手順を無芖しおいるこずに぀いお

䞊に「手順は二぀」ず申したしたが、公匏には四぀の手順を螏めずありたす。

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

  1. modularの導入(党く同じ)
  2. pythonの仮想環境を䜜成し、䜜動させる
    python3 -m venv mojo-venv && source mojo-venv/bin/activate
    
  3. (仮想環境内で)modularによるmojoの導入(同じ)
  4. 環境倉数を蚭定する
    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"
    

これを無芖した理由は幟぀かありたすが、最も深刻なものは、「環境倉数を蚭定できない」点です。こちらは、先駆者も確認しおいる問題のようでした。即ち、mojoコマンドを玠盎に実行できないのです。察凊ずしおは、コマンド実行時に毎床環境倉数を蚭定するか、mojo本䜓を盎接実行するかのいずれかでしょう。
本蚘事ではコマンドが䜿えずずも構わないため、手順を無芖しお盎ぐにmojoを導入しおいたす。

ランタむム

通垞Colaboratoryでは、Python以倖のプログラムを蚘述しおも実行できたせんが、これは「ランタむム」がPythonずなっおいるからです。

ランタむムの確認方法
ランタむム蚭定の開き方

「ランタむムのタむプを倉曎」ずあるのを遞択するず、次の画面が出おきたす。

ランタむム蚭定画面
ランタむムを確認・倉曎できる

候補に芋えたす通り、Rも初めから遞択できるようになっおおり、たた導入したMojoも遞択肢に远加されおいたす。

以䞊で準備を終えたした。最埌に、実際に詊䜜しおみたものを䟋に、実行の仕方に぀いお述べおおきたす。

セルで実行

実行䟋
実行䟋

コピヌはこちら
fn print_mojo(number: UInt8):
    for _ in range(number):
        print("🔥", end="")
print_mojo(2)

指定回数分だけ🔥を衚瀺するだけの、無味也燥なプログラムです。本来゚ラヌを瀺す波線が残っおしたうものの、実行を確認できおいたす。

実行ファむルを生成する

Mojoは実行ファむルを生成するこずができたす。その手法ずしお、䞀䟋を瀺したす。

新芏ファむルを䜜成する際は、%%file ファむル名から始めお蚘述したす。

ファむルを䜜る
ファむルを䜜る(拡匵子は.mojoか.🔥)

コピヌはこちら
%%file print_mojo.mojo
from sys import argv

fn print_mojo(number: UInt8):
    for _ in range(number):
        print("🔥", end="")

fn main():
    var args = argv()
    var n: UInt8

    try:
        n = atol(args[1])
    except:
        n = 1

    print_mojo(n)

実行ファむルを生成し、実行したす。

生成ず実行
実行ファむルを生成(侊)、実行(例)

コピヌはこちら
!/root/.modular/pkg/packages.modular.com_mojo/bin/mojo build print_mojo.mojo -o print_mojo.out
!./print_mojo.out 5
/root/.modular/pkg/packages.modular.com_mojo/bin/mojo ずは

※この蚻釈では、OSであるLinuxに関する話題を扱っおいたす。Linuxを孊んでいない方はご泚意䞋さい。


/root/.modular/pkg/packages.modular.com_mojo/bin/mojoは、mojoの本䜓が存圚する堎所に倖なりたせん。Colaboratoryは䞀応OS(Ubuntu)䞊の環境ずなっおいるらしく、圓然ナヌザヌが存圚したす。!whoamiで確認するず、吟人がログむンしおいるのはrootナヌザヌであるこずが確認できたす。

Modularを導入した際に、rootナヌザヌのhome directory/rootに.modularが生成されおいたす。曎にその配䞋pkg/packages.modular.com_mojo/binにmojoがむンストヌルされたす。ナヌザヌが異なれば、圓然各ナヌザヌのhome directory/home/ナヌザヌ名以䞋にこれらが存圚したす。

圓初、home directoryを瀺す環境倉数$HOMEを甚いお次のようにしおいたした。

!$HOME/.modular/pkg/packages.modular.com_mojo/bin/mojo

コマンドラむン匕数を䞎えるずきは次のようになりたす。

!$HOME/.modular/pkg/packages.modular.com_mojo/bin/mojo xxx.mojo $匕数

この時、なぜか$匕数が無芖されおしたったため、$HOMEを䜿甚しないようにしおいたす。
今埌、仕様倉曎によっおこのパスが倉化した堎合には、適切なものに修正しお䞋さい。

補

以䞊がColaboratoryでMojoを䜿甚するための抂説ずなりたす。Pythonの䞊䜍互換ずさえ評される蚀語ですから、今埌益益䜿甚する方も増加しおゆくかもしれたせん。殊曎、Windowsナヌザヌずしおは暫くこの方法が重宝しそうです。
しかし、Colaboratoryはずかく制玄が倚く、時折䞍䟿を芚えるこずもありたした。そこで、本蚘事を党吊定する話題に觊れ、筆を眮くこずずしたす。(Linuxを孊んでいない方はご泚意䞋さい)


䞊䜍互換

Google APIず怜玢するず、このペヌゞに到達するはずです。

https://console.cloud.google.com/apis/library?hl=ja

初回は利甚芏玄に同意するよう求められるようですので、同意しお続行したす。

利甚芏玄
同意しなければ先に進めない

「無料トラむアル」の開始はご自由に。

プロゞェクト䜜成

既に䜜成しおいる方は次ぞ

「プロゞェクトの遞択」ずいう項目を確認したす。

プロゞェクトの遞択

プロゞェクトを䞀芧したすが、この時点では䜕も䜜成しおいないので䜕も衚瀺されたせん。「新しいプロゞェクト」を遞択したす。

プロゞェクト䞀芧

䜜成するプロゞェクト名を決定したす。拘りが無ければそのたたで䜜成したす。

プロゞェクト名

䜜成埌、プロゞェクトを遞択したす。


Cloud Shell

先ほどから右䞊にあるアむコンに泚目。

Cloud Shell
䞀番巊がCloud Shell

巊のアむコンを遞択するず、画面䞋が占領されたす。ここではメッセヌゞがでできたので、続行したす。

shell

接続䞭の画面が衚瀺されおいる間、少し埅ちたす。

接続䞭

接続が完了するず、次のような画面に切り替わりたす。この画面には個人情報が含たれるので、スクリヌンショットなどはするべきでありたせん。

Welcome to Cloud Shell! Type "help" to get started.
Your Cloud Platform project in this session is set to プロゞェクト名.
Use “gcloud config set project [PROJECT_ID]” to change to a different project.
ナヌザヌ名@cloudshell:~ (プロゞェクト名)$ 

Cloud Shellず名を冠する通り、この画面は端末そのものです。こちらであれば、環境倉数が無効になるこずもないため、Mojoを公匏の手順で導入するこずができたす。しかし、Colaboratoryよりも自由であるが故に、専門の知識・経隓が無い方には䞍芪切です。どちらを遞ぶかは、甚途も䜵せおご怜蚎䞋さい。

䜜成したファむルは保持され、倱われたせん。ただし、自身のhome directory倖のものは倱われるそうですから、避けたしょう。それに起因しおか、\sout{Mojo}等のむンストヌルしたアプリケヌションは、次回起動時に喪倱しおいるこずがありたす。(Mojoはhome directory例.modular/pkg/packages.modular.com_mojo/binにあれば即ち氞続し、埓お特別の察凊を経ずしお䜿甚し埗た)

ずころで、「゚ディタを開く」を遞択するず、Visual Studio Codeのような画面に移行したす。同䞀のものではないため、䞀方にある拡匵機胜が、他方にはないこずもありたす。䜿うか吊かは奜みの問題でしょう。(ありたした。衚瀺が遅いだけだったのかもしれたせん。)

゚ディタヌ
個人的にずおもありがたい

Discussion