- プログラミング
Julia
Julia
はじめまして。
デンソーアイティーラボラトリの関川といいます。よろしくおねがいします。
9月1日から現在米国のボストンにあるMIT MEDIA LABにて9ヶ月の任期で研修をしています。来年の5月末までMITで行われている面白い研究などを紹介できたらと思います。
今回は、学生に「速いくていいよ」と教えてもらった「Julia」という数値計算ソフトの紹介をしたいと思います。
Juliaとは、Matlab、R、Octaveのような数値計算言語の一種です。
今回は、Juliaの大雑把な概要と、MacでのGUI環境のセットアップ方法について説明したいと思います。
すでにJuliaをインストールしている人は、MIT Open CoursewareのでJuliaを使った計算方法についてのチュートリアルが公開されているのでとても参考になります。
[概要]
まず、Juliaの特徴について。
Juliaの一番の特徴は「高速」な点だと思います。あと、フリーです。
公式のHPにも書いてありますが、インタプリタ言語にも関わらず、gccコンパイルしたコードに匹敵する速さが売りです。公式HPには処理によってはMatlabの数百倍とのベンチマークが乗っています。
速さの秘訣は、LLVMベースのJITコンパイラを使っている点と、言語設計そのものにあるようです。
MITの学生は在学中はMatlab本体と全てのツールボックスが無料で使える環境になっているようで授業でも使われていますが、一部の授業では、処理速度の観点からJuliaを使っているようです。
Juliaは新しい言語で、github上でオープンソースで開発されています。かなり活発にアップデートが行われています。
「高速」以外に私が気になった特徴が2点あります。
1点目は、自分作っているプログラムに簡単にJuliaの機能を取り込めるのでなんとなく便利な気がします。
2点目は、手持ちのライブリを使いたいときにわざわざラッパを書かなくていいので便利です。C関数の呼び出しは以下のようにします。
ccall( (:関数名, "ライブラリ名") 環境変数を取得する例 path = ccall( (:getenv, "libc"), Ptr{Uint8}, (Ptr{Uint8},), "SHELL") bytestring(path)
※Matlabにもcalllibという同様の関数があります。ただし呼び出す前にloadlibrary関数でライブラリをロードする必要があります。
[インストール]
試しにJulia本体とGUIフロントエンドIJuliaをインストールしてみました。
特にIJuliaのインストールでつまづいたので、その方法を共有したいと思います。
大まかな作業の順番は以下の2ステップです。
その1.Julia本体のインストール
ソースからコンパイルする方法もありますが、コンパイル済みのパッケージがここからダウンロードできるので、それを使う方が簡単です。(最新版を使いたい場合は自分でコンパイルする必要があります)
Ijuliaを使うためににはv0.2以上が必要なので”Version v0.2-pre (Pre-release)”をダウンロードしてください。ダウンロードしたら、/Applicationsにコピーするだけでインストール完了です。
ダブルクリックして起動するとこんな画面がでて、早速Juliaを使うことができます。
あとは、Matlabと似た文法で簡単に使えます。
SVDの例。
julia> A=rand(5,6) julia> (u,s,v)=svd(A);
Juliaにはgitベースのパッケージ管理機能が組み込まれていて、簡単にパッケージの追加、アップデートなどが 行えます。パッケージの追加は以下のようにします。
Pck.add("パッケージ名")
ここに、いろいろなパッケージが公開されています。
その2.Juliaのインストール
Julia本体はCUIのプログラムで、GUIに慣れた人(私)にはちょっと敷居が高いです。そこで、JuliaをGUIから使えるようにするGUIアプリをインストールします。
JuliaのGUIフロントエンドエンドとして、ブラウザを使うiJuliaが公開されています。
インストールにつまづいて動かすのに2時間かかってしまったので私の行ったインストールステップを記載します。
python get-pip.py
pip install jinja2 tornado pyzmq
julia>Pkg.add("IJulia")
julia>Pkg.add("IJulia")
ipython notebook --profile julia/
こんな感じの画面が立ち上がって、GUIでスクリプトの管理や実行・停止などができます。図表の描画プラグインをいれれてプロットも簡単にできます。
ブラウザは、コマンドと実行結果をJulia本体とやりとりしているだけなので、Julia本体は別の高性能なマシンで動かして、リモートからコマンドを実行するっていうのも簡単にでできるそうです。(試してません)
試しに動かしてみた感想
速度については、大変な処理を走らせたわけではないので、正直あまり実感がありません。GUIもまだ使い方になれないせいかもしれませんが、Matlabのほうがだいぶ使いやすく感じました。
今後重い処理が必要になったときに再度試してみようとおもいます。