Google Cloud の cloud shell ターミナル上で julia を動かす

Google Cloud の cloud shell ターミナル上で julia を動かすのは、linux の shell を使える人なら難しくありません。 ターミナルは、右上の [>_] みたいなアイコンを押すと立ち上がります。 ターミナルは、あたり前のようですが、cd, ls, rm, mkdir, mv などのコマンドが使用できます。 自分の手元 (ローカル) にある linux マシンに julia を入れるのと、ほとんど同じ手順でできます。

概略は下記の通りです。

  1. "https://julialang.org/downloads/" から cloud shell 上で、 wget などで任意のバージョンの julia をダウンロードします。
    • eg. @cloudshell:~ (celtic-defender-201208)$ wget https://julialang-s3.julialang.org/bin/linux/x64/1.5/julia-1.5.1-linux-x86_64.tar.gz
  2. "tar -zxvf" で 解凍します。
  3. .bashrc に、パスを書き込んで通しておきます。
    • eg(.bashrc). export PATH="PATH:/home/USERNAME/julia-1.5.1/bin
  4. cloud chell を再起動するなりで、.bashrc を読み込んでもらいます
  5. "julia" と入力すれば、julia が立ち上がります

julia が立ち上がれば、"] add " などで好きなパッケージをインストール出きます。

`which python3` で得られる `/usr/bin/python3` に対して、PyCall 設定すれば PyCall から、`/usr/bin/python3` の python3 が呼び出せるようになります。ほとんど、ローカル環境と一緒ですね。cloud shell のターミナルに触っていると、とても 「ターミナル」 という言葉の意味を感じます。

せっかくなので、pip3 で入れた sudachipy を動かしてみます。


   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.5.1 (2020-08-25)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |
julia> using PyCall
julia> sudachipy = pyimport("sudachipy");
julia> dictionary = pyimport("sudachipy.dictionary");
julia> tokenizer = pyimport("sudachipy.tokenizer");
julia> tokenizer_obj = dictionary.Dictionary().create();
julia> mode = tokenizer.Tokenizer.SplitMode.C
PyObject 
julia> @time morph1 = tokenizer_obj.tokenize("Google Cloud の cloud shell で julia が動くなんて、めちゃくちゃ嬉しい。", mode)
  0.004003 seconds (11 allocations: 416 bytes)
PyObject 
julia> @time morph1 = tokenizer_obj.tokenize("Google Cloud の cloud shell で julia が動くなんて、めちゃくちゃ嬉しい。", mode)
  0.003470 seconds (11 allocations: 416 bytes)
PyObject 
 " "
 "で"
 " "
 "julia"
 " "
 "が"
 "動く"
 "なんて"
 "、"
 "めちゃくちゃ"
 "嬉しい"
 "。"
julia> @time [morph1[i].surface() for i in 1:length(morph1)]
  0.057042 seconds (46.77 k allocations: 2.485 MiB)
21-element Array{String,1}: (以下略)

MacBook Pro (Retina, 13-inch, Early 2015) 2.9 GHz デュアルコアIntel Core i5 のターミナル上で、 tokenizer_obj.tokenize のところが、それぞれ 0.082625 seconds と 0.002520 seconds で、surface() を Array で取り出すところが、2回目で 0.049034 seconds でした。cloud shell は シングルコアらしいのですが、この位の負荷なら手元の MacBook Pro とあまり変わらないようです。

もう1つ、この頃 流行りの 言語たち(他)でベンチマーク (Dart, Go, Julia, Nim, Python, Rust 他) から、42番めのフィボナッチ数列を求める関数を拝借して調べてみましょう。



julia> function fib(n)
         if n < 2
           return n
         end
         return fib(n - 2) + fib(n - 1)
       end
fib (generic function with 1 method)
julia> @time fib(42)
  1.973047 seconds
267914296
julia> @time fib(42)
  1.898725 seconds
267914296

手元の MacBook Pro では、1.6秒くらいですので、自分の使用用途では、大きな計算をさせなければ、とりあえず使えるスペックは出ていますね。

ファイルの保存には 5 GB の容量が使えるそうです。ターミナルの左上の ... が立てに並んでいるアイコンをクリックすると、アップロードやダウンロードが出きます。頭の使い所は、まあまあの CPU と 5 GB の容量をどう使うかという感じですね。

ちなみに python3 で fib(42) を計算したら、約250秒かかりました。ローカルの MacBook Pro は 約140秒です。julia が偉大だってことなのでしょうか?。

B! LINE