本日は
- 最近やった事のまとめを書いておこうと思います.(そろそろ本職の方でPyTorchをお勉強したいため)
- お題は HelloX.jl という自作のアプリケーションを別のPCにデプロイすることを考えます.
-
HelloX.jl
は添付の図のように UnicodePlots で書いたグラフをターミナル上で描画する Julia のアプリです.
これができると嬉しいこと
- プログラマーは Julia を Python のように高級言語として記述でき,計算においては Just in Time なコンパイルによる高いパフォーマンスを得ることができます. Julia で書いたコードをコンパイルする PackageCompiler の能力を用いれば Ahead of Time なコンパイルにより実行形式として使えるバイナリーになり,Julia に依存しない環境でも動作させるようにできます.
- これにより Python のプロトタイプとして書かれたコードを組込先に向けて C++ などに変換・移植という工程が不要になり,Juliaを使うことで一つの言語で開発をすることができるようになります.
#JuliaLang solves this two language problem, @elonmusk. No need to convert Python to C++, deploy what you develop to production! https://t.co/U3pdeyYiP7
— Viral B. Shah (@Viral_B_Shah) February 3, 2020
動かしましょう
- 以降の検証環境は Mac で行いましたが,gcc などが入っていればLinuxでもWindowsでも動くはずです.
Julia がある環境で動かす
$ julia --project=. -e "using HelloX; HelloX.julia_main()"
上の図のようにグラフが出ればOKです.また動作した関数の定義は下記の通りです.
HelloX.jl をビルドする
上では動作確認ができましたのでビルドしてみましょう.
$ git clone https://github.com/terasakisatoshi/HelloX.jl
$ cd HelloX.jl
$ make run
make run
に相当する部分は次と等価です
$ julia --project=. -e 'using Pkg; Pkg.add(PackageSpec(url="https://github.com/JuliaLang/PackageCompiler.jl",rev="master"))'
$ julia --project=. -e 'using Pkg; Pkg.instantiate()'
$ julia --project=. -e 'using PackageCompiler; create_app(".", "build", force=true)'
$ build/bin/HelloX
- ビルドには時間がかかりますのでコーヒを飲みながら待ちましょう.ノートパソコンだと大変かもしれないです.
build/bin/HelloX
でグラフが出現すればOKです.build
以下を見ると dylib などのオブジェクトがワンサカ出てると思います.できましたら,他の同じOSのPCに移動して試してみましょう.Juliaのない環境で動かしてみるなどしてみてください.
ラズパイ, ジェットソンでも動くっぽい.
- これはもう趣味なんですが,Jetson とかラズパイで Julia で書いたアプリケーション動かしたいなーということで PackageCompiler.jl やPackageCompilerX.jl で ARM 対応のPRにレビューに参加して arm32bit でも動くようにしてくれました.元々は aarch64 対応のPRだったのですが,32bitの配慮をするロジックがあったのでついでにお願いした形になります.Jetsonでも動くっぽいよ!
- 基本的には実機の上で動かすか,Dockerのなかでクロスコンパイルした後でターゲットのデバイスに入れ込むという流れになります.HelloX.jl の直下にあるスクリプトがあるのでそれを実行するとPi3やPi4,そして PiZero といったニッチな環境でも動作をさせることができるのがわかります.
パイゼロは茨の道
- ただし,パイゼロは公式に対応しているわけではないので自分で Julia をソースからビルドしたり,必要に応じて Julia コードにパッチを適用したり,依存ライブラリの解決を自分で行う必要があります.そういう意味ではハードルがありますが,勉強にはなると思います.
- arm32bit環境自体 Julia では2級市民扱いなのでPackage開発者自体あまりよくわかってなかったり設計が考慮されてないということもありますが,適宜フィードバックをすることでよくなってきてはいますのでニッチなことが好きな人はトライしてみてください.