<< (newer post) (older post) >>     

Juliabox: インストール不要, 無料で Julia をすぐ使える


(注: 2016.11 いろいろな更新を受けて、本ページを更新)

JuliaBox の正体

JuliaBox というのは 一つのサーバで多数ユーザ向けに Julia 環境を提供するための仕組みの名前 1 だ. これを「自分で用意しようとすれば」,当然インストールも必要だし,有料サーバを使うならお金もかかってしまう. しかしありがたくも、手続き等も不要で無料で使える JuliaBox が公開されているので,これを使ってみよう.


公開されている JuliaBox を使ってみよう

では,MIT の人達によって運営・公開されている JuliaBox 2 へアクセスしてみよう. これは一人あたり標準でメモリ 6GB, 4つの CPU を割り当てられるという贅沢な環境である. 正直言って、そこら辺の PC より性能が高いと思う…

aa まず、上のような表示が出て、 LinkedIn, GitHub, Google のいずれかのアカウントがあれば無料で 3 すぐに使えることがわかる. どれもまあ持っていて困るアカウントではないので、どのアカウントも持っていない人はどれかを作っておこう.

以降、そうしたアカウントは既に持っているものとして話を進めよう.

早速       Sign in via ほげほげ       というボタンを押してログインだ. すると

という感じの操作画面になるだろう. これは JuliaBox のホーム画面だ(ベースとなっている Jupyter もよく似ている). さまざまな操作はすべて基本的にこの画面を経由してそれぞれより細かい操作を行う画面へ行くことになるのでそう覚えておこう.

さて、次に、Julia カーネルに接続しよう. それには、まず、この画面の右に小さく見える
  New ▼   というボタンを押すと、 という感じで選択メニューが出るので、 この場合はこの中から、今ならば Julia 0.5.0 を選べばよい. ちなみに -dev とついているのは開発版だ.

すると

といった感じの別画面が出てくる(ホーム画面はそのまま残っている). Mathematica や Maple, Matlab といったソフトウェアを使ったことのある人はなんとなくもう操作方法が分かるだろう.

あとは、   In [   ] :   という箇所の右側がコマンド入力場所になるので、ここに Julia のコマンドやプログラムを書き込んでいけば良い.

そうそう、入力は Shift キーを押しながら Enter キーを押すと Julia カーネルに送信される . 単なる Enter キー押しは、入力を次の行へ進めるだけなので反応が特に無くても驚かないように.

あとは使うだけだ. 少しだけ試してみよう.


JuliaBox で Julia を少し試してみる

まず最初は由緒正しく、Hello world といこう.

 println("Hello world!")

とすると

 Hello world!

と出力が出る. 次に、行列を乱数で作って、この固有値を求めてみよう.

 A = randn(3,3)

とすると

 3x3 Array{Float64,2}: 
   0.565471  -0.00965627   0.824625  
  -0.349639   0.502447    -1.39063   
   0.240281  -0.746357     0.0225275 

という感じで作られるので、これに対して

 eigvals(A)

とすると、3つの固有値が

 3-element Array{Float64,1}: 
   1.50532  
   0.383963 
  -0.798838 

と求まる.

こんな感じで、いろいろできる.もちろん、長い長いプログラムを書いても問題ない.


終了するには

終了するには、(セーブが必要なセーブした後で)上の “File” メニューから “Close and Halt” を選んでカーネルとの接続を切ってから, JuliaBox のホーム画面の上部 右端にあるログアウトタブ を押せば良い.

注意: サーバ利用料の契約がどうなっているのかわからないが、まあ無駄遣いしていいものでもないだろうから,使わない時はなるべく速やかにログアウトしておこう.


公開されている JuliaBox の制限

また、この JuliaBox について最低限知っておくと良さそうな知識としては、

  • カーネルに接続したまま 使える時間は一回あたり 4時間まで .これはログアウトして再ログインすると再びまた 4時間使える.

  • 一人あたり 使えるファイル容量は 500MB まで . 後述のパッケージをインストールするとこの容量ももちろん消費されていくので、気をつけよう.

という制限があることぐらいかな. そして実際に自分がどれくらいこういうリソースを使っているかは次にようにすればわかる.

  • 現在の利用時間、ファイル利用量ともに、は,JuliaBox のホーム画面の上部 の右側に見えている情報タブ を押すと表示されている. それぞれ、”Time remaining”, “Disk Usage” という項目になっているのでそこを見よう.


公開されている JuliaBox のバグとその対策

注: 2016.11 現在、このバグは直っているのでこの節は無視して良い.

この公開されている JuliaBox には,パッケージの一部が書き換え不可能なファイルとしてマウントされているというバグが有る(jupyter にはこのバグは無いので安心してくれ). そのため,パッケージを使おうとすると多くの場面でエラーとなってしまう.

この問題に対しては,JuliaBox のファイル ~/.juliarc.jl

 VERSION >= v"0.4" && splice!(Base.LOAD_CACHE_PATH, 1:length(Base.LOAD_CACHE_PATH), filter(p -> startswith(p,"/home/juser/"), Base.LOAD_CACHE_PATH))

という 1行を書き込めば良い 4
(上の表示は数行に見えるかもしれないが,実際はつながった 1行 であるので注意)

この作業は,JuliaBox のホーム画面の上部 の真ん中より少し左に見えている Console タブ を押して出てくる黒い画面で, 好きな方法5でやればよい(Unix の操作に慣れていれば…ね).

Unix の操作に慣れていない人の場合は例えば次のようにすれば良い. まず,この Console の黒い画面で,

 ls -lga

として,.juliarc.jl ファイルが無い(=その名前が表示されない)ことを確認してから(普通はこのファイルは無いだろう), 以下の 2つのコマンドを実行する.

 echo 'VERSION >= v"0.4" && splice!(Base.LOAD_CACHE_PATH, 1:length(Base.LOAD_CACHE_PATH), filter(p -> startswith(p,"/home/juser/"), Base.LOAD_CACHE_PATH))' > ./.juliarc.jl

 echo '' >> ./.juliarc.jl

ちなみに,このコマンドを実行するためにキーボードから入力する必要はなくて,コピペでいける. 具体的には,入力行をコピーしてから,黒い画面で右クリックして “Paste from browser” を選び,貼りこめばよい.

注意: なお,.juliarc.jl を書き換えるなどの作業後に Julia カーネルを初めて接続した時,前回との整合性が失われているならば,いったんカーネルが落ちて,整合性を回復する作業を(自動で)してからカーネルが再起動してくる.カーネルが落ちたからといって不安定になっているわけではないので安心しよう.



  1. 中身は Julia カーネルと軽量仮想環境 Docker を組み合わせたものでできていて,ユーザが jupyter など経由で接続してくるとそのユーザ用に Docker がぴこんと Julia 環境を立ち上げて,ユーザがログアウトすると環境を閉じるようになっている. [return]
  2. 少し前まで、www.juliabox.org だったのだが、AWS から Google のサーバに移ったこともあって、www.juliabox.com に変わった.使える CPU が半分になってしまったかな.古いアドレスへアクセスしてももうつながらないと思うので注意しよう(2016.10.02 追記). [return]
  3. Paid-for model for JuliaBox の議論を見てもわかるように,JuliaBox の課金モデルの開発も考えているようだ.これもあわせて考えるに,いつまでも無料とは限らないので,無料で公開されているうちは遠慮しつつ,ありがたく使わせてもらおう. [return]
  4. この情報は https://groups.google.com/forum/#!topic/julia-box/5DicyY2h5ck から. [return]
  5. 例えば,この画面で vi が使える.emacs は無いようだ. [return]
     << (newer post) (older post) >>