本日は
少しマニアックかもしれませんが、ラズパイ3で Julia を動かしてみましょう。
公式サイトからダウンロード(する方法)
https://julialang.org/downloads/ ジャンプして Long-term support release (v1.0.3) 以下にある
32-bit (ARMv7-a hard float) の部分をクリックします。
これを tar で解凍して path/to/julia-1.0.3/bin を PATH に追加する export すると動きます。
Docker を使う方法
Dockerの環境構築
The easy way to set up Docker on a Raspberry Pi にある方法に従ってやると数行で準備が整います。
# terminal on your Raspberry pi
$ curl -fsSL get.docker.com -o get-docker.sh && sh get-docker.sh
# sudo をいちいち打ちたくない場合。。。
$ sudo usermod -aG docker pi
遊ぶ
あとは遊ぶのみ
$ docker run --rm -it julia:1.0.3
こちらの Gist にて 針をいっぱい投げることによる円周率を計算するスクリプトを置いておきましたので試してみてください。 各自で Python や C で書いて速度を比較すると面白いと思います。
ソースからビルド
すいませんやったことないです。クロスコンパイル勉強してやってみたいですね。
環境作るのだるい
デスヨネー、https://hub.docker.com/r/terasakisatoshi/myjulia にてラズパイ用のイメージを公開しています。
よかったら遊んでみてください。 Dockerfile からやりたい人は こちらにて公開しています
Desktop 版で遊んでいる場合は下記のように X をマウントしておくと Plots.jl でのグラフ描画を閲覧することができます。
$ cat run_container.sh
xhost +local:docker
docker run --rm -it \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix/:/tmp/.X11-unix \
-v $(pwd):/work \
-w /work \
terasakisatoshi/myjulia:rpi3 bash
xhost -local:docker
$ bash run_container.sh
# 以下JuliaのREPLが見えるようになる
# root@xxxxxxx:/work#julia
_
_ _ _(_)_ | Documentation: https://docs.julialang.org
(_) | (_) (_) |
_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.0.3 (2018-12-18)
_/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release
|__/
julia> versioninfo()
Julia Version 1.0.3
Commit 099e826241 (2018-12-18 01:34 UTC)
Platform Info:
OS: Linux (arm-linux-gnueabihf)
CPU: ARMv7 Processor rev 4 (v7l)
WORD_SIZE: 32
LIBM: libm
LLVM: libLLVM-6.0.0 (ORCJIT, cortex-a53)
Environment:
JULIA_PATH = /usr/local/julia
JULIA_GPG = 3673DF529D9049477F76B37566E3C7DC03D6E495
JULIA_VERSION = 1.0.3
julia> # this is a sample code
julia> using Plots
julia> using TestImages
julia> plot(testimage("cameraman"))
こんな感じになれば成功です。右図は三角関数をプロットしています。
PyCallと呼び出し元のPythonとして berryconda を使っています。メジャーなライブラリのインストールはこれで快適にできるかなという気がしています。
大変だったこと
描画系大変
Plots.jl
が 32 ビットの環境にサポートしていないらしいので依存ライブラリの libGR.so を自前でビルドする必要があります。Building the GR Runtime にあるように依存パッケージを apt install すれば良いです。 (Docker でやろうとするといくつか修正が必要です。)
ImageView が動かない
Macでもそうなんですが、ImageView.jl の依存する Gtk.jl や Cairo.jl 関係で using ImageView
ができないのでちょっと辛いです。ImageView.imshow
の代わりに Plots.plot
で代用できるのでこれで運用してみようと思います。
using Plots, TestImages
plot(testimage("c"))
初動のJIT コンパイル重い
普通のPCでも悩まされるのでラズパイでも容易に想像できます。
julia> using Plots
julia> using TestImages
julia> plot(testimage("cameraman"))
最初重いんですよね・・・。一度実行すると後の実行はサクサクできるんですが。
最後に
ついに HHKB を買ってしまったのでメイン機として運用できるか考えてみます♫